function doDeliveries($quiet = false)
 {
     $cli = eZCLI::instance();
     $issueLimit = 5;
     // Number of issues the script will process each time
     $deliveredCount = 0;
     $deliveryLimit = 200;
     // Number of deliveries the script will do each time. Should be multiples of 50
     $newsletterIni = eZINI::instance('jajnewsletter.ini');
     $newsletterIssuesNodeID = $newsletterIni->variable('ContentSettings', 'NewsletterIssuesNode');
     $subscriptionUsersNodeID = $newsletterIni->variable('ContentSettings', 'SubscriptionUsersNode');
     $fromName = $newsletterIni->variable('NewsletterSettings', 'FromName');
     $fromEmail = $newsletterIni->variable('NewsletterSettings', 'FromEmail');
     $replyTo = $newsletterIni->variable('NewsletterSettings', 'ReplyTo');
     // Get list of newsletter issues with status In Progress
     //$newsletterIssues =& eZContentObjectTreeNode::subTreeByNodeID(
     $newsletterIssues =& eZContentObjectTreeNode::subTree(array('ClassFilterType' => 'include', 'ClassFilterArray' => array('newsletter_issue'), 'AttributeFilter' => array(array('newsletter_issue/status', '=', JAJ_NEWSLETTER_ISSUE_STATUS_PENDING)), 'Limit' => $issueLimit), $newsletterIssuesNodeID);
     if (!$quiet) {
         $cli->output('Newsletter issues awating delivery: ' . count($newsletterIssues) . ' (' . $issueLimit . ' max)');
     }
     foreach ($newsletterIssues as $issue) {
         // Get newsletter and prepare
         $issueObject = $issue->object();
         $issueDatamap = $issueObject->dataMap();
         $newsletterSubject = $issueDatamap['subject']->content();
         if (!$quiet) {
             $cli->output();
             $cli->output('Delivering newsletter \'' . $newsletterSubject . '\' (Object id: ' . $issueObject->ID . ')');
         }
         $newsletterBody = JAJNewsletterOperations::prepareNewsletterIssue($issueObject);
         if ($newsletterBody == false) {
             if (!$quiet) {
                 $cli->notice('Failed to generate newsletter \'' . $newsletterSubject . '\' (Object id: ' . $issueObject->ID . ')');
             }
             continue;
         }
         // Go though users in delivery que in batch and deliver newsletter
         $userLimit = 50;
         while (true) {
             // Get users in delivery que for current newsletteer
             // TODO: Should only get items where jajdelivery.tstamp > 1 hour or something
             //$userNodes =& eZContentObjectTreeNode::subTreeByNodeID(
             $userNodes =& eZContentObjectTreeNode::subTree(array('ClassFilterType' => 'include', 'ClassFilterArray' => array('subscription_user'), 'ExtendedAttributeFilter' => array(id => 'jajdeliveryfilter', params => array('newsletter_object_id' => $issueObject->ID, 'status' => array(JAJ_NEWSLETTER_DELIVERY_STATUS_PENDING))), 'Limit' => $userLimit, 'Limitation' => array()), $subscriptionUsersNodeID);
             $userCount = count($userNodes);
             if (!$quiet) {
                 $cli->output('     Users found for batch delivery: ' . $userCount . ' (' . $userLimit . ' max in batch)');
             }
             foreach ($userNodes as $userNode) {
                 $userObject = $userNode->object();
                 $userDatamap = $userObject->dataMap();
                 $userEmail = $userDatamap['email']->content();
                 if (!$quiet) {
                     $cli->output('     Delivereing to: ' . $userEmail, false);
                 }
                 $htmlNewsletter = $newsletterBody['html'];
                 $plainNewsletter = $newsletterBody['plain'];
                 $htmlNewsletter = str_replace("__remote_id", $userObject->remoteID(), $htmlNewsletter);
                 $htmlNewsletter = str_replace("__object_id", $userObject->ID, $htmlNewsletter);
                 $plainNewsletter = str_replace("__remote_id", $userObject->remoteID(), $plainNewsletter);
                 $plainNewsletter = str_replace("__object_id", $userObject->ID, $plainNewsletter);
                 $newsletterDeliveryResult = JAJNewsletterOperations::deliver($newsletterSubject, $htmlNewsletter, $plainNewsletter, $fromName, $fromEmail, $replyTo, $userEmail);
                 $deliveryResult = JAJDelivery::fetchDelivery($issueObject->ID, $userObject->ID);
                 $delivery = $deliveryResult['result'];
                 $delivery->setAttribute('tstamp', time());
                 if ($newsletterDeliveryResult) {
                     if (!$quiet) {
                         $cli->output(' => OK');
                     }
                     $delivery->setAttribute('status', JAJ_NEWSLETTER_DELIVERY_STATUS_SENT);
                 } else {
                     $tries = $delivery->attribute('tries') + 1;
                     $delivery->setAttribute('tries', $tries);
                     if ($tries >= 3) {
                         $delivery->setAttribute('status', JAJ_NEWSLETTER_DELIVERY_STATUS_FAILED);
                     }
                     if (!$quiet) {
                         $cli->output(' => FAILED, tries: ' . $tries);
                     }
                 }
                 $delivery->sync();
                 $deliveredCount++;
             }
             eZContentObject::clearCache();
             if ($userCount < $userLimit || $deliveredCount >= $deliveryLimit) {
                 break;
             }
         }
         if ($deliveredCount >= $deliveryLimit) {
             if (!$quiet) {
                 $cli->output('Reached delivery limit for script (' . $deliveredCount . '/' . $deliveryLimit . ')');
             }
             break;
         }
         // Change status to archived if delivery que for newsletter is empty
         if (JAJDelivery::emptyDeliveryQue($issueObject->ID)) {
             if (!$quiet) {
                 $cli->output('Delivery que for newsletter empty, changing status to archived');
             }
             $status = $issueDatamap["status"];
             $status->setAttribute('data_text', JAJ_NEWSLETTER_ISSUE_STATUS_ARCHIVED);
             $status->sync();
         }
     }
 }
