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

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

	$param['data'][] = "SELECT * FROM modules_table WHERE 1
	{FILTER_STRING} {ORDER_STRING} {LIMIT}";

	// Число нужных записей.
	$count = "SELECT count(modules_id) as count FROM modules_table WHERE (1)
	{FILTER_STRING}";

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

	$p = 0;
	$sub_menu = array();
	$sub_menu[$p]['name'] = $GLOBALS['MSG_modules']['modules_add_link'];
	$sub_menu[$p]['link'] = $admin_forms->GetHtmlCallTrigerSingleAction('edit_module', 'check_0_0', 40, 0, 0);
	$sub_menu[$p]['onclick'] = $admin_forms->GetOnClickCallTrigerSingleAction('edit_module', 'check_0_0', 40, 0, 0);
	$sub_menu[$p]['icon'] = '/admin/images/module_add.gif';
	// Добавляем подэлементы.
	$menu[$k]['sub_items'] = $sub_menu;

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

	$param['total_count'][] = $count;
	$param['current_page'] = $page;
	$param['on_page'] = $on_page;
	$param['menus'] = $menu_array;
	$param['title'] = $GLOBALS['MSG_modules']['modules_title_list'];

	// Перекрываем настойки для поля - указываем имя функци обратного вызова для версии модуля
	$param['field_params'][0]['modules_version']['callback_function'] = 'callback_function_modules_version';

	// Перекрываем настойки для поля - указываем имя функци обратного вызова для даты модуля
	$param['field_params'][0]['modules_date']['callback_function'] = 'callback_function_modules_date';

	// Функция обратного вызова для версии модуля
	function callback_function_modules_version($field_value, $value, $row)
	{
		// Версия модуля получается из $GLOBALS['gModulesVersionDate']
		if (isset($GLOBALS['gModulesVersionDate'][to_str($row['modules_path'])]['version']))
		{
			echo $GLOBALS['gModulesVersionDate'][to_str($row['modules_path'])]['version'];
		}
		else
		{
			?>&mdash;<?php
		}
	}

	// Функция обратного вызова для даты модуля
	function callback_function_modules_date($field_value, $value, $row)
	{
		// Версия модуля получается из $GLOBALS['gModulesVersionDate']
		if (isset($GLOBALS['gModulesVersionDate'][to_str($row['modules_path'])]['date']))
		{
			echo $GLOBALS['gModulesVersionDate'][to_str($row['modules_path'])]['date'];
		}
		else
		{
			?>&mdash;<?php
		}
	}

	return $param;
}

// Удаление модуля
function delete_modules(&$param)
{
	ob_start();

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

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

		$count = 0;

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

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

						$modules_path = $res['modules_path'];

						if (class_exists($modules_path))
						{
							$objectModule = new $modules_path();
							
							if (method_exists($objectModule, 'UnInstall'))
							{
								// Вызываем метод при удалении модуля
								$objectModule->UnInstall();
							}
						}
						
						if (!$modules->del_module($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_modules']['modules_delete_message']);
				}
				else
				{
					show_message($GLOBALS['MSG_modules']['modules_deletes_message']);
				}
			}
		}
	}

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

// Редактирование модуля
function edit_module(&$param)
{
	ob_start();

	$modules = & singleton('modules');

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

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

				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))
				{
					include(CMS_FOLDER . 'admin/modules/action/form_add_edit_modules.php');
				}
				else
				{
					$user_access->MessageOnlyOwn();
					$param['error'] = ob_get_clean();
					return ;
				}
			}
		}
	}

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

// Применить изменения
function apply_change(&$param)
{
	ob_start();

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

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

		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 = $modules->select_modules($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))
					{
						// Выбираем данные о модуле
						$res = $modules->GetModule($key);

						$modules_id = $res['modules_id'];
						$modules_name = $res['modules_name'];
						$modules_description = $res['modules_description'];
						$modules_status = $res['modules_status'];
						$modules_path = $res['modules_path'];
						$modules_order = to_int($row['modules_order']);

						$modules->insert_module(1, $modules_id, $modules_name, $modules_description, $modules_status, $modules_path, $modules_order);
					}
					else
					{
						$user_access->MessageOnlyOwn();
					}
				}
			}
		}
	}

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

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

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

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

		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 = $modules->GetModule($key);

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

					if ($user_access->IssetUserAccessForObject($object_user_id))
					{
						// Вызов метода модуля 
						
						// Выбираем данные о модуле
						$res = $modules->GetModule($key);

						$modules_id = $res['modules_id'];
						$modules_name = $res['modules_name'];
						$modules_description = $res['modules_description'];
						$modules_status = 1 - $res['modules_status'];
						$modules_path = $res['modules_path'];
						$modules_order = $res['modules_order'];

						// Если идет отключение модуля, 
						if ($modules_status == 0)
						{
							if (class_exists($modules_path))
							{
								$objectModule = new $modules_path();
								
								if (method_exists($objectModule, 'DisableModule'))
								{
									// Вызываем метод при отключении модуль
									$objectModule->DisableModule();
								}
							}
						}
						
						if ($modules->insert_module(1, $modules_id, $modules_name, $modules_description, $modules_status, $modules_path, $modules_order))
						{
							if ($modules_status)
							{
								show_message($modules_name.': '.$GLOBALS['MSG_modules']['modules_active_set']);
							}
							else
							{
								show_message($modules_name.': '.$GLOBALS['MSG_modules']['modules_active_unset']);
							}
						}
					}
					else
					{
						$user_access->MessageOnlyOwn();
					}

				}
			}
		}
	}

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

?>