Save.php 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. /**
  3. *
  4. * Copyright © Magento, Inc. All rights reserved.
  5. * See COPYING.txt for license details.
  6. */
  7. namespace Magento\Sales\Controller\Adminhtml\Order\Status;
  8. use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
  9. use Magento\Framework\Filter\FilterManager;
  10. use Magento\Sales\Model\Order\Status;
  11. use Magento\Framework\Exception\LocalizedException;
  12. use Magento\Framework\Controller\Result\Redirect;
  13. use Magento\Sales\Controller\Adminhtml\Order\Status as StatusAction;
  14. class Save extends StatusAction implements HttpPostActionInterface
  15. {
  16. /**
  17. * Save status form processing
  18. *
  19. * @return Redirect
  20. */
  21. public function execute()
  22. {
  23. $data = $this->getRequest()->getPostValue();
  24. $isNew = $this->getRequest()->getParam('is_new');
  25. /** @var Redirect $resultRedirect */
  26. $resultRedirect = $this->resultRedirectFactory->create();
  27. if ($data) {
  28. $statusCode = $this->getRequest()->getParam('status');
  29. //filter tags in labels/status
  30. /** @var $filterManager FilterManager */
  31. $filterManager = $this->_objectManager->get(FilterManager::class);
  32. if ($isNew) {
  33. $statusCode = $data['status'] = $filterManager->stripTags($data['status']);
  34. }
  35. $data['label'] = $filterManager->stripTags($data['label']);
  36. if (!isset($data['store_labels'])) {
  37. $data['store_labels'] = [];
  38. }
  39. foreach ($data['store_labels'] as &$label) {
  40. $label = $filterManager->stripTags($label);
  41. }
  42. $status = $this->_objectManager->create(Status::class)->load($statusCode);
  43. // check if status exist
  44. if ($isNew && $status->getStatus()) {
  45. $this->messageManager
  46. ->addErrorMessage(__('We found another order status with the same order status code.'));
  47. $this->_getSession()->setFormData($data);
  48. return $resultRedirect->setPath('sales/*/new');
  49. }
  50. $status->setData($data)->setStatus($statusCode);
  51. try {
  52. $status->save();
  53. $this->messageManager->addSuccessMessage(__('You saved the order status.'));
  54. return $resultRedirect->setPath('sales/*/');
  55. } catch (LocalizedException $e) {
  56. $this->messageManager->addErrorMessage($e->getMessage());
  57. } catch (\Exception $e) {
  58. $this->messageManager->addExceptionMessage(
  59. $e,
  60. __('We can\'t add the order status right now.')
  61. );
  62. }
  63. $this->_getSession()->setFormData($data);
  64. return $this->getRedirect($resultRedirect, $isNew);
  65. }
  66. return $resultRedirect->setPath('sales/*/');
  67. }
  68. /**
  69. * @param Redirect $resultRedirect
  70. * @param bool $isNew
  71. * @return Redirect
  72. */
  73. private function getRedirect(Redirect $resultRedirect, $isNew)
  74. {
  75. if ($isNew) {
  76. return $resultRedirect->setPath('sales/*/new');
  77. } else {
  78. return $resultRedirect->setPath('sales/*/edit', ['status' => $this->getRequest()->getParam('status')]);
  79. }
  80. }
  81. }