Работа с пользователями в MODX Revolution, Api, xPDO

Для тестирования php кода можно использовать компонент console

Добавление нового пользователя

$username = 'Иван';

// получаем объект класса modUser
$user = $modx->getObject('modUser', array('username' => $username));
// если пользователя нет на сайте
if (!is_object($user)) {
    //создаем объект пользователя
    $user = $modx->newObject('modUser');
    // устанавливаем имя и пароль
    $user->set('username', $username);
    $user->set('password', '123456');
    
    // создаем объект профиля пользователя
    $profile = $modx->newObject('modUserProfile');
    
    // заполняем профиль данными
    $profile->set('fullname', 'Иванов Иван Иванович');
    $profile->set('email', 'test@test.ru');
    $profile->set('phone', '22-22-22');
    $profile->set('mobilephone', '+79057778899');
    $profile->set('fax', '33-33-33');
    $profile->set('address', 'г. Москва, ул. Ломоносова д. 31');
    $profile->set('city', 'Москва');
    $profile->set('state', 'Московская область');
    $profile->set('zip', '101000');
    $profile->set('country', 'Россия');
    $profile->set('website', 'www.yandex.ru');
    $profile->set('photo', 'assets/images/myphoto.jpg');
    $profile->set('comment', 'Создаю сайты');
    $profile->set('dob', strtotime('1984-12-12'));
    $profile->set('gender', '1');
    
    //получаем доступ к дополнительным полям
    $fields = $profile->get('extended');
    
    // добавляем данные в массив
    $fields['bank'] = 'Сбербанк';
    $fields['account'] = '40702810500000000001';
    $fields['kor-account'] = '3010100000000000001';
    $fields['bik'] = '045805777';
    
    // добавляем данные к профилю
    $profile->set('extended', $fields);
    // осуществляем связь modUser с modUserProfile
    $user->addOne($profile);
    
    // сохраняем оба объекта
    $profile->save();
    $user->save();
} 

Добавим пользователя в группу администраторы и роль супер пользователя

// получаем объект пользователя по имени Иван
$user = $modx->getObject('modUser', array('username' => 'Иван'));

// если пользователь существует
if (is_object($user)) {
    //получаем группу поимени
    $group = $modx->getObject('modUserGroup', array('name' => 'Administrator'));
    // создаем объект прав доступа пользователя
    $groupMember = $modx->newObject('modUserGroupMember');
    // добавляем номер группы
    $groupMember->set('user_group', $group->get('id'));
    // добавляем роль
    $groupMember->set('role', 2); 
    // связываем с пользователем
    $user->addMany($groupMember);
    // сохраняем пользователя
    $user->save();
}

Изменим email и банк у пользователя 'Иван'

$user = $modx->getObject('modUser', array('username' => 'Иван'));

if (is_object($user)) {
   // связь пользователя с профилем  
   $profile = $user->getOne('Profile');
   // устанавливаем email
   $profile->set('email', 'my@mail.ru');
   // получаем доступ к расширенным полям
   $fields = $profile->get('extended');
   // добавляем банк в массив
   $fields['bank'] = 'ВТБ';
   // добавляем к профилю банк
   $profile->set('extended', $fields);
   // сохраняем профиль пользователя
   $profile->save();
}

Выведем всех зарегистрированных пользователей (имя, электронная почта, банк)

//Инициализируем запрос    
$query = $modx->newQuery('modUser');
// выполняем запрос
$users = $modx->getCollection('modUser',$query);

// цикл по пользователям
foreach ($users as $user) {
    // получаем имя поль
    $name = $user->get('username'); 
    // связь с профилем пользователя
    $profile = $user->getOne('Profile');
    // получаем электонный адрес
    $email = $profile->get('email');
       // проверяем есть ли у профиля  дополнительные поля
       if ($profile->get('extended')) {
            // получаем дополнильные поля
            $fields = $profile->get('extended');    
            // получаем банк
            $bank = $fields['bank'];  
       } else {
           $bank = "нет банка";
       }    
 
// выводим данные
echo $name." ".$email." ".$bank;

}

Удаляем пользователя с именем 'Иван'

$user = $modx->getObject('modUser', array('username' =>'Иван'));

if (is_object($user))
    $user->remove();

Получим текущего пользователя

    $user = $modx->getUser();
    $username = $user->username;