/** * 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); }
/** * create / update subscription * return newsletter_user_object * * @param integer $listContentObjectId * @param integer $newsletterUserId * @param array $outputFormatArray * @param integer $status * @param integer $dryRun if true changes will be not stored to db usefull for test runs @see user_edit * @return object */ static function createUpdateNewsletterSubscription($listContentObjectId, $newsletterUserId, $outputFormatArray, $status = CjwNewsletterSubscription::STATUS_PENDING, $dryRun = false, $context = 'default') { $existingSubscriptionObject = CjwNewsletterSubscription::fetchByListIdAndNewsletterUserId($listContentObjectId, $newsletterUserId); $newsletterUser = CjwNewsletterUser::fetch($newsletterUserId); // if nl user status is confirmed set all nl subscription with status pending to confirmed if (is_object($newsletterUser) && (int) $newsletterUser->attribute('status') == CjwNewsletterUser::STATUS_CONFIRMED && $status == CjwNewsletterSubscription::STATUS_PENDING) { $status = CjwNewsletterSubscription::STATUS_CONFIRMED; } // update existing if (is_object($existingSubscriptionObject)) { $existingSubscriptionObject->setAttribute('output_format_array_string', CjwNewsletterSubscription::arrayToString($outputFormatArray)); if ($context == 'configure') { // if nl list autoapprove is disabled + admin has approved the nl subscription // + the nl subscription should be get status approved when update confirmstatus, if ($existingSubscriptionObject->attribute('status') == CjwNewsletterSubscription::STATUS_APPROVED) { // set confirmed timestamp if emty - could be possible if admin has approved subscription before user has confirm his email address if ($existingSubscriptionObject->attribute('confirmed') == 0) { $existingSubscriptionObject->setAttribute('confirmed', time()); } // else nothing } else { $existingSubscriptionObject->setAttribute('status', $status); } } else { $existingSubscriptionObject->setAttribute('status', $status); } if ($dryRun === false) { $existingSubscriptionObject->sync(); } return $existingSubscriptionObject; } else { $object = CjwNewsletterSubscription::create($listContentObjectId, $newsletterUserId, $outputFormatArray, $status, $context); if ($dryRun === false) { $object->store(); } return $object; } }
$userObject = CjwNewsletterUser::createUpdateNewsletterUser($email, $salutation, $firstName, $lastName, $eZUserId, CjwNewsletterUser::STATUS_CONFIRMED, 'default', $customDataText1, $customDataText2, $customDataText3, $customDataText4); $userObject->setAttribute('import_id', $importId); // set new remote_id if ($remote_id !== false) { $userObject->setAttribute('remote_id', $remote_id); } else { $userObject->setAttribute('remote_id', 'cjwnl:csvimport:' . CjwNewsletterUtils::generateUniqueMd5Hash($userObject->attribute('id'))); } $userObject->store(); $newUserStatus = $userObject->attribute('status'); } $newsletterUserId = $userObject->attribute('id'); $outputFormatArray = $selectedOutputFormatArray; // only user which are not blacklisted can get a new subscription if ($newsletterUserId != null && $userIsBlacklistedOrRemoved === false) { $existingSubscription = CjwNewsletterSubscription::fetchByListIdAndNewsletterUserId($listContentObjectId, $newsletterUserId); // if subscription exists do nothing if (is_object($existingSubscription)) { $existingSubscriptionStatus = $existingSubscription->attribute('status'); // if user has removed a subscription by himself // don't activate it again 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