<?php
/**
 * Система управления сайтом HostCMS v. 5.xx
 * Copyright © 2005-2010 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
 *
 * Обработчик экспорта данных о товарах в CML.
 *
 * Файл: /admin/shop/action/export_data_cml.php
 *
 * @author Hostmake LLC
 * @version 5.x
 */

$shop = & singleton('shop');

$kernel = & singleton('kernel');

$DataBase = & singleton('DataBase');

// Начинаем отправлять заголовки
header("Pragma: public");

header("Content-Description: File Transfer");

// Указываем уже определенный Content-Type
header("Content-Type: application/force-download");

// Force the download
header("Content-Disposition: attachment; filename = " . 'CommerceML_' .date("Y_m_d_H_i_s").'.xml'. ";");
header("Content-Transfer-Encoding: binary");

$shop = & singleton('shop');

$kernel = & singleton('kernel');

$DataBase = & singleton('DataBase');

// Получаем идентификатор родительской групы с которой необходимо начинать экспорт
$shop_groups_parent_id = to_int($_REQUEST['shop_groups_parent_id']);

$shop_shops_id = to_int($_REQUEST['shop_shops_id']);

// Получаем информацию о магазине
$shop_row = $shop->GetShop($shop_shops_id);

// Получаем информацию о компании, которой принадлежит магазин
$company_row = $shop->GetCompany($shop_row['shop_company_id']);

// Массив для хранения идентификаторов групп товаров для которых необходимо получить список товаров
$group_id_array = array();

// Содержание будущего XML-документа
echo '<?xml version="1.0" encoding="UTF-8"?>'."\r\n";
echo '<КоммерческаяИнформация ВерсияСхемы="2.04" ДатаФормирования="'.date("Y-m-d").'T'.date("H:i:s").'">';
echo '<Классификатор>';
echo '<Ид>' . $shop_row['shop_shops_guid'] . '</Ид>';
echo '<Наименование>Классификатор (Каталог товаров)</Наименование>';
echo '<Владелец>';
echo '<Ид>' . $company_row['shop_company_guid'] . '</Ид>';
echo '<Наименование>' . htmlspecialchars($company_row['shop_company_name']) . '</Наименование>';
echo '<ОфициальноеНаименование>' . $company_row['shop_company_name'] . '</ОфициальноеНаименование>';
echo '<ИНН>' . $company_row['shop_company_inn'] . '</ИНН>';
echo '<КПП>' . $company_row['shop_company_kpp'] . '</КПП>';
echo '<РасчетныеСчета>';
echo '<РасчетныйСчет>';
echo '<НомерСчета>' . $company_row['shop_company_account'] . '</НомерСчета>';
echo '<Банк>';
echo '<СчетКорреспондентский>' . $company_row['shop_company_corr_account'] . '</СчетКорреспондентский>';
echo '<Наименование>' . htmlspecialchars($company_row['shop_company_bank_name']) . '</Наименование>';
echo '<Адрес>';
echo '<Представление>' . $company_row['shop_company_bank_address'] . '</Представление>';
echo '</Адрес>';
echo '<БИК>' . $company_row['shop_company_bik'] . '</БИК>';
echo '</Банк>';
echo '</РасчетныйСчет>';
echo '</РасчетныеСчета>';
echo '</Владелец>';


echo showDirTree($shop_groups_parent_id, $shop_shops_id, $group_id_array);


// Необходимо вывести все дополнительные свойства товаров
$property_items_res = $shop->GetAllListProperties($shop_shops_id);

if($property_items_res)
{
	echo "<Свойства>";

	while($property_items_row = mysql_fetch_assoc($property_items_res))
	{
		echo "<Свойство>";

		echo "<Ид>";
		echo $property_items_row['shop_list_of_properties_cml_id'];
		echo "</Ид>";


		echo "<Наименование>";
		echo htmlspecialchars($property_items_row['shop_list_of_properties_name']);
		echo "</Наименование>";


		echo "</Свойство>";
	}

	echo "</Свойства>";
}

echo '</Классификатор>';
echo '<Каталог СодержитТолькоИзменения="false">';
echo '<Ид>' . $shop_row['shop_shops_guid'] . '</Ид>';
echo '<ИдКлассификатора>' . $shop_row['shop_shops_guid'] . '</ИдКлассификатора>';
echo '<Наименование>Каталог товаров</Наименование>';
echo '<Владелец>';
echo '<Ид>' . $company_row['shop_company_guid'] . '</Ид>';
echo '<Наименование>' . htmlspecialchars($company_row['shop_company_name']) . '</Наименование>';
echo '<ОфициальноеНаименование>' . $company_row['shop_company_name'] . '</ОфициальноеНаименование>';
echo '<ИНН>' . $company_row['shop_company_inn'] . '</ИНН>';
echo '<КПП>' . $company_row['shop_company_kpp'] . '</КПП>';
echo '<РасчетныеСчета>';
echo '<РасчетныйСчет>';
echo '<НомерСчета>' . $company_row['shop_company_account'] . '</НомерСчета>';
echo '<Банк>';
echo '<СчетКорреспондентский>' . $company_row['shop_company_corr_account'] . '</СчетКорреспондентский>';
echo '<Наименование>' . htmlspecialchars($company_row['shop_company_bank_name']) . '</Наименование>';
echo '<Адрес>';
echo '<Представление>' . $company_row['shop_company_bank_address'] . '</Представление>';
echo '</Адрес>';
echo '<БИК>' . $company_row['shop_company_bik'] . '</БИК>';
echo '</Банк>';
echo '</РасчетныйСчет>';
echo '</РасчетныеСчета>';
echo '</Владелец>';

