<?php
//шлём заголовки
header('Access-Control-Allow-Origin: *');
header('Content-type: application/json; charset=utf-8');

// инициализация MODX API
define('MODX_API_MODE', true);
require_once dirname(dirname(__FILE__)) . '/core/config/config.inc.php';
require_once MODX_BASE_PATH . 'index.php';
// Включаем обработку ошибок
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'FILE');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->getService('error','error.modError');
$modx->error->message = null;

//проверем указан ли e-mail
if(!$_POST['sub_email']){
    $out = array('success' => false, 'message' => 'Не указан e-mail!');
    die(json_encode($out));
}

//принимаем e-mail и фильтруем его
if(!$email = filter_var($_POST['sub_email'], FILTER_SANITIZE_EMAIL)){
    $out = array('success' => false, 'message' => 'Неверный e-mail!');
    die(json_encode($out));
}

if($profile = $modx->getObject('modUserProfile', array('email' => $email))){
    $out = array('success' => false, 'message' => 'Вы уже подписаны!');
    die(json_encode($out));
}

if($email){
    $pass = md5($email . time());
    $user = $modx->newObject('modUser', array('username' => $email));
    $user->set('password', $pass);
    $profile = $modx->newObject('modUserProfile');
    $user->addOne($profile);
    // Назначаем дополнительные поля
    $profile->set('fullname', 'Подписчик ' . $email);
    $profile->set('email', $email);
    if(!$user->save()){
        $out = array('success' => false, 'message' => 'Не удалось оформить подписку! Ошибка сервера!');
        die(json_encode($out));
    }
    //добавляем в группу с ID = 2
    $user->joinGroup(2, null, null);
}

$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY, 'У вас новый подписчик: ' . $email);
$modx->mail->set(modMail::MAIL_FROM, $modx->getOption('mail_smtp_user'));
$modx->mail->set(modMail::MAIL_SENDER, $modx->getOption('mail_smtp_user'));
$modx->mail->set(modMail::MAIL_SUBJECT, 'Подписка ' . MODX_HTTP_HOST);
$modx->mail->address('to', $modx->getChunk('email'));
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
    $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
}
$modx->mail->reset();

$out = array('success' => true, 'message' => 'Вы успешно подписаны на нашу рассылку! Мы НЕ рассылаем спам!');
die(json_encode($out));