<?php 
/**
 * Система управления сайтом HostCMS v. 5.xx
 * Copyright © 2005-2010 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
 *
 * Ajax загрузчик формы списка шаблонов.
 * 
 * Файл: /admin/templates/data_templates/action/load_data_templates.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();
	$param['limit'][1] = array('begin' => $begin, 'count' => $on_page);
	*/

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

	$data_templates_group_id = to_int($_REQUEST['data_templates_group_parent_id']);

	$data_templates = new templates();

	// Строим "хлебные крошки".
	$path_array = $data_templates->GetDataTemplatePathArray($data_templates_group_id);

	// Преобразуем идентификаторы групп в ссылки на группы.
	$new_path_array = array();

	if ($path_array)
	{
		if ($path_array)
		{
			foreach ($path_array as $key => $value)
			{
				$new_path_array[] = array (
				'link' => $admin_forms->GetHtmlCallDoLoadAjax('/admin/templates/data_templates/data_templates.php', "&data_templates_group_parent_id={$value}", 5, 'load_data'),
				'onclick' => $admin_forms->GetOnClickCallDoLoadAjax('/admin/templates/data_templates/data_templates.php', "&data_templates_group_parent_id={$value}", 5, 'load_data'),
				'name' => $key);
			}
		}
	}
	if (count($new_path_array) > 1)
	{
		$param['path_array'] = $new_path_array;
	}
	else
	{
		$param['path_array'] = '';
	}

	$site_id = CURRENT_SITE;


	// Отображаем каталоги только на первой странице.
	//if ($page == 0 || $page == 1)
	//{
	// Запрос для выборки каталогов шаблонов.
	$param['data'][] = "SELECT data_templates_group_id AS key_field, data_templates_group_name AS name
		FROM `data_templates_group_table`
		WHERE `data_templates_group_parent_id` = '$data_templates_group_id' AND `site_id` = '$site_id'
		{FILTER_STRING} {ORDER_STRING} {LIMIT}";
	/*}
	else
	{
	$param['data'][] = array();
	}
	*/

	// Количество информационных групп
	$count_groups = "SELECT count(data_templates_group_id) as count
	FROM `data_templates_group_table`
	WHERE `data_templates_group_parent_id` = '$data_templates_group_id' AND `site_id` = '$site_id'
	{FILTER_STRING}";	

	// Запрос для выборки шаблонов.
	$param['data'][] = "SELECT data_templates_id AS key_field, data_templates_name AS name, data_templates_order
	FROM `data_templates_table`
	WHERE `data_templates_group_id` = '$data_templates_group_id' AND `site_id` = '$site_id'
	{FILTER_STRING} {ORDER_STRING} {LIMIT}";

	// Посчитаем общее число шаблонов.
	$count = "SELECT count(data_templates_id) as count FROM `data_templates_table`
	WHERE `data_templates_group_id` = '$data_templates_group_id' 
	AND `site_id` = '$site_id'
	{FILTER_STRING}";

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

	$sub_menu = array();
	$sub_menu[$p = 0]['name'] = $GLOBALS['MSG_templates']['data_templates_add_new'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('edit_data_template', 'check_1_0', 5, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('edit_data_template', 'check_1_0', 5, 0, 0);
	$sub_menu[$p]['icon'] = '/admin/images/template_add.gif';
	// Добавляем подэлементы.
	$menu[$k]['sub_items'] = $sub_menu;

	$menu[++$k]['name'] = $GLOBALS['MSG_templates']['group_data_templates_top_menu2'];
	$menu[$k]['link'] = '';
	$menu[$k]['icon'] = '';

	$sub_menu[$p = 0]['name'] = $GLOBALS['MSG_templates']['data_templates_group_add_new'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('edit_data_template', 'check_0_0', 5, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('edit_data_template', 'check_0_0', 5, 0, 0);
	$sub_menu[$p]['icon'] = '/admin/images/folder_add.gif';
	// Добавляем подэлементы.
	$menu[$k]['sub_items'] = $sub_menu;

	// Формируем массив меню.
	$menu_array = array($menu);

	// Для первого набора данных общее количство не указываем, т.к. передаем все элементы,
	// для второго набора данных указываем в виде запроса.
	$param['total_count'][0] = $count_groups;
	$param['total_count'][1] = $count;

	$param['field_params'][1]['data_templates_order']['admin_forms_field_type'] = 2;

	// Перекрываем настойки для поля из первого набора данных.
	// Поле с названием делаем ссылкой.
	$param['field_params'][0]['name']['admin_forms_field_type'] = 4; // Ссылка.

	$param['field_params'][0]['name']['admin_forms_field_link'] = $admin_forms->GetHtmlCallDoLoadAjax('/admin/templates/data_templates/data_templates.php', "&data_templates_group_parent_id={key_field}", 5, 'load_data');
	$param['field_params'][0]['name']['admin_forms_field_onclick'] = $admin_forms->GetOnClickCallDoLoadAjax('/admin/templates/data_templates/data_templates.php', "&data_templates_group_parent_id={key_field}", 5, 'load_data');

	// В поле с картинкой отображаем значек папки.
	$param['field_params'][0][24]['admin_forms_field_image'] = "=/admin/images/folder.gif";
	$param['field_params'][1][24]['admin_forms_field_image'] = "=/admin/images/template.gif";

	$param['current_page'] = $page;
	$param['on_page'] = $on_page;
	$param['menus'] = $menu_array;
	$param['title'] = $GLOBALS['MSG_templates']['data_templates_title_list'];

	return $param;
}

/**
 * Необязательная функция для определения реального имени столбца по псевдониму.
 */
function ResolveFieldName(&$field_name, $dataset_id)
{
	switch ($dataset_id)
	{
		case 0: // Список каталогов шаблонов.
		{
			if ($field_name == 'name')
			{
				$field_name = 'data_templates_group_name';
			}
			elseif ($field_name == 'key_field')
			{
				$field_name = 'data_templates_group_id';
			}
			elseif ($field_name == 'data_templates_order')
			{
				$field_name = '';
			}
			break;
		}
		case 1: // Список шаблонов.
		{
			if ($field_name == 'name')
			{
				$field_name = 'data_templates_name';
			}
			elseif ($field_name == 'key_field')
			{
				$field_name = 'data_templates_id';
			}
			break;
		}
	}
	return true;
}


/**
 * Обработчик события "Редактировать" шаблона данных
 */
function edit_data_template(&$param)
{
	ob_start();

	$data_template = & singleton('templates');

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

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

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

				if ($user_access->IssetUserAccessForObject($object_user_id))
				{
					$data_templates_group_id = intval($key);

					include(CMS_FOLDER . '/admin/templates/data_templates/action/form_edit_add_data_template_group.php');

					$param['title'] = $data_templates_group_id==0 ? $GLOBALS['MSG_templates']['data_templates_group_form_title_add'] : $GLOBALS['MSG_templates']['data_templates_group_form_title_edit'];

					break;
				}
				else
				{
					$user_access->MessageOnlyOwn();
					$param['error'] = ob_get_clean();
					return ;
				}
			}
		}

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

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

				if ($object_res && mysql_num_rows($object_res) == 1)
				{
					$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))
				{
					$data_templates_group_id = to_int($_REQUEST['data_templates_group_parent_id']);

					include(CMS_FOLDER . '/admin/templates/data_templates/action/form_edit_add_data_template.php');

					$param['title'] = $data_templates_id == 0 ? $GLOBALS['MSG_templates']['data_templates_add_form_title'] : $GLOBALS['MSG_templates']['data_templates_edit_form_title'];

					break;
				}
				else
				{
					$user_access->MessageOnlyOwn();
					$param['error'] = ob_get_clean();
					return ;
				}
			}
		}
	}

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


