/** * @param string $text * @param int $requiredLength * @param bool $addDots [optional] * @return string */ public function chop($text, $requiredLength, $addDots = true) { df_param_string($text, 0); df_param_integer($requiredLength, 1); df_param_between($requiredLength, 1, 0); df_param_boolean($addDots, 2); return mb_strlen($text) <= $requiredLength ? $text : df_ccc('', $this->trim(mb_substr($text, 0, $requiredLength - ($addDots ? 3 : 0))), $addDots ? '...' : null); }
/** * 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)); }
/** * 2016-07-10 * @param string $key * @param string $value * @return string */ private function formatKV($key, $value) { return df_ccc(': ', in_array($key, $this->keysToSuppress()) ? null : $key, $value); }
/** * 2015-12-29 * @param string $name * Обратите внимание, что в качестве $name можно передавать: * 1) Короткое имя. * 2) Уже собранное посредством @see df_asset_name() полное имя ассета. * В этом случае функция возвращает аргумент $name без изменения. * @param string|null $moduleName [optional] * @param string|null $extension [optional] * @return string */ function df_asset_name($name, $moduleName = null, $extension = null) { return df_ccc('.', df_ccc('::', $moduleName, $name), $extension); }
/** * 2016-03-09 * @param O $order * * 2016-03-24 * Если товар является настраиваемым, то @uses \Magento\Sales\Model\Order::getItems() * будет содержать как настраиваемый товар, так и его простой вариант. * Простые варианты игнорируем (у них имена типа «New Very Prive-36-Almond», * а нам удобнее видеть имена простыми, как у настраиваемого товара: «New Very Prive»). * * 2016-07-04 * Добавил этот параметр для модуля AllPay, где разделителем должен быть символ #. * @param string $separator [optional] * @return string */ function df_oi_s(O $order, $separator = ', ') { return df_ccc($separator, df_oi_roots_m($order, function (OI $i) { /** @var int $qty */ $qty = $i->getQtyOrdered(); return df_cc_s($i->getName(), 1 >= $qty ? null : "({$qty})"); })); }
/** * 2016-07-12 * @used-by \Df\Payment\R\Response::ic() * @param string|null $case [optional] * @return array(string => string) */ private function testData($case = null) { /** @var string $classSuffix */ $classSuffix = df_class_last($this); /** * 2016-08-28 * Если у класса Response нет подклассов, * то не используем суффикс Response в именах файлах тестовых данных, * а случай confirm делаем случаем по умолчанию. * /dfe-allpay/confirm/?class=BankCard => AllPay/BankCard.json * /dfe-allpay/confirm/?class=BankCard&case=failure => AllPay/BankCard-failure.json * /dfe-securepay/confirm/?dfTest=1 => SecurePay/confirm.json */ if ($classSuffix === df_class_last(__CLASS__)) { $classSuffix = null; $case = $case ?: 'confirm'; } /** @var string $basename */ $basename = df_ccc('-', $classSuffix, $case); /** @var string $module */ $module = df_module_name_short($this); return df_json_decode(file_get_contents(BP . "/_my/test/{$module}/{$basename}.json")); }
/** * 2016-09-08 * @param string|object $caller * @param string|mixed[] $data * @param string|null $suffix [optional] * @return void */ function dfp_report($caller, $data, $suffix = null) { df_report(df_ccc('--', 'mage2.pro/' . dfp_method_code($caller) . '-{date}--{time}', $suffix) . '.log', !is_array($data) ? $data : df_json_encode_pretty($data)); }
/** * 2016-08-10 * @param string[] ...$args * @return string */ function df_cc_s(...$args) { return df_ccc(' ', dfa_flatten($args)); }
/** * 2016-08-10 * Если класс не указан, то вернёт название функции. * Поэтому в качестве $a1 можно передавать null. * @param string|object|null|array(object|string)|array(string = string) $a1 * @param string|null $a2 [optional] * @return string */ function df_cc_method($a1, $a2 = null) { return df_ccc('::', $a2 ? [df_cts($a1), $a2] : (!isset($a1['function']) ? $a1 : [dfa($a1, 'class'), $a1['function']])); }
/** * 2016-08-20 * @used-by \Df\Qa\Message::log() * @return string */ protected function reportName() { return 'mage2.pro/' . df_ccc('-', $this->reportNamePrefix(), '{date}--{time}.log'); }