Ручное подтверждение регистрации

Вопрос наверняка очень простой, но не могу понять как сделать ручное подтверждение регистрации. Т.е. нужно чтобы письмо сразу после регистрации не приходило, а приходило позже, когда данные человека будут проверены. Как это можно реализовать — подскажите, пожалуйста.
Любовь
26 мая 2015, 11:52
modx.pro
5
2 069
0

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

Василий Наумкин
26 мая 2015, 16:59
0
1. Добавить 2 поля в юзеру в extended, например verified и sent
2. Написать плагин на событие OnUserSave, которое будет проверять verified == 1 && sent != 1
3. При одобрении юзера ставить ему verified = 1, а при отправке плагин ему поставит sent = 1

Таким образом почта будет отправляться юзеру только один раз, при ручном одобрении.
    Любовь
    26 мая 2015, 17:09
    0
    Не все так просто)
    Спасибо!
      Любовь
      22 июля 2015, 09:19
      0
      Удалось отменить отправку письма по активации аккаунта (теперь все письма уходят на одну почту), дополнительные поля выставляются при регистрации. Вопрос по плагину, а вернее по тому как написать чтобы отправлялось письмо? Где читать документацию по переменным?
        Пётр Молчанов
        22 июля 2015, 10:52
        1
        +2
        как отправить письмо:
        $message = $modx->getChunk('ваш_чанк', массив_переменных); // либо можно без чанка тело просто оформить
                        $modx->getService('mail', 'mail.modPHPMailer');
                        $modx->mail->set(modMail::MAIL_BODY,$message);
                        $modx->mail->set(modMail::MAIL_FROM,$modx->getOption('emailsender'));
                        $modx->mail->set(modMail::MAIL_FROM_NAME,$modx->getOption('site_name'));
                        $modx->mail->set(modMail::MAIL_SENDER,$modx->getOption('site_name'));
                        $modx->mail->set(modMail::MAIL_SUBJECT,'тема письма');
                        $modx->mail->address('to',$email); // тут мыло кому отправляете
                        $modx->mail->address('reply-to',$modx->getOption('emailsender'));
                        $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);
                          return false;
                        }
                        $modx->mail->reset();
        событие OnUserSave rtfm.modx.com/revolution/2.x/developing-in-modx/basic-development/plugins/system-events/onusersave
        я использую такой вариант:
        if ($modx->event->name === 'OnUserSave' && $mode === 'new') {
        так получаем мыло
        $profile = $user->getOne('Profile');
        $email = $profile->get('email');
        тут ваш код, либо мой, который выше
        }
          Любовь
          22 июля 2015, 10:57
          0
          Огромное спасибо! Попробую адаптировать под свои задачи)
            Любовь
            22 июля 2015, 11:21
            0
            Получилось! Но не совсем) Я указала чанк, в котором используются [[+name]], [[+password]] и они в таком виде и приходят (в виде кода). Как это можно исправить?
              Пётр Молчанов
              22 июля 2015, 11:27
              +1
              В этом случае придется генерить пароль за людей. как-то вот так:
              // генерим пароль
                  $pass = $modx->user->generatePassword();
                  $user->set('password',$pass);
                  $user->set('active','1');
                  $user->save();
              $data_array = ['name' = $profile->get('fullname'), 'password' => $pass];
              $message = $modx->getChunk('ваш_чанк', $data_array);
              если нужно брать пароль, который вводит пользователь, то надо писать не в плагин, а в постхук Login
                Любовь
                22 июля 2015, 11:32
                0
                Пароль у меня генерируется средствами modx… не совсем поняла причем тут генерация пароля — там же и имя тоже не «расшифровывается». Да и ссылка [[+confirmUrl]] там должна быть в письме. Неужели надо все с нуля генерировать?
                И еще вопрос:
                $message = $modx->getChunk('ваш_чанк', массив_переменных);
                здесь какой массив переменных имеется в виду?
                  Пётр Молчанов
                  22 июля 2015, 11:40
                  0
                  я ж вам в предыдущем сообщение привел пример массива.
                  суть в том, что в плагине нужно получить пароль, чтобы отправить его в письме, но это невозможно, поэтому необходимо генерировать его снова и записывать в аккаунт, тогда он сохраняется в нашей переменной и мы можем передать его в чанк
                    Любовь
                    24 июля 2015, 15:51
                    0
                    А подскажите, пожалуйста… Вот этот чанк —
                    $message = $modx->getChunk('ваш_чанк', массив_переменных);
                    Для чего он тогда нужен? Или можно его использовать если правильно написать туда переменные?
                    Пока при попытке добавить массив — у меня после отправки формы для регистрации нового пользователя выходит белая страница. Как только убираю этот массив — все хорошо.
                      Пётр Молчанов
                      24 июля 2015, 15:59
                      -1
                      чанк создан для разделения оформления и непосредственно самого php-кода, можно и без чанка просто в эту переменную написать всё оформление.
                      надеюсь, вместо «ваш_чанк» вы пишите название вашего чанка?
                      и вообще, было бы не плохо показывать свой нерабочий код
                        Любовь
                        24 июля 2015, 16:02
                        0
                        Т.е. в этот чанк можно писать переменные? Типа $name? Чанк — это же кусок html-кода… там такое не прокатит.
                        <?php
                        if ($modx->event->name === 'OnUserSave' && $mode === 'new') {
                        $profile = $user->getOne('Profile');
                        $email = $profile->get('email');
                        $extended = $profile->get('extended');
                        /*$data_array = [
                                'username' => $profile->get('username'),
                                'name' => $profile->get('fullname'), 
                                'password' => $profile->get('password'
                            ];
                        */
                        if($extended['verified']=='1' && $extended['sent']=='0'){
                            $message = $modx->getChunk('rulgnActivateEmailTpl'/*, $data_array*/); 
                            $modx->getService('mail', 'mail.modPHPMailer');
                            $modx->mail->set(modMail::MAIL_BODY, $message);
                            $modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
                            $modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
                            $modx->mail->set(modMail::MAIL_SENDER, $modx->getOption('site_name'));
                            $modx->mail->set(modMail::MAIL_SUBJECT, 'Подтверждение регистрации');
                            $modx->mail->address('to',$email);
                            $modx->mail->address('reply-to',$modx->getOption('emailsender'));
                            $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);
                                  return false;
                                }
                                $modx->mail->reset();
                                $extended['sent']='1';
                                $profile->set('extended', $extended);
                                $profile->save();
                            }
                            
                        }
                          Пётр Молчанов
                          24 июля 2015, 16:09
                          0
                          ну да. например:
                          $messageFields = [
                          	'test1' => '123',
                          	'test2' => '321'
                          ];
                          $message = $modx->getChunk('TestEmailTpl', $messageFields);
                          и в чанке TestEmailTpl
                          test1: [[+test1]]
                          test2: [[+test2]]
                          в итоге при использовании выведет
                          test1: 123
                          test2: 321
                          Любовь
                          24 июля 2015, 16:10
                          0
                          Т.е. вроде все правильно. Буду искать тогда почему не работает с массивом. Еще раз спасибо!
                          Пётр Молчанов
                          24 июля 2015, 16:12
                          0
                          $data_array = [
                          'username' => $profile->get('username'),
                          'name' => $profile->get('fullname'),
                          'password' => $profile->get('password'
                          ];
                          у вас тут не хватает скобки $profile->get('password'
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      15