ФорумФорум  КалендарьКалендарь  ЧаВоЧаВо  ПоискПоиск  ПользователиПользователи  ГруппыГруппы  РегистрацияРегистрация  Вход  
Поиск
 
 

Результаты :
 
Rechercher Расширенный поиск
Последние темы
» Подтверждение о прочтении
автор worker8281 Сб Дек 27, 2014 1:05 pm

» Проблема с сессией
автор Murphy Ср Дек 03, 2014 5:20 pm

» Нужнга настройка SugarCRM
автор iliandr777 Пн Ноя 10, 2014 2:28 pm

» Отображение записей (адресатов) в списках адресатов
автор FatherMother Пн Авг 25, 2014 12:21 pm

» Нужен совет. Модуль с множеством одинаковых субпанелей.
автор Павел Пн Июл 28, 2014 12:55 pm

» Нужна помощь с опенкартом
автор manux86 Вс Фев 02, 2014 10:45 am

» вопрос работы насчет СУГАР на сервере
автор Meiir2 Пт Янв 31, 2014 8:46 am

» Интеграция с Google календарем от компании "Куб Три"
автор Dmitry.bereza Ср Авг 14, 2013 10:29 am

» настройка воронки продаж
автор EkaterinaGolovina Чт Июн 13, 2013 12:14 pm

Октябрь 2018
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
293031    
КалендарьКалендарь
Баннеры
Яндекс цитирования статистика
Поддержка проекта
41001634550309

Поделиться | 
 

 Установление ограничения на доступ к полям формы, часть II

Перейти вниз 
АвторСообщение
Admin
Admin


Сообщения : 74
Очки : 71
Дата регистрации : 2010-08-23

СообщениеТема: Установление ограничения на доступ к полям формы, часть II   Ср Сен 08, 2010 6:57 pm

Все действия будут приведены на примере созданного мною модуля, но они так же и справедливы для уже существующих. Модуль называется new_Lt, Вы в своих действиях просто заменяйте это название на нужное Вам.
Когда нам необходимо задать ограничение на редактирование поля типа dropdown, возможны 2 ситуации:

1. В теге select отображаемое занчение и значение option совпадают;
2. В теге select отображаемое занчение и значение option различны (Н-р: реальное значение - это id, а тоборажаемое - имя).

Отображаемое и реальные значения списка равны
1. В файле vardefs.php вставляем следующий код:

Код:

'status' =>
array (
'required' => false,
'name' => 'status',
'vname' => 'LBL_STATUS',
'type' => 'varchar',
'len' => 5,
'studio' => 'visible',
'function' => array('name'=>'GetHtmlstatus', 'returns'=>'html', 'include'=>'modules/new_Lt/new_LtRole.php'),
),


Тип поля, именно varchar, иначе шуга будет выводить пустой dropdown. Список сформируем позже.
2. Т.к. в предыдущем файле идет ссылка на функцию файла 'modules/new_Lt/new_LtRole.php', то создаем такой файл со следующим содержимым:

Код:

global $role_to_check;
$role_to_check = "top";  // Здесь роль, на которую будет проводится проверка
function GetHtmlstatus($focus, $field, $value, $view) {
   global $role_to_check;
   if (isset($_REQUEST['status'])) {
     $focus->status = $_REQUEST['status'];
   }
   global $current_user; // grab the $current_user object
   require_once("modules/ACLRoles/ACLRole.php");
   $acl_role_obj = new ACLRole();
   $user_roles = $acl_role_obj->getUserRoles($current_user->id);
   $user_in_role = FALSE;
   foreach ($user_roles as $role) {
     if ($role == $role_to_check) {
         $user_in_role = TRUE;
         break;
     }
   }
   if($view == 'EditView' || $view == 'MassUpdate') {
     if ($user_in_role) {
         global $app_list_strings; // нужно, чтобы drop down отобразился
         $html = '<select ';
         $html .=  'name="status">';
         // получаем dropdown поля status. Если форма редактирования, то выбраным по умолчанию будет значение, занесенное в базу
         $html .= get_select_options_with_id_separate_key($app_list_strings['status_letter'],  $app_list_strings['status_letter'],  $focus->status);
         $html .= '</select>';
     } // показываем стандартное поле
   else{
     //Здесь Ваш html
     $html = "Доступ закрыт";}
     return $html;
   }
   return $focus->status;
}


Обязательно global $app_list_strings. Чтобы функция видела список. Сам список создан через редактор комбобоксов.

3. Так как здесь показан пример над полем status, а оно является "родным" модулю, то вытаскивать его на формы не надо, оно и так там есть. Остается только произвести в админке repair модуля. Все, список готов.

