Проверка почты на основе действия почты токена - PullRequest
1 голос
/ 23 августа 2010

Доброе утро, я создал новый тип контента - петицию. Последним шагом должна быть проверка их почтового адреса путем отправки им ссылки для подтверждения или удаления их из петиции.

Мне нужно получить какую-то уникальную ссылку, которую затем я отправляю как письмо с токенами действия на почтовый аккаунт, указанный в форме. тогда токенизированная ссылка должна установить действительный почтовый адрес и отменить публикацию.

Я немного отчаялся, общие указания приветствуются.

1 Ответ

1 голос
/ 27 августа 2010

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

Узел создан и по умолчанию не публикуется. Здесь я установлю узел как опубликованный, когда кто-то нажимает на ссылку в письме.

Создайте пользовательский модуль, который взаимодействует с nodeapi:

function module_nodeapi($node, $op, $a3 = NULL, $a4 = NULL){

    if($node->type == 'petition'){
        switch ($op) {
            case 'submit':

            case 'insert':
                 $mail = $user->mail;
                 $nodeid = $node->nid;
                     // mail the user using the drupal_send_mail() function
                     // make the link something like: http://web.be/petition/validate/$nodeid/$mail
                     // drupal_set_message('thank you for validating the petition');
            case 'update':
            break;
        }
    }

Пример ссылки: http://web.be/petition/validate/20/test@test.com. Следующее, что нужно сделать, это использовать hook_menu для получения ссылки и ее переменных (также в вашем пользовательском модуле):

function module_menu(){
    $items['petition/valid/%/%'] = array(
        'title' => 'Validated your petition-entry',
        'page callback' => 'module_validate_petition',
        'page arguments' => array(1,2),
        'access arguments' => array('access content'),
        'type' => MENU_CALLBACK,
    );
}

function module_validate_petition($nid, $mail){
    // load the node
    $node = node_load($nid);
    // set to published
    $node->status = 1;
    // save the node
    node_save($node);
}
...