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

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

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

	$xsl->GetMasXslGroupPath($xsl_dir_parent_id, $xsl_dir_parent_id);

	$path_array =  $xsl->mas_xsl_group_path[$xsl_dir_parent_id];

	$new_path_array = array();

	if (count($path_array) > 1)
	{
		// Меняем порядок следования элементов в массиве на обратный
		$path_array = array_reverse($path_array, true);

		// Преобразуем идентификаторы групп в ссылки на группы.
		if ($path_array)
		{
			foreach ($path_array as $key => $value)
			{
				$new_path_array[] = array (
				'link' => $admin_forms->GetHtmlCallDoLoadAjax('/admin/xsl/xsl.php', "&xsl_dir_parent_id=$key", 22, 'load_data'),
				'onclick' => $admin_forms->GetOnClickCallDoLoadAjax('/admin/xsl/xsl.php', "&xsl_dir_parent_id=$key", 22, 'load_data'),
				'name' => $value['xsl_dir_name']);
			}
		}
	}

	$param['path_array'] = $new_path_array;

	// Отображаем каталоги только на первой странице.
	//if ($page == 0 || $page == 1)
	//{
	// Запрос для выборки разделов XSL-шаблонов.
	$param['data'][] = "SELECT xsl_dir_id AS key_field_id, xsl_dir_name AS field_name, xsl_dir_order AS order_field
		FROM `xsl_dir_table` WHERE xsl_dir_parent_id='$xsl_dir_parent_id'
		{FILTER_STRING} {ORDER_STRING} {LIMIT}";
	/*}
	else
	{
	$param['data'][] = array();
	}
	*/

	// Количество каталогов
	$count_groups = "SELECT count(xsl_dir_id) as count
	FROM `xsl_dir_table`
	WHERE xsl_dir_parent_id='$xsl_dir_parent_id' {FILTER_STRING}";

	// Запрос для выборки XSL-шаблонов.
	$param['data'][] = "SELECT xsl_id AS key_field_id, xsl_name AS field_name, xsl_order AS order_field
	FROM `xsl_table`WHERE `xsl_dir_id` = '$xsl_dir_parent_id'
	{FILTER_STRING} {ORDER_STRING} {LIMIT}";

	// Посчитаем общее число шаблонов.
	$count = "SELECT count(xsl_id) as count FROM `xsl_table`
	WHERE `xsl_dir_id` = '$xsl_dir_parent_id' {FILTER_STRING}";

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

	// Формируем верхнее меню.
	$k = 0;

	$menu = array();
	$menu[$k]['name'] = $GLOBALS['MSG_xsl']['XSL_add_top_menu_link'];
	$menu[$k]['link'] = '';
	$menu[$k]['icon'] = '';

	$p = 0;

	$sub_menu = array();
	$sub_menu[$p]['name'] = $GLOBALS['MSG_xsl']['XSL_add_sub_menu_link'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('edit_xsl_dir', 'check_1_0', 22, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('edit_xsl_dir', 'check_1_0', 22, 0, 0);
	$sub_menu[$p]['icon'] = '/admin/images/xsl_add.gif';

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

	$k++;

	$menu[$k]['name'] = $GLOBALS['MSG_xsl']['XSL_add_dir_top_menu_link'];
	$menu[$k]['link'] = '';
	$menu[$k]['icon'] = '';

	$p = 0;

	$sub_menu = array();
	$sub_menu[$p]['name'] = $GLOBALS['MSG_xsl']['XSL_add_dir_sub_menu_link'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('edit_xsl_dir', 'check_0_0', 22, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('edit_xsl_dir', 'check_0_0', 22, 0, 0);
	$sub_menu[$p]['icon'] = '/admin/images/folder_add.gif';

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

	// Формируем массив меню.
	$menu_array[] = $menu;

	$param['total_count'][0] = $count_groups;;
	$param['total_count'][1] = $count;

	// Перекрываем настойки для поля из первого набора данных.
	// Поле с названием делаем ссылкой.
	$param['field_params'][0][84]['admin_forms_field_type'] = 4; // Ссылка.
	$param['field_params'][0][84]['admin_forms_field_link'] = $admin_forms->GetHtmlCallDoLoadAjax('/admin/xsl/xsl.php', "&xsl_dir_parent_id={key_field_id}", 22, 'load_data');
	$param['field_params'][0][84]['admin_forms_field_onclick'] = $admin_forms->GetOnClickCallDoLoadAjax('/admin/xsl/xsl.php', "&xsl_dir_parent_id={key_field_id}", 22, 'load_data');

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

	$param['current_page'] = $page;
	$param['on_page'] = $on_page;
	$param['menus'] = $menu_array;

	$param['title'] = $GLOBALS['MSG_xsl']['XSL_title'];
	return $param;
}

// Необязательная функция для определения реального имени столбца по псевдониму.
function ResolveFieldName(&$field_name, $dataset_id)
{

	switch ($dataset_id)
	{
		case 0: // Список разделов XSL.
		{
			if ($field_name == 'field_name')
			{
				$field_name = 'xsl_dir_name';
			}
			elseif ($field_name == 'key_field_id')
			{
				$field_name = 'xsl_dir_id';
			}
			elseif ($field_name == 'order_field')
			{
				$field_name = 'xsl_dir_order';
			}
			break;
		}
		case 1: // Список XSL-шаблонов
		{

			if ($field_name == 'key_field_id')
			{
				$field_name = 'xsl_id';
			}
			elseif ($field_name == 'field_name')
			{
				$field_name = 'xsl_name';
			}
			elseif ($field_name == 'order_field')
			{

				$field_name = 'xsl_order';
			}
			break;
		}
	}
	return true;
}

// Редактирование раздела XSL.
function edit_xsl_dir(&$param)
{
	ob_start();

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

	$xsl = & singleton('xsl');

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

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

						include(CMS_FOLDER . 'admin/xsl/action/form_edit_add_xsl_dir.php');

						$param['title'] = $xsl_dir_id == 0 ? $GLOBALS['MSG_xsl']['XSL_add_dir_form_title'] : $GLOBALS['MSG_xsl']['XSL_edit_dir_form_title'];
					}
					else
					{
						$user_access->MessageOnlyOwn();
						$param['error'] = ob_get_clean();
						return ;
					}
				}
			}
		}
		if (isset($param['data'][1]))
		{
			foreach ($param['data'] as $dataset)
			{
				foreach ($dataset as $key => $value)
				{
					// Определяем режим доступа пользователя и принадлежит ли объект пользователю
					$user_access = new user_access();

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

						include(CMS_FOLDER . 'admin/xsl/action/form_edit_add_xsl.php');

						$param['title'] = ($xsl_id && !isset($error)) ? $GLOBALS['MSG_xsl']['XSL_edit_form_title'] : $GLOBALS['MSG_xsl']['XSL_add_form_title'];

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

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

	return true;
}


// Копирование XSL-шаблона.
function copy_xsl(&$param)
{
	ob_start();

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

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

		// Счетчик скопированных XSL-шаблонов
		$count_copy_xsl = 0;

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

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

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

						$flag_success_copy = false;
					}
				}
			}

			// Не было ршибок при копировании XSL-шаблонов
			if ($flag_success_copy)
			{
				// Скопирован один XSL-шаблон
				if ($count_copy_xsl == 1)
				{
					show_message($GLOBALS['MSG_xsl']['XSL_template_copy_success']);
				}
				// Скопирована группа XSL-шаблонов
				else
				{
					show_message($GLOBALS['MSG_xsl']['XSL_templates_copy_success']);
				}
			}
			// Произошла ошибка при копировании XSL-шаблона
			else
			{
				show_error_message($GLOBALS['MSG_xsl']['XSL_templates_copy_error']);
			}
		}

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

