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

	$param = array();

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

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

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

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

	$sub_menu = array();
	$sub_menu[$p = 0]['name'] = $GLOBALS['MSG_site']['site_link_add'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('edit_site', 'check_0_0', 42, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('edit_site', 'check_0_0', 42, 0, 0);
	$sub_menu[$p]['icon'] = '/admin/images/site_add.gif';

	$sub_menu[++$p]['name'] = $GLOBALS['MSG_site']['site_link_add_site_with_template'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('add_site_with_template', 'check_0_0', 42, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('add_site_with_template', 'check_0_0', 42, 0, 0);
	$sub_menu[$p]['icon'] = '/admin/images/site_add.gif';

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

	$menu[++$k]['name'] = $GLOBALS['MSG_site']['menu2_caption'];
	$menu[$k]['link'] = '';
	$menu[$k]['icon'] = '';

	$sub_menu = array();
	$sub_menu[$p = 0]['name'] = $GLOBALS['MSG_site']['menu2_sub_caption'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('show_regdata', 'check_0_0', 42, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('show_regdata', 'check_0_0', 42, 0, 0);
	$sub_menu[$p]['icon'] = '/admin/images/application_form.gif';

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

	$param['field_params'][0]['site_is_active']['admin_forms_field_type'] = 7; // картинка-ссылка
	$param['field_params'][0]['site_is_active']['admin_forms_field_link'] = $admin_forms->GetHtmlCallTrigerSingleAction('active_site', 'check_0_{site_id}', 42, 0, 0);
	$param['field_params'][0]['site_is_active']['admin_forms_field_onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('active_site', 'check_0_{site_id}', 42, 0, 0);

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

	$param['field_params'][0]['site_name']['admin_forms_field_type'] = 10;// вычисляемое поле
	$param['field_params'][0]['site_name']['callback_function'] = 'callback_function_site_name';
	
	// Функция обратного вызова для названия группы
	function callback_function_site_name($field_value, $value, $row)
	{
		$admin_forms = & singleton('admin_forms');

		if ($row['site_is_active'] == 0)
		{
			$prefix = '<div style="text-decoration: line-through">';
		}
		else
		{
			$prefix = '<div style="font-weight: bold">';
		}
		$suffix = '</div>';
		?><?php echo $prefix?><?php echo $value?><?php echo $suffix?><?php
	}
	
	$param['title'] = $GLOBALS['MSG_site']['site_show_site_title_list'];
	return $param;
}

/**
 * Обработчик события "Добавить сайт с макетом"
 *
 * @param array $param
 */
function add_site_with_template(&$param)
{
	ob_start();

	if (defined('READ_ONLY') && READ_ONLY)
	{
		$kernel = & singleton('kernel');
		$kernel->ReadMode();
	}
	else
	{
		include(CMS_FOLDER.'/admin/site/action/add_site_with_template.php');
	}
	
	$param['result'] = ob_get_clean();
	return true;
}

/**
 * Обработчик события "Удалить сайт"
 *
 * @param array $param
 */
function delete_site(&$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]))
		{
			// Получаем количество сайтов поддерживаемых системой
			$site_resource = $site->SelectSites();

			// Число сайтов поддерживаемых системой
			$count_sites = mysql_num_rows($site_resource);

			$user_access = new user_access();
			
			// Получаем информацию о текущем пользователе центра администрирования
			$row_user = $user_access->GetUser(to_int($_SESSION['current_users_id']));

			// Получаем информацию о группе, в которую входит текущий пользователь центра администрирования
			$row_user_access = $user_access->GetUserType(to_int($row_user['users_type_id']));

			// Идентификатор сайта, с которым связан текущий пользователь центра администрирования 			
			$current_user_site_id = $row_user_access['site_id'];

			foreach ($param['data'][0] as $key => $value)
			{
				$key = intval($key);
				// Определяем режим доступа пользователя и принадлежит ли объект пользователю
				// Определяем информацию об объекте (сайте)
				$object_res = $site->select_site($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 ($count_sites == 1)
				{
					$last_site = true;
					break;
				}

				if ($user_access->IssetUserAccessForObject($object_user_id))
				{									
					// С удаляемым сайтом не связан текущий пользователь центра администрирования
					if ($current_user_site_id != $key)
					{					
						// Получаем список суперюзеров центра администрирования, не связанных с удаляемым сайтом
						$query = "SELECT users_table.users_id
									FROM users_table, users_type_table 
									WHERE users_table.users_type_id = users_type_table.users_type_id AND 
									users_table.users_superuser = 1 AND users_type_table.site_id != $key";
	
						$DataBase = & singleton('DataBase');
	
						$superusers_resource = $DataBase->select($query);
	
						$count_superusers = mysql_num_rows($superusers_resource);
	
						// В других, поддерживаемых системой, сайтах присутствуют суперюзеры и не было ошибки удаления сайта
						if ($count_superusers > 0 && $site->del_site($key))
						{
							$count_sites--;
							$count++;
	
							$flag_success = true;
						}
						else
						{
							$flag_success = false;
						}
					}
					else
					{
						$error_current_site = true;						
					}
				}
				else
				{

					$user_access->MessageOnlyOwn();

					$flag_success = false;
				}
			}

			if (isset($flag_success) && $flag_success)
			{
				if ($count == 1)
				{
					show_message($GLOBALS['MSG_site']['site_delete_site_message']);
				}
				else
				{
					show_message($GLOBALS['MSG_site']['site_delete_sites_message']);
				}
			}
			
			if (isset($error_current_site) && $error_current_site)
			{
				show_error_message($GLOBALS['MSG_site']['site_delete_current_site_message']);
			}

			if (isset($last_site) && $last_site)
			{
				show_error_message($GLOBALS['MSG_site']['site_delete_last_sites_message']);
			}

			if (isset($count_superusers) && $count_superusers == 0)
			{
				show_error_message($GLOBALS['MSG_site']['site_delete_superusers_sites_message']);
			}
		}
		else
		{
			show_message($GLOBALS['MSG_site']['error_delete_site']);
		}
	}
	$param['error'] = ob_get_clean();
}

/**
 * Обработчик события "Копировать сайт"
 *
 * @param array $param
 */
function copy_site(&$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();

				$site = & singleton ('site');

				// Определяем информацию об объекте
				$object_res = $site->select_site($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->CopySite($key);

					$flag_success = true;

					$count++;
				}
				else
				{
					$user_access->MessageOnlyOwn();

					$flag_success = false;
				}
			}

			if ($flag_success)
			{
				if ($count == 1)
				{
					show_message($GLOBALS['MSG_site']['copy_site_success']);
				}
				else
				{
					show_message($GLOBALS['MSG_site']['copy_sites_success']);
				}
			}
		}
		else
		{
			show_message($GLOBALS['MSG_site']['copy_site_error']);
		}
	}
	$param['error'] = ob_get_clean();
}


