<?php
/*------------------------------------------------
 * вывод параметров                     2019-03-25
 * Copyright © FinBoss 2020
 * finboss.ua@gmail.com 
 *
 * вывод параметров
 *
 * License: Commercial open source software (COSS) 
 *------------------------------------------------
 */

@set_time_limit(0);

error_reporting (E_ALL);

header('Content-Type: text/html; charset=utf-8');

// контроль доступа по IP
$a_allow = false;
$a_ips = '';
if (is_file('.allowed_ip')){
	$a_ips = file('.allowed_ip');
}elseif (is_file('../.allowed_ip')){
	$a_ips = file('../.allowed_ip');
}

if (is_array($a_ips)){
	foreach ($a_ips as $a_ip){
		$a_ip = trim($a_ip);
		if (strpos($a_ip, '*') !== false){
			
			// process 127.0.*.*
			
			$remote = explode('.', $_SERVER['REMOTE_ADDR']);
			$a = explode('.', $a_ip);
			
			$true_count = 0;
			for ($i=0;$i<4;$i++){
				switch ($i){
					case 0:
					case 1:
						if ($remote[$i] != $a[$i]){
							break 2;
						}else{
							$true_count++;
						}
						break;
					case 2:
					case 3:
						if ($a[$i] == '*'){
							// пропускаем
							$true_count++;
						}else{
							if ($remote[$i] != $a[$i]){
								break 2;
							}else{
								$true_count++;
							}
						}
						
				}
			}
			if ($true_count == 4){
				$a_allow = true;
				break;
			}
			
		}else{
			if ($_SERVER['REMOTE_ADDR'] == trim($a_ip)){
				$a_allow = true;
				break;
			}
		}
	}
	
}
if ($a_allow === false){
	die('доступ для IP '.$_SERVER['REMOTE_ADDR'].' заблокирован');
}


// date_default_timezone_set ('Europe/Kiev');


// имя файла
$cfg_id = '';

if (isset($_GET['cfg'])){
	$cfg_id = $_GET['cfg'];
}

if (is_file("oc_loader_yml.cfg$cfg_id.php")){		// конфиг-файл))
	require_once ("oc_loader_yml.cfg$cfg_id.php");
}else{
	echo ("Ошибка: Не найден конфигурационный файл 'oc_loader_yml.cfg$cfg_id.php'");
	exit;
}

if (!is_dir("tmp$cfg_id")){
	echo ("Ошибка: Не найдена папка 'tmp$cfg_id'");
	exit;
}


$title = "Загрузчик YML - выбор параметров";
	
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" >
<title><?php echo $title?></title>
<script language="javascript" type="text/javascript">
function checkAll( n, fldName ) {
  if (!fldName) {
     fldName = 'cb';
  }
	var f = document.adminForm;
	var c = f.toggle.checked;
	var n2 = 0;
	for (i=0; i < n; i++) {
		cb = eval( 'f.' + fldName + '' + i );
		if (cb) {
			cb.checked = c;
			n2++;
		}
	}
}
</script>
</head>
<body style="font-family:Trebuchet MS; font-size: 10pt;" bgcolor="#f5f8fb">

<table width="100%" bgcolor="#416e98">
<tr valign="middle">
<td><span style="font-size:25px; color:#FFF; font-family:Trebuchet MS"><?php echo $title?></span></td>
<td align="right"><span style="font-size:15px; color:#FFF; font-family:Trebuchet MS"></span></td>
</tr>
</table>

