/** * Synchronous registration / deregistration for several lists with an array * if id_array has more elements than list_array, than is a deregistration defined * the difference of id_array and list_array means that these elements shouldn't * has subscriptions * * $subscriptionDataArr = array(); * $subscriptionDataArr['ez_user_id'] * $subscriptionDataArr['salutation'] * $subscriptionDataArr['first_name'] = $http->postVariable( 'Subscription_FirstName' ); * $subscriptionDataArr['name'] = $http->postVariable( 'Subscription_Name' ); * $subscriptionDataArr['email'] = $http->postVariable( 'Subscription_Email' ); * * $subscriptionDataArr['id_array'] = $http->postVariable( 'Subscription_IdArray' ); * $subscriptionDataArr['list_array'] = $http->postVariable( 'Subscription_ListArray' ); * $subscriptionDataArr['list_output_format_array'] = $http->postVariable( 'Subscription_OutputFormatArray' ); * * @param array $subscriptionDataArr * @param $newNewsletterUserStatus status for new created nl users e.g. CjwNewsletterUser::STATUS_PENDING * @param $subscribeOnlyMode if true than no subscription will be removed used if subscription is done as ez_user * @param $context subscribe | configure | user_edit | datatype_edit | datatype_collect | csvimport from which context the function is called * @return array */ static function createSubscriptionByArray($subscriptionDataArr, $newNewsletterUserStatus = CjwNewsletterUser::STATUS_PENDING, $subscribeOnlyMode = false, $context = 'default') { $resultArray = array(); $resultArray['list_subscribe'] = array(); $resultArray['list_remove'] = array(); $resultArray['errors'] = array(); $email = $subscriptionDataArr['email']; if (isset($subscriptionDataArr['salutation'])) { $salutation = $subscriptionDataArr['salutation']; } else { $salutation = null; } $firstName = $subscriptionDataArr['first_name']; $lastName = $subscriptionDataArr['last_name']; $eZUserId = isset($subscriptionDataArr['ez_user_id']) ? (int) $subscriptionDataArr['ez_user_id'] : 0; // new value form POST $newEzUserId = $eZUserId; $newEmail = $email; // TODO return here the nl user object for update + status $checkResult = CjwNewsletterUser::checkIfUserCanBeUpdated($email, $eZUserId, $updateNewEmail = true); switch ($checkResult) { // create new user case 40: break; // update user // update user case 41: break; // update user with new mail // update user with new mail case 42: break; case -20: case -1: if ($context == 'subscribe') { eZDebug::writeDebug("checkResult[{$checkResult}] - CjwNewsletterSubscription::createSubscriptionByArray return false because email already exists"); // break because a newsletter user with email exists return false; } break; } $idArray = $subscriptionDataArr['id_array']; $listArray = $subscriptionDataArr['list_array']; $listOutputFormatArray = $subscriptionDataArr['list_output_format_array']; $newsletterUserObject = CjwNewsletterUser::createUpdateNewsletterUser($email, $salutation, $firstName, $lastName, $eZUserId, (int) $newNewsletterUserStatus, $context); $resultArray['newsletter_user_object'] = $newsletterUserObject; if (is_object($newsletterUserObject) === false) { return $resultArray['errors'] = "Can not create new newsletter user with {$email}"; } $newsletterUserId = $newsletterUserObject->attribute('id'); // list_subscribe foreach ($listArray as $listId) { $outputFormatArray = $listOutputFormatArray[$listId]; $status = CjwNewsletterSubscription::STATUS_PENDING; $dryRun = false; $resultArray['list_subscribe'][$listId] = CjwNewsletterSubscription::createUpdateNewsletterSubscription($listId, $newsletterUserId, $outputFormatArray, $status, $dryRun, $context); } if ($subscribeOnlyMode === false) { $listRemoveArray = array_diff($idArray, $listArray); // list_remove by user self foreach ($listRemoveArray as $listId) { $resultArray['list_remove'][$listId] = CjwNewsletterSubscription::removeSubscriptionByNewsletterUserSelf($listId, $newsletterUserId); } } return $resultArray; }
{ $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')) {