123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- <?php
- namespace Dotdigitalgroup\Email\Controller\Adminhtml\Rules;
- class Selected extends \Magento\Backend\App\AbstractAction
- {
- /**
- * Authorization level of a basic admin session
- *
- * @see _isAllowed()
- */
- const ADMIN_RESOURCE = 'Dotdigitalgroup_Email::exclusion_rules';
- /**
- * @var \Magento\Framework\App\Response\Http
- */
- private $http;
- /**
- * @var \Dotdigitalgroup\Email\Model\RulesFactory
- */
- private $rulesFactory;
-
- /**
- * @var \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Type
- */
- private $ruleType;
- /**
- * @var \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Condition
- */
- private $ruleCondition;
- /**
- * @var \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Value
- */
- private $ruleValue;
- /**
- * @var \Magento\Framework\Json\Helper\Data
- */
- public $jsonEncoder;
- /**
- * @var \Magento\Framework\Escaper
- */
- private $escaper;
- /**
- * @var \Dotdigitalgroup\Email\Model\ResourceModel\Rules
- */
- private $rulesResource;
- /**
- * Selected constructor.
- *
- * @param \Dotdigitalgroup\Email\Model\ResourceModel\Rules $rulesResource
- * @param \Magento\Backend\App\Action\Context $context
- * @param \Dotdigitalgroup\Email\Model\RulesFactory $rulesFactory
- * @param \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Type $ruleType
- * @param \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Condition $ruleCondition
- * @param \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Value $ruleValue
- * @param \Magento\Framework\Json\Helper\Data $jsonEncoder
- * @param \Magento\Framework\App\Response\Http $http
- * @param \Magento\Framework\Escaper $escaper
- */
- public function __construct(
- \Dotdigitalgroup\Email\Model\ResourceModel\Rules $rulesResource,
- \Magento\Backend\App\Action\Context $context,
- \Dotdigitalgroup\Email\Model\RulesFactory $rulesFactory,
- \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Type $ruleType,
- \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Condition $ruleCondition,
- \Dotdigitalgroup\Email\Model\Adminhtml\Source\Rules\Value $ruleValue,
- \Magento\Framework\Json\Helper\Data $jsonEncoder,
- \Magento\Framework\App\Response\Http $http,
- \Magento\Framework\Escaper $escaper
- ) {
- $this->rulesFactory = $rulesFactory;
- $this->ruleType = $ruleType;
- $this->ruleCondition = $ruleCondition;
- $this->ruleValue = $ruleValue;
- $this->jsonEncoder = $jsonEncoder;
- $this->escaper = $escaper;
- $this->rulesResource = $rulesResource;
- parent::__construct($context);
- $this->http = $http;
- }
- /**
- * Execute method.
- *
- * @return \Magento\Framework\App\Response\HttpInterface
- */
- public function execute()
- {
- $id = $this->getRequest()->getParam('ruleid');
- $attribute = $this->getRequest()->getParam('attribute');
- $arrayKey = $this->getRequest()->getParam('arraykey');
- $conditionName = $this->getRequest()->getParam('condition');
- $valueName = $this->getRequest()->getParam('value');
- if ($arrayKey && $id && $attribute && $conditionName && $valueName) {
- $rule = $this->rulesFactory->create();
- $this->rulesResource->load($rule, $id);
- //rule not found
- if (!$rule->getId()) {
- $this->http->getHeaders()->clearHeaders();
- return $this->http->setHeader(
- 'Content-Type',
- 'application/json'
- )->setBody('Rule not found!');
- }
- $conditions = $rule->getCondition();
- $condition = $conditions[$arrayKey];
- $selectedConditions = $condition['conditions'];
- $selectedValues = $condition['cvalue'];
- $type = $this->ruleType->getInputType($attribute);
- $conditionOptions = $this->ruleCondition->getInputTypeOptions($type);
- $response['condition'] = str_replace(
- 'value="' . $selectedConditions . '"',
- 'value="' . $selectedConditions . '"' . 'selected="selected"',
- $this->getOptionHtml(
- 'conditions',
- $conditionName,
- $conditionOptions
- )
- );
- $elmType = $this->ruleValue->getValueElementType($attribute);
- $this->evaluateElmType($elmType, $selectedConditions, $attribute, $selectedValues, $valueName, $response);
- $this->http->getHeaders()->clearHeaders();
- $this->http->setHeader('Content-Type', 'application/json')
- ->setBody($this->jsonEncoder->jsonEncode($response));
- }
- }
- /**
- * @param string $elmType
- * @param string $selectedConditions
- * @param string $attribute
- * @param string $selectedValues
- * @param string $valueName
- * @param string $response
- *
- * @return null
- */
- private function evaluateElmType($elmType, $selectedConditions, $attribute, $selectedValues, $valueName, &$response)
- {
- if ($elmType == 'select' or $selectedConditions == 'null') {
- $isEmpty = false;
- if ($selectedConditions == 'null') {
- $isEmpty = true;
- }
- $valueOptions = $this->ruleValue->getValueSelectOptions($attribute, $isEmpty);
- $response['cvalue'] = str_replace(
- 'value="' . $selectedValues . '"',
- 'value="' . $selectedValues . '"' . 'selected="selected"',
- $this->getOptionHtml('cvalue', $valueName, $valueOptions)
- );
- } elseif ($elmType == 'text') {
- $encodedValue = $this->escaper->escapeHtml($selectedValues);
- $html = "<input style='width:160px' title='cvalue' name='$valueName' value='$encodedValue'/>";
- $response['cvalue'] = $html;
- }
- }
- /**
- * @param string $title
- * @param string $name
- * @param array $options
- *
- * @return string
- */
- private function getOptionHtml($title, $name, $options)
- {
- $block = $this->_view->getLayout()->createBlock(
- \Magento\Framework\View\Element\Html\Select::class
- );
- $block->setOptions($options)
- ->setId('')
- ->setClass('')
- ->setTitle($title)
- ->setName($name)
- ->setExtraParams('style="width:160px"');
- return $block->toHtml();
- }
- }
|