/**
 * Обработчик события "Редактировать сайт"
 *
 * @param array $param
 * @return boolean
 */
function edit_site(&$param)
{
	ob_start();
	if (isset($param['data'][0]))
	{
		foreach ($param['data'][0] as $key => $value)
		{
			// Определяем режим доступа пользователя и принадлежит ли объект пользователю
			$user_access = new user_access();

			$site = & singleton ('site');

			// Определяем информацию об объекте
			$object_res = $site->select_site($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_id = intval($key);
				include(CMS_FOLDER.'/admin/site/action/add_edit_site_form.php');
				$param['title'] = $site_id == 0
				? $GLOBALS['MSG_site']['site_add_site_form_title']
				: $GLOBALS['MSG_site']['site_edit_site_form_title'];
				break;
			}
			else
			{
				$user_access->MessageOnlyOwn();
				$param['error'] = ob_get_clean();
				return ;
			}
		}
	}

	$param['result'] = ob_get_clean();
	return true;
}

/**
 * Обработчик события "Показать настройки"
 *
 * @param array $param
 * @return boolean
 */
function show_regdata(&$param)
{
	ob_start();

	if (isset($param['data'][0]))
	{
		foreach ($param['data'][0] as $key => $value)
		{

			$site_id = intval($key);
			include(CMS_FOLDER.'/admin/site/action/form_edit_add_registration_data.php');
			$param['title'] = $GLOBALS['MSG_site']['edit_registration_data'];
			break;

		}
	}

	$param['result'] = ob_get_clean();

	return true;
}

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

	$site = & singleton ('site');

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

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

				$site = & singleton ('site');

				// Определяем информацию об объекте
				$object_res = $site->select_site($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_param = $site->GetSite($key);

					$site_param['site_order'] = to_int($row['site_order']);

					$site->insert_site($site_param);
				}
				else
				{
					$user_access->MessageOnlyOwn();
				}
			}
		}
	}
	$param['error'] = ob_get_clean();
}

/**
 * Обработчик события включения/выключения активности
 *
 * @param array $param
 */
function active_site(&$param)
{
	ob_start();
	if (defined('READ_ONLY') && READ_ONLY)
	{
		$kernel = & singleton('kernel');

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

				$site = & singleton ('site');

				// Определяем информацию об объекте
				$object_res = $site->select_site($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))
				{
					$query = "UPDATE `site_table` SET `site_is_active` = 1 - `site_is_active` WHERE `site_id` = '".intval($key)."'";
					$DataBase->query($query);
				}
				else
				{
					$user_access->MessageOnlyOwn();
				}
			}
		}
	}
	$error = ob_get_clean();

	$param['error'] = $error;
}
?>