<?php 
/**
 * Система управления сайтом HostCMS v. 5.xx
 * Copyright © 2005-2010 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
 *
 * Ajax загрузчик формы списка макеов и групп документов.
 * 
 * Файл: /admin/templates/templates/action/load_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);

	$templates_group_id = to_int($_REQUEST['templates_group_parent_id']);

	// Строим "хлебные крошки"
	$templates = new templates();

	$path_array = $templates->GetTemplatePathArray($templates_group_id);

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

	if ($path_array)
	{
		foreach ($path_array as $key => $value)
		{
			$new_path_array[] = array (
			'link' => $admin_forms->GetHtmlCallDoLoadAjax('/admin/templates/templates/templates.php', "&templates_group_parent_id={$key}", 6, 'load_data'),
			'onclick' => $admin_forms->GetOnClickCallDoLoadAjax('/admin/templates/templates/templates.php', "&templates_group_parent_id={$key}", 6, 'load_data'),
			'name' => $value);
		}
	}

	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 templates_group_id AS key_field, templates_group_name AS name
		FROM `templates_group_table`
		WHERE `templates_group_parent_id` = '$templates_group_id' AND `site_id` = '$site_id' 
		{FILTER_STRING} {ORDER_STRING} {LIMIT}";
	/*}
	else
	{
	$param['data'][] = array();
	}
	*/


	// Количество групп	макетов
	$count_groups = "SELECT count(templates_group_id) as count
	FROM `templates_group_table`
	WHERE `templates_group_parent_id` = '$templates_group_id' 
	AND `site_id` = '$site_id' 
	{FILTER_STRING}";


	// Запрос для выборки макетов.
	$param['data'][] = "SELECT templates_order, templates_id AS key_field, templates_name AS name
	FROM `templates_table` WHERE `templates_group_id` = '$templates_group_id' 
	 AND `site_id` = '$site_id' 
	{FILTER_STRING} {ORDER_STRING} {LIMIT}";

	// Посчитаем общее число макетов.
	$count = "SELECT count(templates_id) as count FROM `templates_table`
	WHERE `templates_group_id` = '$templates_group_id'  AND `site_id` = '$site_id'  {FILTER_STRING}";

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

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

	$k++;

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

	$sub_menu = array();

	$sub_menu[$p = 0]['name'] = $GLOBALS['MSG_templates']['templates_group_add_new'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('edit_template', 'check_0_0', 6, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('edit_template', 'check_0_0', 6, 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]['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/templates/templates.php', "&templates_group_parent_id={key_field}", 6, 'load_data');
	$param['field_params'][0]['name']['admin_forms_field_onclick'] = $admin_forms->GetOnClickCallDoLoadAjax('/admin/templates/templates/templates.php', "&templates_group_parent_id={key_field}", 6, 'load_data');

	// В поле с картинкой отображаем значек папки.
	$param['field_params'][0][28]['admin_forms_field_image'] = "=/admin/images/folder.gif";
	$param['field_params'][1][28]['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']['templates_title'];

	return $param;
}

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

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

	$templates_group_parent_id = to_int($_REQUEST['templates_group_parent_id']);
	
	$templates = & singleton('templates');

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

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

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

				if ($user_access->IssetUserAccessForObject($object_user_id))
				{
					include(CMS_FOLDER . '/admin/templates/templates/action/form_edit_add_template_group.php');

					$param['title'] = $templates_group_id == 0
					? $GLOBALS['MSG_templates']['templates_group_form_title_add']
					: $GLOBALS['MSG_templates']['templates_group_form_title_edit'];
					break;
				}
				else
				{
					$user_access->MessageOnlyOwn();
					$param['error'] = ob_get_clean();
					return ;
				}
			}
		}

		// Редактирование макета.
		if (isset($param['data'][1]))
		{
			$templates_group_id = to_int($_REQUEST['templates_group_parent_id']);

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

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

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

				if ($user_access->IssetUserAccessForObject($object_user_id))
				{
					include(CMS_FOLDER . '/admin/templates/templates/action/form_edit_add_template.php');

					$param['title'] = $templates_id == 0
					? $GLOBALS['MSG_templates']['templates_add_form_title']
					: $GLOBALS['MSG_templates']['templates_edit_form_title'];

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

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

	return true;
}


/**
 * Обработчик события "Копировать" макета
 */
function copy_template(&$param)
{
	ob_start();
	if (defined('READ_ONLY') && READ_ONLY)
	{
		$kernel = & singleton('kernel');

		$kernel->ReadMode();
	}
	else
	{
		$templates = new templates;

		$count_copy_templates = 0;

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

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

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

				if ($user_access->IssetUserAccessForObject($object_user_id))
				{
					if ($templates->CopyTemplate($key))
					{
						++$count_copy_templates;

						$flag_success_delete = true;
					}
					else // Ошибка при копировании макета
					{
						$flag_success_delete = false;
					}
				}
				else
				{
					$user_access->MessageOnlyOwn();

					$flag_success_delete = false;
				}
			}

			if ($flag_success_delete)
			{
				if  ($count_copy_templates == 1)
				{
					show_message($GLOBALS['MSG_templates']['maket_copy_success']);
				}
				elseif ($count_copy_templates > 1)
				{
					show_message($GLOBALS['MSG_templates']['makets_copy_success']);
				}
			}
			else
			{
				show_error_message($GLOBALS['MSG_templates']['maket_copy_error']);
			}
		}
	}
	$param['error'] = ob_get_clean();

}


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


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

		$kernel->ReadMode();
	}
	else
	{
		$templates = new templates;

		$count_deleted_templates = 0;

		$count_deleted_templates_groups = 0;

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

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

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

					if ($user_access->IssetUserAccessForObject($object_user_id))
					{
						if ($templates->DelTemplatesGroup($key))
						{
							++$count_deleted_templates_groups;

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

						$flag_success_delete_templates_group = false;
					}
				}

				// Группа(пы) макетов успешно далена(ы)
				if ($flag_success_delete_templates_group)
				{

					if ($count_deleted_templates_groups == 1)
					{
						show_message($GLOBALS['MSG_templates']['templates_group_delete_success']);
					}
					elseif ($count_deleted_templates_groups > 1)
					{
						show_message($GLOBALS['MSG_templates']['templates_groups_delete_success']);
					}
				}
				else // Возникли ошибки при удалении групп() макетов
				{
					show_error_message($GLOBALS['MSG_templates']['templates_groups_delete_error']);
				}
			}

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

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

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

					if ($user_access->IssetUserAccessForObject($object_user_id))
					{
						if ($templates->del_templates($key))
						{
							++$count_deleted_templates;

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

						$flag_success_delete_template = false;
					}
				}

				// Макет(ы) успешно удален(ы)
				if ($flag_success_delete_template)
				{
					if ($count_deleted_templates == 1)
					{
						show_message($GLOBALS['MSG_templates']['template_delete_success']);
					}
					elseif ($count_deleted_templates> 1)
					{
						show_message($GLOBALS['MSG_templates']['templates_delete_success']);
					}
				}
				else // Возникли ошибки при удалении макета(ов)
				{
					show_error_message($GLOBALS['MSG_templates']['template_delete_error']);
				}
			}
		}

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


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

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

		$kernel->ReadMode();
	}
	else
	{

		if (isset($param['data'][1]) && is_array($param['data'][1]))
		{
			$template = & singleton('templates');

			$File = new File();

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

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

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

				if ($user_access->IssetUserAccessForObject($object_user_id))
				{
					// Получаем информацию о макете
					$params = array();

					$result = $template->GetTemplate($keys);

					$params['templates_id'] = $result['templates_id'];
					$params['templates_group_id'] = $result['templates_group_id'];
					$params['templates_name'] = $result['templates_name'];
					$params['templates_order'] = $rows['templates_order'];
					$params['users_id'] = $result['users_id'];

					// Получаем текст макета
					$file_name = CMS_FOLDER . 'templates/template' . to_int($result['templates_id']) . '/template.htm';
					if (is_file($file_name))
					{
						$s = $File->GetFileContent($file_name);
						$params['template'] = $s;
					}
					else
					{
						$params['template'] = '';
					}

					// Получаем CSS макета
					$file_name = CMS_FOLDER . 'templates/template' . to_int($result['templates_id']) . '/style.css';

					if (is_file($file_name))
					{
						$s = $File->GetFileContent($file_name);
						$params['css'] = $s;
					}
					else
					{
						$params['css'] = '';
					}
					$template->InsertTemplate($params);
				}
				else
				{
					$user_access->MessageOnlyOwn();
					$param['error'] = ob_get_clean();
					return ;
				}
			}
		}
	}
	$param['error'] = ob_get_clean();
}
?>