Отображаемое и реальные значения списка не совпадают
В ситуации, когда у нас есть список пользователей, и юзеру надо показать имя (логин), а в базе хранить его id, первый случай ограничения прав на dropdown не подходит.
Например: есть запись. Мы подробно просматриваем её (DetailView). И в поле user_name видим id, а нам нужен логин. Для этого в файле модуля мы создадим функцию fill_in_additional_detail_fields. Теперь, если мы хотим отредактировать просматриваемую запись, то в открышейся форме поля должны быть заполнены значениями. Так как нам выводился логин, то на форму он и будет пердан. Следовательно, выпадающий список с логинами пользователей, значением, хранимым в базе заполнен не будет (так как в нем находятся id, а не лоигны). Чтобы при редактировании мы увидели в dropdown значение, принадлежащее записи, то создадим еще одно скрытое поле, и через него на форму редактирования будем передавать id. И в свойствах тега select, атрибуту selected укажем id.

1. Создаем скрытое поле и поле, в котрое будет выводится выпадающий список. Для этого в файле vardefs.php добавляем следующий код:

Код:

//Скрытое поле с id юзера
'hide_user' =>
   array (
      'name' => 'hide_user',
      'vname' => ,
      'type' => 'varchar',
      'massupdate'=>false,
      //'comment' => 'Date meeting ends'
      'len' =>'200',
   ),
//Поле, в которое будет выводится dropdown
'custom_user_list' =>
   array (
      'name' => 'custom_user_list',
      'vname' => 'LBL_MODIFIED_NAME',
      'type' => 'varchar',
      'massupdate'=>false,
      //'comment' => 'Date meeting ends'
      'len' =>'100',
      'function' => array('name'=>'GetHtmlNameModified', 'returns'=>'html', 'include'=>'modules/new_Lt/new_LtRole.php'),
   ),


2. В файле name_module.php добавляем функцию fill_in_additional_detail_fields


Код:
function fill_in_additional_detail_fields()
{
    $this->custom_user_list = get_assigned_user_name($this->custom_user_list);
}


С помощью этой функции на форме просмотра записи (DetailView) мы будем видеть не id пользователя, а логин.

3. В файл new_LtRole.php добавляем следующую функцию:

Код:

global $role_to_check;
$role_to_check = "top";  // Здесь роль, на которую будет проводится проверка
// Ограничения на поле 'custom_user_list'
function GetHtmlNameModified($focus, $field, $value, $view) {
   global $role_to_check;
   if (isset($_REQUEST['custom_user_list'])) {
      $focus->custom_user_list = $_REQUEST['custom_user_list'];
   }
   //получаем скрытое поле, в котором содержится id юзера
   if (isset($_REQUEST['hide_user'])) {
      $focus->hide_user = $_REQUEST['hide_user'];
   }
   global $current_user; // grab the $current_user object
   require_once("modules/ACLRoles/ACLRole.php");
   $acl_role_obj = new ACLRole();
   $user_roles = $acl_role_obj->getUserRoles($current_user->id); // grab a list of the current user's roles
   $user_in_role = FALSE;
   foreach ($user_roles as $role) {
     if ($role == $role_to_check) { // is the user in the role we're trying to restrict?
         $user_in_role = TRUE;
         break;
     }
   }
   if($view == 'EditView' || $view == 'MassUpdate') {
     if ($user_in_role) {
         global $app_list_strings; // нужно, чтобы drop down отобразился
         $html = '<select ';
         $html .=  'name="custom_user_list" id="custom_user_list">';
         // получаем список пользователей. В качестве выбранного берем знаечение скрытого поля
         $html .= get_select_options_with_id_separate_key(get_user_array(), get_user_array(), $focus->hide_user);
         $html .= '</select>';
     } // показываем стандартное поле
   else{
     //Здесь Ваш html
     $html = "Доступ закрыт";}
     return $html;
   }
   return $focus->custom_user_list;
}

4. В файл detailviewdefs.php и editviewdefs.php необходимо добавить созданное поле, чтоб оно появилось на форме детального просмотра

Код:

0 =>
   array (
      'name' => 'custom_user_list',
      'label' => 'LBL_MODIFIED_NAME',
   ),

5. Repair модуля
Вернуться к началу Перейти вниз
Посмотреть профиль http://easy-sugarcrm.forum2x2.ru
 
Установление ограничения на доступ к полям формы, часть II
Вернуться к началу 
Страница 1 из 1
 Похожие темы
-
» Пожелания по единой структуре создания объектов. Часть 1 - линейные объекты.
» Генеральные планы городов

Права доступа к этому форуму:Вы не можете отвечать на сообщения
 :: SugarCRM :: Статьи по установке и настройке SugarCRM-
Перейти: