![]() 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-checkout/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Checkout\Model; use Magento\Captcha\Api\CaptchaConfigPostProcessorInterface; use Magento\Catalog\Helper\Product\ConfigurationPool; use Magento\Checkout\Helper\Data as CheckoutHelper; use Magento\Checkout\Model\Session as CheckoutSession; use Magento\Customer\Api\AddressMetadataInterface; use Magento\Customer\Api\CustomerRepositoryInterface as CustomerRepository; use Magento\Customer\Api\Data\CustomerInterface; use Magento\Customer\Model\Address\CustomerAddressDataProvider; use Magento\Customer\Model\Context as CustomerContext; use Magento\Customer\Model\Session as CustomerSession; use Magento\Customer\Model\Url as CustomerUrlManager; use Magento\Eav\Api\AttributeOptionManagementInterface; use Magento\Framework\Api\CustomAttributesDataInterface; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Http\Context as HttpContext; use Magento\Framework\App\ObjectManager; use Magento\Framework\Data\Form\FormKey; use Magento\Framework\Locale\FormatInterface as LocaleFormat; use Magento\Framework\UrlInterface; use Magento\Quote\Api\CartItemRepositoryInterface as QuoteItemRepository; use Magento\Quote\Api\CartTotalRepositoryInterface; use Magento\Quote\Api\Data\AddressInterface; use Magento\Quote\Api\ShippingMethodManagementInterface as ShippingMethodManager; use Magento\Quote\Model\QuoteIdMaskFactory; use Magento\Store\Model\ScopeInterface; use Magento\Ui\Component\Form\Element\Multiline; use Magento\Framework\Escaper; /** * Default Config Provider for checkout * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.TooManyFields) * @SuppressWarnings(PHPMD.CookieAndSessionMisuse) */ class DefaultConfigProvider implements ConfigProviderInterface { /** * @var AttributeOptionManagementInterface */ private $attributeOptionManager; /** * @var CheckoutHelper */ private $checkoutHelper; /** * @var CheckoutSession */ private $checkoutSession; /** * @var CustomerRepository */ private $customerRepository; /** * @var CustomerSession */ private $customerSession; /** * @var CustomerUrlManager */ private $customerUrlManager; /** * @var HttpContext */ private $httpContext; /** * @var \Magento\Quote\Api\CartRepositoryInterface */ private $quoteRepository; /** * @var QuoteItemRepository */ private $quoteItemRepository; /** * @var ShippingMethodManager */ private $shippingMethodManager; /** * @var ConfigurationPool */ private $configurationPool; /** * @var QuoteIdMaskFactory */ protected $quoteIdMaskFactory; /** * @var LocaleFormat */ protected $localeFormat; /** * @var \Magento\Customer\Model\Address\Mapper */ protected $addressMapper; /** * @var \Magento\Customer\Model\Address\Config */ protected $addressConfig; /** * @var FormKey */ protected $formKey; /** * @var \Magento\Catalog\Helper\Image */ protected $imageHelper; /** * @var \Magento\Framework\View\ConfigInterface */ protected $viewConfig; /** * @var \Magento\Directory\Model\Country\Postcode\ConfigInterface */ protected $postCodesConfig; /** * @var \Magento\Directory\Helper\Data */ protected $directoryHelper; /** * @var Cart\ImageProvider */ protected $imageProvider; /** * @var CartTotalRepositoryInterface */ protected $cartTotalRepository; /** * @var ScopeConfigInterface */ protected $scopeConfig; /** * @var \Magento\Shipping\Model\Config */ protected $shippingMethodConfig; /** * @var \Magento\Store\Model\StoreManagerInterface */ protected $storeManager; /** * @var \Magento\Quote\Api\PaymentMethodManagementInterface */ protected $paymentMethodManagement; /** * @var UrlInterface */ protected $urlBuilder; /** * @var AddressMetadataInterface */ private $addressMetadata; /** * @var CustomerAddressDataProvider */ private $customerAddressData; /** * @var CaptchaConfigPostProcessorInterface */ private $configPostProcessor; /** * @var Escaper */ private $escaper; /** * @param CheckoutHelper $checkoutHelper * @param Session $checkoutSession * @param CustomerRepository $customerRepository * @param CustomerSession $customerSession * @param CustomerUrlManager $customerUrlManager * @param HttpContext $httpContext * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository * @param QuoteItemRepository $quoteItemRepository * @param ShippingMethodManager $shippingMethodManager * @param ConfigurationPool $configurationPool * @param QuoteIdMaskFactory $quoteIdMaskFactory * @param LocaleFormat $localeFormat * @param \Magento\Customer\Model\Address\Mapper $addressMapper * @param \Magento\Customer\Model\Address\Config $addressConfig * @param FormKey $formKey * @param \Magento\Catalog\Helper\Image $imageHelper * @param \Magento\Framework\View\ConfigInterface $viewConfig * @param \Magento\Directory\Model\Country\Postcode\ConfigInterface $postCodesConfig * @param Cart\ImageProvider $imageProvider * @param \Magento\Directory\Helper\Data $directoryHelper * @param CartTotalRepositoryInterface $cartTotalRepository * @param ScopeConfigInterface $scopeConfig * @param \Magento\Shipping\Model\Config $shippingMethodConfig * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Quote\Api\PaymentMethodManagementInterface $paymentMethodManagement * @param UrlInterface $urlBuilder * @param CaptchaConfigPostProcessorInterface $configPostProcessor * @param AddressMetadataInterface $addressMetadata * @param AttributeOptionManagementInterface $attributeOptionManager * @param CustomerAddressDataProvider|null $customerAddressData * @param Escaper|null $escaper * @codeCoverageIgnore * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( CheckoutHelper $checkoutHelper, CheckoutSession $checkoutSession, CustomerRepository $customerRepository, CustomerSession $customerSession, CustomerUrlManager $customerUrlManager, HttpContext $httpContext, \Magento\Quote\Api\CartRepositoryInterface $quoteRepository, QuoteItemRepository $quoteItemRepository, ShippingMethodManager $shippingMethodManager, ConfigurationPool $configurationPool, QuoteIdMaskFactory $quoteIdMaskFactory, LocaleFormat $localeFormat, \Magento\Customer\Model\Address\Mapper $addressMapper, \Magento\Customer\Model\Address\Config $addressConfig, FormKey $formKey, \Magento\Catalog\Helper\Image $imageHelper, \Magento\Framework\View\ConfigInterface $viewConfig, \Magento\Directory\Model\Country\Postcode\ConfigInterface $postCodesConfig, Cart\ImageProvider $imageProvider, \Magento\Directory\Helper\Data $directoryHelper, CartTotalRepositoryInterface $cartTotalRepository, ScopeConfigInterface $scopeConfig, \Magento\Shipping\Model\Config $shippingMethodConfig, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Quote\Api\PaymentMethodManagementInterface $paymentMethodManagement, UrlInterface $urlBuilder, CaptchaConfigPostProcessorInterface $configPostProcessor, AddressMetadataInterface $addressMetadata = null, AttributeOptionManagementInterface $attributeOptionManager = null, CustomerAddressDataProvider $customerAddressData = null, Escaper $escaper = null ) { $this->checkoutHelper = $checkoutHelper; $this->checkoutSession = $checkoutSession; $this->customerRepository = $customerRepository; $this->customerSession = $customerSession; $this->customerUrlManager = $customerUrlManager; $this->httpContext = $httpContext; $this->quoteRepository = $quoteRepository; $this->quoteItemRepository = $quoteItemRepository; $this->shippingMethodManager = $shippingMethodManager; $this->configurationPool = $configurationPool; $this->quoteIdMaskFactory = $quoteIdMaskFactory; $this->localeFormat = $localeFormat; $this->addressMapper = $addressMapper; $this->addressConfig = $addressConfig; $this->formKey = $formKey; $this->imageHelper = $imageHelper; $this->viewConfig = $viewConfig; $this->postCodesConfig = $postCodesConfig; $this->imageProvider = $imageProvider; $this->directoryHelper = $directoryHelper; $this->cartTotalRepository = $cartTotalRepository; $this->scopeConfig = $scopeConfig; $this->shippingMethodConfig = $shippingMethodConfig; $this->storeManager = $storeManager; $this->paymentMethodManagement = $paymentMethodManagement; $this->urlBuilder = $urlBuilder; $this->addressMetadata = $addressMetadata ?: ObjectManager::getInstance()->get(AddressMetadataInterface::class); $this->attributeOptionManager = $attributeOptionManager ?? ObjectManager::getInstance()->get(AttributeOptionManagementInterface::class); $this->customerAddressData = $customerAddressData ?: ObjectManager::getInstance()->get(CustomerAddressDataProvider::class); $this->configPostProcessor = $configPostProcessor; $this->escaper = $escaper ?? ObjectManager::getInstance()->get(Escaper::class); } /** * Return configuration array * * @return array|mixed * @throws \Magento\Framework\Exception\NoSuchEntityException * @throws \Magento\Framework\Exception\LocalizedException */ public function getConfig() { $quote = $this->checkoutSession->getQuote(); $quoteId = $quote->getId(); $email = $quote->getShippingAddress()->getEmail(); $quoteItemData = $this->getQuoteItemData(); $output['formKey'] = $this->formKey->getFormKey(); $output['customerData'] = $this->getCustomerData(); $output['quoteData'] = $this->getQuoteData(); $output['quoteItemData'] = $quoteItemData; $output['quoteMessages'] = $this->getQuoteItemsMessages($quoteItemData); $output['isCustomerLoggedIn'] = $this->isCustomerLoggedIn(); $output['selectedShippingMethod'] = $this->getSelectedShippingMethod(); if ($email && !$this->isCustomerLoggedIn()) { $output['validatedEmailValue'] = $email; } if (!$this->isCustomerLoggedIn() || !$this->getCustomer()->getAddresses()) { $output = array_merge($output, $this->getQuoteAddressData()); } $output['storeCode'] = $this->getStoreCode(); $output['isGuestCheckoutAllowed'] = $this->isGuestCheckoutAllowed(); $output['isCustomerLoginRequired'] = $this->isCustomerLoginRequired(); $output['registerUrl'] = $this->getRegisterUrl(); $output['checkoutUrl'] = $this->getCheckoutUrl(); $output['defaultSuccessPageUrl'] = $this->getDefaultSuccessPageUrl(); $output['pageNotFoundUrl'] = $this->pageNotFoundUrl(); $output['forgotPasswordUrl'] = $this->getForgotPasswordUrl(); $output['staticBaseUrl'] = $this->getStaticBaseUrl(); $output['priceFormat'] = $this->localeFormat->getPriceFormat( null, $quote->getQuoteCurrencyCode() ); $output['basePriceFormat'] = $this->localeFormat->getPriceFormat( null, $quote->getBaseCurrencyCode() ); $output['postCodes'] = $this->postCodesConfig->getPostCodes(); $output['imageData'] = $this->imageProvider->getImages($quoteId); $output['totalsData'] = $this->getTotalsData(); $policyContent = $this->scopeConfig->getValue( 'shipping/shipping_policy/shipping_policy_content', ScopeInterface::SCOPE_STORE ); $policyContent = $this->escaper->escapeHtml($policyContent); $output['shippingPolicy'] = [ 'isEnabled' => $this->scopeConfig->isSetFlag( 'shipping/shipping_policy/enable_shipping_policy', ScopeInterface::SCOPE_STORE ), 'shippingPolicyContent' => $policyContent ? nl2br($policyContent) : '' ]; $output['useQty'] = $this->scopeConfig->isSetFlag( 'checkout/cart_link/use_qty', \Magento\Store\Model\ScopeInterface::SCOPE_STORE ); $output['activeCarriers'] = $this->getActiveCarriers(); $output['originCountryCode'] = $this->getOriginCountryCode(); $output['paymentMethods'] = $this->getPaymentMethods(); $output['autocomplete'] = $this->isAutocompleteEnabled(); $output['displayBillingOnPaymentMethod'] = $this->checkoutHelper->isDisplayBillingOnPaymentMethodAvailable(); return $this->configPostProcessor->process($output); } /** * Is autocomplete enabled for storefront * * @return string * @codeCoverageIgnore */ private function isAutocompleteEnabled() { return $this->scopeConfig->getValue( \Magento\Customer\Model\Form::XML_PATH_ENABLE_AUTOCOMPLETE, \Magento\Store\Model\ScopeInterface::SCOPE_STORE ) ? 'on' : 'off'; } /** * Retrieve customer data * * @return array */ private function getCustomerData(): array { $customerData = []; if ($this->isCustomerLoggedIn()) { $customer = $this->getCustomer(); $customerData = $customer->__toArray(); $customerData['addresses'] = $this->customerAddressData->getAddressDataByCustomer($customer); } return $customerData; } /** * Retrieve quote data * * @return array */ private function getQuoteData() { $quoteData = []; if ($this->checkoutSession->getQuote()->getId()) { $quote = $this->quoteRepository->get($this->checkoutSession->getQuote()->getId()); $quoteData = $quote->toArray(); if (null !== $quote->getExtensionAttributes()) { $quoteData['extension_attributes'] = $quote->getExtensionAttributes()->__toArray(); } $quoteData['is_virtual'] = $quote->getIsVirtual(); if (!$quote->getCustomer()->getId()) { /** @var $quoteIdMask \Magento\Quote\Model\QuoteIdMask */ $quoteIdMask = $this->quoteIdMaskFactory->create(); $quoteData['entity_id'] = $quoteIdMask->load( $this->checkoutSession->getQuote()->getId(), 'quote_id' )->getMaskedId(); } } return $quoteData; } /** * Retrieve quote item data * * @return array */ private function getQuoteItemData() { $quoteItemData = []; $quoteId = $this->checkoutSession->getQuote()->getId(); if ($quoteId) { $quoteItems = $this->quoteItemRepository->getList($quoteId); foreach ($quoteItems as $index => $quoteItem) { $quoteItemData[$index] = $quoteItem->toArray(); $quoteItemData[$index]['options'] = $this->getFormattedOptionValue($quoteItem); $quoteItemData[$index]['thumbnail'] = $this->imageHelper->init( $quoteItem->getProduct(), 'product_thumbnail_image' )->getUrl(); $quoteItemData[$index]['message'] = $quoteItem->getMessage(); } } return $quoteItemData; } /** * Retrieve formatted item options view * * @param \Magento\Quote\Api\Data\CartItemInterface $item * @return array */ protected function getFormattedOptionValue($item) { $optionsData = []; $options = $this->configurationPool->getByProductType($item->getProductType())->getOptions($item); foreach ($options as $index => $optionValue) { /* @var $helper \Magento\Catalog\Helper\Product\Configuration */ $helper = $this->configurationPool->getByProductType('default'); $params = [ 'max_length' => 55, 'cut_replacer' => ' <a href="#" class="dots tooltip toggle" onclick="return false">...</a>' ]; $option = $helper->getFormattedOptionValue($optionValue, $params); $optionsData[$index] = $option; $optionsData[$index]['label'] = $optionValue['label']; } return $optionsData; } /** * Retrieve customer registration URL * * @return string * @codeCoverageIgnore */ public function getRegisterUrl() { return $this->customerUrlManager->getRegisterUrl(); } /** * Retrieve checkout URL * * @return string * @codeCoverageIgnore */ public function getCheckoutUrl() { return $this->urlBuilder->getUrl('checkout'); } /** * Retrieve checkout URL * * @return string * @codeCoverageIgnore */ public function pageNotFoundUrl() { return $this->urlBuilder->getUrl('checkout/noroute'); } /** * Retrieve default success page URL * * @return string * @codeCoverageIgnore */ public function getDefaultSuccessPageUrl() { return $this->urlBuilder->getUrl('checkout/onepage/success/'); } /** * Retrieve selected shipping method * * @return array|null */ private function getSelectedShippingMethod() { $shippingMethodData = null; try { $quoteId = $this->checkoutSession->getQuote()->getId(); $shippingMethod = $this->shippingMethodManager->get($quoteId); if ($shippingMethod) { $shippingMethodData = $shippingMethod->__toArray(); } } catch (\Exception $exception) { $shippingMethodData = null; } return $shippingMethodData; } /** * Create address data appropriate to fill checkout address form * * @param AddressInterface $address * @return array * @throws \Magento\Framework\Exception\LocalizedException */ private function getAddressFromData(AddressInterface $address) { $addressData = []; $attributesMetadata = $this->addressMetadata->getAllAttributesMetadata(); foreach ($attributesMetadata as $attributeMetadata) { if (!$attributeMetadata->isVisible()) { continue; } $attributeCode = $attributeMetadata->getAttributeCode(); $attributeData = $address->getData($attributeCode); if ($attributeData) { if ($attributeMetadata->getFrontendInput() === Multiline::NAME) { $attributeData = \is_array($attributeData) ? $attributeData : explode("\n", $attributeData); $attributeData = (object)$attributeData; } if ($attributeMetadata->isUserDefined()) { $addressData[CustomAttributesDataInterface::CUSTOM_ATTRIBUTES][$attributeCode] = $attributeData; continue; } $addressData[$attributeCode] = $attributeData; } } return $addressData; } /** * Retrieve store code * * @return string * @codeCoverageIgnore */ private function getStoreCode() { return $this->checkoutSession->getQuote()->getStore()->getCode(); } /** * Check if guest checkout is allowed * * @return bool * @codeCoverageIgnore */ private function isGuestCheckoutAllowed() { return $this->checkoutHelper->isAllowedGuestCheckout($this->checkoutSession->getQuote()); } /** * Check if customer is logged in * * @return bool * @codeCoverageIgnore */ private function isCustomerLoggedIn() { return (bool)$this->httpContext->getValue(CustomerContext::CONTEXT_AUTH); } /** * Check if customer must be logged in to proceed with checkout * * @return bool * @codeCoverageIgnore */ private function isCustomerLoginRequired() { return $this->checkoutHelper->isCustomerMustBeLogged(); } /** * Return forgot password URL * * @return string * @codeCoverageIgnore */ private function getForgotPasswordUrl() { return $this->customerUrlManager->getForgotPasswordUrl(); } /** * Return base static url. * * @return string * @codeCoverageIgnore */ protected function getStaticBaseUrl() { return $this->checkoutSession->getQuote()->getStore()->getBaseUrl(UrlInterface::URL_TYPE_STATIC); } /** * Return quote totals data * * @return array */ private function getTotalsData() { /** @var \Magento\Quote\Api\Data\TotalsInterface $totals */ $totals = $this->cartTotalRepository->get($this->checkoutSession->getQuote()->getId()); $items = []; /** @var \Magento\Quote\Model\Cart\Totals\Item $item */ foreach ($totals->getItems() as $item) { $items[] = $item->__toArray(); } $totalSegmentsData = []; /** @var \Magento\Quote\Model\Cart\TotalSegment $totalSegment */ foreach ($totals->getTotalSegments() as $totalSegment) { $totalSegmentArray = $totalSegment->toArray(); if (is_object($totalSegment->getExtensionAttributes())) { $totalSegmentArray['extension_attributes'] = $totalSegment->getExtensionAttributes()->__toArray(); } $totalSegmentsData[] = $totalSegmentArray; } $totals->setItems($items); $totals->setTotalSegments($totalSegmentsData); $totalsArray = $totals->toArray(); if (is_object($totals->getExtensionAttributes())) { $totalsArray['extension_attributes'] = $totals->getExtensionAttributes()->__toArray(); } return $totalsArray; } /** * Returns active carriers codes * * @return array */ private function getActiveCarriers() { $activeCarriers = []; foreach ($this->shippingMethodConfig->getActiveCarriers() as $carrier) { $activeCarriers[] = $carrier->getCarrierCode(); } return $activeCarriers; } /** * Returns origin country code * * @return string */ private function getOriginCountryCode() { return $this->scopeConfig->getValue( \Magento\Shipping\Model\Config::XML_PATH_ORIGIN_COUNTRY_ID, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $this->storeManager->getStore() ); } /** * Returns array of payment methods * * @return array $paymentMethods * @throws \Magento\Framework\Exception\NoSuchEntityException */ private function getPaymentMethods() { $paymentMethods = []; $quote = $this->checkoutSession->getQuote(); if ($quote->getIsVirtual()) { foreach ($this->paymentMethodManagement->getList($quote->getId()) as $paymentMethod) { $paymentMethods[] = [ 'code' => $paymentMethod->getCode(), 'title' => $paymentMethod->getTitle() ]; } } return $paymentMethods; } /** * Get notification messages for the quote items * * @param array $quoteItemData * @return array */ private function getQuoteItemsMessages(array $quoteItemData): array { $quoteItemsMessages = []; if ($quoteItemData) { foreach ($quoteItemData as $item) { $quoteItemsMessages[$item['item_id']] = $item['message']; } } return $quoteItemsMessages; } /** * Get quote address data for checkout * * @return array */ private function getQuoteAddressData(): array { $output = []; $quote = $this->checkoutSession->getQuote(); $shippingAddressFromData = []; if ($quote->getShippingAddress()->getEmail()) { $shippingAddressFromData = $this->getAddressFromData($quote->getShippingAddress()); if ($shippingAddressFromData) { $output['isShippingAddressFromDataValid'] = $quote->getShippingAddress()->validate() === true; $output['shippingAddressFromData'] = $shippingAddressFromData; } } if ($quote->getBillingAddress()->getEmail()) { $billingAddressFromData = $this->getAddressFromData($quote->getBillingAddress()); if ($billingAddressFromData && $shippingAddressFromData != $billingAddressFromData) { $output['isBillingAddressFromDataValid'] = $quote->getBillingAddress()->validate() === true; $output['billingAddressFromData'] = $billingAddressFromData; } } return $output; } /** * Get logged-in customer * * @return CustomerInterface */ private function getCustomer(): CustomerInterface { return $this->customerRepository->getById($this->customerSession->getCustomerId()); } }