<?php

$shop = & singleton('shop');

if (class_exists("SiteUsers"))
{
	/* Получаем id текущего пользователя сайта */
	$SiteUsers = & singleton('SiteUsers');
	$site_users_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
	$site_users_id = false;
}

######################################################
### Обработка принятия заказа от платежной системы ###
######################################################

// ------------------------------------------------
// Подготовка редиректа для PayPal 
// ------------------------------------------------
if (isset($_REQUEST['paymentType']))
{
	// Получаем ID заказа
	$order_id = to_int($_REQUEST['order_id']);

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

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

// ------------------------------------------------
// Обработка уведомления об оплате от RBK Money
// ------------------------------------------------
if ((isset($_POST['paymentStatus']) || isset($_GET['PayPalOrderConfirmation'])) && !isset($_REQUEST['paymentType']))
{
	// Получаем ID заказа
	$order_id = to_int($_POST['orderId']);

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

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

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

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

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

// ------------------------------------------------
// Обработка уведомления об оплате от ROBOKASSA
// ------------------------------------------------
if (isset($_REQUEST['SignatureValue']) && 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']);
	}
}
// ------------------------------------------------

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

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

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

// ------------------------------------------------
// Обработка формы "Оплата через систему QIWI Кошелек"
// ------------------------------------------------
if (isset($_POST['qiwi_payment_options']))
{
	// Получаем ID заказа
	$order_id = to_int($_POST['order_id']);

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

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

// ------------------------------------------------
// Вывод информации о статусе платежа после его совершения и перенаправления с платежной системы
// ------------------------------------------------
if (isset($_REQUEST['payment']) || (isset($_GET['action']) && ($_GET['action'] == 'PaymentSuccess' || $_GET['action'] == 'PaymentFail')))
{
	// Получаем ID заказа
	if (isset($_REQUEST['order_id']))
	{
		$order_id = to_int($_REQUEST['order_id']);
	}
	//от Яндекса
	elseif(isset($_GET['orderNumber']))
	{
		$order_id = to_int($_GET['orderNumber']);
	}
	else
	{
		$order_id = to_int($_REQUEST['InvId']);
	}

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

	// Если заказ принадлежит текущему авторизированному пользователю
	if ($order_row['site_users_id'] == $site_users_id)
	{
		if (to_str($_REQUEST['payment']) == 'success' || to_str($_GET['action']) == 'PaymentSuccess')
		{
			?><h1>Подтверждение платежа</h1>
			<p>Спасибо, информация об оплате заказа <strong>№ <?php echo $order_row['shop_order_account_number']?></strong>
получена.</p>
			<?php
		}
		else
		{
			?><h1>Платеж не получен</h1>
			<p>К сожалению при оплате заказа <strong>№ <?php echo $order_row['shop_order_account_number']?></strong> произошла ошибка.</p>
			<?php
		}
	}
	// Для случаев, когда отключен модуль "Пользователи сайта"
	elseif ($site_users_id === false)
	{
		?><h1>Подтверждение платежа</h1>
		<p>Благодарим за посещение нашего магазина!</p>
		<?php
	}
	else
	{
		?><h1>Ошибка</h1>
		<p>Неверный номер заказа!</p>
		<?php
	}

	// Прерываем выполнение типовой динамической страницы
	return true;
}

############################################################
### [END] Обработка принятия заказа от платежной системы ###
############################################################

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

/* Проверяем наличие текущего пользователя */
/* Пользователь не авторизироаан */
if ($site_users_id == 0)
{
	/* Быстрая регистрация пользователя */
	if (isset($_POST['step1_2']))
	{
		/* пароль необязателен при обновлении данных о пользователе */
		if (isset($_POST['site_users_login'])
		&& isset($_POST['site_users_password'])
		&& isset($_POST['site_users_email'])
		&& isset($_POST['site_users_password_retry'])
		&& mb_strpos($_POST['site_users_login'], 'http://') === false // Логин не начинается с http://
		)
		{
			if (to_str($_POST['site_users_password']) == to_str($_POST['site_users_password_retry']))
			{
				// В массив дополнительных параметров пишем адрес магазина
				$shop_row = $shop->GetShop($shop_id);

				// Получаем путь к магазину
				$Structure = & singleton('Structure');
				$shop_path = "/".$Structure->GetStructurePath($shop_row['structure_id'],0);

				$param['location'] = $shop_path . "cart/";

				$param['site_users_login'] = to_str($_POST['site_users_login']);
				$param['site_users_password'] = to_str($_POST['site_users_password']);
				$param['site_users_email'] = to_str($_POST['site_users_email']);
				$param['site_users_name'] = to_str($_POST['site_users_name']);
				$param['site_users_surname'] = to_str($_POST['site_users_surname']);
				$param['site_users_patronymic'] = to_str($_POST['site_users_patronymic']);
				$param['site_users_country'] = to_str($_POST['site_users_country']);
				$param['site_users_company'] = to_str($_POST['site_users_company']);
				$param['site_users_phone'] = to_str($_POST['site_users_phone']);
				// Группа по умолчанию
				$param['site_users_group_id'] = $SiteUsers->GetDefaultGroup();
				$param['xslname'] = to_str($GLOBALS['LA']['xsl_registaration_letter']);

				/* Не отправлять письмо о подтверждении регистрации,
				 необходим при автоматическом подтрвеждении регистрации (ниже подтверждение) */

				/*
				 ДАННЫЙ ПАРАМЕТР НЕОБХОДИМО УСТАНОВИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ПОДТВЕРЖДЕНИЕ РЕГИСТРАЦИИ
				 ПОЛЬЗОВАТЕЛЯ ПОСЛЕ БЫСТРОГО ЗАКАЗА
				 */
				$param['not_send_mail_confirm'] = true;

				// добавляем пользователя, отправляем уведомление о регистрации
				$result = $SiteUsers->InsertSiteUser($param);

				/* Если не отправляли подтверждение -  */
				if ($result > 0 && $param['not_send_mail_confirm'])
				{
					/* Подтверждаем регистрацию */
					$SiteUsers->SetConfirmationID($result);

					/* Авторизируем пользователя */
					$SiteUsers->SetCurrentSiteUser($result);

					$site_users_id = $result;

					/* Переносим информацию о заказанном товаре в таблицу корзины */
					$shop->TransferFromCartIntoTable($site_users_id);

					// Проверяем куки пользователя на предмет наличия в них логина аффилиата
					if (isset($_COOKIE['affiliate_name']))
					{
						$affiliate = new affiliate();
							
						$affiliate_login = quote_smart($_COOKIE['affiliate_name']);
							
						$affiliate_row = $SiteUsers->GetSiteUserByLogin($affiliate_login);
							
						if ($affiliate_row)
						{
							$affiliate_id = $affiliate_row['site_users_id'];

							// Проводим вставку пользователя аффилиата
							$affiliate->InsertAffiliate(array('site_users_id' => $result, 'affiliate_plans_id' => 0, 'affiliate_site_users_id' => $affiliate_id, 'affiliate_active' => 1));
						}
					}

				}

				/* Если пользователь зарегистрирован и необходимо подтверждать авторизацию */
				if ($result > 0 && !$param['not_send_mail_confirm'])
				{
					?>
<h1>Спасибо за регистрацию</h1>
<p>Для продолжения работы необходимо подтвердить регистрацию Ваших
данных. В Ваш адрес отправлено письмо, содержащее ссылку для
подтверждения регистрации.</p>
					<?php
				}

				// Проверяем наличие ошибки при регистрации
				if ($result < 0)
				{
					// -3 - Пользователь с таким логином зарегистрирован ранее
					// -2 - Пользователь с таким e-mail зарегистрирован ранее
					// -1 - Введен некорректный e-mail
					$GLOBALS['external_propertys']['error'] = $result;
				}
			}
			else
			{
				$GLOBALS['external_propertys']['error'] = -7; /*Повторный пароль введен неверно*/
			}
		}
		else
		{
			$GLOBALS['external_propertys']['error'] = -4; /* Пожалуйста, задайте все обязательные параметры */
		}
	}
}

/* Если отключен модуль пользователей сайта */
if (isset($_POST['step_1_1a']) && isset($_POST['step_1']))
{
	if (mb_strlen(to_str($_POST['site_users_name'])) < 1)
	{
		$message = 'Введите имя!';
	}
	
	if (mb_strlen(to_str($_POST['site_users_surname'])) < 1)
	{
		$message = 'Введите фамилию!';
	}
	
	if (mb_strlen(to_str($_POST['site_users_email'])) < 1
	|| !valid_email(to_str($_POST['site_users_email'])))
	{
		$message = 'Введите e-mail!';
	}
}

if (empty($message) && ($site_users_id > 0 || $site_users_id === false))
{
	/* Ввод адреса доставки */
	if (isset($_POST['step_1']))
	{
		$external_propertys = array ();

		/* Если отключен модуль пользователей сайта, то вызывается этот подэтап */
		if (isset($_POST['step_1_1a']))
		{
			/* Данные о пользователе передаем через внешние параметры и сохраним в сессию */
			$external_propertys['site_users_name'] = $_SESSION['site_users_name'] = to_str($_POST['site_users_name']);
			$external_propertys['site_users_surname'] = $_SESSION['site_users_surname'] = to_str($_POST['site_users_surname']);
			$external_propertys['site_users_patronymic'] = $_SESSION['site_users_patronymic'] = to_str($_POST['site_users_patronymic']);
			$external_propertys['site_users_email'] = $_SESSION['site_users_email'] = to_str($_POST['site_users_email']);
			$external_propertys['site_users_phone'] = $_SESSION['site_users_phone'] = to_str($_POST['site_users_phone']);
			$external_propertys['site_users_fax'] = $_SESSION['site_users_fax'] = to_str($_POST['site_users_fax']);
			$external_propertys['site_users_address'] = $_SESSION['site_users_address'] = to_str($_POST['site_users_address']);
			$external_propertys['site_users_company'] = $_SESSION['site_users_company'] = to_str($_POST['site_users_company']);
		}
		else
		{
			$aInfoSiteUser = $SiteUsers->GetSiteUser($site_users_id);
			$external_propertys['site_users_name'] = $_SESSION['site_users_name'] = to_str($aInfoSiteUser['site_users_name']);
			$external_propertys['site_users_surname'] = $_SESSION['site_users_surname'] = to_str($aInfoSiteUser['site_users_surname']);
			$external_propertys['site_users_patronymic'] = $_SESSION['site_users_patronymic'] = to_str($aInfoSiteUser['site_users_patronymic']);
			$external_propertys['site_users_email'] = $_SESSION['site_users_email'] = to_str($aInfoSiteUser['site_users_email']);
			$external_propertys['site_users_phone'] = $_SESSION['site_users_phone'] = to_str($aInfoSiteUser['site_users_phone']);
			$external_propertys['site_users_fax'] = $_SESSION['site_users_fax'] = to_str($aInfoSiteUser['site_users_fax']);
			$external_propertys['site_users_address'] = $_SESSION['site_users_address'] = to_str($aInfoSiteUser['site_users_address']);
			$external_propertys['site_users_company'] = $_SESSION['site_users_company'] = to_str($aInfoSiteUser['site_users_company']);
			$external_propertys['site_users_postcode'] = $_SESSION['index'] = to_str($aInfoSiteUser['site_users_postcode']);
		}

		/* Запоминаем купон */
		$_SESSION['shop_coupon_text'] = to_str($_POST['shop_coupon_text']);

		/* Отображаем форму ввода адреса */
		// Не выбираем show_location, show_city и show_city_area, т.к. подгружаются через AJAX
		$shop->ShowAddress(to_str($GLOBALS['LA']['xsl_delivery_address']), $shop_id, array('show_location' => false, 'show_city' => false, 'show_city_area' => false), $external_propertys);

	}
	/* Отображаем доступные доставки */
	elseif (isset($_POST['step_2']))
	{
		/* Сохраняем данные, введенные на первом этапе */
		$country = to_int($_POST['country']);
		$location = to_int($_POST['location']);
		$city = to_int($_POST['sel_city']);
		$city_area = to_int($_POST['sel_city_area']);

		// Сбрасываем информацию о последнем заказе
		$_SESSION['last_order_id'] = 0;

		/* Пишем информацию об адресе доставки в сессию */
		$_SESSION['country'] = $country;
		$_SESSION['location'] = $location;
		$_SESSION['city'] = $city;
		$_SESSION['city_area'] = $city_area;
		$_SESSION['index'] = to_int($_POST['index']);
		$_SESSION['full_address'] = to_str($_POST['full_address']);

		$_SESSION['site_users_name'] = to_str($_POST['site_users_name']);
		$_SESSION['site_users_surname'] = to_str($_POST['site_users_surname']);
		$_SESSION['site_users_patronymic'] = to_str($_POST['site_users_patronymic']);
		$_SESSION['site_users_email'] = to_str($_POST['site_users_email']);
		$_SESSION['site_users_phone'] = to_str($_POST['site_users_phone']);
		$_SESSION['site_users_fax'] = to_str($_POST['site_users_fax']);
		$_SESSION['site_users_company'] = to_str($_POST['site_users_company']);
		$_SESSION['description'] = to_str($_POST['description']);

		/* Индекс и полный адрес (в массив дополнительных параметров) */
		$external_propertys['index'] = to_str($_POST['index']);
		$external_propertys['full_address'] = to_str($_POST['full_address']);

		/* Получаем количество элементов, их общую цену, вес, валюту для заданного пользователя */
		$a_param = $shop->SelectAllItemsFromCartForUser($shop_id, $site_users_id);

		/* Выбираем все доступные типы доставки (с группировкой по типу доставки) */
		$param = array();
		$param['shop_coupon_text'] = to_str($_SESSION['shop_coupon_text']);
		
		// Передаем количество товара
		$param['count'] = $a_param['quantity'];

		$shop->ShowTypeOfDelivery($shop_id, $country, $location, $city, $city_area, $a_param['weight'], $a_param['price'],
		to_str($GLOBALS['LA']['xsl_shop_delivery']), $param, $external_propertys);
	}
	/* Показываем страницу доступных платежных систем */
	elseif (isset($_POST['step_3']))
	{
		/* Обрабатываем полученные данные о типе доставки */
		$_SESSION['cond_of_delivery'] = to_int($_POST['cond_of_delivery']);

		/* Расчитываем цену доставки */

		/* Получаем данные о магазине */
		$shop_row = $shop->GetShop($shop_id);

		$row = $shop->GetCondOfDelivery($_SESSION['cond_of_delivery']);

		/* идентификатор валюты магазина */
		$shop_currency_id = to_int($shop_row['shop_currency_id']);
		$coefficient = $shop->GetCurrencyCoefficientToShopCurrency($row['shop_currency_id'], $shop_currency_id);
	
		$aPriceDelivery = $shop->GetPriceForCondOfDelivery($row['shop_cond_of_delivery_id']);
		
		$price_delivery = sprintf("%.2f", $aPriceDelivery['price_tax'] * $coefficient);

		$_SESSION['cond_of_delivery_price'] = $price_delivery;
		
		if ($row && $row['shop_tax_id'] != 0)
		{
			$row_tax = $shop->GetTax($row['shop_tax_id']);
			
			if ($row_tax)
			{
				$_SESSION['cond_of_delivery_price_tax'] = $row_tax['shop_tax_rate'];
			}
			else
			{
				$_SESSION['cond_of_delivery_price_tax'] = 0;
			}
		}
		else
		{
			$_SESSION['cond_of_delivery_price_tax'] = 0;
		}

		/* Выводим  платежные системы */
		$external_propertys['cond_of_delivery'] = to_int($_POST['cond_of_delivery']);

		$shop->ShowSystemOfPay(to_str($GLOBALS['LA']['xsl_system_of_pay']), $external_propertys, array('shop_shops_id' => $shop_id));
	}
	elseif (isset($_POST['step_4']))
	{
		/* Если выбрана (существует) платежная система */
		if (to_int($_POST['system_of_pay_id']) != 0)
		{
			/* Вызываем обработчик платежной системы */
			if (!$shop->ExecSystemsOfPayHandler(to_int($_POST['system_of_pay_id'])))
			{
				/* Не удалось найти обработчик */
				show_error_message("Не найден обработчик платежной системы с номером ".to_int($_POST['system_of_pay_id']));
			}
		}
		else
		{
			/* Ошибка, не указана платежная система! */
			show_error_message('Ошибка! Не указана ни одна платежная система.');
		}
	}
	else
	{
		/* Очищаем сессию */
		if (isset($_SESSION['CART'][$shop_id]))
		{
			unset($_SESSION['CART'][$shop_id]);
		}

		$param = array();
		$param['shop_coupon_text'] = to_str($_REQUEST['shop_coupon_text']);

		/* Отображаем корзину */
		$shop->ShowCart($shop_id, $site_users_id, to_str($GLOBALS['LA']['xsl_cart']), $param);
	}
}
elseif ($site_users_id === 0 || !empty($message))
{
	/* Выводим корзину */
	$external_propertys = array();

	if (!empty($message))
	{
		$external_propertys['message'] = $message;
	}

	$external_propertys['site_users_name'] = to_str($_POST['site_users_name']);
	$external_propertys['site_users_surname'] = to_str($_POST['site_users_surname']);
	$external_propertys['site_users_patronymic'] = to_str($_POST['site_users_patronymic']);
	$external_propertys['site_users_email'] = to_str($_POST['site_users_email']);
	$external_propertys['site_users_phone'] = to_str($_POST['site_users_phone']);
	$external_propertys['site_users_fax']	= to_str($_POST['site_users_fax']);
	$external_propertys['site_users_address'] = to_str($_POST['site_users_address']);
	$external_propertys['site_users_company'] = to_str($_POST['site_users_company']);

	$param = array();
	$param['shop_coupon_text'] = to_str($_REQUEST['shop_coupon_text']);
	
	$shop->ShowCart($shop_id, $site_users_id, to_str($GLOBALS['LA']['xsl_cart']), $param, $external_propertys);

	if (class_exists("SiteUsers") && $site_users_id === 0)
	{
		/* Выводим форму быстрой регистрации (регистрация для пользователей) */
		$GLOBALS['external_propertys']['ПоказатьАвторизацию'] = 'true';
		$SiteUsers->ShowSiteUserRegistartion($site_users_id,
		to_str($GLOBALS['LA']['xsl_quick_registration']), $GLOBALS['external_propertys']);
	}
}
else
{
	?>
	<div id="error">Вам необходимо подтвердить регистрацию!</div>
	<?php
}

?>