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