$sql_ext = '';

// Получаем список товаров подлежащих экспорту, исключая ярлыки, исключая модификации
$sql = "SELECT * FROM `shop_items_catalog_table`
WHERE `shop_shops_id` = '$shop_shops_id'
AND `shop_items_catalog_shortcut_id`='0'
AND `shop_items_catalog_modification_id`='0'";

if(count($group_id_array) > 0)
{
	$group_id_array = implode(",", $group_id_array);


	$sql_ext = " AND `shop_groups_id` IN ($group_id_array)";
}

$sql .= $sql_ext;

$items_result = $DataBase->query($sql);

if($items_result)
{
	echo '<Товары>';

	while($items_row = mysql_fetch_assoc($items_result))
	{
		echo '<Товар>';
		echo '<Ид>' . $items_row['shop_items_cml_id'] . '</Ид>';
		echo '<Артикул>' . $items_row['shop_items_catalog_marking'] . '</Артикул>';
		echo '<Наименование>' . htmlspecialchars($items_row['shop_items_catalog_name']) . '</Наименование>';

		// Получаем информацию о единице измерения
		$mesures_row = $shop->GetMesure($items_row['shop_mesures_id']);

		echo '<БазоваяЕдиница НаименованиеПолное="'.$mesures_row['shop_mesures_description'].'">' . $mesures_row['shop_mesures_name'] . '</БазоваяЕдиница>';

		// Получаем данные о группе товаров
		$group_row = $shop->GetGroup($items_row['shop_groups_id']);

		$item_dir = $shop->GetItemDir($items_row['shop_items_catalog_item_id']);

		// Формируем путь к изображению товара, если оно есть
		if($items_row['shop_items_catalog_image'] != '')
		{
			$image_full_path = $item_dir . $items_row['shop_items_catalog_image'];
		}
		else
		{
			$image_full_path = '';
		}

		// Выводим основную группу, которой прнадлежит товар
		echo '<Группы>';




		if($group_row['shop_groups_cml_id'] != '')
		{
			echo '<Ид>' . $group_row['shop_groups_cml_id'] . '</Ид>';
		}
		else
		{
			echo '<Ид>' . GenCmlId($group_row['shop_groups_id']) . '</Ид>';
		}




		// Получаем список ярлыков товара для нахождения всех групп в которых данный товар состоит
		$sql = "SELECT * FROM `shop_items_catalog_table` WHERE `shop_items_catalog_shortcut_id` = '{$items_row['shop_items_catalog_item_id']}'";

		$items_links_result = $DataBase->query($sql);

		if($items_links_result)
		{
			while($items_links_row = mysql_fetch_assoc($items_links_result))
			{
				// Получаем информацию о группе текущего ярлыка
				$current_link_group_row = $shop->GetGroup($items_links_row['shop_groups_id']);

				if($current_link_group_row['shop_groups_cml_id'])
				{
					echo '<Ид>' . $current_link_group_row['shop_groups_cml_id'] . '</Ид>';
				}
				else
				{
					echo '<Ид>' . GenCmlId($current_link_group_row['shop_groups_id']) . '</Ид>';
				}
			}
		}

		echo '</Группы>';

		echo '<Картинка>' . $image_full_path . '</Картинка>';

		// Получаем список свойств товара типа "Файл" и их значения
		$sql = "SELECT * FROM shop_list_of_properties_table, shop_properties_items_table
		WHERE shop_list_of_properties_table.shop_list_of_properties_type='1'
		AND shop_properties_items_table.shop_list_of_properties_id = shop_list_of_properties_table.shop_list_of_properties_id
		AND shop_properties_items_table.shop_items_catalog_item_id = '{$items_row['shop_items_catalog_item_id']}'";

		$extended_pictures_res = $DataBase->query($sql);

		if($extended_pictures_res)
		{
			while($extended_pictures_row = mysql_fetch_assoc($extended_pictures_res))
			{
				if(($extended_pictures_row['shop_properties_items_file'] != ''
				&& $extended_pictures_row['shop_properties_items_file_small'] != '')
				|| ($extended_pictures_row['shop_properties_items_file'] != '' && $extended_pictures_row['shop_properties_items_file_small'] == ''))
				{
					// Формируем путь к файлу
					$item_full_dir = $item_dir . $extended_pictures_row['shop_properties_items_file'];
				}
				elseif($extended_pictures_row['shop_properties_items_file_small'] != '')
				{
					// Формируем путь к файлу
					$item_full_dir = $item_dir . $extended_pictures_row['shop_properties_items_file_small'];
				}
				else
				{
					$item_full_dir = '';
				}

				echo '<Картинка Описание="'.$extended_pictures_row['shop_list_of_properties_cml_id'].'">' . $item_full_dir . '</Картинка>';
			}
		}

		// Получаем остальные допсвойства и экспортируем их
		$sql = "SELECT * FROM shop_list_of_properties_table, shop_properties_items_table
		WHERE shop_list_of_properties_table.shop_list_of_properties_type!='1'
		AND shop_properties_items_table.shop_list_of_properties_id = shop_list_of_properties_table.shop_list_of_properties_id
		AND shop_properties_items_table.shop_items_catalog_item_id = '{$items_row['shop_items_catalog_item_id']}'";

		$extended_properties_res = $DataBase->query($sql);

		if($extended_properties_res)
		{
			// Необходимо вывести значения всех свойств, ассоциированных с данным товаром
			echo '<ЗначенияСвойств>';

			while($extended_properties_row = mysql_fetch_assoc($extended_properties_res))
			{
				echo '<ЗначенияСвойства>';

				echo '<Ид>';
				echo $extended_properties_row['shop_list_of_properties_cml_id'];
				echo '</Ид>';

				echo '<Значение>';

				if($extended_properties_row['shop_list_of_properties_type'] == 2)
				{
					// Если дополнительное свойство типа "Список", необходимо получить его значение из таблицы значений списков
					if (class_exists('lists'))
					{
						$lists = & singleton('lists');

						// Получаем значение списка
						$value_row = $lists->GetListItem($extended_properties_row['shop_properties_items_value']);

						echo $value_row['lists_items_value'];
					}
				}
				else
				{
					echo htmlspecialchars($extended_properties_row['shop_properties_items_value']);
				}

				echo '</Значение>';

				echo '</ЗначенияСвойства>';
			}

			echo '</ЗначенияСвойств>';
		}

		// Проверяем, ассоцииован ли с товаром налог
		if(to_int($items_row['shop_tax_id']))
		{
			// Ассоциирован, необходимо экспортировать информацию о нем

			// Получаем информацию о налоге
			$item_tax_row = $shop->GetTax($items_row['shop_tax_id']);

			if($item_tax_row)
			{
				echo '<СтавкиНалогов>';

				echo '<СтавкаНалога>';

				echo '<Наименование>';
				echo htmlspecialchars($item_tax_row['shop_tax_name']);
				echo '</Наименование>';

				echo '<Ставка>';
				echo $item_tax_row['shop_tax_rate'];
				echo '</Ставка>';

				echo '</СтавкаНалога>';

				echo '</СтавкиНалогов>';
			}
		}


		echo '</Товар>';
	}

	echo '</Товары>';
}

