| Server IP : 213.186.33.4 / Your IP : 216.73.216.59 Web Server : Apache System : Linux webm006.cluster103.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : awebpaca ( 35430) PHP Version : 8.5.0 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/awebpaca/boutiques/app/code/core/Mage/Newsletter/Model/ |
Upload File : |
<?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) 2010 Magento Inc. (http://www.magentocommerce.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 Mage_Core_Model_Abstract
{
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_ALLOW_GUEST_SUBSCRIBE_FLAG = 'newsletter/subscription/allow_guest_subscribe';
const XML_PATH_SENDING_SET_RETURN_PATH = Mage_Core_Model_Email_Template::XML_PATH_SENDING_SET_RETURN_PATH;
/**
* Prefix of model events names
*
* @var string
*/
protected $_eventPrefix = 'newsletter_subscriber';
/**
* Parameter name in event
*
* In observe method you can use $observer->getEvent()->getObject() in this case
*
* @var string
*/
protected $_eventObject = 'subscriber';
protected $_isStatusChanged = false;
/**
* Initialize resource model
*/
protected function _construct()
{
$this->_init('newsletter/subscriber');
}
/**
* 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;
}
/**
* 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;
}
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);
$customerSession = Mage::getSingleton('customer/session');
if(!$this->getId()) {
$this->setSubscriberConfirmCode($this->randomSequence());
}
$isConfirmNeed = (Mage::getStoreConfig(self::XML_PATH_CONFIRMATION_FLAG) == 1) ? true : false;
if (!$this->getId() || $this->getStatus() == self::STATUS_UNSUBSCRIBED || $this->getStatus() == self::STATUS_NOT_ACTIVE) {
if ($isConfirmNeed) {
// if user subscribes own login email - confirmation is not needed
$ownerId = Mage::getModel('customer/customer')
->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
->loadByEmail($email)
->getId();
if ($customerSession->isLoggedIn() && $ownerId == $customerSession->getId()){
$this->setStatus(self::STATUS_SUBSCRIBED);
}
else {
$this->setStatus(self::STATUS_NOT_ACTIVE);
}
} else {
$this->setStatus(self::STATUS_SUBSCRIBED);
}
$this->setSubscriberEmail($email);
}
if ($customerSession->isLoggedIn()) {
$this->setStoreId($customerSession->getCustomer()->getStoreId());
$this->setCustomerId($customerSession->getCustomerId());
} else {
$this->setStoreId(Mage::app()->getStore()->getId());
$this->setCustomerId(0);
}
$this->setIsStatusChanged(true);
try {
$this->save();
if ($isConfirmNeed) {
$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 subscription 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');
$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');
$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');
$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;
}
}