Exemple #1
0
 /**
  * 2016-06-30
  * @override
  * @see \Df\Framework\IValidator::check()
  * @used-by \Df\Framework\Plugin\Data\Form\Element\AbstractElement::afterGetComment()
  * @used-by check()
  * @param AE $e
  * @return true|Phrase|Phrase[]
  */
 public function check(AE $e)
 {
     return dfa_flatten(array_map(function (R $r) use($e) {
         /** @var true|Phrase|Phrase[] $messages */
         $messages = $r->check($e);
         return true === $messages ? [] : df_array($messages);
     }, $this->_children)) ?: true;
 }
Exemple #2
0
 /**
  * 2016-11-20
  * У класса @see \Magento\Framework\Data\Form\Element\AbstractElement
  * метод getComment() — магический.
  * К магическим методам плагины не применяются.
  * Поэтому для задействования плагина необходимо унаследоваться от класса ядра
  * и явно объявить в своём классе метод getComment().
  * Примеры:
  * @see \Df\Framework\Form\Element\Checkbox::getComment()
  * @see \Df\Framework\Form\Element\Text::getComment()
  * @used-by \Magento\Config\Block\System\Config\Form\Field::_renderValue()
  * https://github.com/magento/magento2/blob/2.1.0/app/code/Magento/Config/Block/System/Config/Form/Field.php#L82-L84
  * @param Sb $sb
  * @param string $result
  * @return string
  */
 public function afterGetComment(Sb $sb, $result)
 {
     /** @var string|null $vc */
     $vc = df_fe_fc($sb, 'dfValidator');
     if ($vc) {
         /** @var \Df\Framework\IValidator $v */
         $v = df_o($vc);
         /** @var Phrase|Phrase[]|true $messages */
         $messages = $v->check($sb);
         if (true !== $messages) {
             $result .= df_tag_list(df_array($messages), false, 'df-enabler-warnings');
         }
     }
     return $result;
 }
Exemple #3
0
/**
 * 2015-11-28
 * @param AE|E $e
 * @param string $class [optional]
 * @param string|string[] $css [optional]
 * @param array(string => string) $params [optional]
 * @param string|null $path [optional]
 * @return void
 */
