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

	$documents_dir_parent_id = to_int($_REQUEST['documents_dir_parent_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);
		}
	}

	$new_path_array[0]['name'] = $GLOBALS['MSG_documents']['documents_title'];

	if ($documents_dir_parent_id == 0)
	{
		unset($new_path_array[0]);
	}

	$site_id = CURRENT_SITE;

	$param['path_array'] = $new_path_array;

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

	// Количество каталогов
	$count_groups = "SELECT count(documents_dir_id) as count
	FROM `documents_dir_table`
	WHERE `documents_dir_parent_id` = '$documents_dir_parent_id' 
	AND `site_id`= '$site_id'
	{FILTER_STRING}";

	// Запрос для выборки документов.
	$param['data'][] = "SELECT documents_table.documents_id AS key_field,
	documents_name AS name, templates_table.templates_name, documents_table.site_id, documents_table.site_id
	FROM `documents_table` 
	LEFT JOIN documents_version_table ON documents_version_table.documents_id = documents_table.documents_id
	LEFT JOIN templates_table ON templates_table.templates_id = documents_version_table.templates_id
	WHERE `documents_dir_id` = '$documents_dir_parent_id' AND documents_version_table.documents_version_current = '1' 
	AND documents_table.site_id='$site_id'
 	{FILTER_STRING} {ORDER_STRING} {LIMIT}";

	// Посчитаем общее число документов.
	$count = "SELECT count(documents_table.documents_id) as count FROM `documents_table`
	LEFT JOIN documents_version_table ON documents_version_table.documents_id = documents_table.documents_id
	LEFT JOIN templates_table ON templates_table.templates_id = documents_version_table.templates_id
	WHERE `documents_dir_id` = '$documents_dir_parent_id' AND documents_version_table.documents_version_current = '1' AND documents_table.site_id='$site_id'
	{FILTER_STRING}";

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

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

	// Добавить документ
	$sub_menu = array();
	$sub_menu[$p = 0]['name'] = $GLOBALS['MSG_documents']['documents_add_link'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('edit_document', 'check_1_0', 9, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('edit_document', 'check_1_0', 9, 0, 0);

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

	// Удалить нетекущии версии документов
	$sub_menu[++$p]['name'] = $GLOBALS['MSG_documents']['documents_delete_version_link'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('delete_old_document_versions_from_dir', "check_0_$documents_dir_parent_id", 9, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('delete_old_document_versions_from_dir', "check_0_$documents_dir_parent_id", 9, 0, 0);

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

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

	// Папки
	$menu[++$k]['name'] = $GLOBALS['MSG_documents']['folders'];
	$menu[$k]['link'] = '';

	// Добавить папку
	$sub_menu = array();
	$sub_menu[++$p]['name'] = $GLOBALS['MSG_documents']['documents_add_dir_link'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('edit_document', 'check_0_0', 9, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('edit_document', 'check_0_0', 9, 0, 0);
	$sub_menu[$p]['icon'] = '/admin/images/folder_add.gif';
	// Добавляем подэлементы.
	$menu[$k]['sub_items'] = $sub_menu;

	// Статусы документов
	$menu[++$k]['name'] = $GLOBALS['MSG_documents']['documents_status_top_menu'];
	$menu[$k]['link'] = '';
	$menu[$k]['icon'] = '';

	// Список статусов
	$sub_menu = array();
	$sub_menu[++$p]['name'] = $GLOBALS['MSG_documents']['documents_status_sub_menu'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallDoLoadAjax('/admin/documents/documents.php', '', 124, 'load_data');
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallDoLoadAjax('/admin/documents/documents.php', '', 124, 'load_data');
	$sub_menu[$p]['icon'] = '/admin/images/page_gear.gif';
	// Добавляем подэлементы.
	$menu[$k]['sub_items'] = $sub_menu;

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

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

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

	$param['field_params'][0]['name']['admin_forms_field_link'] = $admin_forms->GetHtmlCallDoLoadAjax($admin_forms->AAction, "&documents_dir_parent_id={key_field}", 9, 'load_data');
	$param['field_params'][0]['name']['admin_forms_field_onclick'] = $admin_forms->GetOnClickCallDoLoadAjax($admin_forms->AAction, "&documents_dir_parent_id={key_field}", 9, 'load_data');

	$param['field_params'][1]['name']['admin_forms_field_link'] = $admin_forms->GetHtmlCallDoLoadAjax($admin_forms->AAction, "&document_id={key_field}&documents_dir_parent_id=$documents_dir_parent_id", 115, 'load_data');
	$param['field_params'][1]['name']['admin_forms_field_onclick'] = $admin_forms->GetOnClickCallDoLoadAjax($admin_forms->AAction, "&document_id={key_field}&documents_dir_parent_id=$documents_dir_parent_id", 115, 'load_data');

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

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

	// Заголовок формы
	$param['title'] = $GLOBALS['MSG_documents']['documents_title'];

	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(&$param)
{
	ob_start();

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

	$documents = new documents();

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

				// Определяем информацию об объекте
				$object_res = $documents->select_documents_dir($document_dir_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))
				{
					include(CMS_FOLDER . 'admin/documents/action/form_edit_add_documents_dir.php');

					// Устанавливаем <title> для страницы
					$param['title'] = $document_dir_id == 0
					? $GLOBALS['MSG_documents']['documents_add_dir_form_title']
					: $GLOBALS['MSG_documents']['documents_edit_dir_form_title'];

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

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

				// Определяем информацию об объекте
				$object_res = $documents->select_documents($document_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))
				{
					include(CMS_FOLDER . 'admin/documents/action/form_edit_add_documents.php');

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

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

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

	return true;
}

/**
 * Удаление документа
 */
function delete_document(&$param)
{
	ob_start();

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

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

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

					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->del_documents_dir($key))
						{
							$count_deleted_document_dir++;

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

						$flag_delete_document_dir_success = false;
					}
				}

				if ($flag_delete_document_dir_success)
				{
					if ($count_deleted_document_dir == 1)
					{
						show_message($GLOBALS['MSG_documents']['documents_delete_dir_success']);
					}
					elseif ($count_deleted_document_dir > 1)
					{
						show_message($GLOBALS['MSG_documents']['documents_delete_dirs_success']);
					}
				}
				/*else // Ошибка удаления раздела документов
				{
				show_error_message($GLOBALS['MSG_documents']['documents_delete_dir_error']);
				}*/

			}

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

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

					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->del_documents($key))
						{
							$flag_delete_document_success = false;
						}
						else
						{
							$count_deleted_document++;

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

						$flag_delete_document_success = false;
					}
				}

				// Если была ошибка удаления документа - выведем одну ошибку
				if ($flag_delete_document_success)
				{
					if ($count_deleted_document == 1)
					{
						show_message($GLOBALS['MSG_documents']['document_delete_message_success']);
					}
					elseif ($count_deleted_document > 1)
					{
						show_message($GLOBALS['MSG_documents']['documents_delete_message_success']);
					}
				}
				/*else
				{
				show_error_message($GLOBALS['MSG_documents']['document_delete_message_error']);
				}*/
			}
		}
	}
	$param['error'] = ob_get_clean();
}

