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

	$information_system_id = to_int($_REQUEST['information_system_id']);
	$information_groups_parent_id = to_int($_REQUEST['information_groups_parent_id']);
	$information_item_id = to_int($_REQUEST['information_item_id']);

	$InformationSystem = & singleton('InformationSystem');

	if ($information_system_id > 0)
	{
		$path_array = $InformationSystem->GetInformationGroupsPathArray($information_groups_parent_id, $information_system_id);
	}
	else
	{
		$path_array = array();
	}

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

	$new_path_array[] = array(
	'link' => $admin_forms->GetHtmlCallDoLoadAjax('/admin/InformationSystems/InformationSystems.php', ' ', 11, 'load_data'),
	'onclick' => $admin_forms->GetOnClickCallDoLoadAjax('/admin/InformationSystems/InformationSystems.php', ' ', 11, 'load_data'),
	'name' => $GLOBALS['MSG_information_systems']['show_information_systems_title']);

	// Идентификатор текущей группы (раздела) информационных систем
	$information_systems_dir_parent_id = to_int($_REQUEST['information_systems_dir_parent_id']);

	// Путь по группам инфосистем
	if ($information_systems_dir_parent_id)
	{
		$information_systems_dir_path_array = $InformationSystem->GetInformationSystemsDirPathArray($information_systems_dir_parent_id);
		
		// Меняем порядок следования элементов в массиве на обратный
		$information_systems_dir_path_array = array_reverse($information_systems_dir_path_array, true);
		
		foreach ($information_systems_dir_path_array as $key => $value)
		{
			$new_path_array[] = array (
			'link' => $admin_forms->GetHtmlCallDoLoadAjax('/admin/InformationSystems/InformationSystems.php', "&information_systems_dir_parent_id={$key}", 11, 'load_data'),
			'onclick' => $admin_forms->GetOnClickCallDoLoadAjax('/admin/InformationSystems/InformationSystems.php', "&information_systems_dir_parent_id={$key}", 11, 'load_data'),
			'name' => $value['information_systems_dir_name']);
		}
	}
	
	if ($information_system_id > 0)
	{
		// Меняем порядок следования элементов в массиве на обратный
		$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/InformationSystems/InformationSystems.php', "&information_groups_parent_id={$key}&information_systems_dir_parent_id={$information_systems_dir_parent_id}&information_system_id={$information_system_id}", 12, 'load_data'),
				'onclick' => $admin_forms->GetOnClickCallDoLoadAjax('/admin/InformationSystems/InformationSystems.php', "&information_groups_parent_id={$key}&information_systems_dir_parent_id={$information_systems_dir_parent_id}&information_system_id={$information_system_id}", 12, 'load_data'),
				'name' => $value['information_groups_name']);
			}
		}
	}

	$param['path_array'] = $new_path_array;

	// Список всех комментариев ко всем инфосистемам
	if (to_int($_REQUEST['all_comments_all_systems']))
	{
		$current_site_id = CURRENT_SITE;
		// Запрос для выборки комментариев всех элементов всех информационных систем.
		$param['data'][] = "SELECT comment_table.*,
		information_items_table.information_items_id AS information_item_id,
		information_items_table.information_groups_id AS information_group_id,
		information_items_table.information_systems_id AS information_system_id,
		information_items_table.information_systems_id
		FROM comment_table, information_items_table, information_systems_table  
		WHERE information_systems_table.site_id = $current_site_id
		AND information_systems_table.information_systems_id = information_items_table.information_systems_id
		AND comment_table.information_items_id = information_items_table.information_items_id 
		{FILTER_STRING} {ORDER_STRING} {LIMIT}";

		// Посчитаем общее число информационных групп.
		$count = "SELECT count(comment_table.comment_id) AS count
		FROM comment_table, information_items_table, information_systems_table
		WHERE information_systems_table.site_id = $current_site_id
		AND information_systems_table.information_systems_id = information_items_table.information_systems_id
		AND comment_table.information_items_id = information_items_table.information_items_id 
		{FILTER_STRING}";	
	}
	// Список всех комментариев к конкретной инфосистеме
	elseif (to_int($_REQUEST['all_comments_system']))
	{
		// Запрос для выборки комментариев для информационной системы.
		$param['data'][] = "SELECT comment_table.*,
		information_items_table.information_items_id AS information_item_id,
		information_items_table.information_groups_id AS information_group_id,
		information_items_table.information_systems_id AS information_system_id,
		information_items_table.information_systems_id
		FROM comment_table, information_items_table  
		WHERE comment_table.information_items_id = information_items_table.information_items_id 
		AND information_items_table.information_systems_id = $information_system_id
		{FILTER_STRING} {ORDER_STRING} {LIMIT}";

		// Посчитаем общее число информационных групп.
		$count = "SELECT count(comment_table.comment_id) AS count
		FROM comment_table, information_items_table
		WHERE comment_table.information_items_id = information_items_table.information_items_id 
		AND information_items_table.information_systems_id = $information_system_id
		{FILTER_STRING}";
	}
	//  Список комментароиев к конкретному информационному элементу
	else
	{
		// Запрос для выборки комментариев к конкретному информационному элементу
		$param['data'][] = "SELECT comment_table.*,
		information_items_table.information_items_id AS information_item_id,
		information_items_table.information_groups_id AS information_group_id,
		information_items_table.information_systems_id AS information_system_id,
		information_items_table.information_systems_id
		FROM comment_table, information_items_table  
		WHERE comment_table.information_items_id = information_items_table.information_items_id
		AND information_items_table.information_items_id='$information_item_id'
		{FILTER_STRING} {ORDER_STRING} {LIMIT}";

		// Посчитаем общее число комментариев
		$count = "SELECT count(comment_table.comment_id) AS count
		FROM comment_table, information_items_table
		WHERE comment_table.information_items_id = information_items_table.information_items_id
		AND information_items_table.information_items_id = '$information_item_id'
		{FILTER_STRING}";

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

		$menu = array();

		$menu[$k]['name'] = $GLOBALS['MSG_information_systems']['top_menu_comment'];
		$menu[$k]['link'] = '';
		$menu[$k]['icon'] = '';

		$p = 0;

		$sub_menu = array();

		$sub_menu[$p]['name'] = $GLOBALS['MSG_information_systems']['sub_menu_add_comment'];
		$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('edit_comment', 'check_0_0', 52, 0, 0);
		$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('edit_comment', 'check_0_0', 52, 0, 0);
		$sub_menu[$p]['icon'] = '/admin/images/comment_add.gif';

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

		// Формируем массив меню.
		$menu_array = array();
		$menu_array[] = $menu;
		$param['menus'] = $menu_array;
	}

	if (isset($_REQUEST['all_comments_all_systems']) && $_REQUEST['all_comments_all_systems'] != 0)
	{
		$AdditionalParams = '&all_comments_all_systems=1';
	}
	elseif (isset($_REQUEST['all_comments_system']) && $_REQUEST['all_comments_system'] != 0)
	{
		$AdditionalParams = '&all_comments_system=1&information_system_id={information_system_id}&information_groups_parent_id=0';
	}
	else
	{
		$AdditionalParams = '';
	}

	$param['field_params'][0][208]['admin_forms_field_link'] = $admin_forms->GetHtmlCallTrigerSingleAction('change_comment_status', 'check_0_{comment_id}', '52');
	$param['field_params'][0][208]['admin_forms_field_onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('change_comment_status', 'check_0_{comment_id}', '52');

	$param['total_count'][] = $count;
	$param['current_page'] = $page;
	$param['on_page'] = $on_page;

	// Список всех комментариев ко всем инфосистемам
	if (to_int($_REQUEST['all_comments_all_systems']))
	{
		$param['title'] = $GLOBALS['MSG_information_systems']['show_comments_all_systems_title'];
	}
	// Список всех комментариев к конкретной инфосистеме
	elseif (to_int($_REQUEST['all_comments_system']))
	{
		$row_information_system = $InformationSystem->GetInformationSystem($information_system_id);
		$param['title'] = sprintf($GLOBALS['MSG_information_systems']['show_comments_system_title'], $row_information_system['information_systems_name']);
	}
	//  Список комментариев к конкретному информационному элементу
	else
	{
		$row_information_item = $InformationSystem->GetInformationSystemItem($information_item_id);
		$param['title'] = sprintf($GLOBALS['MSG_information_systems']['show_comments_title'],  $row_information_item['information_items_name']);
	}

	// Вычисляемое поле
	$param['field_params'][0]['comment_fio']['admin_forms_field_type'] = 10; 
	$param['field_params'][0]['comment_fio']['callback_function'] = 'callback_function_comment_fio';

	function callback_function_comment_fio($field_value, $value, $row)
	{
		// Если указан ID пользователя и есть модуль "Пользователи сайта"
		if (!empty($row['site_users_id']) && class_exists('SiteUsers'))
		{
			$SiteUsers = & singleton('SiteUsers');
			$site_user_row = $SiteUsers->GetSiteUser($row['site_users_id']);

			if ($site_user_row)
			{
				?><img src="/admin/images/new_window.gif" /> <a href="<?php echo "/admin/Site_users/Site_users.php?admin_forms_id=30&operation=edit_user&check_0_{$row['site_users_id']}=1"?>" target="_blank"><?php echo htmlspecialchars($site_user_row['site_users_login'])?></a><?php
			}
		}
		else
		{
			// Просто имя автора
			echo htmlspecialchars($value);
		}
	}
	
	$param['field_params'][0]['view']['callback_function'] = 'callback_function_show_item';
	
	function callback_function_show_item($field_value, $value, $row)
	{
		$InformationSystem = & singleton('InformationSystem');
		
		// Получаем данные об ИС
		$infsys_row = $InformationSystem->GetInformationSystem($row['information_systems_id']);
		
		if ($infsys_row)
		{
			$site = & singleton('site');
			$current_alias = $site->GetCurrentAlias($infsys_row['site_id']);
		
			$Structure = & singleton('Structure');
			
			// Информацию о пути к инфосистеме получаем по идентификатору узла структуры, с которым связана инфосистема
			$url = $Structure->GetStructurePath($infsys_row['structure_id'], 0);

			if ($url != '/')
			{
				$url = '/' . $url;
			}

			?><a href="<?php echo 'http://' . $current_alias . $url . $InformationSystem->GetPathItem($row['information_items_id'], '')?>" target="_blank"><img src="/admin/images/comment_view.gif" /></a><?php
			
		}
	}
	
	// Вычисляемое поле
	$param['field_params'][0]['comment_text']['admin_forms_field_type'] = 10; 
	$param['field_params'][0]['comment_text']['callback_function'] = 'callback_function_comment_text';

	function callback_function_comment_text($field_value, $value, $row)
	{
		$value = trim($value);
		$url = & singleton('url');

		$value = strip_tags(html_entity_decode($value, ENT_COMPAT, 'UTF-8'));

		if (strlen($value) != 0)
		{
			echo $url->link_len($value, 200); 
		}
		else
		{
			?>&nbsp;<?php 
		}
	}

	return $param;
}