function df_fe_init(AE $e, $class = '', $css = [], $params = [], $path = null)
{
    $class = $class ?: get_class($e);
    /** @var string $moduleName */
    $moduleName = df_module_name($class);
    // 2015-12-29
    // Мы различаем ситуации, когда $path равно null и пустой строке.
    // *) null означает, что имя ресурса должно определяться по имени класса.
    // *) пустая строка означает, что ресурс не имеет префикса, т.е. его имя просто «main».
    if (is_null($path)) {
        /** @var string[] $classA */
        $classA = df_explode_class_lc($class);
        $classLast = array_pop($classA);
        switch ($classLast) {
            // Если имя класса заканчивается на FormElement,
            // то это окончание в пути к ресурсу отбрасываем.
            case 'formElement':
                // $path будет равно null
                break;
                // Если имя класса заканчивается на Element,
                // то в качестве пути к ресурсу используем предыдущую часть класса.
                // Пример: «Dfe\SalesSequence\Config\Matrix\Element» => «matrix»
            // Если имя класса заканчивается на Element,
            // то в качестве пути к ресурсу используем предыдущую часть класса.
            // Пример: «Dfe\SalesSequence\Config\Matrix\Element» => «matrix»
            case 'element':
                $path = array_pop($classA);
                break;
            default:
                $path = $classLast;
        }
    }
    // 2015-12-29
    // Используем df_ccc, чтобы отбросить $path, равный пустой строке.
    // Если имя класса заканчивается на FormElement, то это окончание в пути к ресурсу отбрасываем.
    $path = df_ccc('/', 'formElement', $path, 'main');
    /**
     * 2015-12-29
     * На практике заметил, что основной файл CSS используется почти всегда,
     * и его имя имеет формат: Df_Framework::formElement/color/main.css.
     * Добавляем его обязательно в конец массива,
     * чтобы правила основного файла CSS элемента
     * имели приоритет над правилами библиотечных файлов CSS,
     * которые элемент мог включать в массив $css.
     * Обратите внимание, что мы даже не проверяем,
     * присутствует ли уже $mainCss в массиве $css,
     * потому что @uses df_link_inline делает это сама.
     */
    $css = df_array($css);
    /**
     * 2015-12-30
     * Раньше я думал, что основной файл CSS используется всегда, однако нашлось исключение:
     * @see \Dfe\CurrencyFormat\FormElement обходится в настоящее время без CSS.
     */
    if (df_asset_exists($path, $moduleName, 'less')) {
        $css[] = df_asset_name($path, $moduleName, 'css');
    }
    /**
     * 2016-03-08
     * Отныне getBeforeElementHtml() будет гарантированно вызываться благодаря
     * @used-by \Df\Framework\Plugin\Data\Form\Element\AbstractElement::afterGetElementHtml()
     */
    $e['before_element_html'] .= df_cc_n(!df_asset_exists($path, $moduleName, 'js') ? null : df_x_magento_init($moduleName, $path, ['id' => $e->getHtmlId()] + df_clean($params)), df_link_inline($css));
}
Exemple #4
0
/**
* 2015-02-11
* Эта функция аналогична @see array_map(), но обладает 3-мя дополнительными возможностями:
* 1) её можно применять не только к массивам, но и к @see \Traversable.
* 2) она позволяет удобным способом передавать в $callback дополнительные параметры
* 3) позволяет передавать в $callback ключи массива
* до и после основного параметра (элемента массива).
* 4) позволяет в результате использовать нестандартные ключи
* Обратите внимание, что
		df_map('Df_Cms_Model_ContentsMenu_Applicator::i', $this->getCmsRootNodes())
* эквивалентно
		$this->getCmsRootNodes()->walk('Df_Cms_Model_ContentsMenu_Applicator::i')
* @param callable|array(int|string => mixed)|array[]\Traversable $a1
* @param callable|array(int|string => mixed)|array[]|\Traversable $a2
* @param mixed|mixed[] $pAppend [optional]
* @param mixed|mixed[] $pPrepend [optional]
* @param int $keyPosition [optional]
* @param bool $returnKey [optional]
* @return array(int|string => mixed)
*/
function df_map($a1, $a2, $pAppend = [], $pPrepend = [], $keyPosition = 0, $returnKey = false)
{
    /** @var callable $callback */
    /** @var array(int|string => mixed)|\Traversable $array */
    list($callback, $array) = is_callable($a1) ? [$a1, $a2] : [$a2, $a1];
    df_assert_callable($callback);
    df_assert_traversable($array);
    $array = df_ita($array);
    /** @var array(int|string => mixed) $result */
    if (!$pAppend && !$pPrepend && 0 === $keyPosition && !$returnKey) {
        $result = array_map($callback, $array);
    } else {
        $pAppend = df_array($pAppend);
        $pPrepend = df_array($pPrepend);
        $result = [];
        foreach ($array as $key => $item) {
            /** @var int|string $key */
            /** @var mixed $item */
            /** @var mixed[] $primaryArgument */
            switch ($keyPosition) {
                case DF_BEFORE:
                    $primaryArgument = [$key, $item];
                    break;
                case DF_AFTER:
                    $primaryArgument = [$item, $key];
                    break;
                default:
                    $primaryArgument = [$item];
            }
            /** @var mixed[] $arguments */
            $arguments = array_merge($pPrepend, $primaryArgument, $pAppend);
            /** @var mixed $item */
            $item = call_user_func_array($callback, $arguments);
            if (!$returnKey) {
                $result[$key] = $item;
            } else {
                // 2016-10-25
                // Позволяет возвращать нестандартные ключи.
                $result[$item[0]] = $item[1];
            }
        }
    }
    return $result;
}
Exemple #5
0
 /**
  * @param string|null $type [optional]
  * @param int|bool|null $lifetime [optional]
  * @param string|string[]|null $tags [optional]
  * @return \Df\Core\Cache
  */
 public static function i($type = null, $lifetime = self::LIFETIME_STANDARD, $tags = null)
 {
     /** @var bool $infinite */
     $infinite = true === $lifetime;
     if ($infinite) {
         $lifetime = self::LIFETIME_INFINITE;
     }
     $tags = $tags ? df_array($tags) : ($type ? [$type] : []);
     return new self([self::$P__LIFETIME => $lifetime, self::$P__TAGS => $tags, self::$P__TYPE => $type]);
 }
Exemple #6
0
 /**
  * @param string $propertyName
  * @param string $cacheKey
  * @return void
  */
 private function cacheSaveProperty($propertyName, $cacheKey)
 {
     $cacheKey = $cacheKey . $propertyName;
     /** @var mixed $propertyValue */
     $propertyValue = $this->{$propertyName};
     /** @var string|bool $propertyValueSerialized */
     $propertyValueSerialized = isset($this->_cachedPropertiesSimpleMap[$propertyName]) ? df_serialize_simple($propertyValue) : df_serialize($propertyValue);
     if ($propertyValueSerialized) {
         df_cache_save($data = $propertyValueSerialized, $id = $cacheKey, $tags = df_array($this->cacheTags()), $lifeTime = $this->cacheLifetime());
     }
 }