<?php

/* Создаем экземпляр класса магазина */
$shop = & singleton('shop');

// ------------------------------------------------
// Обработка запросов от Яндекс.Денег
// ------------------------------------------------
if (isset($_POST['action']) && isset($_POST['invoiceId']) && isset($_POST['orderNumber']))
{
	// Получаем ID заказа
	$order_id = to_int($_POST['orderNumber']);

	$order_row = $shop->GetOrder($order_id);

	if ($order_row)
	{
		header("Content-type: application/xml");

		// Вызов обработчика платежной системы
		$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
	}
};

// ------------------------------------------------
// Обработка уведомления об оплате от IntellectMoney
// ------------------------------------------------
if (isset($_REQUEST['orderId']))
{
	// Получаем ID заказа
	$order_id = to_int($_REQUEST['orderId']);

	$order_row = $shop->GetOrder($order_id);

	if ($order_row)
	{
		// Вызов обработчика платежной системы
		$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
	}
}

/* Идентификатор интернет-магазина */
$shop_id = to_int($GLOBALS['LA']['shop_id']);

// ------------------------------------------------
// Обработка уведомления об оплате от ROBOKASSA
// должно быть только в настройках типовой дин. страницы 
// ------------------------------------------------
if (isset($_REQUEST['SignatureValue'])
// для отличия от SuccessURL/FailURL
&& !isset($_REQUEST['Culture']))
{
	// Получаем ID заказа
	$order_id = to_int($_REQUEST['InvId']);

	$order_row = $shop->GetOrder($order_id);

	if ($order_row)
	{
		// Вызов обработчика платежной системы
		$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
	}
	
	exit();
}
// ------------------------------------------------

/**
 * Использовать ли контроль данных, полученных из cookies
 */
// $shop->use_cookies_read_control = true;

// Обработка AJAX-запросов при заказе
if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'get_location' && isset($_REQUEST['shop_country_id']))
{
	$shop_country_id = to_int($_REQUEST['shop_country_id']);

	$result = array();

	if ($shop_country_id)
	{
		// Расположения заполняем только тогда, когда страна указана
		$res = $shop->GetAllLocation($shop_country_id);

		if ($res)
		{
			while ($row = mysql_fetch_assoc($res))
			{
				$result[$row['shop_location_id']] = $row['shop_location_name'];
			}
		}
	}

	$JsHttpRequest = new JsHttpRequest('UTF-8');

	$GLOBALS['_RESULT'] = array(
	'result' => $result);

	echo $JsHttpRequest->LOADER;
	exit();
}

if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'get_city' && isset($_REQUEST['shop_location_id']))
{
	$shop_location_id = to_int($_REQUEST['shop_location_id']);

	$result = array();

	if ($shop_location_id)
	{
		// Города заполняем только тогда, когда расположение указано
		$res = $shop->GetAllCity($shop_location_id);

		if ($res)
		{
			while ($row = mysql_fetch_assoc($res))
			{
				$result[$row['shop_city_id']] = $row['shop_city_name'];
			}
		}
	}

	$JsHttpRequest = new JsHttpRequest('UTF-8');

	$GLOBALS['_RESULT'] = array(
	'result' => $result);

	echo $JsHttpRequest->LOADER;
	exit();
}

if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'get_cityarea' && isset($_REQUEST['shop_city_id']))
{
	$shop_city_id = to_int($_REQUEST['shop_city_id']);

	$result = array();

	// Города заполняем только тогда, когда расположение указано
	if ($shop_city_id)
	{
		$res = $shop->GetAllCityArea($shop_city_id);

		if ($res)
		{
			while ($row = mysql_fetch_assoc($res))
			{
				$result[$row['shop_city_area_id']] = $row['shop_city_area_name'];
			}
		}
	}

	$JsHttpRequest = new JsHttpRequest('UTF-8');

	$GLOBALS['_RESULT'] = array(
	'result' => $result);

	echo $JsHttpRequest->LOADER;
	exit();
}
// END обработка AJAX-запросов при заказе

