Давненько в одном из проектов понадобилось при наступлении определенного события создавать выпуск рассылки со списком материалов, и сразу же отправлять его подписчикам. Возможно, кому-то пригодится решение для модуля рассылок 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);
}
}
?>