![]() 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-inventory-admin-ui/Controller/Adminhtml/Source/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\InventoryAdminUi\Controller\Adminhtml\Source; use Exception; use Magento\Backend\App\Action; use Magento\Backend\App\Action\Context; use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Framework\Controller\Result\Redirect; use Magento\Framework\Controller\ResultInterface; use Magento\Framework\Exception\CouldNotSaveException; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Validation\ValidationException; use Magento\InventoryAdminUi\Model\Source\SourceHydrator; use Magento\InventoryApi\Api\Data\SourceInterface; use Magento\InventoryApi\Api\Data\SourceInterfaceFactory; use Magento\InventoryApi\Api\SourceRepositoryInterface; /** * Source save controller. */ class Save extends Action implements HttpPostActionInterface { /** * @see _isAllowed() */ const ADMIN_RESOURCE = 'Magento_InventoryApi::source_edit'; /** * @var SourceInterfaceFactory */ private $sourceFactory; /** * @var SourceRepositoryInterface */ private $sourceRepository; /** * @var SourceHydrator */ private $sourceHydrator; /** * @param Context $context * @param SourceInterfaceFactory $sourceFactory * @param SourceRepositoryInterface $sourceRepository * @param SourceHydrator $sourceHydrator */ public function __construct( Context $context, SourceInterfaceFactory $sourceFactory, SourceRepositoryInterface $sourceRepository, SourceHydrator $sourceHydrator ) { parent::__construct($context); $this->sourceFactory = $sourceFactory; $this->sourceRepository = $sourceRepository; $this->sourceHydrator = $sourceHydrator; } /** * @inheritdoc * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function execute(): ResultInterface { $resultRedirect = $this->resultRedirectFactory->create(); $request = $this->getRequest(); $requestData = $request->getPost()->toArray(); if (!$request->isPost() || empty($requestData['general'])) { $this->messageManager->addErrorMessage(__('Wrong request.')); $this->processRedirectAfterFailureSave($resultRedirect); return $resultRedirect; } $sourceCode = $requestData['general'][SourceInterface::SOURCE_CODE]; try { $source = $this->sourceRepository->get($sourceCode); if ($source->getPostcode() !== $requestData['general'][SourceInterface::POSTCODE]) { unset($requestData['general'][SourceInterface::LATITUDE]); unset($requestData['general'][SourceInterface::LONGITUDE]); $source->setLatitude(null); $source->setLongitude(null); } } catch (NoSuchEntityException $e) { $source = $this->sourceFactory->create(); } if (!$source->isObjectNew() && !isset($requestData['general']['id_field_name'])) { $this->messageManager->addErrorMessage(__('Could not save Source.')); $this->_session->setSourceFormData($requestData); $this->processRedirectAfterFailureSave($resultRedirect, $source, $requestData); } else { try { $this->processSave($source, $requestData); $this->messageManager->addSuccessMessage(__('The Source has been saved.')); $this->processRedirectAfterSuccessSave($resultRedirect, $source->getSourceCode()); } catch (ValidationException $e) { foreach ($e->getErrors() as $localizedError) { $this->messageManager->addErrorMessage($localizedError->getMessage()); } $this->_session->setSourceFormData($requestData); $this->processRedirectAfterFailureSave($resultRedirect, $source); } catch (CouldNotSaveException $e) { $this->messageManager->addErrorMessage($e->getMessage()); $this->_session->setSourceFormData($requestData); $this->processRedirectAfterFailureSave($resultRedirect, $source); } catch (Exception $e) { $this->messageManager->addErrorMessage(__('Could not save Source.')); $this->_session->setSourceFormData($requestData); $this->processRedirectAfterFailureSave($resultRedirect, $source); } } return $resultRedirect; } /** * Hydrate data from request and save source. * * @param SourceInterface $source * @param array $requestData * @return void * @throws CouldNotSaveException * @throws ValidationException */ private function processSave(SourceInterface $source, array $requestData) { $source = $this->sourceHydrator->hydrate($source, $requestData); $this->_eventManager->dispatch( 'controller_action_inventory_populate_source_with_data', [ 'request' => $this->getRequest(), 'source' => $source, ] ); $this->sourceRepository->save($source); $this->_eventManager->dispatch( 'controller_action_inventory_source_save_after', [ 'request' => $this->getRequest(), 'source' => $source, ] ); } /** * Get redirect url after source save. * * @param Redirect $resultRedirect * @param string $sourceCode * @return void */ private function processRedirectAfterSuccessSave(Redirect $resultRedirect, string $sourceCode) { if ($this->getRequest()->getParam('back')) { $resultRedirect->setPath( '*/*/edit', [ SourceInterface::SOURCE_CODE => $sourceCode, '_current' => true, ] ); } elseif ($this->getRequest()->getParam('redirect_to_new')) { $resultRedirect->setPath( '*/*/new', [ '_current' => true, ] ); } else { $resultRedirect->setPath('*/*/'); } } /** * Get redirect url after unsuccessful source save. * * @param Redirect $resultRedirect * @param null|SourceInterface $source * @param array $requestData * @return void */ private function processRedirectAfterFailureSave( Redirect $resultRedirect, ?SourceInterface $source = null, array $requestData = [] ) { if (!$source || $source->isObjectNew() || !$source->isObjectNew() && !isset($requestData['general']['id_field_name']) ) { $resultRedirect->setPath('*/*/new'); } else { $resultRedirect->setPath( '*/*/edit', [ SourceInterface::SOURCE_CODE => $source->getSourceCode(), '_current' => true, ] ); } } }