123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Checkout\Controller;
- use Magento\Customer\Api\AccountManagementInterface;
- use Magento\Customer\Api\CustomerRepositoryInterface;
- use Magento\Framework\Exception\NotFoundException;
- use Magento\Framework\App\RequestInterface;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- abstract class Onepage extends Action
- {
- /**
- * @var array
- */
- protected $_sectionUpdateFunctions = [
- 'payment-method' => '_getPaymentMethodsHtml',
- 'shipping-method' => '_getShippingMethodsHtml',
- 'review' => '_getReviewHtml',
- ];
- /**
- * @var \Magento\Sales\Model\Order
- */
- protected $_order;
- /**
- * Core registry
- *
- * @var \Magento\Framework\Registry
- */
- protected $_coreRegistry = null;
- /**
- * @var \Magento\Framework\Translate\InlineInterface
- */
- protected $_translateInline;
- /**
- * @var \Magento\Framework\Data\Form\FormKey\Validator
- */
- protected $_formKeyValidator;
- /**
- * @var \Magento\Framework\App\Config\ScopeConfigInterface
- */
- protected $scopeConfig;
- /**
- * @var \Magento\Framework\View\LayoutFactory
- */
- protected $layoutFactory;
- /**
- * @var \Magento\Quote\Api\CartRepositoryInterface
- */
- protected $quoteRepository;
- /**
- * @var \Magento\Framework\View\Result\PageFactory
- */
- protected $resultPageFactory;
- /**
- * @var \Magento\Framework\View\Result\LayoutFactory
- */
- protected $resultLayoutFactory;
- /**
- * @var \Magento\Framework\Controller\Result\RawFactory
- */
- protected $resultRawFactory;
- /**
- * @var \Magento\Framework\Controller\Result\JsonFactory
- */
- protected $resultJsonFactory;
- /**
- * @param \Magento\Framework\App\Action\Context $context
- * @param \Magento\Customer\Model\Session $customerSession
- * @param CustomerRepositoryInterface $customerRepository
- * @param AccountManagementInterface $accountManagement
- * @param \Magento\Framework\Registry $coreRegistry
- * @param \Magento\Framework\Translate\InlineInterface $translateInline
- * @param \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator
- * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
- * @param \Magento\Framework\View\LayoutFactory $layoutFactory
- * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
- * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
- * @param \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory
- * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
- * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
- *
- * @codeCoverageIgnore
- * @SuppressWarnings(PHPMD.ExcessiveParameterList)
- */
- public function __construct(
- \Magento\Framework\App\Action\Context $context,
- \Magento\Customer\Model\Session $customerSession,
- CustomerRepositoryInterface $customerRepository,
- AccountManagementInterface $accountManagement,
- \Magento\Framework\Registry $coreRegistry,
- \Magento\Framework\Translate\InlineInterface $translateInline,
- \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator,
- \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
- \Magento\Framework\View\LayoutFactory $layoutFactory,
- \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
- \Magento\Framework\View\Result\PageFactory $resultPageFactory,
- \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory,
- \Magento\Framework\Controller\Result\RawFactory $resultRawFactory,
- \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
- ) {
- $this->_coreRegistry = $coreRegistry;
- $this->_translateInline = $translateInline;
- $this->_formKeyValidator = $formKeyValidator;
- $this->scopeConfig = $scopeConfig;
- $this->layoutFactory = $layoutFactory;
- $this->quoteRepository = $quoteRepository;
- $this->resultPageFactory = $resultPageFactory;
- $this->resultLayoutFactory = $resultLayoutFactory;
- $this->resultRawFactory = $resultRawFactory;
- $this->resultJsonFactory = $resultJsonFactory;
- parent::__construct(
- $context,
- $customerSession,
- $customerRepository,
- $accountManagement
- );
- }
- /**
- * Dispatch request
- *
- * @param RequestInterface $request
- * @return \Magento\Framework\App\ResponseInterface
- * @throws \Magento\Framework\Exception\NotFoundException
- */
- public function dispatch(RequestInterface $request)
- {
- $this->_request = $request;
- $result = $this->_preDispatchValidateCustomer();
- if ($result instanceof \Magento\Framework\Controller\ResultInterface) {
- return $result;
- }
- /** @var \Magento\Quote\Model\Quote $quote */
- $quote = $this->_objectManager->get(\Magento\Checkout\Model\Session::class)->getQuote();
- if ($quote->isMultipleShippingAddresses()) {
- $quote->removeAllAddresses();
- }
- if (!$this->_canShowForUnregisteredUsers()) {
- throw new NotFoundException(__('Page not found.'));
- }
- return parent::dispatch($request);
- }
- /**
- * @return \Magento\Framework\Controller\Result\Raw
- */
- protected function _ajaxRedirectResponse()
- {
- $resultRaw = $this->resultRawFactory->create();
- $resultRaw->setStatusHeader(403, '1.1', 'Session Expired')
- ->setHeader('Login-Required', 'true');
- return $resultRaw;
- }
- /**
- * Validate ajax request and redirect on failure
- *
- * @return bool
- */
- protected function _expireAjax()
- {
- $quote = $this->getOnepage()->getQuote();
- if (!$quote->hasItems() || $quote->getHasError() || !$quote->validateMinimumAmount()) {
- return true;
- }
- $action = $this->getRequest()->getActionName();
- if ($this->_objectManager->get(\Magento\Checkout\Model\Session::class)->getCartWasUpdated(true)
- &&
- !in_array($action, ['index', 'progress'])
- ) {
- return true;
- }
- return false;
- }
- /**
- * Render HTML based on requested layout handle name
- *
- * @param string $handle
- * @return string
- */
- protected function _getHtmlByHandle($handle)
- {
- $layout = $this->layoutFactory->create();
- $layout->getUpdate()->load([$handle]);
- $layout->generateXml();
- $layout->generateElements();
- $output = $layout->getOutput();
- $this->_translateInline->processResponseBody($output);
- return $output;
- }
- /**
- * Get shipping method step html
- *
- * @return string
- * @codeCoverageIgnore
- */
- protected function _getShippingMethodsHtml()
- {
- return $this->_getHtmlByHandle('checkout_onepage_shippingmethod');
- }
- /**
- * Get payment method step html
- *
- * @return string
- * @codeCoverageIgnore
- */
- protected function _getPaymentMethodsHtml()
- {
- return $this->_getHtmlByHandle('checkout_onepage_paymentmethod');
- }
- /**
- * Get progress html checkout step
- *
- * @param string $checkoutStep
- * @return mixed
- */
- protected function getProgressHtml($checkoutStep = '')
- {
- $layout = $this->layoutFactory->create();
- $layout->getUpdate()->load(['checkout_onepage_progress']);
- $layout->generateXml();
- $layout->generateElements();
- $block = $layout->getBlock('progress')->setAttribute('next_step', $checkoutStep);
- return $block->toHtml();
- }
- /**
- * Get one page checkout model
- *
- * @return \Magento\Checkout\Model\Type\Onepage
- * @codeCoverageIgnore
- */
- public function getOnepage()
- {
- return $this->_objectManager->get(\Magento\Checkout\Model\Type\Onepage::class);
- }
- /**
- * Check can page show for unregistered users
- *
- * @return boolean
- */
- protected function _canShowForUnregisteredUsers()
- {
- return $this->_objectManager->get(
- \Magento\Customer\Model\Session::class
- )->isLoggedIn() || $this->getRequest()->getActionName() == 'index' || $this->_objectManager->get(
- \Magento\Checkout\Helper\Data::class
- )->isAllowedGuestCheckout(
- $this->getOnepage()->getQuote()
- ) || !$this->_objectManager->get(
- \Magento\Checkout\Helper\Data::class
- )->isCustomerMustBeLogged();
- }
- }
|