Tickets. Фоновая регистрация

Василий, доброго времени суток.

Возможно ли выложить в публичный доступ решение для фоновой регистрации пользователей,
которое вы использовали на сайте amd2013.ru?
Виталий Князь
04 февраля 2013, 19:09
modx.pro
1 615
0

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

Василий Наумкин
05 февраля 2013, 05:45
0
Да это не то, чтобы решение, просто свой процессор для создания юзеров:
<?php
require MODX_CORE_PATH . 'model/modx/processors/security/user/create.class.php';

class UserCreateProcessor extends modUserCreateProcessor {
	public $classKey = 'modUser';
	public $languageTopics = array('user');
	public $permission = '';
	public $objectType = 'user';
	public $beforeSaveEvent = 'OnBeforeUserFormSave';
	public $afterSaveEvent = 'OnUserFormSave';

	public function beforeSet() {
		if (!$this->getProperty('email')) {
			return $this->addFieldError('email', $this->modx->lexicon('field_required'));
		}
		if (!$this->getProperty('username')) {
			return $this->addFieldError('username', $this->modx->lexicon('field_required'));
		}
		$this->setProperty('passwordnotifymethod', 's');
		$this->setProperty('passwordgenmethod', 'spec');
		$this->setProperty('specifiedpassword', md5($this->getProperty('email')));
		$this->setProperty('confirmpassword', md5($this->getProperty('email')));
		$this->setProperty('groups', '[{"usergroup":"2","role":"1"]}');
		$this->setProperty('active', false);

		return parent::beforeSet();
	}

}

return 'UserCreateProcessor';

Он не требует никаких прав для работы (см. переменную $permission), поэтому запускать его может кто угодно.
$response = $this->runProcessor('web/user/create', array(
	'username' => $email
	,'email' => $email
	,'fullname' => $email
));
    Алексей Карташов
    30 апреля 2013, 08:31
    0
    Василий, а при таком подходе проверка на правильность email'а самим modx'ом осуществляется, не подскажешь?
    Или надо самому валидацию мыла делать?
    Сергей Шлоков
    03 октября 2013, 14:25
    0
    Василий, помоги понять, что не работает. Взял твой процессор UserCreateProcessor и выполняю его:
    $email='123@123.ru';
    $fields=array('username'=>'Name','email' => $email,'fullname' => $email);
    
    $response = $modx->runProcessor('web/staff/createUser',$fields,array('processors_path' => $modx->getOption('core_path').'components/staff/processors/'));
    if (!$response->isError()) {
        print_r($response->response);
    }else {
        $modx->log(modX::LOG_LEVEL_ERROR, $response->getMessage());
    }
    На выходе получаю ($response->response)
    UserCreateProcessor
    Пользователь не создается. Но и response ничего не выводит кроме названия класса. Даже если я генерирую ошибку в BeforeSet() или в initialize() возвращаю false, все равно получаю UserCreateProcessor. По исходникам пробежался, не могу понять, что не так. Нужна помощь доктора.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    5