public static function addSubscription($email, $name, $list, $force_active = false)
 {
     $date_time = time();
     $userId = eZUser::currentUser()->attribute("contentobject_id");
     $subscription = $list->fetchSubscriberByEmail($email);
     $defaultState = $list->confirmationRequired() && !$force_active ? 'unconfirmed' : 'active';
     if ($subscription) {
         $currentState = $subscription->attribute("state");
         if ($currentState == 'active') {
             if ($name) {
                 $subscription->setAttribute('name', $name);
                 $subscription->store();
             }
             return $subscription;
         } else {
             if ($currentState == 'unsubscribed') {
                 $subscription->setAttribute('unsubscribed', 0);
             } else {
                 if ($currentState == 'bounced') {
                     $subscription->setAttribute('bounced', 0);
                 } else {
                     if ($currentState == 'deleted') {
                         return $subscription;
                     }
                 }
             }
         }
     } else {
         $subscription = new jajNewsletterSubscription();
         $subscription->setAttribute('subscribed', $date_time);
         $subscription->setAttribute('email', $email);
         $subscription->setAttribute('subscription_list_id', $list->ID);
         $subscription->setAttribute('created', $date_time);
         $subscription->setAttribute('creator_id', $userId);
     }
     $confirmed_time = $defaultState == 'active' ? $date_time : 0;
     if ($name) {
         $subscription->setAttribute('name', $name);
     }
     $subscription->setAttribute('state', $defaultState);
     $subscription->setAttribute('confirmed', $confirmed_time);
     $subscription->setAttribute('modified', $date_time);
     $subscription->setAttribute('modifier_id', $userId);
     if ($subscription->isValid()) {
         $subscription->store();
     }
     return $subscription;
 }