<?php 
/**
 * Система управления сайтом HostCMS v. 5.xx
 * Copyright © 2005-2010 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
 *
 * Обработчик применения новой цены.
 * 
 * Файл: /admin/shop/action/accept_new_price.php
 * 
 * @author Hostmake LLC
 * @version 5.x
 */
// Идентификатор группы, в которую следует вернутся после отработки скрипта
$shop_group_id = to_int($_REQUEST['shop_group_id']);

// Идентификатор магазина
$shop_shops_id = to_int($_REQUEST['shop_shops_id']);

// Идентификатор группы, с которой производить изменение цены
$shop_groups_parent_id = to_int($_REQUEST['shop_groups_parent_id']);

// Идентификатор скидки, которую следует применить к товару, если равен 0 - скидка не применяется
$shop_discount_id = to_int($_REQUEST['shop_discount_id']);

// Велечина изменения
$type_of_change_text = to_float($_REQUEST['type_of_change_text']);

// Тип изменения (0 - умножение, 1 - добавление)
$type_of_change = to_int($_REQUEST['type_of_change']);

$producer_id = to_int($_REQUEST['shop_producers_list_id']);

if($producer_id > 0)
{
	$ext_producer_string = " AND `shop_items_catalog_table`.`shop_producers_list_id` = '{$producer_id}' ";
	$ext_producer_string_modification = " AND `items_modification_table`.`shop_producers_list_id` = '{$producer_id}' ";
}
else
{
	$ext_producer_string = '';
	$ext_producer_string_modification = '';
}

// Запрос на получение данных о товарах для всех категориях
$query = "SELECT * FROM `shop_items_catalog_table` WHERE `shop_shops_id`='{$shop_shops_id}' {$ext_producer_string}";

$union_where1 = "";
$union_where2 = "";

// Ограничиваем по подгруппам только тогда, когда родительская группа не корневая, иначе просто будут выбираться все группы без ограничения
if ($shop_groups_parent_id != 0)
{
	$my_own_mass = $shop->GetGroupsTree($shop_groups_parent_id,$shop_shops_id);

	// Получаем список групп, для которых требуется произвести изменение цены
	$array_of_groups = $shop->GetGroupsTree($shop_groups_parent_id, $shop_shops_id);

	$array_of_items = array();

	$array_of_groups_id = array();

	foreach ($array_of_groups AS $parent_group_id => $array_of_child_groups)
	{
		if (!in_array($parent_group_id, $array_of_groups_id))
		{
			$array_of_groups_id[] = $parent_group_id;
		}

		foreach ($array_of_child_groups AS /*$child_group_id =>*/ $child_data)
		{
			$child_group_id = $child_data['shop_groups_id'];

			if (!in_array($child_group_id, $array_of_groups_id))
			{
				$array_of_groups_id[] = $child_group_id;
			}

			if (!in_array($child_data['shop_groups_id'], $array_of_groups_id))
			{
				$array_of_groups_id[] = $child_data['shop_groups_id'];
			}
		}
	}

	if (count($array_of_groups_id) > 0)
	{
		$query_in = implode(', ', $array_of_groups_id);
		$union_where1 = "AND shop_groups_id IN ({$query_in})";
		$union_where2 = "AND items_catalog_table.shop_groups_id IN ({$query_in})";
	}
}

// Выбираем модификации товара
$query .= " {$union_where1}
		UNION
		SELECT DISTINCT items_modification_table.*
		FROM shop_items_catalog_table AS items_modification_table,
		shop_items_catalog_table AS items_catalog_table
		WHERE items_catalog_table.shop_shops_id = '{$shop_shops_id}'
		{$union_where2}
		AND items_modification_table.shop_items_catalog_modification_id = items_catalog_table.shop_items_catalog_item_id
		{$ext_producer_string_modification}";

$DataBase = & singleton('DataBase');

$items_data_res = $DataBase->query($query);

$item_was_not_changed = false;

// Определяем режим доступа пользователя и принадлежит ли объект пользователю
$user_access = new user_access();

$array_of_aborted_items_id = array();

while ($items_data_row = mysql_fetch_assoc($items_data_res))
{
	$shop_items_catalog_item_id = $items_data_row['shop_items_catalog_item_id'];

	// Проверка на допуск к текущему товару текущего пользователя
	$object_user_id = $items_data_row['users_id'];

	if ($user_access->IssetUserAccessForObject($object_user_id))
	{
		$shop_items_catalog_price = to_float($items_data_row['shop_items_catalog_price']);

		// Добавление
		if ($type_of_change)
		{
			$shop_items_catalog_price += $type_of_change_text;
		}
		// Умножение
		else
		{
			$shop_items_catalog_price *= $type_of_change_text;
		}

		// Обновляем информацию для товара
		$shop->InsertItem(array('item_id' => $shop_items_catalog_item_id, 'price' => $shop_items_catalog_price, 'shops_id' => $shop_shops_id, 'weight' => $items_data_row['shop_items_catalog_weight'], 'order' => $items_data_row['shop_items_catalog_order'], 'is_active' => $items_data_row['shop_items_catalog_is_active'], 'indexation' => $items_data_row['shop_items_catalog_indexation'], 'name' => $items_data_row['shop_items_catalog_name'], 'search_event_indexation' => false));

		// Если была выбрана скидка
		if ($shop_discount_id)
		{
			// Если не передан флаг "Удалить скидку"
			if (!isset($_REQUEST['flag_delete_discount']))
			{
				$shop->InsertItemDiscount(array('item_catalog_id' => $shop_items_catalog_item_id, 'shop_discount_id' => $shop_discount_id));
			}
			else
			{
				// Проверяем, установлена ли данная ссылка для данного товара
				$query = "SELECT * FROM `shop_item_discount_table`
				WHERE `shop_items_catalog_item_id` = '$shop_items_catalog_item_id' AND `shop_discount_id` = '$shop_discount_id'";

				$result = $DataBase->query($query);

				if($result)
				{
					// Скидка обнаружена, удаляем ее
					$row = mysql_fetch_assoc($result);

					$shop->DeleteItemDiscount($row['shop_item_discount_id']);
				}
			}
		}

		// Работа со специальными ценами

		// Получаем список специальных цен товара
		$special_prices_array = $shop->GetSpecialPricesForItem($shop_items_catalog_item_id);

		if ($special_prices_array && count($special_prices_array) > 0)
		{
			foreach ($special_prices_array as $special_prices_row)
			{
				// Абсолютная цена в валюте указана
				if ($special_prices_row['shop_special_prices_price'] != 0)
				{
					// Добавление
					if ($type_of_change)
					{
						$special_prices_row['shop_special_prices_price'] += $type_of_change_text;
					}
					// Умножение
					else
					{
						$special_prices_row['shop_special_prices_price'] *= $type_of_change_text;
					}

					// Обновляем информацию о специальной цене товара
					$shop->InsertSpecialPrice($special_prices_row);
				}
			}
		}
	}
	else
	{
		$item_was_not_changed = true;
		$array_of_aborted_items_id[] = $shop_items_catalog_item_id;
	}
}

if ($item_was_not_changed)
{
	show_error_message(sprintf($GLOBALS['MSG_shops']['error_message_attention'], implode(', ', $array_of_aborted_items_id)));
}
else
{
	show_message($GLOBALS['MSG_shops']['accepted_prices']);
}

?>