if (class_exists("SiteUsers"))
{
	/* Определяем идентификатор текущего пользователя */
	$SiteUsers = & singleton('SiteUsers');
	$site_users_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
	$site_users_id = false;
}

// Повторение заказа
if (to_str($_REQUEST['action']) == 'repeat')
{
	$shop_order_guid = to_str($_REQUEST['shop_order_guid']);

	$order_row = $shop->GetOrderByGuid($shop_order_guid);

	// Заказ найден
	if ($order_row)
	{
		$shop_order_id = $order_row['shop_order_id'];

		// Если заказ принадлежит этому пользователю
		if ($order_row['site_users_id'] == $site_users_id && $site_users_id != 0)
		{
			$result_order_items = $shop->GetOrderItems($shop_order_id);
			$shop_id_from_order = to_int($order_row['shop_shops_id']);

			while ($row = mysql_fetch_assoc($result_order_items))
			{
				$shop_order_items_quantity = $row['shop_order_items_quantity'];

				$shop_order_items_quantity = $shop->ConvertPrice($shop_order_items_quantity);

				// Число товаров передаем, если посетитеь кладет в корзину больше одного товара
				if ($shop_order_items_quantity > 0)
				{
					/* Добавляем товар в корзину */
					$shop->AddIntoCart(array('user_id' => $site_users_id,
					'shop_id' => $shop_id_from_order,
					'item_id' => $row['shop_items_catalog_item_id'],
					'count' => $shop_order_items_quantity));
				}
			}
		}
	}
}

// Запускаем сессию, если пользователь не авторизирован и пришли данные для регистрации
if ($site_users_id == 0 && isset($_POST['site_users_login'])
&& isset($_POST['site_users_password'])
&& isset($_POST['site_users_email'])
&& !isset($_SESSION))
{
	@session_start();
}

$GLOBALS['external_propertys'] = array();

// Если сессия не была запущена - стартуем ее
if (isset($_POST['step_1_1a']) && !isset($_SESSION) && !class_exists("SiteUsers"))
{
	@session_start();
}

/* Необходимо перенести товары из кукисов в сессию и очистить кукисы */
if ((isset($_POST['step_4']) || isset($_POST['step_1_1a'])) && !class_exists("SiteUsers"))
{
	/* Читаем массив из кукисов */
	$session_cart = array();
	$postpone_items = array();

	$MyCart = $shop->GetCart();

	$items = to_array($MyCart[$shop_id]);

	foreach ($items as $key => $value)
	{
		if ($value['shop_cart_flag_postpone'])
		{
			/* Оставляем товар в корзине кукисов */
			$postpone_items[$key] = $value;
		}
		else
		{
			/* Добавляем в корзину сессии */
			$session_cart[$key] = $value;
		}
	}

	/* Добавляем данные в сессию */
	$_SESSION['CART'][$shop_id] = $session_cart;

	/* Если массив с отложенными товарами не пуст - сохраняем его в кукисы */
	if (count($postpone_items) > 0 && isset($_POST['step_4']))
	{
		$MyCart[$shop_id] = $postpone_items;
	}
	elseif(isset($_POST['step_4']))
	{
		/* Удалям целиком кукисы корзины для данного магазина */
		unset($MyCart[$shop_id]);
	}

	/* Сохраняем данные */
	$shop->SetCart($MyCart);
}

/* Переданы данные для авторизации */
if (isset($_POST['step1_1']))
{
	/* Проверяем правильность введенных данных */
	$site_users_id = $SiteUsers->ValidUser(to_str($_POST['login']), to_str($_POST['password']));

	/* Проверяем подтвердил ли пользователь регистрацию */
	if ($site_users_id == -1)
	{
		$GLOBALS['external_propertys']['error'] = -5; /* Вы не активировали свой аккаунт. По указанному адресу отправлено письмо с инструкцией об активации. После активации Вы можете авторизироваться. */
	}
	elseif ($site_users_id > 0)
	{
		// Пользователь ввел верные данные, авторизируем его
		$SiteUsers->SetCurrentSiteUser($site_users_id);
	}
	else
	{
		/* Неверные данные пользователя */
		$GLOBALS['external_propertys']['error'] = -6;
	}
}

