/**
  * Replaces markers in newsletter content
  * @param string $content
  * @param CjwNewsletterEditionSend $newsletterEditionSend
  * @param CjwNewsletterUser $newsletterUser
  * @return string
  */
 static function replaceNewsletterMarkers($content, CjwNewsletterEditionSend $newsletterEditionSend, CjwNewsletterUser $newsletterUser = null)
 {
     // TODO parse extra variables
     $editionSendHash = $newsletterEditionSend->attribute('hash');
     $searchArray = array('#_hash_editionsend_#');
     $replaceArray = array($editionSendHash);
     if ($newsletterUser) {
         $subscription = CjwNewsletterSubscription::fetchByListIdAndNewsletterUserId($newsletterEditionSend->attribute('list_contentobject_id'), $newsletterUser->attribute('id'));
         $newsletterUnsubscribeHash = $subscription->attribute('hash');
         $newsletterConfigureHash = $newsletterUser->attribute('hash');
         $personalizeContent = (int) $newsletterEditionSend->attribute('personalize_content');
         $searchArray = array_merge($searchArray, array('#_hash_unsubscribe_#', '#_hash_configure_#'));
         $replaceArray = array_merge($replaceArray, array($newsletterUnsubscribeHash, $newsletterConfigureHash));
         if ($personalizeContent === 1) {
             $searchArray = array_merge($searchArray, array('[[name]]', '[[salutation_name]]', '[[first_name]]', '[[last_name]]'));
             $replaceArray = array_merge($replaceArray, array($newsletterUser->attribute('name'), $newsletterUser->attribute('salutation_name'), $newsletterUser->attribute('first_name'), $newsletterUser->attribute('last_name')));
         }
     }
     return str_replace($searchArray, $replaceArray, $content);
 }
예제 #2
0
 * @filesource
 */
