Программное создание пользователей

Возникла на сайте задача создать кучу пользователей и разослать им уведомления (с кастомным сообщением). Как обычно, решил выполнить это с помощью родного MODX-процессора. Как оказалось, здесь не мало подводных камней имеется…

Сразу опубликую итоговый код, а детали далее разберем.

$modx->switchContext('web');

print '<pre>';

$site_url = $modx->getOption("site_url");

$msg = "
<p>Здравствуйте!</p>

<p>Ваши данные для авторизации на сайте <a href='{$site_url}'>[[+sname]]</a>:</p>

<p><strong>Логин:</strong> [[+uid]]<br />
<strong>Пароль:</strong> [[+pwd]]</p>

<p>После авторизации на сайте вы сможете изменить свой пароль.</p>

<p>С уважением,<br />
Администрация сайта.</p>
";

$modx->setOption('signupemail_message', $msg);

$username = "username";
$email = "user_email";
$fullname = 'user_fullname';

$data = array(
    "passwordnotifymethod"  => 'g',     // Указываем, что пароль надо сгенерировать
    "username"  => $username,           
    "email"     => $email,
    "fullname"     => $fullname,
    "active"    => 1,
    "passwordnotifymethod"  => "e",     // Данные регистрации надо отправить на почту пользователю
    "groups"    => array(
        array(
            "usergroup" => 1,           // ID группы пользователей
            "role"      => 1,           // Роль. 1 - Member
        ),    
    ),
);

$modx->error->reset();

$response = $modx->runProcessor('security/user/create', $data);

if($response->isError()){
    print_r($response->getResponse());
}

print "OK";

Первое: путаница. В системе есть две настройки: signupemail_message и websignupemail_message. Предполагаю, что это пережиток прошлого (времен MODX Evolution). Тогда было четкое разделение пользователей на системных манагеров и веб-пользователей. Хотя может просто закладывали основу, но так и не довели до ума. Так или иначе, но настройка websignupemail_message (шаблон письма для веб-пользователей) не используется, используется только signupemail_message.

Второе: неприятность. При отправки письма пользователю, MODX формирует ссылку на сайт, да не просто ссылку, а ссылку на админ-панель. И переопределить это нельзя.

'surl' => $this->modx->getOption('url_scheme') . $this->modx->getOption('http_host') . $this->modx->getOption('manager_url'),

Вот это совсем не круто. Поэтому мы в свой кастомный шаблон прописали свой siteurl.Можнобыло,конечно,задатьsite_url. Можно было, конечно, задать modx->setOption('manager_url', '/'), но все равно не круто.

Третье: вообще досадная неприятность: MODX при обработке письма использует не парсер, а str_replace().

foreach ($placeholders as $k => $v) {
    $message = str_replace('[[+'.$k.']]',$v,$message);
}

В итоге нельзя ни системные настройки в шаблоне использовать, ни чанки-сниппеты, нифига.