// Копирование документа.
function copy_document(&$param)
{
	ob_start();

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

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

		$count_copy_documents = 0;

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

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

					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->CopyDocuments($key))
						{
							$count_copy_documents++;

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

						$flag_copy_document_success = false;
					}
				}

				// Документ(ы) успешно скопирован(ы)
				if ($flag_copy_document_success)
				{
					if ($count_copy_documents == 1)
					{
						show_message($GLOBALS['MSG_documents']['document_copy_success_message']);
					}
					elseif ($count_copy_documents > 1)
					{
						show_message($GLOBALS['MSG_documents']['documents_copy_success_message']);
					}
				}
				else
				{
				show_error_message($GLOBALS['MSG_documents']['document_copy_error_message']);
				}
			}
		}
	}
	$param['error'] = ob_get_clean();
}

// Удаление раздела документов
function delete_dir_document(&$param)
{
	ob_start();

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

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

		$documents = new documents();

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

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

					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->del_documents_dir($key))
						{
							$count_deleted_document_dir++;

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

						$flag_delete_document_dir_success = false;
					}
				}
			}

			if ($flag_delete_document_dir_success)
			{
				if ($count_deleted_document_dir == 1)
				{
					show_message($GLOBALS['MSG_documents']['documents_delete_dir_success']);
				}
				elseif ($count_deleted_document_dir > 1)
				{
					show_message($GLOBALS['MSG_documents']['documents_delete_dirs_success']);
				}
			}
			/*else // Ошибка удаления раздела документов
			{
			show_error_message($GLOBALS['MSG_documents']['documents_delete_dir_error']);
			}*/
		}
	}

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

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

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

		$kernel->ReadMode();
	}
	else
	{
		$DataBase = & singleton('DataBase');
		$documents = & singleton('documents');
		$documents_dir_id = to_int($_REQUEST["documents_dir_parent_id"]);

		function DeleteOldDocuments($documents_dir_id)
		{
			$documents = & singleton('documents');
			
			// Выбираем все документы данного раздела
			$result_documents_dir = $documents->GetDocumentsFromDir($documents_dir_id);
			$count_documents_dir = mysql_num_rows($result_documents_dir);

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

			// В цикле удаляем версии и файлы версиий для документов
			for ($i_documents = 0; $i_documents < $count_documents_dir; $i_documents++)
			{
				$row_document = mysql_fetch_assoc($result_documents_dir);
	
				if ($row_document)
				{
					$object_user_id = $row_document['users_id'];
				}
				else
				{
					$object_user_id = 0;
				}
	
				if ($user_access->IssetUserAccessForObject($object_user_id))
				{
					// Удаляем из базы записи о версиях
					$documents->delete_old_version($row_document['documents_id']);
				}
				else
				{
					$user_access->MessageOnlyOwn();
				}
			}
			
			// Выбираем все поддиректории
			$documents->mas_documents_dir = array();
			$aChildrenDirs = $documents->get_documents_dir($documents_dir_id, '');
	
			if (count($aChildrenDirs) > 0 && is_array($aChildrenDirs))
			{
				foreach($aChildrenDirs as $value)
				{
					// Удаляем для дочерних разделов
					DeleteOldDocuments($value['documents_dir_id']);
				}
			}
		}
		
		// Удаляем для текущего раздела
		DeleteOldDocuments($documents_dir_id);

		show_message ($GLOBALS['MSG_documents']['documents_delete_old_version_from_dir_message']);
	}

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