PageRenderTime 28ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/app/code/Magento/Sales/Helper/Guest.php

https://gitlab.com/DEVLINE/magento2
PHP | 238 lines | 132 code | 26 blank | 80 comment | 32 complexity | 54126f2b5499e37b074f317de5006c38 MD5 | raw file
Possible License(s): Apache-2.0
  1. <?php
  2. /**
  3. * Copyright © 2015 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Helper;
  7. use Magento\Framework\App as App;
  8. /**
  9. * Sales module base helper
  10. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  11. */
  12. class Guest extends \Magento\Core\Helper\Data
  13. {
  14. /**
  15. * Core registry
  16. *
  17. * @var \Magento\Framework\Registry
  18. */
  19. protected $coreRegistry;
  20. /**
  21. * @var \Magento\Customer\Model\Session
  22. */
  23. protected $customerSession;
  24. /**
  25. * @var \Magento\Framework\Stdlib\CookieManagerInterface
  26. */
  27. protected $cookieManager;
  28. /**
  29. * @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory
  30. */
  31. protected $cookieMetadataFactory;
  32. /**
  33. * @var \Magento\Framework\Message\ManagerInterface
  34. */
  35. protected $messageManager;
  36. /**
  37. * @var \Magento\Sales\Model\OrderFactory
  38. */
  39. protected $orderFactory;
  40. /**
  41. * @var \Magento\Framework\Controller\Result\RedirectFactory
  42. */
  43. protected $resultRedirectFactory;
  44. /**
  45. * Cookie key for guest view
  46. */
  47. const COOKIE_NAME = 'guest-view';
  48. /**
  49. * Cookie path
  50. */
  51. const COOKIE_PATH = '/';
  52. /**
  53. * Cookie lifetime value
  54. */
  55. const COOKIE_LIFETIME = 600;
  56. /**
  57. * @param App\Helper\Context $context
  58. * @param App\Config\ScopeConfigInterface $scopeConfig
  59. * @param \Magento\Framework\Store\StoreManagerInterface $storeManager
  60. * @param \Magento\Framework\App\State $appState
  61. * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
  62. * @param \Magento\Framework\Registry $coreRegistry
  63. * @param \Magento\Customer\Model\Session $customerSession
  64. * @param \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
  65. * @param \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory
  66. * @param \Magento\Framework\Message\ManagerInterface $messageManager
  67. * @param \Magento\Sales\Model\OrderFactory $orderFactory
  68. * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
  69. * @param bool $dbCompatibleMode
  70. *
  71. * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  72. */
  73. public function __construct(
  74. App\Helper\Context $context,
  75. App\Config\ScopeConfigInterface $scopeConfig,
  76. \Magento\Framework\Store\StoreManagerInterface $storeManager,
  77. \Magento\Framework\App\State $appState,
  78. \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
  79. \Magento\Framework\Registry $coreRegistry,
  80. \Magento\Customer\Model\Session $customerSession,
  81. \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager,
  82. \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory,
  83. \Magento\Framework\Message\ManagerInterface $messageManager,
  84. \Magento\Sales\Model\OrderFactory $orderFactory,
  85. \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory,
  86. $dbCompatibleMode = true
  87. ) {
  88. $this->coreRegistry = $coreRegistry;
  89. $this->customerSession = $customerSession;
  90. $this->cookieManager = $cookieManager;
  91. $this->cookieMetadataFactory = $cookieMetadataFactory;
  92. $this->messageManager = $messageManager;
  93. $this->orderFactory = $orderFactory;
  94. $this->resultRedirectFactory = $resultRedirectFactory;
  95. parent::__construct(
  96. $context,
  97. $scopeConfig,
  98. $storeManager,
  99. $appState,
  100. $priceCurrency,
  101. $dbCompatibleMode
  102. );
  103. }
  104. /**
  105. * Try to load valid order by $_POST or $_COOKIE
  106. *
  107. * @param App\RequestInterface $request
  108. * @return \Magento\Framework\Controller\Result\Redirect|bool
  109. *
  110. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  111. * @SuppressWarnings(PHPMD.NPathComplexity)
  112. */
  113. public function loadValidOrder(App\RequestInterface $request)
  114. {
  115. if ($this->customerSession->isLoggedIn()) {
  116. return $this->resultRedirectFactory->create()->setPath('sales/order/history');
  117. }
  118. $post = $request->getPost();
  119. $errors = false;
  120. /** @var $order \Magento\Sales\Model\Order */
  121. $order = $this->orderFactory->create();
  122. $fromCookie = $this->cookieManager->getCookie(self::COOKIE_NAME);
  123. if (empty($post) && !$fromCookie) {
  124. return $this->resultRedirectFactory->create()->setPath('sales/guest/form');
  125. } elseif (!empty($post) && isset($post['oar_order_id']) && isset($post['oar_type'])) {
  126. $type = $post['oar_type'];
  127. $incrementId = $post['oar_order_id'];
  128. $lastName = $post['oar_billing_lastname'];
  129. $email = $post['oar_email'];
  130. $zip = $post['oar_zip'];
  131. if (empty($incrementId) || empty($lastName) || empty($type) || !in_array(
  132. $type,
  133. ['email', 'zip']
  134. ) || $type == 'email' && empty($email) || $type == 'zip' && empty($zip)
  135. ) {
  136. $errors = true;
  137. }
  138. if (!$errors) {
  139. $order->loadByIncrementId($incrementId);
  140. }
  141. $errors = true;
  142. if ($order->getId()) {
  143. $billingAddress = $order->getBillingAddress();
  144. if (strtolower($lastName) == strtolower($billingAddress->getLastname()) &&
  145. ($type == 'email' && strtolower($email) == strtolower($billingAddress->getEmail()) ||
  146. $type == 'zip' && strtolower($zip) == strtolower($billingAddress->getPostcode()))
  147. ) {
  148. $errors = false;
  149. }
  150. }
  151. if (!$errors) {
  152. $toCookie = base64_encode($order->getProtectCode() . ':' . $incrementId);
  153. $this->setGuestViewCookie($toCookie);
  154. }
  155. } elseif ($fromCookie) {
  156. $cookieData = explode(':', base64_decode($fromCookie));
  157. $protectCode = isset($cookieData[0]) ? $cookieData[0] : null;
  158. $incrementId = isset($cookieData[1]) ? $cookieData[1] : null;
  159. $errors = true;
  160. if (!empty($protectCode) && !empty($incrementId)) {
  161. $order->loadByIncrementId($incrementId);
  162. if ($order->getProtectCode() == $protectCode) {
  163. // renew cookie
  164. $this->setGuestViewCookie($fromCookie);
  165. $errors = false;
  166. }
  167. }
  168. }
  169. if (!$errors && $order->getId()) {
  170. $this->coreRegistry->register('current_order', $order);
  171. return true;
  172. }
  173. $this->messageManager->addError(__('You entered incorrect data. Please try again.'));
  174. return $this->resultRedirectFactory->create()->setPath('sales/guest/form');
  175. }
  176. /**
  177. * Get Breadcrumbs for current controller action
  178. *
  179. * @param \Magento\Framework\View\Result\Page $resultPage
  180. * @return void
  181. */
  182. public function getBreadcrumbs(\Magento\Framework\View\Result\Page $resultPage)
  183. {
  184. $breadcrumbs = $resultPage->getLayout()->getBlock('breadcrumbs');
  185. $breadcrumbs->addCrumb(
  186. 'home',
  187. [
  188. 'label' => __('Home'),
  189. 'title' => __('Go to Home Page'),
  190. 'link' => $this->_storeManager->getStore()->getBaseUrl()
  191. ]
  192. );
  193. $breadcrumbs->addCrumb(
  194. 'cms_page',
  195. ['label' => __('Order Information'), 'title' => __('Order Information')]
  196. );
  197. }
  198. /**
  199. * Set guest-view cookie
  200. *
  201. * @param string $cookieValue
  202. * @return void
  203. */
  204. private function setGuestViewCookie($cookieValue)
  205. {
  206. $metadata = $this->cookieMetadataFactory->createPublicCookieMetadata()
  207. ->setPath(self::COOKIE_PATH)
  208. ->setDuration(self::COOKIE_LIFETIME)
  209. ->setHttpOnly(true);
  210. $this->cookieManager->setPublicCookie(self::COOKIE_NAME, $cookieValue, $metadata);
  211. }
  212. }