Регистрация пользователя из корзины shopkeeper

Пытаюсь сделать регистрацию пользователя из корзины при оформлении заказа shopkeeper через FormLister. Если пользователь в форме устанавливает флажок «Зарегистрироваться», то по prepareProcess происходит добавление пользователя в базу.
Сниппет вызываемы по prepareProcess взят из одного из топиков:


if ($data['register_me']) {
	$newUser = $data;
	$newUser['username'] = $data['email'];
	$newUser['password'] = '';

	include_once(MODX_BASE_PATH."assets/lib/MODxAPI/modUsers.php");
	$user = new modUsers($modx);
	$uid = $user->create($newUser)->save(true); 
	$user->setUserGroups($uid, array(1));
}

Вопрос в том, как получить ошибку при регистрации (если пользователь уже есть в базе). Пробовал
$user->getLog();
$user->log

не помогает.
Скрипт modUsers.php устанавливает переменные EmptyPKField, UniqueUsername, UniqueEmail в log — КАК ИЗ ПОЛУЧИТЬ?
public function save($fire_events = false, $clearCache = false)
    {
        if ($this->get('email') == '' || $this->get('username') == '' || $this->get('password') == '') {
            $this->log['EmptyPKField'] = 'Email, username or password is empty <pre>' . print_r(
                $this->toArray(),
                true
            ) . '</pre>';
            return false;
        }
        if (!$this->checkUnique('web_users', 'username')) {
            $this->log['UniqueUsername'] = 'username not unique <pre>' . print_r(
                $this->get('username'),
                true
            ) . '</pre>';
            return false;
        }
        if (!$this->checkUnique('web_user_attributes', 'email', 'internalKey')) {
            $this->log['UniqueEmail'] = 'Email not unique <pre>' . print_r($this->get('email'), true) . '</pre>';
            return false;
        }

4 комментария

avatar
include_once(MODX_BASE_PATH."assets/lib/MODxAPI/modUsers.php");
$user = new modUsers($modx);
if ($uid = $user->create($newUser)->save(true)) { 
    $user->setUserGroups($uid, array(1));
} else {
    return 'error';
}
avatar
Спасибо за ответ, но то, что если $uid нет, то ошибка — это понятно, но хотелось бы знать что за ошибка, чтоб отправить сообщение пользователю.
avatar
Расширьте класс modUsers и переопределите метод save, чтобы возвращал разные ответы при ошибках.
avatar
Сорри, сам ступил. Все оказалось гораздо проще
<code>
$log = $user->getLog();
if ($log['EmptyPKField']) {
//Email, username or password is empty

} elseif ($log['UniqueUsername']) {
//username not unique

} elseif ($log['UniqueEmail']) {
// Email not unique

}
</code>
Комментарий отредактирован 2018-06-15 10:38:41 пользователем uin23
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.