/** * 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); }
* @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; } }
$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);
/** * 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; }