Example #1
0
 /** @return bool */
 private function isSubjectMultiline()
 {
     if (!isset($this->{__METHOD__})) {
         $this->{__METHOD__} = df_t()->isMultiline($this->getSubject());
     }
     return $this->{__METHOD__};
 }
Example #2
0
/**
 * 2015-02-18
 * По смыслу функция @see df_extend() аналогична методу @see \Magento\Framework\Simplexml\Element::extend()
 * и предназначена для слияния настроечных опций,
 * только, в отличие от @see \Magento\Framework\Simplexml\Element::extend(),
 * @see df_extend() сливает не XML, а ассоциативные массивы.
 *
 * Обратите внимание, что вместо @see df_extend() нельзя использовать ни
 * @see array_replace_recursive(), ни @see array_merge_recursive(),
 * ни тем более @see array_replace() и @see array_merge()
 * Нерекурсивные аналоги отметаются сразу, потому что не способны сливать вложенные структуры.
 * Но и стандартные рекурсивные функции тоже не подходят:
 *
 * 1)
 * array_merge_recursive(array('width' => 180), array('width' => 200))
 * вернёт: array(array('width' => array(180, 200)))
 * http://php.net/manual/function.array-merge-recursive.php
 * Наша функция df_extend(array('width' => 180), array('width' => 200))
 * вернёт array('width' => 200)
 *
 * 2)
 * array_replace_recursive(array('x' => array('A', 'B')), array('x' => 'C'))
 * вернёт: array('x' => array('С', 'B'))
 * http://php.net/manual/function.array-replace-recursive.php
 * Наша функция df_extend(array('x' => array('A', 'B')), array('x' => 'C'))
 * вернёт array('x' => 'C')
 *
 * @param array(string => mixed) $defaults
 * @param array(string => mixed) $newValues
 * @return array(string => mixed)
 */
function df_extend(array $defaults, array $newValues)
{
    /** @var array(string => mixed) $result */
    // Здесь ошибочно было бы $result = [],
    // потому что если ключ отсутствует в $newValues,
    // то тогда он не попадёт в $result.
    $result = $defaults;
    foreach ($newValues as $key => $newValue) {
        /** @var int|string $key */
        /** @var mixed $newValue */
        /** @var mixed $defaultValue */
        $defaultValue = dfa($defaults, $key);
        if (!is_array($defaultValue)) {
            // 2016-08-23
            // unset добавил сегодня.
            if (is_null($newValue)) {
                unset($result[$key]);
            } else {
                $result[$key] = $newValue;
            }
        } else {
            if (is_array($newValue)) {
                $result[$key] = df_extend($defaultValue, $newValue);
            } else {
                if (is_null($newValue)) {
                    unset($result[$key]);
                } else {
                    // Если значение по умолчанию является массивом,
                    // а новое значение не является массивом,
                    // то это наверняка говорит об ошибке программиста.
                    df_error("df_extend: значением по умолчанию ключа «{$key}» является массив {defaultValue}," . "\nоднако программист ошибочно пытается заместить его" . ' значением {newValue} типа «{newType}», что недопустимо:' . "\nзамещаемое значение для массива должно быть либо массивом, либо «null».", ['{defaultValue}' => df_t()->singleLine(df_dump($defaultValue)), '{newType}' => gettype($newValue), '{newValue}' => df_dump($newValue)]);
                }
            }
        }
    }
    return $result;
}
Example #3
0
/**
 * @see df_xml_prettify()
 * @param string $value
 * @return string
 */
function df_json_prettify($value)
{
    return Zend_Json::prettyPrint(df_t()->adjustCyrillicInJson($value));
}
Example #4
0
/**
 * Обратите внимание, что иногда вместо данной функции надо применять @see trim().
 * Например, @see df_trim() не умеет отсекать нулевые байты,
 * которые могут образовываться на конце строки
 * в результате шифрации, передачи по сети прямо в двоичном формате, и затем обратной дешифрации
 * посредством @see Varien_Crypt_Mcrypt.
 * @see Df_Core_Model_RemoteControl_Coder::decode()
 * @see Df_Core_Model_RemoteControl_Coder::encode()
 * @param string|string[] $s
 * @param string $charlist [optional]
 * @return string|string[]
 */