echo '</Каталог>';
echo '</КоммерческаяИнформация>';

exit();


function showDirTree($shop_groups_parent_id, $shop_shops_id, &$group_id_array)
{
	$shop = & singleton('shop');

	$xml_data = '';

	$group_id_array[] = $shop_groups_parent_id;

	// Информацию о корневой группе выводить не надо
	if($shop_groups_parent_id)
	{
		$group_row = $shop->GetGroup($shop_groups_parent_id);

		$group_id = $group_row['shop_groups_cml_id'];

		if($group_id == '')
		{
			$group_id = GenCmlId($group_row['shop_groups_id']);
		}

		$xml_data .= '<Группы>';

		$xml_data .= '<Группа>';

		$xml_data .= '<Ид>' . $group_id . '</Ид>';

		$xml_data .= '<Наименование>' . htmlspecialchars($group_row['shop_groups_name']) . '</Наименование>';
	}

	// Получаем всех потомков текущей группы
	$groups_res = $shop->GetGroups($shop_shops_id, $shop_groups_parent_id);

	if($groups_res)
	{
		while($groups_row = mysql_fetch_assoc($groups_res))
		{
			$xml_data .= showDirTree($groups_row['shop_groups_id'], $shop_shops_id, $group_id_array);
		}
	}

	if($shop_groups_parent_id)
	{
		$xml_data .= '</Группа>';

		$xml_data .= '</Группы>';
	}

	return $xml_data;
}

function GenCmlId($shop_groups_id)
{
	$temp = 'ID';

	$shop_groups_id = to_str($shop_groups_id);

	$len = 8 - mb_strlen($shop_groups_id);

	for ($i = 0; $i < $len; $i++)
	{
		$temp .= '0';
	}

	return $temp .= $shop_groups_id;
}
?>