Edit.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace Dotdigitalgroup\Email\Controller\Adminhtml\Rules;
  3. class Edit extends \Magento\Backend\App\AbstractAction
  4. {
  5. /**
  6. * Authorization level of a basic admin session
  7. *
  8. * @see _isAllowed()
  9. */
  10. const ADMIN_RESOURCE = 'Dotdigitalgroup_Email::exclusion_rules';
  11. /**
  12. * @var \Magento\Framework\Registry
  13. */
  14. private $registry;
  15. /**
  16. * @var \Dotdigitalgroup\Email\Model\Rules
  17. */
  18. private $rules;
  19. /**
  20. * @var \Magento\Framework\Escaper
  21. */
  22. private $escaper;
  23. /**
  24. * @var \Dotdigitalgroup\Email\Model\ResourceModel\Rules
  25. */
  26. private $rulesResource;
  27. /**
  28. * Edit constructor.
  29. *
  30. * @param \Dotdigitalgroup\Email\Model\ResourceModel\Rules $rulesResource
  31. * @param \Magento\Backend\App\Action\Context $context
  32. * @param \Dotdigitalgroup\Email\Model\Rules $rules
  33. * @param \Magento\Framework\Registry $registry
  34. * @param \Magento\Framework\Escaper $escaper
  35. */
  36. public function __construct(
  37. \Dotdigitalgroup\Email\Model\ResourceModel\Rules $rulesResource,
  38. \Magento\Backend\App\Action\Context $context,
  39. \Dotdigitalgroup\Email\Model\Rules $rules,
  40. \Magento\Framework\Registry $registry,
  41. \Magento\Framework\Escaper $escaper
  42. ) {
  43. parent::__construct($context);
  44. $this->rules = $rules;
  45. $this->registry = $registry;
  46. $this->escaper = $escaper;
  47. $this->rulesResource = $rulesResource;
  48. }
  49. /**
  50. * Execute method.
  51. *
  52. * @return void
  53. */
  54. public function execute()
  55. {
  56. $id = $this->getRequest()->getParam('id');
  57. $this->_view->loadLayout();
  58. $this->_setActiveMenu(
  59. 'Magento_CatalogRule::exclusion_rules'
  60. )->_addBreadcrumb(
  61. $id
  62. ? __('Edit Rule')
  63. : __('New Rule'),
  64. $id
  65. ? __('Edit Rule')
  66. : __('New Rule')
  67. );
  68. $emailRules = $this->rules;
  69. $this->checkRuleExistAndLoad($id, $emailRules);
  70. $this->registry->unregister('current_ddg_rule'); // additional measure
  71. $this->registry->register('current_ddg_rule', $emailRules);
  72. $this->_view->getLayout()->getBlock('dotdigitalgroup.email.rules.edit')
  73. ->setData('action', $this->getUrl('*/*/save'));
  74. $this->_view->renderLayout();
  75. }
  76. /**
  77. * Check rule exist
  78. *
  79. * @param int|null $id
  80. * @param \Dotdigitalgroup\Email\Model\Rules $emailRules
  81. * @return void
  82. */
  83. private function checkRuleExistAndLoad($id, $emailRules)
  84. {
  85. if ($id) {
  86. $this->rulesResource->load($emailRules, $id);
  87. if (!$emailRules->getId()) {
  88. $this->messageManager->addErrorMessage(__('This rule no longer exists.'));
  89. $this->_redirect('*/*');
  90. }
  91. }
  92. $this->_view->getPage()->getConfig()->getTitle()->prepend(
  93. $emailRules->getId() ? $emailRules->getName() : __('New Rule')
  94. );
  95. // set entered data if was error when we do save
  96. $data = $this->_session->getPageData(true);
  97. if (!empty($data)) {
  98. $this->rules->addData($data);
  99. }
  100. }
  101. }