![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-persistent/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Persistent\Model; /** * Persistent Session Model * * @api * @method int getCustomerId() * @method Session setCustomerId() * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.CookieAndSessionMisuse) * @since 100.0.2 */ class Session extends \Magento\Framework\Model\AbstractModel { /** * Persistent cookie key length */ public const KEY_LENGTH = 50; /** * Persistent cookie name */ public const COOKIE_NAME = 'persistent_shopping_cart'; /** * @var string[] */ protected $_unserializableFields = [ 'persistent_id', 'key', 'customer_id', 'website_id', 'info', 'updated_at', ]; /** * @var bool */ protected $_loadExpired = false; /** * @var \Magento\Persistent\Helper\Data */ protected $_persistentData; /** * @var \Magento\Framework\Json\Helper\Data */ protected $jsonHelper; /** * @var \Magento\Framework\App\Config\ScopeConfigInterface */ protected $_coreConfig; /** * @var \Magento\Store\Model\StoreManagerInterface */ protected $_storeManager; /** * @var \Magento\Framework\Stdlib\CookieManagerInterface */ protected $_cookieManager; /** * @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory */ protected $_cookieMetadataFactory; /** * @var \Magento\Framework\Math\Random */ protected $mathRandom; /** * @var \Magento\Framework\Session\Config\ConfigInterface */ protected $sessionConfig; /** * @var \Magento\Framework\App\Request\Http */ private $request; /** * Constructor * * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $coreConfig * @param \Magento\Framework\Json\Helper\Data $jsonHelper * @param \Magento\Persistent\Helper\Data $persistentData * @param \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager * @param \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\Math\Random $mathRandom * @param \Magento\Framework\Session\Config\ConfigInterface $sessionConfig * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $coreConfig, \Magento\Framework\Json\Helper\Data $jsonHelper, \Magento\Persistent\Helper\Data $persistentData, \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager, \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\Math\Random $mathRandom, \Magento\Framework\Session\Config\ConfigInterface $sessionConfig, \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { $this->jsonHelper = $jsonHelper; $this->_persistentData = $persistentData; $this->_coreConfig = $coreConfig; $this->_cookieManager = $cookieManager; $this->_cookieMetadataFactory = $cookieMetadataFactory; $this->_storeManager = $storeManager; $this->sessionConfig = $sessionConfig; $this->mathRandom = $mathRandom; parent::__construct($context, $registry, $resource, $resourceCollection, $data); } /** * Define resource model * * @return void * @codeCoverageIgnore */ protected function _construct() { $this->_init(\Magento\Persistent\Model\ResourceModel\Session::class); } /** * Set if load expired persistent session * * @param bool $loadExpired * @return $this * @codeCoverageIgnore */ public function setLoadExpired($loadExpired = true) { $this->_loadExpired = $loadExpired; return $this; } /** * Get if model loads expired sessions * * @return bool * @SuppressWarnings(PHPMD.BooleanGetMethodName) */ public function getLoadExpired() { return $this->_loadExpired; } /** * Get date-time before which persistent session is expired * * @param int|string|\Magento\Store\Model\Store $store * @return string * @codeCoverageIgnore */ public function getExpiredBefore($store = null) { return gmdate('Y-m-d H:i:s', time() - $this->_persistentData->getLifeTime($store)); } /** * Serialize info for Resource Model to save * * For new model check and set available cookie key * * @return $this */ public function beforeSave() { parent::beforeSave(); // Setting info $info = []; foreach ($this->getData() as $index => $value) { if (!in_array($index, $this->_unserializableFields)) { $info[$index] = $value; } } $this->setInfo($this->jsonHelper->jsonEncode($info)); if ($this->isObjectNew()) { $this->setWebsiteId($this->_storeManager->getStore()->getWebsiteId()); // Setting cookie key do { $this->setKey($this->mathRandom->getRandomString(self::KEY_LENGTH)); } while (!$this->getResource()->isKeyAllowed($this->getKey())); } return $this; } /** * Set model data from info field * * @return $this */ protected function _afterLoad() { parent::_afterLoad(); $info = null; if ($this->getInfo()) { $info = $this->jsonHelper->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 $this */ public function loadByCookieKey($key = null) { if (null === $key) { $key = $this->_cookieManager->getCookie(self::COOKIE_NAME); } if ($key) { $this->load($key, 'key'); } return $this; } /** * Load session model by specified customer id * * @param int $id * @return $this * @codeCoverageIgnore */ public function loadByCustomerId($id) { return $this->load($id, 'customer_id'); } /** * Delete customer persistent session by customer id * * @param int $customerId * @param bool $clearCookie * @return $this */ public function deleteByCustomerId($customerId, $clearCookie = true) { if ($clearCookie) { $this->removePersistentCookie(); } $this->getResource()->deleteByCustomerId($customerId); return $this; } /** * Remove persistent cookie * * @return $this */ public function removePersistentCookie() { $cookieMetadata = $this->_cookieMetadataFactory->createSensitiveCookieMetadata() ->setPath($this->sessionConfig->getCookiePath()); $this->_cookieManager->deleteCookie(self::COOKIE_NAME, $cookieMetadata); return $this; } /** * Set persistent cookie * * @param int $duration Time in seconds. * @param string $path * @return $this */ public function setPersistentCookie($duration, $path) { $value = $this->getKey(); $this->setCookie($value, $duration, $path); return $this; } /** * Postpone cookie expiration time if cookie value defined * * @param int $duration Time in seconds. * @param string $path * @return $this */ public function renewPersistentCookie($duration, $path) { if ($duration === null) { return $this; } $value = $this->_cookieManager->getCookie(self::COOKIE_NAME); if (null !== $value) { $this->setCookie($value, $duration, $path); } return $this; } /** * Delete expired persistent sessions for the website * * @param null|int $websiteId * @return $this */ public function deleteExpired($websiteId = null) { if ($websiteId === null) { $websiteId = $this->_storeManager->getStore()->getWebsiteId(); } $lifetime = $this->_coreConfig->getValue( \Magento\Persistent\Helper\Data::XML_PATH_LIFE_TIME, 'website', (int)$websiteId ); if ($lifetime) { $this->getResource()->deleteExpired($websiteId, gmdate('Y-m-d H:i:s', time() - $lifetime)); } return $this; } /** * Delete 'persistent' cookie * * @return $this * @codeCoverageIgnore */ public function afterDeleteCommit() { $this->removePersistentCookie(); return parent::afterDeleteCommit(); } /** * Set persistent shopping cart cookie. * * @param string $value * @param int $duration * @param string $path * @return void */ private function setCookie($value, $duration, $path) { $publicCookieMetadata = $this->_cookieMetadataFactory->createPublicCookieMetadata() ->setDuration($duration) ->setPath($path) ->setSecure($this->getRequest()->isSecure()) ->setHttpOnly(true) ->setSameSite('Lax'); $this->_cookieManager->setPublicCookie( self::COOKIE_NAME, $value, $publicCookieMetadata ); } /** * Get request object * * @return \Magento\Framework\App\Request\Http * @deprecated 100.1.0 */ private function getRequest() { if ($this->request == null) { $this->request = \Magento\Framework\App\ObjectManager::getInstance() ->get(\Magento\Framework\App\Request\Http::class); } return $this->request; } /** * Set `updated_at` to be always changed * * @return $this * @since 100.1.0 */ public function save() { $this->setUpdatedAt(gmdate('Y-m-d H:i:s')); return parent::save(); } }