require_once 'kernel/common/i18n.php';
include_once 'kernel/common/template.php';
$module = $Params["Module"];
$http = eZHTTPTool::instance();
$editionSendId = (int) $Params['EditionSendId'];
$outputFormatId = 0;
$newsletterUserId = 0;
if ($Params['OutputFormat']) {
    $outputFormatId = (int) $Params['OutputFormat'];
}
if ($Params['NewsletterUserId']) {
    $newsletterUserId = $Params['NewsletterUserId'];
}
$editionSendObject = CjwNewsletterEditionSend::fetch($editionSendId);
if (!is_object($editionSendObject)) {
    return $module->handleError(eZError::KERNEL_NOT_AVAILABLE, 'kernel');
}
$newsletterDataArray = $editionSendObject->getParsedOutputXml();
$newsletterContent = false;
if (isset($newsletterDataArray[$outputFormatId])) {
    $newsletterContentArray = $newsletterDataArray[$outputFormatId];
}
// html / text  - multipart/alternative
if ($outputFormatId === 0) {
    $newsletterContent .= $newsletterContentArray['body']['html'];
    $textContent = "<hr /><pre>" . $newsletterContentArray['body']['text'] . "</pre></body>";
    $newsletterContent = preg_replace(array('%</body>%'), array($textContent), $newsletterContent);
} elseif ($outputFormatId === 1) {
    $newsletterContent .= '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 /**
  * Return userobject by id
  *
  * @param integer $id
  * @return object
  */
 static function fetch($id)
 {
     $object = eZPersistentObject::fetchObject(CjwNewsletterEditionSend::definition(), null, array('id' => $id), true);
     return $object;
 }
 /**
  * creates a virtual subscriptioobejct
  * for a userId and editionSendId
  * @param int $newsletterUserId
  * @param int $editionSendId
  * @return false or CjwNewsletterSubscriptionVirtual object
  */
 static function createByUserIdAndEditionSendId($newsletterUserId, $editionSendId)
 {
     $newsletterUserRow = CjwNewsletterUser::fetch($newsletterUserId, false);
     if (!is_array($newsletterUserRow)) {
         return false;
     }
     $editionSendObject = CjwNewsletterEditionSend::fetch($editionSendId);
     if (is_object($editionSendObject)) {
         $subcriptionVirtualObject = self::createFromUserRow($newsletterUserRow, $editionSendObject->attribute('list_contentobject_id'), true);
         return $subcriptionVirtualObject;
     } else {
         return false;
     }
 }
예제 #5
0
$http = eZHTTPTool::instance();
$editionSendHash = $Params['EditionSendHash'];
$outputFormatId = 0;
$subscriptionHash = false;
$newsletterUser = null;
if ($Params['OutputFormatId']) {
    $outputFormatId = (int) $Params['OutputFormatId'];
}
if ($Params['SubscriptionHash']) {
    $subscriptionHash = $Params['SubscriptionHash'];
    $subscription = CjwNewsletterSubscription::fetchByHash($subscriptionHash);
    if ($subscription) {
        $newsletterUser = CjwNewsletterUser::fetch($subscription->attribute('newsletter_user_id'));
    }
}
$editionSendObject = CjwNewsletterEditionSend::fetchByHash($editionSendHash);
if (!is_object($editionSendObject)) {
    return $module->handleError(eZError::KERNEL_NOT_AVAILABLE, 'kernel');
}
$newsletterDataArray = $editionSendObject->getParsedOutputXml();
$newsletterContent = false;
if (isset($newsletterDataArray[$outputFormatId])) {
    $newsletterContentArray = $newsletterDataArray[$outputFormatId];
}
switch ($outputFormatId) {
    // html
    case 0:
        $newsletterContent = CjwNewsletterUtils::replaceNewsletterMarkers($newsletterContentArray['body']['html'], $editionSendObject, $newsletterUser);
        break;
        // text
    // text
 * - send newsletter via mail + set status to SEND
 * - mutex support (no double execute of cronjobs)->integrate in runcronjobs.php
 *
 * @copyright Copyright (C) 2007-2010 CJW Network - Coolscreen.de, JAC Systeme GmbH, Webmanufaktur. All rights reserved.
 * @license http://ez.no/licenses/gnu_gpl GNU GPL v2
 * @version //autogentag//
 * @package cjw_newsletter
 * @subpackage cronjobs
 * @filesource
 */
// to fetch instance in Cli mode for separate logdata, cause access rights phpcli + webserver
$logInstance = CjwNewsletterLog::getInstance(true);
$message = "START: cjw_newsletter_mailqueue_process";
$cli->output($message);
// to fetch all send objetc with status == STATUS_MALQUEUE_CREATED || STATUS_MALQUEUE_STARTED
$sendObjectList = CjwNewsletterEditionSend::fetchEditionSendListByStatus(array(CjwNewsletterEditionSend::STATUS_MAILQUEUE_CREATED, CjwNewsletterEditionSend::STATUS_MAILQUEUE_PROCESS_STARTED));
// - count all + how much should send?
// - if send = 0 at first element status == STATUS_MALQUEUE_STARTED
// - if send = count all => status == PROCESS_FINISHED
foreach ($sendObjectList as $sendObject) {
    // set startdate only at the first time
    if ($sendObject->attribute('status') == CjwNewsletterEditionSend::STATUS_MAILQUEUE_CREATED) {
        // if ok, set status == STATUS_MAILQUEUE_PROCESS_STARTED
        $sendObject->setAttribute('status', CjwNewsletterEditionSend::STATUS_MAILQUEUE_PROCESS_STARTED);
        $sendObject->store();
        $message = "Status set: editonSend  STATUS_MAILQUEUE_PROCESS_STARTED";
        $cli->output($message);
    }
    $ezcOutputOptions = array();
    if ($cli->isQuiet()) {
        $ezcOutputOptions = array('verbosityLevel' => 0);
예제 #7
0
 /**
  * Create a new newsletter edition send object,
  * with rendered newsletteroutput
  *
  * @return object
  */
 function createNewsletterSendObject($schedule = null)
 {
     $sendObject = CjwNewsletterEditionSend::create($this, $schedule);
     $sendObject->store();
     return $sendObject;
 }
 /**
  * Create a new newsletter edition send object,
  * with rendered newsletteroutput
  *
  * @return object
  */
 function createNewsletterSendObject()
 {
     $sendObject = CjwNewsletterEditionSend::create($this);
     $sendObject->store();
     return $sendObject;
 }
$cli->output($message);
foreach ($waitForScheduleObjectList as $newsletterEdtionSendObject) {
    $scheduleTimestamp = $newsletterEdtionSendObject->attribute('mailqueue_process_scheduled');
    $escalateStatus = $scheduleTimestamp <= time();
    if ($escalateStatus) {
        $message = ">>> schedule time has come " . date('Y-m-d H:i:s', $scheduleTimestamp) . " escalate status to STATUS_WAIT_FOR_PROCESS";
        $cli->output($message);
        $newsletterEdtionSendObject->setAttribute('status', CjwNewsletterEditionSend::STATUS_WAIT_FOR_PROCESS);
        $newsletterEdtionSendObject->store();
    }
}
// END
$message = "--\n>> START: check NlEditionSend objects with status STATUS_WAIT_FOR_PROCESS";
$cli->output($message);
// 1. search all SEND objects which create for the mail list
$waitForProcessObjectList = CjwNewsletterEditionSend::fetchEditionSendListByStatus(array(CjwNewsletterEditionSend::STATUS_WAIT_FOR_PROCESS));
$message = ">>> NlEditionSend objects with STATUS_WAIT_FOR_PROCESS found: " . count($waitForProcessObjectList);
$cli->output($message);
// 2. every SEND object true
foreach ($waitForProcessObjectList as $newsletterEdtionSendObject) {
    $sendId = $newsletterEdtionSendObject->attribute('id');
    $listContentObjectId = $newsletterEdtionSendObject->attribute('list_contentobject_id');
    $listContentObjectVersion = $newsletterEdtionSendObject->attribute('list_contentobject_version');
    $message = "## Procsessing: cjw_newsletter_mailqueue_create - sendObjectId: " . $sendId;
    $cli->output($message);
    // 3. search all user which corresponding with list and has CjwNewslettersSubscription::STATUS_APPROVED
    // create a new send_item-entry
    $limit = 0;
    $offset = 0;
    //$subscriptionObjectList = CjwNewsletterSubscription::fetchSubscriptionListByListIdAndStatus( $listContentObjectId, CjwNewsletterSubscription::STATUS_APPROVED, $limit, $offset  );
    $subscriptionObjectList = $newsletterEdtionSendObject->getSubscriptionObjectArray(CjwNewsletterSubscription::STATUS_APPROVED, 0, 0);
 /**
  * fetch edition object
  *
  * @return object / boolean
  */
 function getNewsletterEditionObject()
 {
     $tmp = CjwNewsletterEditionSend::fetch($this->attribute('edition_send_id'));
     $obj = eZContentObject::fetch($tmp->attribute('edition_contentobject_id'));
     return $obj;
 }