/app/code/core/Mage/Persistent/Model/Session.php
https://gitlab.com/vincent.perdereau/picandparts · PHP · 246 lines · 108 code · 24 blank · 114 comment · 9 complexity · 6e09f7fc7fac22537b251053b9d32ff8 MD5 · raw 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@magento.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.magento.com for more information.
- *
- * @category Mage
- * @package Mage_Persistent
- * @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
- /**
- * Persistent Session Model
- *
- * @category Mage
- * @package Mage_Persistent
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_Persistent_Model_Session extends Mage_Core_Model_Abstract
- {
- const KEY_LENGTH = 50;
- const COOKIE_NAME = 'persistent_shopping_cart';
- /**
- * Fields which model does not save into `info` db field
- *
- * @var array
- */
- protected $_unserializableFields = array('persistent_id', 'key', 'customer_id', 'website_id', 'info', 'updated_at');
- /**
- * If model loads expired sessions
- *
- * @var bool
- */
- protected $_loadExpired = false;
- /**
- * Define resource model
- */
- protected function _construct()
- {
- $this->_init('persistent/session');
- }
- /**
- * Set if load expired persistent session
- *
- * @param bool $loadExpired
- * @return Mage_Persistent_Model_Session
- */
- public function setLoadExpired($loadExpired = true)
- {
- $this->_loadExpired = $loadExpired;
- return $this;
- }
- /**
- * Get if model loads expired sessions
- *
- * @return bool
- */
- public function getLoadExpired()
- {
- return $this->_loadExpired;
- }
- /**
- * Get date-time before which persistent session is expired
- *
- * @param int|string|Mage_Core_Model_Store $store
- * @return string
- */
- public function getExpiredBefore($store = null)
- {
- return gmdate('Y-m-d H:i:s', time() - Mage::helper('persistent')->getLifeTime($store));
- }
- /**
- * Serialize info for Resource Model to save
- * For new model check and set available cookie key
- *
- * @return Mage_Persistent_Model_Session
- */
- protected function _beforeSave()
- {
- parent::_beforeSave();
- // Setting info
- $info = array();
- foreach ($this->getData() as $index => $value) {
- if (!in_array($index, $this->_unserializableFields)) {
- $info[$index] = $value;
- }
- }
- $this->setInfo(Mage::helper('core')->jsonEncode($info));
- if ($this->isObjectNew()) {
- $this->setWebsiteId(Mage::app()->getStore()->getWebsiteId());
- // Setting cookie key
- do {
- $this->setKey(Mage::helper('core')->getRandomString(self::KEY_LENGTH));
- } while (!$this->getResource()->isKeyAllowed($this->getKey()));
- }
- return $this;
- }
- /**
- * Set model data from info field
- *
- * @return Mage_Persistent_Model_Session
- */
- protected function _afterLoad()
- {
- parent::_afterLoad();
- $info = Mage::helper('core')->jsonDecode($this->getInfo());
- if (is_array($info)) {
- foreach ($info as $key => $value) {
- $this->setData($key, $value);
- }
- }
- return $this;
- }
- /**
- * Get persistent session by cookie key
- *
- * @param string $key
- * @return Mage_Persistent_Model_Session
- */
- public function loadByCookieKey($key = null)
- {
- if (is_null($key)) {
- $key = Mage::getSingleton('core/cookie')->get(Mage_Persistent_Model_Session::COOKIE_NAME);
- }
- if ($key) {
- $this->load($key, 'key');
- }
- return $this;
- }
- /**
- * Load session model by specified customer id
- *
- * @param int $id
- * @return Mage_Core_Model_Abstract
- */
- public function loadByCustomerId($id)
- {
- return $this->load($id, 'customer_id');
- }
- /**
- * Delete customer persistent session by customer id
- *
- * @param int $customerId
- * @param bool $clearCookie
- * @return Mage_Persistent_Model_Session
- */
- public function deleteByCustomerId($customerId, $clearCookie = true)
- {
- if ($clearCookie) {
- $this->removePersistentCookie();
- }
- $this->getResource()->deleteByCustomerId($customerId);
- return $this;
- }
- /**
- * Remove persistent cookie
- *
- * @return Mage_Persistent_Model_Session
- */
- public function removePersistentCookie()
- {
- Mage::getSingleton('core/cookie')->delete(Mage_Persistent_Model_Session::COOKIE_NAME);
- return $this;
- }
- /**
- * Delete expired persistent sessions for the website
- *
- * @param null|int $websiteId
- * @return Mage_Persistent_Model_Session
- */
- public function deleteExpired($websiteId = null)
- {
- if (is_null($websiteId)) {
- $websiteId = Mage::app()->getStore()->getWebsiteId();
- }
- $lifetime = Mage::getConfig()->getNode(
- Mage_Persistent_Helper_Data::XML_PATH_LIFE_TIME,
- 'website',
- intval($websiteId)
- );
- if ($lifetime) {
- $this->getResource()->deleteExpired(
- $websiteId,
- gmdate('Y-m-d H:i:s', time() - $lifetime)
- );
- }
- return $this;
- }
- /**
- * Delete 'persistent' cookie
- *
- * @return Mage_Core_Model_Abstract
- */
- protected function _afterDeleteCommit() {
- Mage::getSingleton('core/cookie')->delete(Mage_Persistent_Model_Session::COOKIE_NAME);
- return parent::_afterDeleteCommit();
- }
- /**
- * Set `updated_at` to be always changed
- *
- * @return Mage_Persistent_Model_Session
- */
- public function save()
- {
- $this->setUpdatedAt(gmdate('Y-m-d H:i:s'));
- return parent::save();
- }
- }