<?php 

	$path_parts = pathinfo(__FILE__);				//	используется для установки пути
	$cron_prefix = $path_parts['dirname'].'/';		//	используется для установки пути
	
	if (!is_file("tmp$cfg_id/input.xml") OR (isset($_GET['mode']) AND $_GET['mode'] == 'reload')){

		// 'Файл tmp/input.xml не найден - скачиваем';

		$string = curl_get_contents($site_ssl_select.'://'.$xml_link);
		
		if (strpos($string, 'Error: ') !== false){
			die("Ошибка: не удалось получить данные по ссылке ".$site_ssl_select.'://'.$xml_link." ответ = $string ".date(" Y-m-d H:i:s"));
		}else if ($string == ''){
			die("Ошибка: не удалось получить данные по ссылке - получен пустой ответ".$site_ssl_select.'://'.$xml_link.date(" Y-m-d H:i:s"));
		}else{
			file_put_contents("tmp$cfg_id/input.xml", $string);
			$data = simplexml_load_string($string);
			if (!is_object ($data)){
				die("Ошибка: не удалось получить данные по ссылке ".$site_ssl_select.'://'.$xml_link." ответ = $string ".date(" Y-m-d H:i:s"));
			}
			$size = filesize("tmp$cfg_id/input.xml");
			
			unset($string);
		}
	}else{
		
		$size = filesize("tmp$cfg_id/input.xml");
		$data = simplexml_load_file("tmp$cfg_id/input.xml");
		if (is_object($data)){
			
		}else{
			die ("Файл tmp$cfg_id/input.xml содержит ошибки");
			
		}
		
	}
	
	
	
/////////////////////////////// обработка со считываем всего файла

//	$data = simplexml_load_file ($cron_prefix."tmp/input.xml");
	
// 	if ($data === false){
// 		echo("Ошибка: файл tmp/input.xml не может быть обработан как файл XML ");
// 		die;
// 	}
	
	// обработка товаров
	
// 	всего товаров
	$productsCount = count($data->shop->offers->offer);
// 	if ($offset == 0){
// 		write_to_log("Всего товаров $productsCount");
// 	}
	
// 	$current_offset = 0;
// 	$products_parsed = 0;
	
// 	foreach ($data->children() as $item){
	
// 	if ($offset > $current_offset){
// 	$current_offset++;
// 	continue;
// 	}
	
	// получили $item

////////////////////////////


	echo "<br/><center>\r\n";
// 	echo "Используется входной файл, сгенерированный $date <br/>\r\n";
	echo "Размер файла $size <br/>\r\n";
// 	echo "Всего категорий ".count($categories_in_file)." <br/>\r\n";
	echo "Всего товаров ".$productsCount." <br/><br/>\r\n";
	
	if ($cfg_id == ''){
		echo "<a href='set_parameters.php?mode=reload'><b>ОБНОВИТЬ</b></a> <br/><br/>\r\n";
	}else{
		echo "<a href='set_parameters.php?mode=reload&get=$cfg_id'><b>ОБНОВИТЬ</b></a> <br/><br/>\r\n";
	}
	echo "<hr/>\r\n";
	echo "</center>\r\n";

// 	unset($string);
// 	unset($data);
// 	unset($categories_in_file);
	
	
	if (isset($_POST['save'])){
		
		$parameters = array();
		if (isset($_POST['parameter'])){
			foreach ($_POST['parameter'] as $parameter_name => $value){
				$parameters[htmlspecialchars($parameter_name)] = 1;
			}
		}
		
		$parameter_corr = array();
		foreach ($_POST['parameter_corr'] as $in_postav => $in_site){
			$parameter_corr[htmlspecialchars($in_postav)] = htmlspecialchars($in_site);
		}
		
		$saved = array();
		$saved['parameters'] = $parameters;
		$saved['parameter_corr'] = $parameter_corr;
		
		file_put_contents("tmp$cfg_id/parameters.json", json_encode($saved));
		
	}
	
	if (is_file("tmp$cfg_id/parameters.json")){
		$saved = json_decode(file_get_contents("tmp$cfg_id/parameters.json"), true);
		$parameters = $saved['parameters'];
		$parameter_corr = $saved['parameter_corr'];
	}else{
		$parameters = array();
		$parameter_corr = array();
	}
	
	$parameters_in_file = array();
	$products = $values = array();
	foreach ($data->shop->offers->offer as $item){
		
		$products[] = (string)$item->vendorCode;
		
		if (isset($item->param)){
		
			if (count($item->param) > 1){
			
				foreach ($item->param as $param){
					$param_name = trim((string)$param->attributes()->name);
					if (!isset($parameters_in_file[$param_name])){
						$parameters_in_file[$param_name] = trim((string)$item->name);
					}
					
					$values[$param_name][(string)$param] = 1;
					
				}
			
			}else{
				
				$param_name = trim((string)$item->param->attributes()->name);
				
				if (!isset($parameters_in_file[$param_name])){
					$parameters_in_file[$param_name] = (string)$item->name;
				}
				
				$values[$param_name][(string)$item->param] = 1;
			}
		}
	}
	
	ksort($parameters_in_file);
	