// Обработчик события "Редактировать" комментария к информационному элементу
function edit_comment(&$param)
{
	ob_start();

	$information_system = & singleton('InformationSystem');

	$information_groups_parent_id = to_int($_REQUEST['information_groups_parent_id']);
	$information_system_id = to_int($_REQUEST['information_system_id']);

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

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

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

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

					if (isset($_REQUEST['all_comments_system']) && $_REQUEST['all_comments_system'] == 1 || isset($_REQUEST['all_comments_all_systems']) && $_REQUEST['all_comments_all_systems'] == 1)
					{
						$row_comment = $information_system->GetComment($information_comment_id);

						$information_item_id = $row_comment['information_items_id'];
					}
					else
					{
						$information_item_id = to_int($_REQUEST['information_item_id']);
					}

					include(CMS_FOLDER . 'admin/InformationSystems/action/form_edit_add_comments.php');

					$row_information_item = $InformationSystem->GetInformationSystemItem($information_item_id);

					$item_name = $row_information_item['information_items_name'];

					$param['title'] = $information_comment_id == 0 ? $GLOBALS['MSG_information_systems']['comment_add_form_title'] : $GLOBALS['MSG_information_systems']['comment_edit_form_title'] . ' "' . $item_name . '"';
				}
				else
				{
					$flag_success = false;
					$user_access->MessageOnlyOwn();
					$param['error'] = ob_get_clean();
					return ;
				}
			}
		}
	}

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


// Оработчик события "Удалить" комментария к информационному элементу
function delete_comment(&$param)
{
	ob_start();

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

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

		$count = 0;

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

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

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

					if ($user_access->IssetUserAccessForObject($object_user_id))
					{
						if (!$InformationSystem->del_comment($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_information_systems']['delete_comment_success']);
				}
				else
				{
					show_message($GLOBALS['MSG_information_systems']['delete_comments_success']);
				}
			}
			else
			{
				show_error_message($GLOBALS['MSG_information_systems']['delete_comments_error']);
			}
		}
	}
	$error = ob_get_clean();

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


// Обработчик события "Копировать" комментария к информационному элементу
function copy_comment(&$param)
{
	ob_start();

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

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

		$count = 0;

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

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

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

					if ($user_access->IssetUserAccessForObject($object_user_id))
					{
						if (!$InformationSystem->CopyComment($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_information_systems']['copy_comment_success']);
				}
				else
				{
					show_message($GLOBALS['MSG_information_systems']['copy_comments_success']);
				}
			}
			else
			{
				show_error_message($GLOBALS['MSG_information_systems']['copy_comments_error']);
			}
		}
	}
	$error = ob_get_clean();

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

// Обработчик изменения статуса активности комментария к информационному элементу
function change_comment_status(&$param)
{
	ob_start();

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

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

		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_row = $InformationSystem->GetComment($key);

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

					if ($user_access->IssetUserAccessForObject($object_user_id))
					{
						// Выбираем данные о комментарии к информационному элементу
						$comment_id = intval($key);

						$res = $InformationSystem->GetComment($comment_id);

						$comment_parent_id = to_int($res['comment_parent_id']);
						$information_item_id = to_int($res['information_items_id']);
						$comment_fio = to_str($res['comment_fio']);
						$comment_email = to_str($res['comment_email']);
						$comment_text = to_str($res['comment_text']);
						$comment_status = 1 - to_int($res['comment_status']);
						$comment_subject = to_str($res['comment_subject']);
						$comment_ip = to_str($res['comment_ip']);
						$comment_date = to_str($res['comment_date']);
						$comment_grade = to_int($res['comment_grade']);
						$user_id = to_int($res['users_id']);
						$site_users_id = to_int($res['site_users_id']);

						$InformationSystem->AddComment(array('comment_id' => $comment_id,
						'comment_parent_id' => $comment_parent_id,
						'information_items_id' => $information_item_id,
						'comment_fio' => $comment_fio,
						'comment_email' => $comment_email,
						'comment_text' => $comment_text,
						'comment_status' => $comment_status,
						'comment_subject' => $comment_subject,
						'comment_ip' => $comment_ip,
						'comment_date' => $comment_date,
						'comment_grade' => $comment_grade,
						'site_users_id' => $site_users_id,
						'users_id' => $user_id));
					}
					else
					{
						$user_access->MessageOnlyOwn();
						$param['error'] = ob_get_clean();
						return ;
					}
				}
			}
		}
	}
	$error = ob_get_clean();

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