// Удалить раздел XSL.
function delete_xsl_dir(&$param)
{
	ob_start();

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

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

		// Счетчик удаленных разделов
		$count_deleted_dirs = 0;

		// Счетчик удаленных шаблонов
		$count_deleted_xsl = 0;

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

						// Определяем информацию об объекте
						$object_res = $xsl->select_xsl_dir($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 (!$xsl->del_xsl_dir($key))
							{
								$flag_success = false;
							}
							else
							{
								++$count_deleted_dirs;

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

							$flag_success = false;
						}
					}
				}
				if ($flag_success)
				{
					// Удален один раздел
					if ($count_deleted_dirs == 1)
					{
						show_message($GLOBALS['MSG_xsl']['XSL_delete_dir_message_success']);
					}
					// Удалена группа разделов
					else
					{
						show_message($GLOBALS['MSG_xsl']['XSL_delete_dirs_message_success']);
					}
				}
				else
				{
					show_error_message($GLOBALS['MSG_xsl']['XSL_delete_dir_message_error']);
				}
			}

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

						// Определяем информацию об объекте
						$object_res = $xsl->select_xsl($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 (!$xsl->del_xsl($key))
							{
								$flag_success = false;
							}
							else
							{
								++$count_deleted_xsl;

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

							$flag_success = false;
						}
					}
				}

				if ($flag_success)
				{
					// Удален один XSL-шаблон
					if ($count_deleted_xsl == 1)
					{
						show_message($GLOBALS['MSG_xsl']['XSL_delete_template_message_success']);
					}
					// Удалено несколько XSL-шаблонов
					else
					{
						show_message($GLOBALS['MSG_xsl']['XSL_delete_templates_message_success']);
					}
				}
				else
				{
					show_error_message($GLOBALS['MSG_xsl']['XSL_delete_template_message_error']);
				}
			}
		}
	}

	$error = ob_get_clean();

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

// Применить групповые изменения
function apply_changes_xsl(&$param)
{
	ob_start();

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

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

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

					// Определяем информацию об объекте
					$object_res = $xsl->select_xsl_dir($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))
					{
						// Выбираем данные о разделе XSL
						$result = $xsl->select_xsl_dir($key);

						$row_field = mysql_fetch_assoc($result);

						$param = array();
						$param['type'] = 1;
						$param['xsl_dir_id'] = $key;
						$param['xsl_dir_parent_id'] = $row_field['xsl_dir_parent_id'];
						$param['xsl_dir_name'] = $row_field['xsl_dir_name'];
						$param['xsl_dir_order'] = to_int($row['order_field']);
						$param['users_id'] = $row_field['users_id'];

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

				}
			}

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

					// Определяем информацию об объекте
					$object_res = $xsl->select_xsl($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))
					{
						// Выбираем данные о варианте ответа
						$result_field = $xsl->select_xsl($key);

						$row_field = mysql_fetch_assoc($result_field);

						$param = array();
						$param['xsl_id'] = $key;
						$param['xsl_dir_id'] = $row_field['xsl_dir_id'];
						$param['xsl_name'] = $row_field['xsl_name'];
						$param['xsl_comment'] = $row_field['xsl_comment'];
						$param['xsl_order'] = $row['order_field'];
						$param['users_id'] = $row_field['users_id'];

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

	$error = ob_get_clean();

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