?>


<form method="post" name="adminForm">
<center>
<h2>Атрибуты (параметры)</h2>
<h4>(отметьте выгружаемые параметры товаров)</h4>
<table width="50%" border="1" style="border-collapse:collapse;border-color:black;">
<tr>
<th></th>
<th>Наименование у поставщика</th>
<th>Наименование на сайте</th>
</tr>

<tr>
	<td align="left" colspan=5>
		<input type="submit" name="save" value="Сохранить" />
	</td>
</tr>

<?php 

	$checkbox_count = 0;

	foreach ($parameters_in_file as $parameter_name => $dummy){
		
		if (isset($parameters[$parameter_name])){
			$checked = ' checked ';
		}else{
			$checked = '';
		}
	
		$checkbox_count++;
?>

<tr>
<td><input type="checkbox" id="cb<?php echo $checkbox_count; ?>" name="parameter[<?php echo $parameter_name; ?>]" value="1" <?php echo $checked?> /></td>
<td> <?php echo $parameter_name?> </td>
<td><input type=text size="35" name="parameter_corr[<?php echo $parameter_name?>]" value="<?php echo (isset($parameter_corr[$parameter_name])?$parameter_corr[$parameter_name]:'')?>"/> </td>
</tr>
<?php
			
		}
?>
<tr>
	<td align="left" colspan=5>
		<input type="checkbox" name="toggle" class="delete" onclick="checkAll(<?php echo ($checkbox_count+1); ?>)" /> Все выделить/снять выделение
	</td>
</tr>

<tr>
	<td align="left" colspan=5>
		<input type="submit" name="save" value="Сохранить" />
	</td>
</tr>
</table>
</center>
</form>
<h1>Справочно</h1>
<?php 
	foreach ($values as $param_name => $values_array){
?>
<h2><?php echo $param_name; ?></h2>

<?php 
		ksort($values_array);
		
		foreach ($values_array as $value => $dummy){
			echo $value.'<br/>';
		}
	}

?>
<h2>Товары</h2>
<?php 
sort($products);

foreach ($products as $product){
	echo $product.'<br/>';
}

?>

</body>
</html>

<?php 
function curl_get_contents($url, array $get = array(), array $options = array())
{
	
	$defaults = array(
			CURLOPT_URL => $url. (strpos($url, '?') === FALSE ? '?' : ''). http_build_query($get),
			CURLOPT_HEADER => 0,
			CURLOPT_RETURNTRANSFER => TRUE,
			CURLOPT_FOLLOWLOCATION => 1,
			CURLOPT_TIMEOUT => 300,
			CURLOPT_HTTPHEADER => array('Accept: application/json'),
			CURLOPT_SSL_VERIFYPEER => false
	);
	
	$ch = curl_init();
	curl_setopt_array($ch, ($options + $defaults));
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5');
	if(!$result = curl_exec($ch)) {
		trigger_error(curl_error($ch));
		$result = 'Error: '.curl_error($ch);
	}else{
		//echo 'OK';
	}
	curl_close($ch);
	
	return $result;
}
?>