function df_trim($s, $charlist = null)
{
    return df_t()->trim($s, $charlist);
}
Example #5
0
/**
 * @param int $days
 * @return string
 */
function df_day_noun($days)
{
    /** @var string[] $forms */
    static $forms = ['день', 'дня', 'дней'];
    return df_t()->getNounForm($days, $forms);
}
Example #6
0
File: G.php Project: mage2pro/core
 /**
  * 2016-08-31
  * @return string
  */
 private function _p()
 {
     /** @var string $result */
     /**
     * Обратите внимание, что метод ядра Magento CE
     * @see \Magento\Framework\Simplexml\Element::asNiceXml()
     * не сохраняет в документе XML блоки CDATA,
     * а вместо этого заменяет недопустимые для XML символы их допустимыми кодами,
     * например: & => &
     *
     * Также @see \Magento\Framework\Simplexml\Element::asNiceXml()
     * не добавляет к документу заголовок XML: его надо добавить вручную.
     *
     * 2015-02-27
     * Обратите внимание, что для конвертации объекта класса @see SimpleXMLElement в строку
     * надо использовать именно метод @uses SimpleXMLElement::asXML(),
     * а не @see SimpleXMLElement::__toString() или оператор (string)$this.
     *
     * @see SimpleXMLElement::__toString() и (string)$this
     * возвращают непустую строку только для концевых узлов (листьев дерева XML).
     * Пример:
     			<?xml version='1.0' encoding='utf-8'?>
     				<menu>
     					<product>
     						<cms>
     							<class>aaa</class>
     							<weight>1</weight>
     						</cms>
     						<test>
     							<class>bbb</class>
     							<weight>2</weight>
     						</test>
     					</product>
     				</menu>
     * Здесь для $e1 = $xml->{'product'}->{'cms'}->{'class'}
     * мы можем использовать $e1->__toString() и (string)$e1.
     * http://3v4l.org/rAq3F
     * Однако для $e2 = $xml->{'product'}->{'cms'}
     * мы не можем использовать $e2->__toString() и (string)$e2,
     * потому что узел «cms» не является концевым узлом (листом дерева XML).
     * http://3v4l.org/Pkj37
     * Более того, метод @see SimpleXMLElement::__toString()
     * отсутствует в PHP версий 5.2.17 и ниже:
     * http://3v4l.org/Wiia2#v500
     */
     /** @var string $header */
     $header = $this[self::P__SKIP_HEADER] ? '' : df_xml_header($this[self::P__1251] ? 'Windows-1251' : 'UTF-8');
     /** @var X $x */
     $x = df_xml_parse(df_cc_n($header, $this[self::P__DOC_TYPE], sprintf('<%s/>', $this[self::$P__TAG])));
     $x->addAttributes($this[self::P__ATTRIBUTES]);
     $x->importArray($this[self::$P__CONTENTS], $this[self::P__WRAP_IN_CDATA]);
     /** @var bool $pretty */
     $pretty = $this[self::P__PRETTY];
     $result = $this[self::P__SKIP_HEADER] ? $x->asXMLPart() : ($pretty || $this[self::P__1251] ? df_cc_n($header, $pretty ? $x->asNiceXml() : $x->asXMLPart()) : $x->asXML());
     // Убеждаемся, что asXML вернуло строку, а не false.
     df_assert_ne(false, $result);
     /**
      * Символ 0xB (вертикальная табуляция) допустим в UTF-8, но недопустим в XML:
      * http://stackoverflow.com/a/10095901
      */
     $result = str_replace("\v", "&#x0B;", $result);
     if ($this[self::P__1251]) {
         $result = df_1251_to($result);
     }
     if ($this[self::P__REMOVE_LINE_BREAKS]) {
         $result = df_t()->removeLineBreaks($result);
     }
     if ($this[self::P__DECODE_ENTITIES]) {
         $result = html_entity_decode($result, ENT_NOQUOTES, 'UTF-8');
     }
     return $result;
 }