<?php 
/**
 * Система управления сайтом HostCMS v. 5.xx
 * Copyright © 2005-2010 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
 *
 * Ajax загрузчик для формы списка доменов.
 * 
 * Файл: /admin/site/action/load_domen.php
 * 
 * @author Hostmake LLC
 * @version 5.x
 */
function LoadAjaxData(&$admin_forms)
{
	$on_page = $admin_forms->GetOnPageCount();
	$page = to_int($_REQUEST['limit']);
	$site_id = to_int($_REQUEST['site_id']);

	$site = & singleton ('site');

	$result = $site->GetSite($site_id);

	$begin = ($page == 0) ? 0 : ($page - 1) * $on_page;

	$param = array();
	$param['limit'][0] = array('begin' => $begin, 'count' => $on_page);

	$array = array();
	$array['link'] = '/admin/site/site.php';
	$array['name'] = $GLOBALS['MSG_site']['site_link_site'];

	$new_path_array[] = array(
	'link' => $admin_forms->GetHtmlCallDoLoadAjax('/admin/site/site.php', '&site_id=0', 42, 'load_data'),
	'onclick' => $admin_forms->GetOnClickCallDoLoadAjax('/admin/site/site.php', '&site_id=0', 42, 'load_data'),
	'name' => $GLOBALS['MSG_site']['site_link_sites']);

	$new_path_array[] = array(
	'link' => $admin_forms->GetHtmlCallDoLoadAjax('/admin/site/site.php', "&site_id=$site_id", 43, 'load_data'),
	'onclick' => $admin_forms->GetOnClickCallDoLoadAjax('/admin/site/site.php', "&site_id=$site_id", 43, 'load_data'),
	'name' => sprintf($GLOBALS['MSG_site']['site_link_site_name'], $result['site_name']));

	ob_start();
	control_current_alias($site_id);
	$param['error'] = ob_get_clean();

	// Строим хлебные крошки.
	$param['path_array'] = $new_path_array;

	// Выборка нужных записей.
	$param['data'][] = "
	SELECT * 
	FROM site_alias_table 
	WHERE `site_id` = '$site_id' 
	{FILTER_STRING} 
	{ORDER_STRING} 
	{LIMIT}";

	// Число нужных записей.
	$count = "
	SELECT count(alias_id) as count 
	FROM site_alias_table 
	WHERE `site_id` = '$site_id'
	{FILTER_STRING}";

	// Формируем верхнее меню.
	$menu = array();
	$menu[$k = 0]['name'] = $GLOBALS['MSG_site']['site_link_domens'];
	$menu[$k]['link'] = '';
	$menu[$k]['icon'] = '';

	$sub_menu[$p = 0]['name'] = $GLOBALS['MSG_site']['site_link_domen_add'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('edit_domain', 'check_0_0', 43, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('edit_domain', 'check_0_0', 43, 0, 0);
	$sub_menu[$p]['icon'] = '/admin/images/world_add.gif';

	// Добавляем подэлементы.
	$menu[$k]['sub_items'] = $sub_menu;

	$param['total_count'][] = $count;
	$param['current_page'] = $page;
	$param['on_page'] = $on_page;
	$param['menus'] = array($menu);

	$param['field_params'][0]['key']['admin_forms_field_link'] = $admin_forms->GetHtmlCallTrigerSingleAction('key_press', 'check_0_{alias_id}', 43, 0, 0);
	$param['field_params'][0]['key']['admin_forms_field_onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('key_press', 'check_0_{alias_id}', 43, 0, 0);
	$param['field_params'][0]['key']['admin_forms_field_image'] = "=/admin/images/key.gif";

	$param['title'] = sprintf($GLOBALS['MSG_site']['site_show_domen_title'], $result['site_name']);

	return $param;
}


/**
 * Обработчик события "Ключ"
 *
 * @param array $param
 */
function key_press(&$param)
{
	ob_start();

	// Проверяем наличие трех констант
	if (!defined('HOSTCMS_USER_LOGIN')
	|| !defined('HOSTCMS_CONTRACT_NUMBER')
	|| !defined('HOSTCMS_PIN_CODE')
	|| !defined('HOSTCMS_UPDATE_NUMBER'))
	{
		// Сообщение об ошибке
		show_error_message($GLOBALS['MSG_site']['constant_check_error']);
	}
	else
	{
		// Если не объявлена константа HOSTCMS_UPDATE_SERVER
		if (!defined('HOSTCMS_UPDATE_SERVER'))
		{
			//
		}
		else
		{
			$site = new site();

			// Получаем имя домена
			if (isset($param['data'][0]))
			{
				$kernel = & singleton('kernel');

				foreach ($param['data'][0] as $key => $value)
				{
					// Определяем режим доступа пользователя и принадлежит ли объект пользователю
					$user_access = new user_access();

					// Определяем информацию об объекте
					$object_res = $site->select_alias($key);

					if (mysql_num_rows($object_res) == 1)
					{
						if ($object_res)
						{
							$object_row = mysql_fetch_assoc($object_res);
						}

						if ($object_row)
						{
							$object_user_id = $object_row['users_id'];
						}
						else
						{
							$object_user_id = 0;
						}
					}
					else
					{
						$object_user_id = 0;
					}

					if ($user_access->IssetUserAccessForObject($object_user_id))
					{
						$domain_row = $site->GetAliasById($key);

						if ($domain_row)
						{
							$domain_name = $domain_row['alias_name_without_mask'];

							$login = HOSTCMS_USER_LOGIN;

							$contract = md5(HOSTCMS_CONTRACT_NUMBER);

							$pin = md5(HOSTCMS_PIN_CODE);

							$cms_folder = CMS_FOLDER;

							$php_version = phpversion();

							$mysql_version = $kernel->GetDBVersion();

							$update_id = HOSTCMS_UPDATE_NUMBER;

							// Формируем строку запроса
							$query_string = 'http://' . HOSTCMS_UPDATE_SERVER . "/hostcmsupdate/key/?domain=".rawurlencode($domain_name)."&login=".rawurlencode($login)."&contract=".rawurlencode($contract)."&pin=".rawurlencode($pin)."&cms_folder=".rawurlencode($cms_folder)."&php_version=".rawurlencode($php_version)."&mysql_version=".rawurlencode($mysql_version)."&update_id=".rawurlencode($update_id);

							$data = $kernel->GetUrl($query_string, 80, 5);

							$xml_array = $kernel->Xml2Array($data);

							if (isset($xml_array['children'][0]['name']) && $xml_array['children'][0]['name'] == 'key')
							{
								if (is_array($xml_array['children'][0]['children'])
								&& count($xml_array['children'][0]['children']) > 0)
								{
									foreach ($xml_array['children'][0]['children'] as $tag)
									{
										// Была передана ошибка
										if (to_str($tag['name']) == 'error')
										{
											if (to_int($tag['value']) > 0)
											{
												switch (to_int($tag['value']))
												{
													case 1:
														{
															show_error_message($GLOBALS['MSG_site']['server_error_respond_1']);
															break;
														}
													case 2:
														{
															show_error_message($GLOBALS['MSG_site']['server_error_respond_2']);
															break;
														}
													case 3:
														{
															show_error_message($GLOBALS['MSG_site']['server_error_respond_3']);
															break;
														}
													case 4:
														{
															// На целевом адресе не обнаружена система
															show_error_message($GLOBALS['MSG_site']['server_error_respond_4']);
															break;
														}
													case 5:
														{
															// Неправильное имя домена
															show_error_message($GLOBALS['MSG_site']['server_error_respond_5']);
															break;
														}
													case 6:
														{
															// Запрещено получение ключей
															show_error_message($GLOBALS['MSG_site']['server_error_respond_6']);
															break;
														}
													default:
														{
															show_error_message($GLOBALS['MSG_site']['server_error_respond_0']);
															break;
														}
												}
											}
										}

										// Был передан ключ
										if (to_str($tag['name']) == 'value')
										{
											show_message($GLOBALS['MSG_site']['server_respond_success']);

											// Получаем данные сайта
											$site_row = $site->GetSite($domain_row['site_id'], array('cache_off' => true));

											if ($site_row)
											{
												$keys_array = explode("\n", $site_row['site_key']);

												// Ключа в массиве нет
												if (!in_array($tag['value'], $keys_array))
												{
													// Дописываем его в массив ключей
													$keys_array[] = $tag['value'];
												}

												$keys = implode("\n", $keys_array);

												// Подменяем поле
												$site_row['site_key'] = $keys;

												$site->insert_site($site_row);
											}
										}
									}
								}
							}
							else
							{
								show_error_message($GLOBALS['MSG_site']['server_error_respond_data']);
							}
						}
					}
					else
					{
						$user_access->MessageOnlyOwn();
						$flag_success = false;
					}
				}
			}

		}
	}

	$param['error'] = ob_get_clean();
}

/**
 * Обработчик события "Удалить домен"
 *
 * @param array $param
 */
function delete_domain(&$param)
{
	ob_start();

	if (defined('READ_ONLY') && READ_ONLY)
	{
		$kernel = & singleton('kernel');

		$kernel->ReadMode();
	}
	else
	{
		$site = & singleton ('site');

		$count = 0;

		if (isset($param['data'][0]))
		{
			foreach ($param['data'][0] as $key => $value)
			{
				// Определяем режим доступа пользователя и принадлежит ли объект пользователю
				$user_access = new user_access();

				// Определяем информацию об объекте
				$object_res = $site->select_alias($key);

				if (mysql_num_rows($object_res) == 1)
				{
					if ($object_res)
					{
						$object_row = mysql_fetch_assoc($object_res);
					}

					if ($object_row)
					{
						$object_user_id = $object_row['users_id'];
					}
					else
					{
						$object_user_id = 0;
					}
				}
				else
				{
					$object_user_id = 0;
				}

				if ($user_access->IssetUserAccessForObject($object_user_id))
				{
					if (!$site->del_alias($key))
					{
						$flag_success = false;
					}
					else
					{
						$count++;
						$flag_success = true;
					}
				}
				else
				{
					$user_access->MessageOnlyOwn();
					$flag_success = false;
				}
			}

			if ($flag_success)
			{
				if ($count == 1)
				{
					show_message($GLOBALS['MSG_site']['site_delete_domens_message']);
				}
				else
				{
					show_message($GLOBALS['MSG_site']['site_delete_domens_message']);
				}
			}
		}
	}

	$param['error'] = ob_get_clean();
}


/**
 * Обработчик события "Редактировать домен"
 *
 * @param array $param
 * @return boolean
 */
function edit_domain(&$param)
{
	ob_start();

	$site = & singleton('site');

	if (isset($param['data'][0]))
	{
		foreach ($param['data'][0] as $key => $value)
		{
			// Определяем режим доступа пользователя и принадлежит ли объект пользователю
			$user_access = new user_access();

			// Определяем информацию об объекте
			$object_res = $site->select_alias($key);

			if (mysql_num_rows($object_res) == 1)
			{
				if ($object_res)
				{
					$object_row = mysql_fetch_assoc($object_res);
				}

				if ($object_row)
				{
					$object_user_id = $object_row['users_id'];
				}
				else
				{
					$object_user_id = 0;
				}
			}
			else
			{
				$object_user_id = 0;
			}

			if ($user_access->IssetUserAccessForObject($object_user_id))
			{
				$site_alias_id = intval($key);
				include('action/add_edit_domen_form.php');
				$param['title'] = $site_alias_id == 0 ? $GLOBALS['MSG_site']['site_add_domen_form_title'] : $GLOBALS['MSG_site']['site_edit_domen_form_title'];
				break;
			}
			else
			{
				$user_access->MessageOnlyOwn();
				$param['error'] = ob_get_clean();
				return ;
			}
		}
	}
	$param['result'] = ob_get_clean();
	return true;
}

/**
 * Метод устанавливает домен сайта в основной
 *
 * @param array $param
 */
function set_alias_current(&$param)
{
	ob_start();

	if (defined('READ_ONLY') && READ_ONLY)
	{
		$kernel = & singleton('kernel');

		$kernel->ReadMode();
	}
	else
	{
		$site = & singleton ('site');

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

		foreach ($param['data'][0] as $key => $value)
		{
			// Определяем режим доступа пользователя и принадлежит ли объект пользователю
			$user_access = new user_access();

			// Определяем информацию об объекте
			$object_res = $site->select_alias($key);

			if (mysql_num_rows($object_res) == 1)
			{
				if ($object_res)
				{
					$object_row = mysql_fetch_assoc($object_res);
				}

				if ($object_row)
				{
					$object_user_id = $object_row['users_id'];
				}
				else
				{
					$object_user_id = 0;
				}
			}
			else
			{
				$object_user_id = 0;
			}

			if ($user_access->IssetUserAccessForObject($object_user_id))
			{
				// Проверяем на принадлежность текущего основного домена
				$current_alias_name = $site->GetCurrentAlias($site_id);

				$alias_row = $site->GetAlias($current_alias_name, array('cache_off' => true));

				if ($alias_row)
				{
					$object_user_id = $alias_row['users_id'];
				}
				else
				{
					$object_user_id = 0;
				}

				if ($user_access->IssetUserAccessForObject($object_user_id))
				{
					$site->current_alias($_REQUEST['site_id'], $key);
					break;
				}
				else
				{
					$user_access->MessageOnlyOwn();
				}
			}
			else
			{
				$user_access->MessageOnlyOwn();
			}
		}
	}

	$param['error'] = ob_get_clean();
}

/**
 * Функция определяет существует ли основной домен для сайта
 *
 * @param int $site_id
 */
function control_current_alias($site_id)
{
	$site = & singleton ('site');

	if (!$site->GetCurrentAlias($site_id))
	{
		show_error_message($GLOBALS['MSG_site']['error_current_alias']);
	}
}
?>