function onPublish($attribute, $contentObject, $publishedNodes)
 {
     $http = eZHTTPTool::instance();
     $userID = $attribute->attribute('contentobject_id');
     $data = unserialize($attribute->attribute('data_text'));
     $avialable = array_merge($data['unregister'], $data['register']);
     foreach ($avialable as $id) {
         $subscription = eZSubscription::fetchByUserSubscriptionListID($userID, $id);
         if (isset($subscription) and $subscription->attribute('status') == eZSubscription::StatusApproved and in_array($id, $data['unregister'])) {
             $subscription->unsubscribe();
         } elseif (isset($subscription) and $subscription->attribute('status') == eZSubscription::StatusRemovedSelf and in_array($id, $data['register'])) {
             $subscription->setAttribute('status', eZSubscription::StatusApproved);
             $subscription->sync();
         } elseif (!isset($subscription) and in_array($id, $data['register'])) {
             $list = eZSubscriptionList::fetch($id, eZSubscriptionList::StatusPublished, true, true);
             if ($list) {
                 $subscription = $list->registerUser($userID);
             }
         }
         if ($subscription) {
             $version = eZContentObjectVersion::fetchVersion($attribute->attribute('version'), $attribute->attribute('contentobject_id'));
             $user = eZUser::fetch($attribute->attribute('contentobject_id'));
             $userData = eZUserSubscriptionData::fetch($user->attribute('email'));
             $dm = $version->attribute('data_map');
             if (!$userData) {
                 $userData = eZUserSubscriptionData::create('', '', '', $user->attribute('email'));
             }
             if ($user->attribute('email')) {
                 $userData->updateAttribute('email', $user->attribute('email'));
                 $userData->store();
             }
             if (isset($dm['last_name'])) {
                 $userData->setAttribute('name', $dm['last_name']->attribute('data_text'));
                 $userData->store();
             }
             if (isset($dm['first_name'])) {
                 $userData->setAttribute('firstname', $dm['first_name']->attribute('data_text'));
                 $userData->store();
             }
             if (isset($dm['mobile'])) {
                 $userData->setAttribute('mobile', $dm['mobile']->attribute('data_text'));
                 $userData->store();
             }
         }
     }
     $http->removeSessionVariable('register_subscription');
     $http->removeSessionVariable('unregister_subscription');
 }
                $userData->setAttribute('email', $http->postVariable('Email'));
            }
        }
        if ($http->hasPostVariable('Password1') && $http->postVariable('Password1') != 'password') {
            if ($http->postVariable('Password1') === $http->postVariable('Password2') && strlen(trim($http->postVariable('Password1'))) > 0) {
                $userData->setVariable('password', md5($http->postVariable('Password1')));
            } else {
                $warning = ezpI18n::tr('eznewsletter/modify_subscription', 'Password did not match');
            }
        }
        $userData->sync();
        //get new Data inmemory
        $userData = eZUserSubscriptionData::fetch($http->postVariable('original_email'));
    } else {
        //create new
        $userData = eZUserSubscriptionData::create($http->postVariable('FirstName'), $http->postVariable('Name'), $http->postVariable('Mobile'), $http->postVariable('Email'));
        //redirect to self
        if ($userData) {
            return $Module->redirectTo('/newsletter/modify_subscription/' . $userData->attribute('hash'));
        }
    }
}
if ($Params['hash'] != "") {
    $userData = eZUserSubscriptionData::fetchByHash($Params['hash']);
    if (!$userData) {
        $tpl = eZNewsletterTemplateWrapper::templateInit();
        $Result = array();
        $Result['left_menu'] = 'design:parts/content/eznewsletter_menu.tpl';
        $Result['content'] = $tpl->fetch("design:ezsubscribe/no_subscription.tpl");
        $Result['path'] = array(array('url' => false, 'text' => ezpI18n::tr('eznewsletter/modify_subscription', 'No subscription')));
        return $Result;
 static function create($subscriptionListID, $firstname = '', $name = '', $mobile = '', $email = '', $userID = false)
 {
     if (!isset($subscriptionListID)) {
         return false;
     }
     $rows = array('created' => time(), 'creator_id' => eZUser::currentUserID(), 'hash' => md5(mt_rand() . '-' . mt_rand()), 'mobile' => $mobile, 'email' => $email, 'subscriptionlist_id' => $subscriptionListID, 'status' => eZSubscription::VersionStatusDraft);
     if ($userID !== false) {
         $rows['user_id'] = $userID;
     } else {
         $userData = eZUserSubscriptionData::fetch($email);
         if (!$userData && $email) {
             eZUserSubscriptionData::create($firstname, $name, $mobile, $email);
         }
     }
     $subscription = new eZSubscription($rows);
     $subscription->store();
     return $subscription;
 }