//   Public License along with this program; if not, write to the Free
//   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
//   MA 02110-1301, USA.
//
//
// ## END COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
//
/*! \file register_subscription.php
*/
include_once 'kernel/common/eztemplatedesignresource.php';
include_once 'kernel/common/template.php';
include_once eZExtension::baseDirectory() . '/eznewsletter/classes/ezsubscriptionlist.php';
include_once eZExtension::baseDirectory() . '/eznewsletter/classes/ezsubscription.php';
$Module =& $Params['Module'];
$http =& eZHTTPTool::instance();
$subscriptionList = eZSubscriptionList::fetch($Params['SubscriptionListID']);
$res =& eZTemplateDesignResource::instance();
$res->setKeys(array(array('newsletter_view', 'register_subscription')));
if (!$subscriptionList) {
    return $Module->handleError(3, 'kernel');
}
$http->setSessionVariable("register_subscription", $subscriptionList->attribute('id'));
$user = false;
$currentUser = eZUser::currentUser();
if ($currentUser->isLoggedIn()) {
    $user = $currentUser;
}
if (!$user) {
    eZDebug::writeError('Missing parameter Object ID.', "Translation management");
    return $Module->handleError(1, 'kernel');
}
//
/*! \file user_settings.php
*/
$Module = $Params['Module'];
$http = eZHTTPTool::instance();
$tpl = eZNewsletterTemplateWrapper::templateInit();
if ($http->hasPostVariable('CreateSubscriptionButton')) {
    $tpl->setVariable('newUser', true);
}
if ($http->hasPostVariable('AddSubscription')) {
    if ($http->hasVariable('original_email')) {
        $userData = eZUserSubscriptionData::fetch($http->postVariable('original_email'));
        if ($userData) {
            if ($http->hasVariable('AddSubscriptionID')) {
                foreach ($http->postVariable('AddSubscriptionID') as $subscriptionID) {
                    $subscriptionList = eZSubscriptionList::fetch($subscriptionID, eZSubscriptionList::StatusPublished, true, true);
                    if ($subscriptionList) {
                        $subscription = $subscriptionList->registerSubscription($userData->attribute('firstname'), $userData->attribute('name'), $userData->attribute('mobile'), $userData->attribute('email'), false);
                        $subscription->setAttribute('status', eZSubscription::StatusApproved);
                        $subscription->store();
                    }
                }
            }
        }
    }
}
if ($http->hasPostVariable('UpdateSubscriptions')) {
    if ($http->hasVariable('original_email') && $http->postVariable('original_email') != "") {
        $userData = eZUserSubscriptionData::fetch($http->postVariable('original_email'));
        $allowedStatusList = array(eZSubscription::StatusApproved, eZSubscription::StatusPending, eZSubscription::StatusConfirmed, eZSubscription::StatusRemovedSelf, eZSubscription::StatusRemovedAdmin);
        $subscriptionList = eZSubscription::fetchListByEmail($userData->attribute('email'), eZSubscription::VersionStatusPublished, array(array(eZSubscription::StatusPending, eZSubscription::StatusApproved, eZSubscription::StatusConfirmed, eZSubscription::StatusRemovedSelf, eZSubscription::StatusRemovedAdmin)));
 function attribute($attr, $noFunction = false)
 {
     $retVal = null;
     switch ($attr) {
         case 'related_object_1':
         case 'related_object_2':
         case 'related_object_3':
             // #DEPRECATED#
             $retVal = eZContentObject::fetch($this->attribute('related_object_id_' . substr($attr, -1, 1)));
             break;
         case 'inbox_object':
             if ($this->attribute('inbox_id')) {
                 $retVal = eZContentObject::fetch($this->attribute('inbox_id'));
             }
             break;
         case 'subscription_id_list':
             $list = eZNewsletterTypeSubscription::fetchList($this->attribute('id'), false, $this->attribute('status'));
             if ($list) {
                 $retVal = array();
                 foreach ($list as $subItem) {
                     $retVal[] = $subItem->attribute('subscription_id');
                 }
             }
             break;
         case 'default_subscription_list':
             $subscriptionListLink = eZSubscriptionList::fetch($this->attribute('defaultsubscriptionlist_id'));
             if (!$retVal) {
                 $subscriptionList = $this->attribute('subscription_list');
                 if (0 < count($subscriptionList)) {
                     $subscriptionListLink = $subscriptionList[0];
                 }
             }
             if ($subscriptionListLink) {
                 $retVal = $subscriptionListLink->attribute('subscription_object');
             }
             break;
         default:
             $retVal = eZPersistentObject::attribute($attr);
             break;
     }
     return $retVal;
 }
function sendConfirmation($email, $subscription, $subscribe)
{
    //send mail
    $res = eZTemplateDesignResource::instance();
    $ini = eZINI::instance();
    $hostname = eZSys::hostname();
    if ($subscribe) {
        $template = 'design:eznewsletter/sendout/subscription.tpl';
    } else {
        $template = 'design:eznewsletter/sendout/unsubscription.tpl';
    }
    $tpl = eZNewsletterTemplateWrapper::templateInit();
    $tpl->setVariable('userData', eZUserSubscriptionData::fetch($email));
    $tpl->setVariable('hostname', $hostname);
    $tpl->setVariable('subscription', $subscription);
    $subscriptionList = eZSubscriptionList::fetch($subscription->attribute('subscriptionlist_id'), eZSubscriptionList::StatusPublished, true, true);
    $tpl->setVariable('subscriptionList', $subscriptionList);
    $templateResult = $tpl->fetch($template);
    if ($tpl->hasVariable('subject')) {
        $subject = $tpl->variable('subject');
    }
    $mail = new eZMail();
    $mail->setSender($ini->variable('MailSettings', 'EmailSender'));
    $mail->setReceiver($email);
    $mail->setBody($templateResult);
    $mail->setSubject($subject);
    eZMailTransport::send($mail);
}
 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');
 }
 function subscriptionObject()
 {
     $retVal = eZSubscriptionList::fetch($this->attribute('subscription_id'), $this->attribute('status'), true, true);
     return $retVal;
 }
include_once 'kernel/common/eztemplatedesignresource.php';
include_once 'kernel/common/template.php';
include_once eZExtension::baseDirectory() . '/eznewsletter/classes/ezsubscriptionlist.php';
include_once eZExtension::baseDirectory() . '/eznewsletter/classes/ezsubscription.php';
include_once eZExtension::baseDirectory() . '/eznewsletter/classes/eznewsletteraddons.php';
$Module =& $Params['Module'];
$http =& eZHTTPTool::instance();
if ($http->hasSessionVariable('LastPostVars')) {
    $_POST = $http->sessionVariable('LastPostVars');
    $http->removeSessionVariable('LastPostVars');
}
$http->setSessionVariable("register_subscription", array());
$http->setSessionVariable("unregister_subscription", array());
if ($Module->hasActionParameter('ChoosenSubscriptions')) {
    foreach ($Module->actionParameter('ChoosenSubscriptions') as $sub) {
        $subscriptionList = eZSubscriptionList::fetch($sub);
        if (!$subscriptionList) {
            eZDebug::writeError('ID "' . $sub . '" not found.', "");
            return $Module->handleError(3, 'kernel');
        }
        $subscriptions[] = $subscriptionList->attribute('id');
        if ($Module->isCurrentAction('Add')) {
            $http->removeSessionVariable("unregister_subscription");
            $http->setSessionVariable("register_subscription", $subscriptions);
        }
        if ($Module->isCurrentAction('Remove')) {
            $http->removeSessionVariable("register_subscription");
            $http->setSessionVariable("unregister_subscription", $subscriptions);
        }
    }
}
 function subscriptionList()
 {
     return eZSubscriptionList::fetch($this->attribute('subscriptionlist_id'), eZSubscriptionList::StatusPublished, true, true);
 }
 static function fetchDraft($id, $asObject = true)
 {
     $subscriptionList = eZSubscriptionList::fetch($id, eZSubscriptionList::StatusDraft, $asObject);
     if (!$subscriptionList) {
         $subscriptionList = eZSubscriptionList::fetch($id, eZSubscriptionList::StatusPublished, $asObject);
         if ($subscriptionList) {
             $subscriptionList->setAttribute('status', eZSubscriptionList::StatusDraft);
             $subscriptionList->store();
         }
     }
     if (!$subscriptionList) {
         return false;
     }
     return $subscriptionList;
 }