Добавление пользователя в группу через процессор

Здравствуйте.
Стоит задача добавить пользователя в определённую группу.
Делаю потомка modUserUpdateProcessor, чтобы права переопределить:

require MODX_CORE_PATH.'model/modx/processors/security/user/update.class.php';

class kurspressUserUpdateProcessor extends modUserUpdateProcessor {

	public $permission = '';

}

return 'kurspressUserUpdateProcessor';
Вот кусок кода, которым я хочу это сделать:
$groups = array ();
	foreach($_REQUEST['items'] as $v){
		$group['usergroup'] = $v['id'];
		$group['role'] = 'Member';
		$groups[] = $group;
	}
	$options = array(
		'groups'=>$groups,
		'id'=>$user->id,
		'username'=>$user->username,
		'email'=>$email
	);
	// Запускаем кастомный процессор обновления юзера
	$response = $modx->runProcessor('justclick/update', 
		$options,
		array('processors_path' => MODX_CORE_PATH. 'components/kurspress/processors/'));
		
	if ($response->isError()){
		$errors = implode(', ', $response->getAllErrors());
		$this->modx->log(modX::LOG_LEVEL_ERROR, '[Office] Unable to create user '.$email.'. Message: '.$errors);
	}
Никаких ошибок не выдаётся, но пользователь в группу не добавляется.
Может кто-то подскажет, где я накосячил.
Олег Трубин
14 сентября 2013, 19:36
modx.pro
2 159
0

Комментарии: 3

Василий Наумкин
14 сентября 2013, 23:39
0
Office регистрирует юзеров, в группы, которые указаны в параметре &groups сниппета officeAuth.

Посмотри в processors/auth/create.class.php метод setUserGroups() — это то, что тебе нужно.
    Олег Трубин
    15 сентября 2013, 11:34
    0
    Да, Василий, я и раньше смотрел твой код HA и office. Более того, когда писал свой процессор create, «стянул» у тебя этот метод. И в create пользователь в группы нормально добавляется. А вот в update почему-то нет, хотя ошибок никаких не выдаёт.
      Василий Наумкин
      15 сентября 2013, 11:39
      0
      Тогда нужно было смотреть родной MODXывый /user/update.class.php. Вот код оттуда:
      public function setUserGroups() {
      	$memberships = array();
      	$groups = $this->getProperty('groups',null);
      	if ($groups !== null) {
      		$primaryGroupId = 0;
      		/* remove prior user group links */
      		$oldMemberships = $this->object->getMany('UserGroupMembers');
      		/** @var modUserGroupMember $membership */
      		foreach ($oldMemberships as $membership) { $membership->remove(); }
      
      		/* create user group links */
      		$groupsAdded = array();
      		$groups = is_array($groups) ? $groups : $this->modx->fromJSON($groups);
      		$idx = 0;
      		foreach ($groups as $group) {
      			if (in_array($group['usergroup'],$groupsAdded)) continue;
      			$membership = $this->modx->newObject('modUserGroupMember');
      			$membership->set('user_group',$group['usergroup']);
      			$membership->set('role',$group['role']);
      			$membership->set('member',$this->object->get('id'));
      			$membership->set('rank',isset($group['rank']) ? $group['rank'] : $idx);
      			if (empty($group['rank'])) {
      				$primaryGroupId = $group['usergroup'];
      			}
      			$memberships[] = $membership;
      			$groupsAdded[] = $group['usergroup'];
      			$idx++;
      		}
      		$this->object->addMany($memberships,'UserGroupMembers');
      		$this->object->set('primary_group',$primaryGroupId);
      	}
      	return $memberships;
      }
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3