Как изменить систему ролей

Главные вкладки

Аватар пользователя magnuz magnuz 23 июля 2014 в 16:19

Как сделать чтобы один пользователь мог иметь только одну роль? Чтобы в админке где роль выбираешь при создании и редактировании юзера был радиобокс вместо чекбокса. Пытаюсь сам модуль написать - не изменяет роль.

Комментарии

Аватар пользователя magnuz magnuz 23 июля 2014 в 17:24

«function radio_role_submit($form, &$form_state)
{
ob_start();
var_dump($form_state);
file_put_contents('form.html', ob_get_clean());

ob_start();
var_dump($form_state);
file_put_contents('form_state.html', ob_get_clean());

$form_state['input']['roles'] = Array(2,(int)$form_state['input']['roles']);
$form['complete form']['#user']->roles = Array(2,(int)$form_state['input']['roles']);
$form['values'] = Array(2,(int)$form_state['input']['roles']);
//$form['build_info']['args'][0]->roles = Array(2,(int)$form_state['input']['roles']);

}

/* make radiobox in registration form*/
function hdmod_form_alter(&$form, &$form_state, $form_id)
{
//var_dump($form_id);
if(in_array($form_id, Array("user_register_form","user_profile_form")))
{

global $user;
$roles = $user->roles;
$_keys = array_keys($roles);
$role = $_keys[1]; // role

//var_dump($form);

if(empty($form["account"]["roles"]["#default_value"][1]))
{
$form["account"]["roles"]["#default_value"] = 5;
}
else
{
$form["account"]["roles"]["#default_value"] = $form["account"]["roles"]["#default_value"][1];
}
$form["account"]["roles"]["#type"]="radios";
//$form["account"]["roles"]["#default_value"] = 4;
//unset($form["account"]["roles"]["#options"][3]);
array_unshift($form['#submit'],'radio_role_submit');
}

Такой код. Но при этом когда сохраняешь юзера он получается вообще без ролей.
Выдает : «
The first argument should be an array в функции user_user_presave() (строка 1286 в файле /home/blago-v-da/komunal-servis.ru/docs/crm/modules/user/user.module).
Warning: array_keys() [function.array-keys]: The first argument should be an array в функции user_save() (строка 523 в файле /home/blago-v-da/komunal-servis.ru/docs/crm/modules/user/user.module).
Warning: Invalid argument supplied for foreach() в функции user_save() (строка 523 в файле /home/blago-v-da/komunal-servis.ru/docs/crm/modules/user/user.module).»

Аватар пользователя dashiwa dashiwa 23 июля 2014 в 19:06

«один пользователь мог иметь только одну роль»
Какую именно роль? Супер админа,анонима ?
Хотите делать выборку одной определенной роли,опишите критерии выборки

Аватар пользователя magnuz magnuz 23 июля 2014 в 19:38

просто сменить на radios не работает. там проблема возникает со структурой формы. вообще есть ли комплексные решения какие-то? чтоб иерархия ролей допустим?

Аватар пользователя magnuz magnuz 23 июля 2014 в 23:27

Дык переопределить-то я переопределил. Только не работает. Не меняется роль, а точнее вообще юзер становится без ролей. Неверный формат какой-то.

Аватар пользователя dashiwa dashiwa 24 июля 2014 в 0:05

Борьба функций..Кто победит ? Ваши или Друпал?
function hdmod_form_alter что возвращает ? массив
The first argument should be an array?

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 24 июля 2014 в 5:32

"magnuz" wrote:
Такой код. Но при этом когда сохраняешь юзера он получается вообще без ролей.

Не удивительно, этот код далёк от друпала как я от США.

У юзера, как минимум, должна быть всегда роль авторизованного.
Значит вам нужно две роли.

Аватар пользователя imarat imarat 24 июля 2014 в 9:12

"magnuz" wrote:
Дык переопределить-то я переопределил. Только не работает. Не меняется роль, а точнее вообще юзер становится без ролей. Неверный формат какой-то.

по логике в $form_state['values']['roles'] должен предаваться массив, а когда меняете на radios передастся строка
в hook_form_alter перед сабмитом оберните значение в массив
но это предположение, не проверял

Аватар пользователя magnuz magnuz 24 июля 2014 в 12:27

['values']['roles'] - пробовал. не помогает. и ['input']['roles']
После сохранения юзера орет :
«Warning: array_filter() expects parameter 1 to be array, string given в функции user_user_presave() (строка 1286 в файле D:\wamp\domains\syskit\modules\user\user.module).
Warning: array_keys() expects parameter 1 to be array, null given в функции user_save() (строка 523 в файле D:\wamp\domains\syskit\modules\user\user.module).
Warning: Invalid argument supplied for foreach() в функции user_save() (строка 523 в файле D:\wamp\domains\syskit\modules\user\user.module).»

Знать бы что в form и form_state он берет.

Аватар пользователя magnuz magnuz 10 ноября 2015 в 11:49

Выяснилось. Там должно быть в формате

« ["roles"]=>
array(5) {
[5]=>
string(1) "5"
[2]=>
bool(true)
[3]=>
int(0)
[4]=>
int(0)
[6]=>
int(0)

Вот модуляка.