Ajax.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. namespace Dotdigitalgroup\Email\Controller\Adminhtml\Rules;
  3. use Magento\Backend\App\Action\Context;
  4. class Ajax extends \Magento\Backend\App\AbstractAction
  5. {
  6. /**
  7. * Authorization level of a basic admin session
  8. *
  9. * @see _isAllowed()
  10. */
  11. const ADMIN_RESOURCE = 'Dotdigitalgroup_Email::exclusion_rules';
  12. /**
  13. * @var \Magento\Framework\App\Response\Http
  14. */
  15. private $http;
  16. /**
  17. * @var \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Type
  18. */
  19. private $ruleType;
  20. /**
  21. * @var \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Condition
  22. */
  23. private $ruleCondition;
  24. /**
  25. * @var \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Value
  26. */
  27. private $ruleValue;
  28. /**
  29. * @var \Magento\Framework\Json\Helper\Data
  30. */
  31. private $jsonEncoder;
  32. /**
  33. * @var \Magento\Framework\Escaper
  34. */
  35. private $escaper;
  36. /**
  37. * Ajax constructor.
  38. *
  39. * @param Context $context
  40. * @param \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Type $ruleType
  41. * @param \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Condition $ruleCondition
  42. * @param \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Value $ruleValue
  43. * @param \Magento\Framework\Json\Helper\Data $jsonEncoder
  44. * @param \Magento\Framework\App\Response\Http $http
  45. * @param \Magento\Framework\Escaper $escaper
  46. */
  47. public function __construct(
  48. Context $context,
  49. \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Type $ruleType,
  50. \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Condition $ruleCondition,
  51. \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Value $ruleValue,
  52. \Magento\Framework\Json\Helper\Data $jsonEncoder,
  53. \Magento\Framework\App\Response\Http $http,
  54. \Magento\Framework\Escaper $escaper
  55. ) {
  56. $this->ruleType = $ruleType;
  57. $this->ruleCondition = $ruleCondition;
  58. $this->ruleValue = $ruleValue;
  59. $this->jsonEncoder = $jsonEncoder;
  60. $this->escaper = $escaper;
  61. parent::__construct($context);
  62. $this->http = $http;
  63. }
  64. /**
  65. * Execute method.
  66. *
  67. * @return void
  68. */
  69. public function execute()
  70. {
  71. $attribute = $this->getRequest()->getParam('attribute');
  72. $conditionName = $this->getRequest()->getParam('condition');
  73. $valueName = $this->getRequest()->getParam('value');
  74. if ($attribute && $conditionName && $valueName) {
  75. $type = $this->ruleType->getInputType($attribute);
  76. $conditionOptions = $this->ruleCondition->getInputTypeOptions($type);
  77. $response['condition'] = $this->_getOptionHtml(
  78. 'conditions',
  79. $conditionName,
  80. $conditionOptions
  81. );
  82. $elmType = $this->ruleValue->getValueElementType($attribute);
  83. if ($elmType == 'select') {
  84. $valueOptions = $this->ruleValue->getValueSelectOptions($attribute);
  85. $response['cvalue'] = $this->_getOptionHtml(
  86. 'cvalue',
  87. $valueName,
  88. $valueOptions
  89. );
  90. } elseif ($elmType == 'text') {
  91. $html = "<input title='cvalue' class='ddg-rules-conditions' id='' name=$valueName />";
  92. $response['cvalue'] = $html;
  93. }
  94. $this->http->getHeaders()->clearHeaders();
  95. $this->http->setHeader('Content-Type', 'application/json')
  96. ->setBody(
  97. $this->jsonEncoder->jsonEncode($response)
  98. );
  99. }
  100. }
  101. /**
  102. * Get select options.
  103. *
  104. * @param string $title
  105. * @param string $name
  106. * @param array $options
  107. *
  108. * @return string
  109. */
  110. private function _getOptionHtml($title, $name, $options)
  111. {
  112. $block = $this->_view->getLayout()->createBlock(
  113. \Magento\Framework\View\Element\Html\Select::class
  114. );
  115. $block->setOptions($options)
  116. ->setId('')
  117. ->setClass('ddg-rules-conditions')
  118. ->setTitle($title)
  119. ->setName($name);
  120. return $block->toHtml();
  121. }
  122. }