/** * Create new CjwNewsletterSubscription object * * @param integer $listContentObjectId * @param integer $newsletterUserId * @param array $outputFormatArray * @param unknown_type $status * @return object */ static function create($listContentObjectId, $newsletterUserId, $outputFormatArray, $status = self::STATUS_PENDING, $context = 'default') { $rows = array('created' => time(), 'list_contentobject_id' => $listContentObjectId, 'newsletter_user_id' => $newsletterUserId, 'output_format_array_string' => self::arrayToString($outputFormatArray), 'creator_contentobject_id' => eZUser::currentUserID(), 'hash' => CjwNewsletterUtils::generateUniqueMd5Hash($newsletterUserId), 'remote_id' => 'cjwnl:' . $context . ':' . CjwNewsletterUtils::generateUniqueMd5Hash($newsletterUserId), 'status' => 0); $object = new CjwNewsletterSubscription($rows); // set status again so automatic status change is working $object->setAttribute('status', $status); return $object; }
/** * @return void */ static function definition() { $listDefinition = parent::definition(); // set Classname for Virtual List $listDefinition['class_name'] = 'CjwNewsletterSubscriptionVirtual'; return $listDefinition; }
/** * 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); }
function modify($tpl, $operatorName, $operatorParameters, $rootNamespace, $currentNamespace, &$operatorValue, $namedParameters) { switch ($operatorName) { case 'cjw_newsletter_preg_replace': $operatorValue = preg_replace($namedParameters['string_search'], $namedParameters['string_replace'], $operatorValue); break; case 'cjw_newsletter_str_replace': $operatorValue = str_replace($namedParameters['string_search'], $namedParameters['string_replace'], $operatorValue); break; case 'cjw_newsletter_variable': $returnValue = false; // {cjw_newsletter_variable( $namedParameters['variable_name'] )} switch ($namedParameters['variable_name']) { // {cjw_newsletter_variable( 'available_subscription_status_id_name_array' )} case 'available_subscription_status_id_name_array': $returnValue = CjwNewsletterSubscription::availableStatusIdNameArray(); break; } $operatorValue = $returnValue; break; } }
* * @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 modules * @filesource */ require_once 'kernel/common/i18n.php'; include_once 'kernel/common/template.php'; $module = $Params['Module']; $http = eZHTTPTool::instance(); $tpl = templateInit(); $templateFile = 'design:newsletter/subscription_view.tpl'; $subscriptionId = (int) $Params['SubscriptionId']; $subscriptionObject = CjwNewsletterSubscription::fetch($subscriptionId); if (!is_object($subscriptionObject)) { return $module->handleError(eZError::KERNEL_NOT_AVAILABLE, 'kernel'); } $message = ''; if ($http->hasVariable('SubscriptionApproveButton')) { $subscriptionObject->approveByAdmin(); $message = ezi18n('cjw_newsletter/subscription_view', 'Subscription successfully approved!'); } if ($http->hasVariable('SubscriptionRemoveButton')) { $subscriptionObject->removeByAdmin(); $message = ezi18n('cjw_newsletter/subscription_view', 'Subscription successfully removed!'); } $viewParameters = array(); if (is_array($Params['UserParameters'])) { $viewParameters = array_merge($viewParameters, $Params['UserParameters']);
/** * fetch all active subscriptions with current import id * and set status to remove by admin * @return array subscriptions => nl_user_id */ public function removeActiveSubscriptionsByAdmin() { $count = CjwNewsletterSubscription::fetchSubscriptionListByImportIdAndStatusCount($this->attribute('id'), CjwNewsletterSubscription::STATUS_APPROVED); CjwNewsletterLog::writeNotice("CjwNewsletterImport::removeActiveSubscriptionsByAdmin", 'import', 'start', array('import_id' => $this->attribute('id'), 'active_subscriptions' => $count, 'current_user' => eZUser::currentUserID())); // count active subscriptions for import id $removeSubscriptionArray = array(); $limit = 100; $loops = ceil($count / $limit); // get active subscriptions partly for ($i = 0; $i < $loops; $i++) { // get active subscriptions $subscriptionObjectList = CjwNewsletterSubscription::fetchSubscriptionListByImportIdAndStatus($this->attribute('id'), CjwNewsletterSubscription::STATUS_APPROVED, $limit); foreach ($subscriptionObjectList as $subscription) { $subscription->removeByAdmin(); $removeSubscriptionArray[$subscription->attribute('id')] = $subscription->attribute('newsletter_user_id'); } } $count = CjwNewsletterSubscription::fetchSubscriptionListByImportIdAndStatusCount($this->attribute('id'), CjwNewsletterSubscription::STATUS_APPROVED); CjwNewsletterLog::writeNotice("CjwNewsletterImport::removeActiveSubscriptionsByAdmin", 'import', 'end', array('import_id' => $this->attribute('id'), 'subscriptions_remove_count' => count($removeSubscriptionArray), 'current_user' => eZUser::currentUserID())); return $removeSubscriptionArray; }
/** * This should be called if a user is bounced or blacklisted * all related subscriptions and active senditems will be updated * * @param $status * @return unknown_type */ private function setAllNewsletterUserRelatedItemsToStatus($status) { $newsletterUserId = $this->attribute('id'); $updateSubcriptions = false; switch ($status) { case CjwNewsletterSubscription::STATUS_BOUNCED_SOFT: case CjwNewsletterSubscription::STATUS_BOUNCED_HARD: $bounceCount = CjwNewsletterEditionSendItem::setAllActiveItemsToStatusAbortAndBouncedByNewsletterUserId($newsletterUserId); $updateSubcriptions = true; break; case CjwNewsletterSubscription::STATUS_BLACKLISTED: // update active senditems $abortCount = CjwNewsletterEditionSendItem::setAllActiveItemsToStatusAbortByNewsletterUserId($newsletterUserId); $updateSubcriptions = true; break; } if ($updateSubcriptions === true) { // update active subscriptions $activeSubscriptionList = CjwNewsletterSubscription::fetchListNotRemovedOrBlacklistedByNewsletterUserId($newsletterUserId, true); foreach ($activeSubscriptionList as $subscription) { if ($subscription->attribute('status') == $status) { CjwNewsletterLog::writeDebug('skip - already set this status - CjwNewsletterUser::setAllNewsletterUserRelatedItemsToStatus', 'subscription', 'status', array('status' => $status, 'subscription_id' => $subscription->attribute('id'), 'nl_user' => $newsletterUserId)); } else { $subscription->setAttribute('status', $status); $subscription->store(); /* CjwNewsletterLog::writeDebug( 'set CjwNewsletterUser::setAllNewsletterUserRelatedItemsToStatus', 'subscription', 'status', array( 'status' => $status, 'subscription_id' => $subscription->attribute('id'), 'nl_user' => $newsletterUserId ) ); */ } } } }
/** * Return count of alle subribed users * * @return unknown_type */ function getUserCount() { $userCount = CjwNewsletterSubscription::fetchSubscriptionListByListIdCount($this); return $userCount; }
/** * fetch email, first_name, ... from informationcollection to use for * subscription */ private function fetchCurrentDataFromCollection($collection) { $http = eZHTTPTool::instance(); // mapping of user data from contentobject for the newsletter user // the current object must be a User!!! $dataMap = $collection->attribute('data_map'); $subscriptionDataArr = array('ez_user_id' => 0, 'email' => '', 'salutation' => 0, 'first_name' => '', 'last_name' => '', 'id_array' => array(), 'list_array' => array()); // get email from informationcollection if (isset($dataMap['email'])) { $subscriptionDataArr['email'] = $dataMap['email']->content(); } else { return false; } if (isset($dataMap['salutation'])) { $subscriptionDataArr['salutation'] = (int) $dataMap['salutation']->content(); } if (isset($dataMap['first_name'])) { $subscriptionDataArr['first_name'] = $dataMap['first_name']->content(); } if (isset($dataMap['last_name'])) { $subscriptionDataArr['last_name'] = $dataMap['last_name']->content(); } if ($http->hasPostVariable('Subscription_IdArray')) { $subscriptionDataArr['id_array'] = $http->postVariable('Subscription_IdArray'); } if ($http->hasPostVariable('Subscription_ListArray')) { $subscriptionDataArr['list_array'] = $http->postVariable('Subscription_ListArray'); } foreach ($subscriptionDataArr['id_array'] as $listId) { if ($http->hasPostVariable("Subscription_OutputFormatArray_{$listId}")) { $subscriptionDataArr['list_output_format_array'][$listId] = $http->postVariable("Subscription_OutputFormatArray_{$listId}"); } else { $defaultOutputFormatId = 0; $subscriptionDataArr['list_output_format_array'][$listId] = array($defaultOutputFormatId); } } $existingNewsletterUserObject = false; $subscriptionResultArray = false; // only create update subscriptions if a list is select if (count($subscriptionDataArr['list_array']) > 0) { if ($subscriptionDataArr['email'] != '') { $existingNewsletterUserObject = CjwNewsletterUser::fetchByEmail($subscriptionDataArr['email']); } // email exist but subscription for email is done again // => email send with configure link if (is_object($existingNewsletterUserObject)) { // $existingNewsletterUserObject->sendSubriptionInfoMail(); $mailSendResult = $existingNewsletterUserObject->sendSubcriptionInformationMail(); } else { $context = 'datatype_collect'; // subscribe to all selected lists $subscriptionResultArray = CjwNewsletterSubscription::createSubscriptionByArray($subscriptionDataArr, CjwNewsletterUser::STATUS_PENDING, false, $context); $confirmationResultArray = array(); $newNewsletterUser = CjwNewsletterUser::fetchByEmail($subscriptionDataArr['email']); $mailSendResult = $newNewsletterUser->sendSubcriptionConfirmationMail(); } } $returnArray = array('subscription_data_array' => $subscriptionDataArr, 'subscription_data_result_array' => $subscriptionResultArray, 'existing_newsletter_user' => $existingNewsletterUserObject, 'mail_send_result' => $mailSendResult); // var_dump( $returnArray ); return $returnArray; }
if ($existingSubscription->isRemovedSelf() || $existingSubscription->isBlacklisted()) { // no $createNewSubscription = 0; } else { // 2 - update $createNewSubscription = 2; $subscriptionObject = $existingSubscription; $subscriptionObject->setAttribute('status', CjwNewsletterSubscription::STATUS_APPROVED); $subscriptionObject->setAttribute('import_id', $importId); // set new remote_id $subscriptionObject->setAttribute('remote_id', 'cjwnl:csvimport:' . CjwNewsletterUtils::generateUniqueMd5Hash($newsletterUserId . $importId)); $subscriptionObject->store(); } } else { $createNewSubscription = 1; $newListSubscription = CjwNewsletterSubscription::create($listContentObjectId, $newsletterUserId, $outputFormatArray, CjwNewsletterSubscription::STATUS_APPROVED); $newListSubscription->setAttribute('import_id', $importId); // set new remote_id $newListSubscription->setAttribute('remote_id', 'cjwnl:csvimport:' . CjwNewsletterUtils::generateUniqueMd5Hash($newsletterUserId . $importId)); $newListSubscription->store(); $subscriptionObject = $newListSubscription; $newSubscriptionStatus = $subscriptionObject->attribute('status'); } } } $listSubscriptionArray[$rowId] = array('subscription_object' => $subscriptionObject, 'email_ok' => $emailOk, 'user_created' => $createNewUser, 'newsletter_user_id' => $newsletterUserId, 'subscription_created' => $createNewSubscription, 'user_status_old' => $existingUserStatus, 'user_status_new' => $newUserStatus, 'subscription_status_old' => $existingSubscriptionStatus, 'subscription_status_new' => $newSubscriptionStatus); } // imported timestamp + set count for imported users + subscriptions $importObject->setImported(); CjwNewsletterLog::writeNotice('subscription_list_csvimport', 'import', 'end', array('import_id' => $importObject->attribute('id'), 'current_user' => eZUser::currentUserID())); // store result to File
/** * Return count of alle subribed users * * @return unknown_type */ function getUserCount() { $userCount = CjwNewsletterSubscription::fetchSubscriptionListByListIdCount($this->attribute('contentobject_id')); return $userCount; }
$tpl->setVariable('user_email_already_exists', $subscriptionDataArr['email']); // $existingNewsletterUserObject->sendSubriptionInfoMail(); $mailSendResult = $existingNewsletterUserObject->sendSubcriptionInformationMail(); $tpl->setVariable('newsletter_user', $existingNewsletterUserObject); $tpl->setVariable('mail_send_result', $mailSendResult); $tpl->setVariable('subscription_result_array', false); $tpl->setVariable('back_url_input', $backUrl); if ($mailSendResult['send_result'] === true) { $templateFile = "design:newsletter/subscribe_success.tpl"; } else { $templateFile = "design:newsletter/subscribe_success_not.tpl"; } } else { if (count($warningArr) == 0) { // subscribe to all selected lists $subscriptionResultArray = CjwNewsletterSubscription::createSubscriptionByArray($subscriptionDataArr, CjwNewsletterUser::STATUS_PENDING, true, $context); $newNewsletterUser = CjwNewsletterUser::fetchByEmail($subscriptionDataArr['email']); $mailSendResult = $newNewsletterUser->sendSubcriptionConfirmationMail(); $tpl->setVariable('user_email_already_exists', false); $tpl->setVariable('mail_send_result', $mailSendResult); $tpl->setVariable('newsletter_user', $newNewsletterUser); $tpl->setVariable('subscription_result_array', $subscriptionResultArray); $tpl->setVariable('back_url_input', $backUrl); $templateFile = 'design:newsletter/subscribe_success.tpl'; } } } } if ($user) { $tpl->setVariable('user', $user); }
/** * File unsubscribe.php * * @copyright Copyright (C) 2007-2012 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 modules * @filesource */ require_once 'kernel/common/i18n.php'; include_once 'kernel/common/template.php'; $module = $Params['Module']; $http = eZHTTPTool::instance(); $tpl = templateInit(); $subscription = CjwNewsletterSubscription::fetchByHash($Params['Hash']); if (!$subscription) { return $module->handleError(eZError::KERNEL_NOT_AVAILABLE, 'kernel'); } $newsletterUser = $subscription->attribute('newsletter_user'); if (!is_object($newsletterUser)) { return $module->handleError(eZError::KERNEL_NOT_AVAILABLE, 'kernel'); } if ($newsletterUser->isOnBlacklist()) { return $module->handleError(eZError::KERNEL_NOT_AVAILABLE, 'kernel'); } if ($subscription->isRemoved()) { $tplTemplate = 'design:newsletter/unsubscribe_already_done.tpl'; } elseif ($module->isCurrentAction('Unsubscribe')) { $unsubscribeResult = $subscription->unsubscribe(); $tpl->setVariable('unsubscribe_result', $unsubscribeResult);
$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'); $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); $message = "++ Find SubscriptionObjects with STATUS_APPROVED: " . count($subscriptionObjectList); $cli->output($message); $counter = 0; foreach ($subscriptionObjectList as $subscriptionObject) { $subscriptionId = $subscriptionObject->attribute('id'); $editionContentObjectId = $subscriptionObject->attribute('edition_contentobject_id'); $newsletterUserId = $subscriptionObject->attribute('newsletter_user_id'); $subscriptionOutputFormatArray = $subscriptionObject->attribute('output_format_array'); $counter++; // status == STATUS_WAIT_FOR_PROCESS || != ABORT ? $newsletterEdtionSendObject->sync(); if ($newsletterEdtionSendObject->attribute('status') == CjwNewsletterEditionSend::STATUS_WAIT_FOR_PROCESS) { // every subscription can have multiple outputformats // create for every outputformat one send_item foreach ($subscriptionOutputFormatArray as $outputFormatId => $outputFormatName) {
{ $newsletter_user_subscription_array[ $listId ] = CjwNewsletterSubscription::removeSubscriptionByAdmin( $listId, $existingNewsletterUserId ); } } */ // modifing nl subscriptions // e.g. add non existingl subscription or modify existing foreach ($idArray as $listId) { $outputFormatArray = $listOutputFormatArray[$listId]; $subscriptionStatusIdPostVarName = 'Subscription_StatusId_' . $listId; $status = -1; if ($http->hasPostVariable($subscriptionStatusIdPostVarName)) { $status = (int) $http->postVariable($subscriptionStatusIdPostVarName); } if ($status >= 0) { $newsletter_user_subscription_array[$listId] = CjwNewsletterSubscription::createUpdateNewsletterSubscription($listId, $existingNewsletterUserId, $outputFormatArray, $status, $dryRun, $context); } } } if ($module->isCurrentAction('Store') && count($warningArr) == 0) { if ($contextCreateNewsletterUser === true && $redirectUrlStore === false) { $newNewsletterUserObject = CjwNewsletterUser::fetchByEmail($subscriptionDataArr['email']); if (is_object($newNewsletterUserObject)) { $redirectUrlStore = '/newsletter/user_view/' . $newNewsletterUserObject->attribute('id'); } } elseif ($redirectUrlStore === false) { $redirectUrlStore = '/newsletter/user_list/'; } // if all is ok $module->redirectTo($redirectUrlStore); } elseif ($module->isCurrentAction('Cancel')) {
/** * count all subscriptions with import_id * @param integer $importId * @return array */ static function fetchImportSubscriptionListCount($importId) { $objectCount = CjwNewsletterSubscription::fetchSubscriptionListByImportIdCount($importId); return array('result' => $objectCount); }
* @subpackage modules * @filesource */ include_once 'kernel/common/template.php'; $module = $Params["Module"]; $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
$subscriptionDataArray['last_name'] = trim($http->postVariable('Subscription_LastName')); } if ($http->hasPostVariable('Subscription_Salutation')) { $subscriptionDataArray['salutation'] = trim($http->postVariable('Subscription_Salutation')); } if ($http->hasPostVariable('Subscription_IdArray')) { $subscriptionDataArray['id_array'] = $http->postVariable('Subscription_IdArray'); } if ($http->hasPostVariable('Subscription_ListArray')) { $subscriptionDataArray['list_array'] = $http->postVariable('Subscription_ListArray'); } // $subscriptionDataArr['list_output_format_array'] = array(); foreach ($subscriptionDataArray['id_array'] as $listId) { if ($http->hasPostVariable("Subscription_OutputFormatArray_{$listId}")) { $subscriptionDataArray['list_output_format_array'][$listId] = $http->postVariable("Subscription_OutputFormatArray_{$listId}"); } else { $defaultOutputFormatId = 0; $subscriptionDataArray['list_output_format_array'][$listId] = array($defaultOutputFormatId); } } // TODO // required fields // update subscribe/ remove supscripions $subscriptionResultArray = CjwNewsletterSubscription::createSubscriptionByArray($subscriptionDataArray, CjwNewsletterUser::STATUS_PENDING, $subscribeOnlyMode = false, $context = 'configure'); $tpl->setVariable('changes_saved', true); } $newsletterUser = CjwNewsletterUser::fetchByHash($Params['UserHash']); $tpl->setVariable('newsletter_user', $newsletterUser); $Result = array(); $Result['content'] = $tpl->fetch('design:newsletter/configure.tpl'); $Result['path'] = array(array('url' => false, 'text' => ezi18n('cjw_newsletter/configure', 'Configure newsletter settings')));
/** * * @return unknown_type */ function getNewsletterSubscriptionObject() { return CjwNewsletterSubscription::fetch($this->attribute('subscription_id')); }
/** * Return userobject by id * * @param integer $id * @return object */ static function fetch($id) { $object = eZPersistentObject::fetchObject(CjwNewsletterSubscription::definition(), null, array('id' => $id), true); return $object; }
/** * if subscriptionId = 0 the subscription is came from virtual list * @return object CjwNewsletterSubscription or CjwNewsletterSubscriptionVirtual */ function getNewsletterSubscriptionObject() { if ($this->attribute('is_subscription_virtual')) { $subscriptionObject = CjwNewsletterSubscriptionVirtual::createByUserIdAndEditionSendId($this->attribute('newsletter_user_id'), $this->attribute('edition_send_id')); } else { $subscriptionObject = CjwNewsletterSubscription::fetch($this->attribute('subscription_id')); } return $subscriptionObject; }