/app/code/core/Mage/Newsletter/Model/Subscriber.php
PHP | 535 lines | 307 code | 71 blank | 157 comment | 55 complexity | d0e96c9ae8a5c30d9d985cbacb5bd48c MD5 | raw file
Possible License(s): GPL-2.0
- <?php
- /**
- * Magento
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Open Software License (OSL 3.0)
- * that is bundled with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://opensource.org/licenses/osl-3.0.php
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@magentocommerce.com so we can send you a copy immediately.
- *
- * DISCLAIMER
- *
- * Do not edit or add to this file if you wish to upgrade Magento to newer
- * versions in the future. If you wish to customize Magento for your
- * needs please refer to http://www.magentocommerce.com for more information.
- *
- * @category Mage
- * @package Mage_Newsletter
- * @copyright Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
- /**
- * Subscriber model
- *
- * @category Mage
- * @package Mage_Newsletter
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_Newsletter_Model_Subscriber extends Varien_Object
- {
- const STATUS_SUBSCRIBED = 1;
- const STATUS_NOT_ACTIVE = 2;
- const STATUS_UNSUBSCRIBED = 3;
- const XML_PATH_CONFIRM_EMAIL_TEMPLATE = 'newsletter/subscription/confirm_email_template';
- const XML_PATH_CONFIRM_EMAIL_IDENTITY = 'newsletter/subscription/confirm_email_identity';
- const XML_PATH_SUCCESS_EMAIL_TEMPLATE = 'newsletter/subscription/success_email_template';
- const XML_PATH_SUCCESS_EMAIL_IDENTITY = 'newsletter/subscription/success_email_identity';
- const XML_PATH_UNSUBSCRIBE_EMAIL_TEMPLATE = 'newsletter/subscription/un_email_template';
- const XML_PATH_UNSUBSCRIBE_EMAIL_IDENTITY = 'newsletter/subscription/un_email_identity';
- const XML_PATH_CONFIRMATION_FLAG = 'newsletter/subscription/confirm';
- const XML_PATH_SENDING_SET_RETURN_PATH = 'newsletter/sending/set_return_path';
- protected $_isStatusChanged = false;
- /**
- * Alias for getSubscriberId()
- *
- * @return int
- */
- public function getId()
- {
- return $this->getSubscriberId();
- }
- /**
- * Alias for setSubscriberId()
- *
- * @param int $value
- */
- public function setId($value)
- {
- return $this->setSubscriberId($value);
- }
- /**
- * Alias for getSubscriberConfirmCode()
- *
- * @return string
- */
- public function getCode()
- {
- return $this->getSubscriberConfirmCode();
- }
- /**
- * Return link for confirmation of subscription
- *
- * @return string
- */
- public function getConfirmationLink() {
- return Mage::helper('newsletter')->getConfirmationUrl($this);
- }
- public function getUnsubscriptionLink() {
- return Mage::helper('newsletter')->getUnsubscribeUrl($this);
- }
- /**
- * Alias for setSubscriberConfirmCode()
- *
- * @param string $value
- */
- public function setCode($value)
- {
- return $this->setSubscriberConfirmCode($value);
- }
- /**
- * Alias for getSubscriberStatus()
- *
- * @return int
- */
- public function getStatus()
- {
- return $this->getSubscriberStatus();
- }
- /**
- * Alias for setSubscriberStatus()
- *
- * @param int
- */
- public function setStatus($value)
- {
- return $this->setSubscriberStatus($value);
- }
- /**
- * Set the error messages scope for subscription
- *
- * @param boolean $scope
- * @return unknown
- */
- public function setMessagesScope($scope)
- {
- $this->getResource()->setMessagesScope($scope);
- return $this;
- }
- /**
- * Alias for getSubscriberEmail()
- *
- * @return string
- */
- public function getEmail()
- {
- return $this->getSubscriberEmail();
- }
- /**
- * Alias for setSubscriberEmail()
- *
- * @param string $value
- */
- public function setEmail($value)
- {
- return $this->setSubscriberEmail($value);
- }
- /**
- * Set for status change flag
- *
- * @param boolean $value
- */
- public function setIsStatusChanged($value)
- {
- $this->_isStatusChanged = (boolean) $value;
- return $this;
- }
- /**
- * Return status change flag value
- *
- * @return boolean
- */
- public function getIsStatusChanged()
- {
- return $this->_isStatusChanged;
- }
- /**
- * Return customer subscription status
- *
- * @return bool
- */
- public function isSubscribed()
- {
- if($this->getId() && $this->getStatus()==self::STATUS_SUBSCRIBED) {
- return true;
- }
- return false;
- }
- /**
- * Return resource model
- *
- * @return Mage_Subscriber_Model_Mysql4_Subscriber
- */
- public function getResource()
- {
- return Mage::getResourceSingleton('newsletter/subscriber');
- }
- /**
- * Load subscriber data from resource model
- *
- * @param int $subscriberId
- */
- public function load($subscriberId)
- {
- $this->addData($this->getResource()->load($subscriberId));
- return $this;
- }
- /**
- * Load subscriber data from resource model by email
- *
- * @param int $subscriberId
- */
- public function loadByEmail($subscriberEmail)
- {
- $this->addData($this->getResource()->loadByEmail($subscriberEmail));
- return $this;
- }
- /**
- * Load subscriber info by customer
- *
- * @param Mage_Customer_Model_Customer $customer
- * @return Mage_Newsletter_Model_Subscriber
- */
- public function loadByCustomer(Mage_Customer_Model_Customer $customer)
- {
- $data = $this->getResource()->loadByCustomer($customer);
- $this->addData($data);
- if (!empty($data) && $customer->getId() && !$this->getCustomerId()) {
- $this->setCustomerId($customer->getId());
- $this->setSubscriberConfirmCode($this->randomSequence());
- if ($this->getStatus()==self::STATUS_NOT_ACTIVE) {
- $this->setStatus($customer->getIsSubscribed() ? self::STATUS_SUBSCRIBED : self::STATUS_UNSUBSCRIBED);
- }
- $this->save();
- }
- return $this;
- }
- /**
- * Save subscriber data to resource model
- *
- */
- public function save()
- {
- return $this->getResource()->save($this);
- }
- /**
- * Deletes subscriber data
- */
- public function delete()
- {
- $this->getResource()->delete($this->getId());
- $this->setId(null);
- }
- public function randomSequence($length=32)
- {
- $id = '';
- $par = array();
- $char = array_merge(range('a','z'),range(0,9));
- $charLen = count($char)-1;
- for ($i=0;$i<$length;$i++){
- $disc = mt_rand(0, $charLen);
- $par[$i] = $char[$disc];
- $id = $id.$char[$disc];
- }
- return $id;
- }
- public function subscribe($email)
- {
- $this->loadByEmail($email);
- $customer = Mage::getModel('customer/customer')
- ->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
- ->loadByEmail($email);
- $isNewSubscriber = false;
- $customerSession = Mage::getSingleton('customer/session');
- if(!$this->getId()) {
- $this->setSubscriberConfirmCode($this->randomSequence());
- }
- // if(($this->getCustomerId() && !$customerSession->isLoggedIn())
- // || ($this->getCustomerId()
- // && $customerSession->getCustomerId() != $this->getCustomerId()
- // )) {
- // return $this->getSubscriberStatus();
- // }
- if (!$this->getId() || $this->getStatus()==self::STATUS_UNSUBSCRIBED || $this->getStatus()==self::STATUS_NOT_ACTIVE) {
- if (Mage::getStoreConfig(self::XML_PATH_CONFIRMATION_FLAG) == 1) {
- $this->setStatus(self::STATUS_NOT_ACTIVE);
- } else {
- $this->setStatus(self::STATUS_SUBSCRIBED);
- }
- $this->setSubscriberEmail($email);
- }
- if ($customerSession->isLoggedIn()) {
- $this->setStoreId($customerSession->getCustomer()->getStoreId());
- $this->setStatus(self::STATUS_SUBSCRIBED);
- $this->setCustomerId($customerSession->getCustomerId());
- } else if ($customer->getId()) {
- $this->setStoreId($customer->getStoreId());
- $this->setSubscriberStatus(self::STATUS_SUBSCRIBED);
- $this->setCustomerId($customer->getId());
- } else {
- $this->setStoreId(Mage::app()->getStore()->getId());
- $this->setCustomerId(0);
- $isNewSubscriber = true;
- }
- $this->setIsStatusChanged(true);
- try {
- $this->save();
- if (Mage::getStoreConfig(self::XML_PATH_CONFIRMATION_FLAG) == 1
- && $this->getSubscriberStatus()==self::STATUS_NOT_ACTIVE) {
- $this->sendConfirmationRequestEmail();
- } else {
- $this->sendConfirmationSuccessEmail();
- }
- return $this->getStatus();
- } catch (Exception $e) {
- throw new Exception($e->getMessage());
- }
- }
- public function unsubscribe()
- {
- if ($this->hasCheckCode() && $this->getCode() != $this->getCheckCode()) {
- Mage::throwException(Mage::helper('newsletter')->__('Invalid subscription confirmation code'));
- }
- $this->setSubscriberStatus(self::STATUS_UNSUBSCRIBED)
- ->save();
- $this->sendUnsubscriptionEmail();
- return $this;
- }
- /**
- * Saving customer cubscription status
- *
- * @param Mage_Customer_Model_Customer $customer
- * @return Mage_Newsletter_Model_Subscriber
- */
- public function subscribeCustomer($customer)
- {
- $this->loadByCustomer($customer);
- if ($customer->getImportMode()) {
- $this->setImportMode(true);
- }
- if (!$customer->getIsSubscribed() && !$this->getId()) {
- // If subscription flag not seted or customer not subscriber
- // and no subscribe bellow
- return $this;
- }
- if(!$this->getId()) {
- $this->setSubscriberConfirmCode($this->randomSequence());
- }
- if($customer->hasIsSubscribed()) {
- $status = $customer->getIsSubscribed() ? self::STATUS_SUBSCRIBED : self::STATUS_UNSUBSCRIBED;
- } else {
- $status = ($this->getStatus() == self::STATUS_NOT_ACTIVE ? self::STATUS_UNSUBSCRIBED : $this->getStatus());
- }
- if($status != $this->getStatus()) {
- $this->setIsStatusChanged(true);
- }
- $this->setStatus($status);
- if(!$this->getId()) {
- $this->setStoreId($customer->getStoreId())
- ->setCustomerId($customer->getId())
- ->setEmail($customer->getEmail());
- } else {
- $this->setEmail($customer->getEmail());
- }
- $this->save();
- $sendSubscription = $customer->getData('sendSubscription');
- if (is_null($sendSubscription) xor $sendSubscription) {
- if ($this->getIsStatusChanged() && $status == self::STATUS_UNSUBSCRIBED) {
- $this->sendUnsubscriptionEmail();
- } elseif ($this->getIsStatusChanged() && $status == self::STATUS_SUBSCRIBED) {
- $this->sendConfirmationSuccessEmail();
- }
- }
- return $this;
- }
- /**
- * Confirms subscriber newsletter
- *
- * @param string $code
- * @return boolean
- */
- public function confirm($code)
- {
- if($this->getCode()==$code) {
- $this->setStatus(self::STATUS_SUBSCRIBED)
- ->setIsStatusChanged(true)
- ->save();
- return true;
- }
- return false;
- }
- /**
- * Mark receiving subscriber of queue newsletter
- *
- * @param Mage_Newsletter_Model_Queue $queue
- * @return boolean
- */
- public function received(Mage_Newsletter_Model_Queue $queue)
- {
- $this->getResource()->received($this,$queue);
- return $this;
- }
- public function sendConfirmationRequestEmail()
- {
- if ($this->getImportMode()) {
- return $this;
- }
- if(!Mage::getStoreConfig(self::XML_PATH_CONFIRM_EMAIL_TEMPLATE) || !Mage::getStoreConfig(self::XML_PATH_CONFIRM_EMAIL_IDENTITY)) {
- return $this;
- }
- $translate = Mage::getSingleton('core/translate');
- /* @var $translate Mage_Core_Model_Translate */
- $translate->setTranslateInline(false);
- $email = Mage::getModel('core/email_template');
- /* @var $email Mage_Core_Model_Email_Template */
- if (Mage::getStoreConfigFlag(self::XML_PATH_SENDING_SET_RETURN_PATH)) {
- $email->setReturnPath(Mage::getStoreConfig(self::XML_PATH_CONFIRM_EMAIL_IDENTITY));
- }
- $email->sendTransactional(
- Mage::getStoreConfig(self::XML_PATH_CONFIRM_EMAIL_TEMPLATE),
- Mage::getStoreConfig(self::XML_PATH_CONFIRM_EMAIL_IDENTITY),
- $this->getEmail(),
- $this->getName(),
- array('subscriber'=>$this)
- );
- $translate->setTranslateInline(true);
- return $this;
- }
- public function sendConfirmationSuccessEmail()
- {
- if ($this->getImportMode()) {
- return $this;
- }
- if(!Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_TEMPLATE) || !Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_IDENTITY)) {
- return $this;
- }
- $translate = Mage::getSingleton('core/translate');
- /* @var $translate Mage_Core_Model_Translate */
- $translate->setTranslateInline(false);
- $email = Mage::getModel('core/email_template');
- /* @var $email Mage_Core_Model_Email_Template */
- if (Mage::getStoreConfigFlag(self::XML_PATH_SENDING_SET_RETURN_PATH)) {
- $email->setReturnPath(Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_IDENTITY));
- }
- $email->sendTransactional(
- Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_TEMPLATE),
- Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_IDENTITY),
- $this->getEmail(),
- $this->getName(),
- array('subscriber'=>$this)
- );
- $translate->setTranslateInline(true);
- return $this;
- }
- public function sendUnsubscriptionEmail()
- {
- if ($this->getImportMode()) {
- return $this;
- }
- if(!Mage::getStoreConfig(self::XML_PATH_UNSUBSCRIBE_EMAIL_TEMPLATE) || !Mage::getStoreConfig(self::XML_PATH_UNSUBSCRIBE_EMAIL_IDENTITY)) {
- return $this;
- }
- $translate = Mage::getSingleton('core/translate');
- /* @var $translate Mage_Core_Model_Translate */
- $translate->setTranslateInline(false);
- $email = Mage::getModel('core/email_template');
- /* @var $email Mage_Core_Model_Email_Template */
- if (Mage::getStoreConfigFlag(self::XML_PATH_SENDING_SET_RETURN_PATH)) {
- $email->setReturnPath(Mage::getStoreConfig(self::XML_PATH_UNSUBSCRIBE_EMAIL_IDENTITY));
- }
- $email->sendTransactional(
- Mage::getStoreConfig(self::XML_PATH_UNSUBSCRIBE_EMAIL_TEMPLATE),
- Mage::getStoreConfig(self::XML_PATH_UNSUBSCRIBE_EMAIL_IDENTITY),
- $this->getEmail(),
- $this->getName(),
- array('subscriber'=>$this)
- );
- $translate->setTranslateInline(true);
- return $this;
- }
- }