/**
 * Обработчик события "Копировать" шаблона данных
 */
function copy_data_template(&$param)
{
	ob_start();

	if (defined('READ_ONLY') && READ_ONLY)
	{
		$kernel = & singleton('kernel');
		$kernel->ReadMode();
	}
	else
	{
		$data_templates = new templates;

		$count_copy_data_templates = 0;

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

				// Определяем информацию об объекте
				$object_res = $data_templates->select_data_templates($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 ($data_templates->CopyDataTemplate($key))
					{
						++$count_copy_data_templates;

						$flag_success_copy_data_template = true;
					}
					else
					{
						$flag_success_copy_data_template = false;
					}
				}
				else
				{
					$user_access->MessageOnlyOwn();

					$flag_success_copy_data_template = false;
				}
			}

			if ($flag_success_copy_data_template)
			{
				if ($count_copy_data_templates == 1)
				{
					show_message($GLOBALS['MSG_templates']['template_data_copy_success']);
				}
				elseif ($count_copy_data_templates > 1)
				{
					show_message($GLOBALS['MSG_templates']['templates_data_copy_success']);
				}
			}
			else // Ошибка копирования шаблона данных
			{
				show_error_message($GLOBALS['MSG_templates']['error_templates_data_copy']);
			}
		}
	}

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


/**
 * Обработчик события "Удалить" шаблона данных
 */
function delete_data_template(&$param)
{
	ob_start();

	if (defined('READ_ONLY') && READ_ONLY)
	{
		$kernel = & singleton('kernel');
		$kernel->ReadMode();
	}
	else
	{
		$data_templates = new templates;

		$count_deleted_data_templates = 0;

		$count_deleted_groups_data_templates = 0;

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

					$data_template = & singleton('templates');

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

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

					if ($user_access->IssetUserAccessForObject($object_user_id))
					{
						if ($data_templates->DelDataTemplatesGroup($key))
						{
							++$count_deleted_groups_data_templates;

							$flag_success_delete_group_data_template = true;
						}
						else // Ошибка удаления группы шаблонов страниц
						{
							$flag_success_delete_group_data_template = false;
						}
					}
					else
					{
						$user_access->MessageOnlyOwn();

						$flag_success_delete_group_data_template = false;
					}
				}

				// Группа(ы) шаблонов страниц удалена(ы)
				if ($flag_success_delete_group_data_template)
				{
					// Удалена одна группа шаблонов страниц
					if ($count_deleted_groups_data_templates == 1)
					{
						show_message($GLOBALS['MSG_templates']['data_templates_group_delete_message']);
					}
					// Удалено несколько групп шаблонов страниц
					elseif ($count_deleted_groups_data_templates > 1)
					{
						show_message($GLOBALS['MSG_templates']['data_templates_groups_delete_message']);
					}
				}
				else // Ошибка при удалении группы шаблонов страниц
				{
					show_error_message($GLOBALS['MSG_templates']['data_templates_group_error_delete_message']);
				}
			}

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

					// Определяем информацию об объекте
					$object_res = $data_templates->select_data_templates($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 ($data_templates->del_data_templates($key))
						{
							++$count_deleted_data_templates;

							$flag_success_delete_data_template = true;
						}
						else // Ошибка удаления шаблона страниц
						{
							$flag_success_delete_data_template = false;
						}
					}
					else
					{
						$user_access->MessageOnlyOwn();

						$flag_success_delete_data_template = false;
					}
				}

				// Шаблон(ы) страниц удален(ы)
				if ($flag_success_delete_data_template)
				{
					// Удален один шаблон страниц
					if ($count_deleted_data_templates == 1)
					{
						show_message($GLOBALS['MSG_templates']['data_template_delete_message']);
					}
					elseif ($count_deleted_data_templates > 1)
					{
						show_message($GLOBALS['MSG_templates']['data_templates_delete_message']);
					}
				}
				else // Ошибка удаления шаблона страниц
				{
					show_error_message($GLOBALS['MSG_templates']['data_template_error_delete_message']);
				}
			}
		}
	}
	$param['error'] = ob_get_clean();

}


/**
 * Обработчик события "Применить" шаблона данных
 */
function apply_data_template(&$param)
{
	ob_start();

	if (defined('READ_ONLY') && READ_ONLY)
	{
		$kernel = & singleton('kernel');
		$kernel->ReadMode();
	}
	else
	{
		$data_template = new templates();
		$File = new File();

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

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

				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))
				{
					// Получаем информацию о шаблоне данных
					$params = array();

					$data_template_resorce = $data_template->select_data_templates($keys);

					$res = mysql_fetch_assoc($data_template_resorce);

					// Получаем текст шаблона
					$file_name = $data_template->GetDataTemplatePath(to_int($res['data_templates_id']));

					if (is_file($file_name))
					{
						$data_template_value = $File->GetFileContent($file_name);
					}
					else
					{
						$data_template_value = '';
					}

					$data_template->insert_data_templates(1, to_int($res['data_templates_id']), to_int($res['data_templates_group_id']), $data_template_value, to_str($res['data_templates_name']), to_str($res['data_templates_description']), to_int($rows['data_templates_order']), to_int($res['users_id']));
				}
				else
				{
					$user_access->MessageOnlyOwn();
					$param['error'] = ob_get_clean();
					return ;
				}
			}
		}
	}
	$param['error'] = ob_get_clean();

}
?>