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

	$documents_dir_parent_id = to_int($_REQUEST['documents_dir_parent_id']);
	$document_id = to_int($_REQUEST['document_id']);

	$documents = new documents();

	// Строим хлебные крошки.
	$path_array = $documents->GetDocumentsPathArray($documents_dir_parent_id);

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

	if ($path_array)
	{
		foreach ($path_array as $key => $value)
		{
			$new_path_array[] = array (
			'link' => $admin_forms->GetHtmlCallDoLoadAjax($admin_forms->AAction, "&documents_dir_parent_id={$value}", 9, 'load_data'),
			'onclick' => $admin_forms->GetOnClickCallDoLoadAjax($admin_forms->AAction, "&documents_dir_parent_id={$value}", 9, 'load_data'),
			'name' => $key);
		}
	}

	$document_info = $documents->GetDocument($document_id);

	$new_path_array[] = array (
	'link' => $admin_forms->GetHtmlCallDoLoadAjax('/admin/documents/documents.php', "&document_id={$document_id}&documents_dir_parent_id={$documents_dir_parent_id}", 115, 'load_data'),
	'onclick' => $admin_forms->GetOnClickCallDoLoadAjax('/admin/documents/documents.php', "&document_id={$document_id}&documents_dir_parent_id={$documents_dir_parent_id}", 115, 'load_data'),
	'name' =>$GLOBALS['MSG_documents']['documents_version_link'].' "'.htmlspecialchars($document_info['documents_name']).'"');

	$param['path_array'] = $new_path_array;

	// Запрос для выборки каталогов документов.
	$param['data'][] = "SELECT * FROM documents_version_table AS doc
							    LEFT JOIN users_table AS us ON doc.`users_id` = us.`users_id` 
							    LEFT JOIN templates_table AS temp ON doc.`templates_id` = temp.`templates_id`
					 		    WHERE doc.documents_id = '$document_id'  
					 		    {FILTER_STRING} {ORDER_STRING} {LIMIT}";

	// Посчитаем общее число документов.
	$count = "SELECT count(documents_version_id) AS count FROM documents_version_table AS doc
							    LEFT JOIN users_table AS us ON doc.`users_id` = us.`users_id` 
							    LEFT JOIN templates_table AS temp ON doc.`templates_id` = temp.`templates_id`
					 		    WHERE doc.documents_id = '$document_id'  
					 		    {FILTER_STRING}";

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

	// Документы
	$menu[$k = 0]['name'] = $GLOBALS['MSG_documents']['version_add_top_menu'];
	$menu[$k]['link'] = '';
	$menu[$k]['icon'] = '';

	// Добавить документ
	$sub_menu = array();
	$sub_menu[$p = 0]['name'] = $GLOBALS['MSG_documents']['version_add_sub_menu'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('edit_document_version', 'check_0_0', 115, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('edit_document_version', 'check_0_0', 115, 0, 0);
	$sub_menu[$p]['icon'] = '/admin/images/page_add.gif';

	// Удалить нетекущие версии
	$sub_menu[++$p]['name'] = $GLOBALS['MSG_documents']['documents_delete_old_version_link'];

	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('delete_old_document_versions', 'check_1_0', 115, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('delete_old_document_versions', 'check_1_0', 115, 0, 0);

	$sub_menu[$p]['icon'] = '/admin/images/page_delete.gif';

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

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

	$param['total_count'][] = $count;

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

	// Заголовок формы
	$param['title'] = $GLOBALS['MSG_documents']['documents_version_link'].' "'.htmlspecialchars($document_info['documents_name']).'"';

	return $param;
}

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

// Добавление/редактирование версии документа.
function edit_document_version(&$param)
{
	ob_start();

	$documents = new documents();
	$document_id = to_int($_REQUEST['document_id']);

	if (isset($param['data']) && isset($param['data'][0]))
	{
		$document_info = $documents->GetDocument($document_id);

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

			// Определяем информацию об объекте
			$object_res = $documents->select_version($document_id, $document_version_id, 0);

			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;
			}

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

				// Устанавливаем <title> для страницы
				$param['title'] = ($document_version_id == 0)
				? $GLOBALS['MSG_documents']['documents_version_add_form_title']
				: $GLOBALS['MSG_documents']['documents_version_edit_form_title'];

				$param['title'] .= ' "' . $document_info['documents_name'] . '"';

				break;

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

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

	return true;
}

// Изменение текущей версии документа
function change_current_version(&$param)
{
	ob_start();

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

		$kernel->ReadMode();
	}
	else
	{
		$documents = new documents();
		$documents_id = to_int($_REQUEST['document_id']);

		if (isset($param['data'][0]))
		{

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

				// Определяем информацию об объекте
				$object_res = $documents->select_version($documents_id, $key, 0);

				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;
				}

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

					$documents->current_version($documents_id, $key);

					break;
				}
				else
				{
					$user_access->MessageOnlyOwn();

					$flag_delete_document_version = false;
				}
			}
		}
	}

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



// Удаление нетекщих версий документа
function delete_old_document_versions(&$param)
{
	ob_start();

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

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

		$documents_id = to_int($_REQUEST['document_id']);

		// Определяем режим доступа пользователя и принадлежит ли объект пользователю
		$user_access = new user_access();

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

		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;
		}

		if ($user_access->IssetUserAccessForObject($object_user_id))
		{
			if ($documents->delete_old_version($documents_id))
			{
				show_message($GLOBALS['MSG_documents']['documents_version_delete_old_message_success']);
			}
			else
			{
				show_error_message($GLOBALS['MSG_documents']['documents_version_delete_old_message_error']);
			}
		}
		else
		{
			$user_access->MessageOnlyOwn();
		}
	}

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

// Удаление версии документа
function delete_document_version(&$param)
{
	ob_start();
	if (defined('READ_ONLY') && READ_ONLY)
	{
		$kernel = & singleton('kernel');

		$kernel->ReadMode();
	}
	else
	{
		$count_deleted_document_versions = 0;

		$documents = new documents();

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

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

					// Определяем информацию об объекте
					$object_res = $documents->select_version($document_id, $documents_version_id, 0);

					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;
					}

					if ($user_access->IssetUserAccessForObject($object_user_id))
					{
						if ($documents->delete_version($documents_version_id))
						{
							$count_deleted_document_versions++;

							$flag_delete_document_version = true;
						}
						else
						{
							// Определим, является ли удаляемая версия основной
							$version_row = $documents->GetDocumentVersion($documents_version_id);

							// Версия текущая?
							if ($version_row && $version_row['documents_version_current'])
							{
								$flag_delete_document_version_is_current = true;
								
								$flag_delete_document_version = true;
							}
							else
							{
								$flag_delete_document_version = false;
							}
						}
					}
					else
					{
						$user_access->MessageOnlyOwn();

						$flag_delete_document_version = false;
					}
				}
			}

			if ($flag_delete_document_version)
			{
				if ($count_deleted_document_versions == 1)
				{
					show_message($GLOBALS['MSG_documents']['documents_version_delete_message']);
				}
				elseif ($count_deleted_document_versions > 1)
				{
					show_message($GLOBALS['MSG_documents']['documents_versions_delete_message']);
				}
			}
			/*else // Ошибка удаления версии документа
			{
			show_error_message($GLOBALS['MSG_documents']['documents_version_delete_message_error']);
			}*/

			// Удаляемая версия была текущей
			if (isset($flag_delete_document_version_is_current) && $flag_delete_document_version_is_current)
			{
				show_error_message($GLOBALS['MSG_documents']['documents_version_delete_error']);
			}
		}
	}
	$param['error'] = ob_get_clean();
}


?>