<?php
/**
 * Система управления сайтом HostCMS v. 5.xx
 * Copyright © 2005-2010 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
 *
 * Ajax загрузчик формы списка пользователей, входящих в группу пользователей, связанную с информационной группой.
 * 
 * Файл: /admin/InformationSystems/action/load_information_group_site_users.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_groups_id = to_int($_REQUEST['information_group_id']);
	$information_groups_parent_id = to_int($_REQUEST['information_groups_parent_id']);
		
	$InformationSystem = & singleton('InformationSystem');
	$Sns = & singleton('Sns');
	$SiteUsers = & singleton ('SiteUsers');
			
	$information_group_info = $InformationSystem->GetInformationGroup($information_groups_id);
		
	$information_system_id = to_int($information_group_info['information_systems_id']);
	
	$sns_info = $Sns->GetSnsAssociatedInformationSystem($information_system_id);
	
	$sns_id = to_int($sns_info['sns_id']);
	
	// Строим "хлебные крошки"
	$path_array = $InformationSystem->GetInformationGroupsPathArray($information_groups_id, $information_system_id);

	$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']);

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

    // Получаем информацию о последнем элементе массива, содержащего путь 	
	$path_array_end = end($path_array);
	
	// Удаляем последний элемент из пути для удаления ссылки на информационную группу
	unset($path_array[$path_array_end['information_groups_id']]);
	
	// Преобразуем идентификаторы групп в ссылки на группы.
	if ($path_array)
	{
		foreach ($path_array as $information_groups_parent_id => $value)
		{
			$new_path_array[] = array (
			'link' => $admin_forms->GetHtmlCallDoLoadAjax('/admin/InformationSystems/InformationSystems.php', "&action=show_information_groups&information_groups_parent_id={$information_groups_parent_id}&information_system_id={$information_system_id}", 12, 'load_data'),
			'onclick' => $admin_forms->GetOnClickCallDoLoadAjax('/admin/InformationSystems/InformationSystems.php', "&action=show_information_groups&information_groups_parent_id={$information_groups_parent_id}&information_system_id={$information_system_id}", 12, 'load_data'),
			'name' => $value['information_groups_name']);
		}
	}

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

	// Получаем название группы пользователей
	$site_users_group_info = $SiteUsers->GetSiteUsersGroup($site_users_group_id);

	$title = sprintf($GLOBALS['MSG_information_systems']['site_users_list_information_group_title'], $site_users_group_info['site_users_group_name'], to_str($information_group_info['information_groups_name']));

	$new_path_array[] = array (
			'link' => $admin_forms->GetHtmlCallDoLoadAjax('/admin/InformationSystems/InformationSystems.php', "&action=show_information_groups&information_groups_parent_id={$information_groups_parent_id}&information_group_id={$information_groups_id}&information_system_id={$information_system_id}", 174, 'load_data'),
			'onclick' => $admin_forms->GetOnClickCallDoLoadAjax('/admin/InformationSystems/InformationSystems.php', "&action=show_information_groups&information_groups_parent_id={$information_groups_parent_id}&information_group_id={$information_groups_id}&information_system_id={$information_system_id}", 174, 'load_data'),
			'name' => sprintf($GLOBALS['MSG_information_systems']['site_users_groups_information_group_title'], to_str($information_group_info['information_groups_name'])));
		
	$new_path_array[] = array (
			'link' => $admin_forms->GetHtmlCallDoLoadAjax('/admin/InformationSystems/InformationSystems.php', "&information_system_id={$information_system_id}&information_groups_parent_id={$information_groups_parent_id}&information_group_id={$information_groups_id}&site_users_group_id={$site_users_group_id}", 175, 'load_data'),
			'onclick' => $admin_forms->GetOnClickCallDoLoadAjax('/admin/InformationSystems/InformationSystems.php', "&information_system_id={$information_system_id}&information_groups_parent_id={$information_groups_parent_id}&information_group_id={$information_groups_id}&site_users_group_id={$site_users_group_id}", 175, 'load_data'),
			'name' => $title);		

	$param['path_array'] = $new_path_array;
	
	// Выборка нужных записей.
	$param['data'][] = "SELECT site_users_table. *,site_users_table.site_users_id AS key_field, site_users_group_list_table.site_users_group_list_value " .
					   " FROM site_users_table LEFT JOIN site_users_group_list_table " .
					   " ON (site_users_table.site_users_id = site_users_group_list_table.site_users_id " .
					   " AND site_users_group_list_table.information_groups_id = $information_groups_id " .
					   " AND site_users_group_list_table.site_users_group_id = $site_users_group_id)".
					   " WHERE 1 {FILTER_STRING} {ORDER_STRING} {LIMIT}";

	// Число нужных записей.
	$count = "SELECT count(site_users_table.site_users_id)" .
					   " FROM site_users_table LEFT JOIN site_users_group_list_table " .
					   " ON (site_users_table.site_users_id = site_users_group_list_table.site_users_id " .
					   " AND site_users_group_list_table.information_groups_id = $information_groups_id " .
					   " AND site_users_group_list_table.site_users_group_id = $site_users_group_id)".
					   " WHERE 1 {FILTER_STRING}";
	
	$param['total_count'][] = $count;
	$param['current_page'] = $page;
	$param['on_page'] = $on_page;
			
	// Заголовок формы
	$param['title'] = $title;
	
	//<input id="id_check_0_457_fv_830" type="checkbox" onclick="DoModification('id_check_0_457'); RowHighlight('row_0_457');" name="check_0_457_fv_830"/>
	$param['field_params'][0][830]['callback_function'] = 'callback_function_site_user_in_group';

	// Функция обратного вызова для определения связи пользователя с группой пользователей информационной группы
	function callback_function_site_user_in_group($field_value, $value, $row)
	{	
		$InformationSystem = & singleton('InformationSystem');
										
		$param_site_user_group = array();
		$param_site_user_group['site_user_id'] = $row['site_users_id'];
		$param_site_user_group['site_users_group_id'] = to_int($_REQUEST['site_users_group_id']);
		$param_site_user_group['information_group_id'] = to_int($_REQUEST['information_group_id']);
	 
		$access_user_group = $InformationSystem->IssetSiteUserInUsersGroupInformationGroup($param_site_user_group);
		
		// Текущая группа входит в список групп пользователей, в которые входит пользователь
		$checked = $access_user_group ? ' checked="" ' : '';			 
							
		?><input type="checkbox" <?php echo $checked; ?>	name="check_0_<?php echo $row['key_field']; ?>_fv_830" onclick="DoModification('id_check_0_<?php echo $row['key_field'];?>'); RowHighlight('row_0_<?php echo $row['key_field'];?>');" />
		<?php
	}
	
	// Доп. параметры
	$admin_forms->AAdditionalParams = "&information_system_id={$information_system_id}&information_groups_parent_id={$information_groups_parent_id}&information_group_id={$information_groups_id}&site_users_group_id={$site_users_group_id}";
				
	return $param;
}

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

	switch ($dataset_id)
	{
		case 0: // Список информационных групп.
		{
			if ($field_name == 'key_field')
			{
				$field_name = 'site_users_table.site_users_id';
			}			
			break;
		}
		
	}
	return true;
}

// Обработчик события "Применить"
function apply_site_users_information_group(&$param)
{
	ob_start();

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

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

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

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

				if ($object_row)
				{
					$object_user_id = $object_row['users_id'];
				}
				else
				{
					$object_user_id = 0;
				}
				
				if ($user_access->IssetUserAccessForObject($object_user_id))
				{															
					$param_change_associate = array();
					
					$param_change_associate['site_user_id'] = $key;					
	 				$param_change_associate['site_users_group_id'] = $site_users_group_id;	 				 
	 				$param_change_associate['information_group_id'] = $information_groups_id;
	 				$param_change_associate['associate'] = intval($value['site_users_group_list_value']);
			
					if ($InformationSystem->ChangeAssociateSiteUserWithUsersGroupInformationGroup($param_change_associate))
					{	
							
						$flag_change_associate_site_users_success = true;
						$count_change_associate_site_users++;
					}
					else
					{						
						$flag_change_associate_site_users_success = false;
					}
				}
				else
				{
					$user_access->MessageOnlyOwn();
					$flag_change_associate_site_users_success = false;
				}
			}

			// Связь пользователя с группой пользователей информационной группы успешно изменена			
			if ($flag_change_associate_site_users_success)
			{
				if ($count_change_associate_site_users == 1)
				{
					show_message($GLOBALS['MSG_information_systems']['change_associate_site_users_message']);
				}
				elseif ($count_change_associate_site_users > 1)
				{
					show_message($GLOBALS['MSG_information_systems']['change_associates_site_users_message']);
				}
			}
			else
			{
				show_error_message($GLOBALS['MSG_information_systems']['change_associates_site_users_error_message']);
			}
		}
	}
	
	$param['error'] = ob_get_clean();
}
?>