Как программно создать рассылку и отправить ее подписчикам с помощью модуля simplenews

Аватар пользователя parad0x parad0x 21 сентября 2015 в 20:19

Давненько в одном из проектов понадобилось при наступлении определенного события создавать выпуск рассылки со списком материалов, и сразу же отправлять его подписчикам. Возможно, кому-то пригодится решение для модуля рассылок Simplenews:

<?php

$desc

='На сайте доступен новый материал: <a href="'.$GLOBALS['base_url'].'/node/'.$node->nid.'">'.$node->title.'</a>';
$edit = new stdClass();   /* Создаём объект node */
$edit->type 'simplenews';    /* Указываем тип материала */
node_object_prepare($edit);  /* Подготавливаем объект ноды  */        
$edit->title 'Новый материал: '.$node->title;   /* Заголовок */
$edit->language LANGUAGE_NONE;

$edit->body[$edit->language][0]['value'] = $desc;
$edit->body[$edit->language][0]['summary'] = '';
$edit->body[$edit->language][0]['format'] = 'full_html';

$tag=taxonomy_term_load(15); /* tid рассылки */
if($tag){
    
$edit->field_simplenews_term[$edit->language][0] = (array)$tag;
}

if(

$nd node_submit($edit)) {
    
node_save($nd);
    if(
$nd->nid){
//        simplenews_issue_send(array($nd->nid));
//        simplenews_add_node_to_spool($nd);

  

$select db_select('simplenews_subscriber''s');
  
$select->innerJoin('simplenews_subscription''t''s.snid = t.snid');
  
$select->addField('s''mail');
  
$select->addField('s''snid');
  
$select->addField('t''tid');
  
$select->addExpression($nd->nid'nid');
  
$select->addExpression(SIMPLENEWS_SUBSCRIPTION_STATUS_SUBSCRIBED'status');
  
$select->addExpression(REQUEST_TIME'timestamp');
  
$select->condition('t.tid'$nd->simplenews->tid);
  
$select->condition('t.status'SIMPLENEWS_SUBSCRIPTION_STATUS_SUBSCRIBED);
  
$select->condition('s.activated'SIMPLENEWS_SUBSCRIPTION_ACTIVE);

  

db_insert('simplenews_mail_spool')
    ->
from($select)
    ->
execute();

  

// Update simplenews newsletter status to send pending.
  
simplenews_newsletter_update_sent_status($nd);

    }
}

?>