/* AJAX добавление товара в корзину */
if (isset($_GET['ajax_add_item_id']))
{
	$param = array();
	$param['shop_id'] = $shop_id;
	$param['item_id'] = to_int($_GET['ajax_add_item_id']);
	$param['user_id'] = $site_users_id;

	if (isset($_GET['count']))
	{
		$item_add_count = $_GET['count'];
	}
	else
	{
		$item_add_count = 1;
	}
	
	$shop_order_items_quantity = $shop->ConvertPrice($item_add_count);

	// Число товаров передаем, если посетитель кладет в корзину больше 0 товара
	if ($shop_order_items_quantity > 0)
	{
		$param['count'] = $shop_order_items_quantity;
	}

	// Добавляем товар в корзину
	$shop->AddIntoCart($param);

	// Отображаем корзину
	$JsHttpRequest = new JsHttpRequest('UTF-8');

	ob_start();
	$shop->ShowCart($shop_id, $site_users_id, to_str($GLOBALS['LA']['xsl_little_cart']));
	$little_cart_html = ob_get_clean();

	$GLOBALS['_RESULT'] = array('cart' => $little_cart_html);

	echo $JsHttpRequest->LOADER;
	exit();
}

/* добавление товара в корзину */
if (to_str($_GET['action']) == 'add')
{
	$param = array();
	$param['shop_id'] = $shop_id;
	$param['item_id'] = to_int($_GET['item_id']);
	$param['user_id'] = $site_users_id;

	if (isset($_GET['count']))
	{
		$item_add_count = $_GET['count'];
	}
	else
	{
		$item_add_count = 1;
	}
	
	// Число товаров передаем, если посетитель кладет в корзину больше 0 товара
	$shop_order_items_quantity = $shop->ConvertPrice($item_add_count);

	if ($shop_order_items_quantity > 0)
	{
		$param['count'] = $shop_order_items_quantity;
	}

	/* Добавляем товар в корзину */
	$shop->AddIntoCart($param);
}

/* Удаляение товара из корзины */
if (to_str($_GET['action']) == 'delete_item')
{
	$param = array();
	$param['shop_id'] = $shop_id;
	$param['item_id'] = to_int($_GET['item_id']);

	/* Проверяем наличие пользователя */
	if ($site_users_id != 0)
	{
		$param['user_id'] = $site_users_id;
	}

	$shop->DeleteCart($param);
}

/* Пересчет товара в корзине */
if (isset($_POST['recount'])
// Пересчет при выборе первого шага
|| isset($_POST['step_1']))
{
	$param = array();

	$warehouse = & singleton('warehouse');
	
	foreach ($_POST as $key => $value)
	{
		$param['item_id'] = $key;

		/* Получаем идентификатор записи в корзине по идентификатору пользователя и товара */
		$cart_id = $shop->GetItemFromCart($shop_id, $site_users_id, $param['item_id']);

		$param['cart_id'] = to_int($cart_id['shop_cart_id']);
		$param['user_id'] = $site_users_id;
		$param['shop_id'] = $shop_id;
		$param['count'] = $value;
		
		if (isset($_POST['warehouse'.$key]))
		{
			$param['warehouse_id'] = $_POST['warehouse'.$key];
		}
		else
		{
			// Склад по умолчанию
			$param['warehouse_id'] = $warehouse->GetDefaultWarehouse($shop_id);
		}

		/* Если установлен флажок - делаем товар отложенным */
		$param['postpone'] = !empty($_POST['flag_postpone'.$key]) ? 1 : 0;

		/* Если количество = 0 - удаляем из корзины */
		if ($param['count'] == 0)
		{
			$shop->DeleteCart($param);
		}
		else
		{
			$shop->UpdateCart($param);
		}
	}
}

?>