Exemplo n.º 2
0
require_once 'extension/jajnewsletter/modules/newsletter/classes/jajnewsletteroperations.php';
$newsletterIni = eZINI::instance('jajnewsletter.ini');
$fromName = $newsletterIni->variable('NewsletterSettings', 'FromName');
$fromEmail = $newsletterIni->variable('NewsletterSettings', 'FromEmail');
$replyTo = $newsletterIni->variable('NewsletterSettings', 'ReplyTo');
$nodeID = $Params['NodeID'];
$node =& eZContentObjectTreeNode::fetch($NodeID);
if (!$node) {
    return $Module->handleError(KERNEL_NOT_AVAILABLE, 'kernel');
}
$object =& $node->object();
if (!$object->canRead()) {
    return $Module->handleError(KERNEL_ACCESS_DENIED, 'kernel', array('AccessList' => $object->accessList('read')));
}
$dataMap =& $object->dataMap();
$newsletterSubject = "[PREVIEW] " . $dataMap['subject']->content();
$previewEmail = $dataMap['preview_email']->content();
$newsletterBody = JAJNewsletterOperations::prepareNewsletterIssue($object);
if ($newsletterBody == false) {
    return $Module->handleError(JAJ_ERROR_NEWSLETTER_CONVERT_FAIL, 'newsletter');
}
$deliveryResult = JAJNewsletterOperations::deliver($newsletterSubject, $newsletterBody['html'], $newsletterBody['plain'], $fromName, $fromEmail, $replyTo, $previewEmail);
if ($deliveryResult) {
    $tpl = templateInit();
    $tpl->setVariable('preview_email', $previewEmail);
    $Result = array();
    $Result['content'] = $tpl->fetch('design:newsletter/newsletter_preview.tpl');
    $Result['path'] = array(array('url' => false, 'text' => ezi18n('newsletter', 'Newsletter')));
} else {
    return $Module->handleError(JAJ_ERROR_NEWSLETTER_SEND_FAIL, 'newsletter');
}
Exemplo n.º 3
0
<?php

require_once 'extension/jajnewsletter/modules/newsletter/classes/jajnewsletteroperations.php';
if (!$isQuiet) {
    $cli->output("Delivering newsletter issues");
}
JAJNewsletterOperations::doDeliveries();