123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- <?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\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\InventoryApi\Api\Data\SourceInterface;
- use Magento\InventoryApi\Api\Data\SourceInterfaceFactory;
- use Magento\InventoryApi\Api\SourceRepositoryInterface;
- use Magento\InventoryAdminUi\Model\Source\SourceHydrator;
- use Magento\Framework\App\Action\HttpPostActionInterface;
- /**
- * Save Controller
- */
- class Save extends Action implements HttpPostActionInterface
- {
- /**
- * @see _isAllowed()
- */
- const ADMIN_RESOURCE = 'Magento_InventoryApi::source';
- /**
- * @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
- */
- 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;
- }
- $sourceCodeQueryParam = $request->getQuery(SourceInterface::SOURCE_CODE);
- try {
- $source = (null !== $sourceCodeQueryParam)
- ? $this->sourceRepository->get($sourceCodeQueryParam)
- : $this->sourceFactory->create();
- $this->processSave($source, $requestData);
- $this->messageManager->addSuccessMessage(__('The Source has been saved.'));
- $this->processRedirectAfterSuccessSave($resultRedirect, $source->getSourceCode());
- } catch (NoSuchEntityException $e) {
- $this->messageManager->addErrorMessage(__('The Source does not exist.'));
- $this->processRedirectAfterFailureSave($resultRedirect);
- } catch (ValidationException $e) {
- foreach ($e->getErrors() as $localizedError) {
- $this->messageManager->addErrorMessage($localizedError->getMessage());
- }
- $this->_session->setSourceFormData($requestData);
- $this->processRedirectAfterFailureSave($resultRedirect, $sourceCodeQueryParam ?? $sourceCodeQueryParam);
- } catch (CouldNotSaveException $e) {
- $this->messageManager->addErrorMessage($e->getMessage());
- $this->_session->setSourceFormData($requestData);
- $this->processRedirectAfterFailureSave($resultRedirect, $sourceCodeQueryParam ?? $sourceCodeQueryParam);
- } catch (Exception $e) {
- $this->messageManager->addErrorMessage(__('Could not save Source.'));
- $this->_session->setSourceFormData($requestData);
- $this->processRedirectAfterFailureSave($resultRedirect, $sourceCodeQueryParam ?? $sourceCodeQueryParam);
- }
- return $resultRedirect;
- }
- /**
- * @param SourceInterface $source
- * @param array $requestData
- * @return void
- */
- 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,
- ]
- );
- }
- /**
- * @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('*/*/');
- }
- }
- /**
- * @param Redirect $resultRedirect
- * @param string|null $sourceCode
- * @return void
- */
- private function processRedirectAfterFailureSave(Redirect $resultRedirect, string $sourceCode = null)
- {
- if (null === $sourceCode) {
- $resultRedirect->setPath('*/*/new');
- } else {
- $resultRedirect->setPath('*/*/edit', [
- SourceInterface::SOURCE_CODE => $sourceCode,
- '_current' => true,
- ]);
- }
- }
- }
|