Example #1
0
 /**
  * 2015-12-21
  * Когда чекбокс установлен, то в массиве приходит пустая строка,
  * а когда не установлен, то null.
  * @override
  * @see \Df\Config\Backend::dfSaveBefore()
  * @used-by \Df\Config\Backend::save()
  * @return void
  */
 protected function dfSaveBefore()
 {
     if ('' === $this->getValue()) {
         $this->setValue(true);
     }
     parent::dfSaveBefore();
 }
Example #2
0
 /**
  * 2016-08-03
  * Начиная с Magento 2.1.0 backend model создаётся только если данные присутствуют в базе данных
  * для конкретной области действия настроек (scope и scopeId).
  * https://github.com/magento/magento2/blob/2.1.0/app/code/Magento/Config/Block/System/Config/Form.php#L309-L327
  * Если данные отсутстствуют в БД для конкретной области действия настроек,
  * то backend model вообще не создаётся,
  * однако данные всё равно извлекаются из БД из общей области действия настроек:
  * https://github.com/magento/magento2/blob/2.1.0/app/code/Magento/Config/Block/System/Config/Form.php#L323-L327
  * Видимо, такое поведение дефектно: данные могут попасть в форму
  * в обход обработки и валидации их в backend model.
  *
  * Ранее (до версии 2.1.0) backend model создавалась в любом случае:
  * такое поведение я считаю более верным:
  * https://github.com/magento/magento2/blob/2.0.8/app/code/Magento/Config/Block/System/Config/Form.php#L330-L342
  *
  * В плагин мы попадаем отсюда: @see \Magento\Config\Block\System\Config\Form::_initElement()
  * https://github.com/magento/magento2/blob/2.1.0/app/code/Magento/Config/Block/System/Config/Form.php#L347-L367
  *
  * @see \Magento\Framework\Data\Form\Element\Fieldset::addField()
  * @param Sb|El $sb
  * @param string $elementId
  * @param string $type
  * @param array(string => mixed) $config
  * @param bool $after [optional]
  * @param bool $isAdvanced [optional]
  * @return array(string|bool|array(string => mixed))
  */
 public function beforeAddField(Sb $sb, $elementId, $type, array $config, $after = false, $isAdvanced = false)
 {
     /** @var array(string => mixed)|null $fc */
     $fc = dfa($config, 'field_config');
     /**
      * 2016-09-27
      * Модуль Unirgy Dropship ошибочно пихает в $fc объект класса stdClass вместо массива:
      * https://code.dmitry-fedyuk.com/m2e/stripe/issues/5
      */
     if ($fc && is_array($fc)) {
         /** @var string|null $path */
         $path = df_cc_path(dfa($fc, 'path'), dfa($fc, 'id'));
         /** @var string|null $backendC */
         $backendC = dfa($fc, 'backend_model');
         /**
          * 2016-08-03
          * Конкретное значение тега «type» из system.xml можно получить вызовом dfa($fc, 'type')
          * Однако нам это не нужно: достаточно использовать аргумент $type:
          * @see \Magento\Config\Model\Config\Structure\Element\Field::getType()
          */
         /** @var mixed|null $value */
         $value = dfa($config, 'value');
         if ($path && $backendC && !B::isProcessed($path) && is_a($type, El::class, true) && !is_null($value)) {
             /**
              * 2016-08-03
              * По аналогии с @see \Magento\Config\Block\System\Config\Form::_initElement()
              * https://github.com/magento/magento2/blob/2.1.0/app/code/Magento/Config/Block/System/Config/Form.php#L314-L320
              */
             /** @var B $b */
             $b = df_create($backendC);
             $b->setPath($path);
             $b->setValue($value);
             /**
              * 2016-08-03
              * По аналогии с @see \Magento\Config\Block\System\Config\Form::getWebsiteCode()
              */
             $b->setWebsite(df_request('website', ''));
             /**
              * 2016-08-03
              * По аналогии с @see \Magento\Config\Block\System\Config\Form::getStoreCode()
              */
             $b->setStore(df_request('store', ''));
             $b->afterLoad();
             $config['value'] = $b->getValue();
         }
     }
     return [$elementId, $type, $config, $after, $isAdvanced];
 }
Example #3
0
 /**
  * 2015-12-07
  * @override
  * @see \Df\Config\Backend::dfSaveBefore()
  * @used-by \Df\Config\Backend::save()
  * @return void
  */
 protected function dfSaveBefore()
 {
     parent::dfSaveBefore();
     $this->valueSerialize();
 }