false - вернуть URL, true - динамический URL с макросом {sitehost} * @return array */ public static function getImagesURL($json, $size, $opt = []) { $opt['field'] = 'url'; return static::_getImages($json, $size, $opt); } /** * Получение URL первой картинки, на основе сохраненных данных формы * @param string|array $json сохраненная строка или массив * @param string|array $size ключ размера или массив размеров * @param array $opt опции 'dynamic' => false - вернуть URL, true - динамический URL с макросом {sitehost} * @return string|array */ public static function getImageURL($json, $size, $opt = []) { $opt['oneImage'] = true; return static::getImagesURL($json, $size, $opt); } /** * Получение массива путей картинок, на основе сохраненных данных формы * @param string|array $json сохраненная строка или массив * @param string|array $size ключ размера или массив размеров * @param array $opt опции 'dynamic' => false - вернуть полный путь, true - динамический путь с макросом {path_base} * @return array */ public static function getImagesPath($json, $size, $opt = []) { $opt['field'] = 'path'; return static::_getImages($json, $size, $opt); } /** * Получение пути первой картинки, на основе сохраненных данных формы * @param string|array $json сохраненная строка или массив * @param string|array $size ключ размера или массив размеров * @param array $opt опции 'dynamic' => false - вернуть полный путь, true - динамический путь с макросом {path_base} * @return string|array */ public static function getImagePath($json, $size, $opt = []) { $opt['oneImage'] = true; return static::getImagesPath($json, $size, $opt); } /** * Служебный метод получения url или путей картинок * @param string|array $json сохраненная строка или массив * @param string|array $size ключ размера или массив размеров * @param array $opt * @return array|string */ protected static function _getImages($json, $size, $opt = []) { $opt = func::array_defaults($opt, [ 'oneImage' => false, 'dynamic' => false, 'field' => 'url', ]); $field = $opt['field']; if ($opt['dynamic']) { $dynamic = function($data) { return $data; }; } else { if ($field == 'url') { $dynamic = function($url) { return Url::dynamic($url, [], ['lang' => Lang::getDefaultLanguage()]); }; } elseif ($field == 'path') { $dynamic = function($path) { return str_replace('{path_base}', PATH_BASE, $path); }; } else { return false; } } if (is_string($json)) { $json = json_decode($json, true); } if ( ! is_array($json)) { $json = []; } $result = []; if ($opt['oneImage']) { $image = reset($json); if ( ! is_array($size)) { if (isset($image[$field][$size])) { $result = $dynamic($image[$field][$size]); } } else { foreach ($size as $v) { $result[$v] = static::_getImages($json, $v, $opt); } } } else { if ( ! is_array($size)) { foreach ($json as $v) { if (isset($v[$field][$size])) { $result[] = $dynamic($v[$field][$size]); } } } else { foreach ($json as $v) { $r = []; foreach ($size as $s) { if (isset($v[$field][$s])) { $r[$s] = $dynamic($v[$field][$s]); } } if (empty($r)) continue; $result[] = $r; } } } return $result; } /** * Получение массива URL файлов, на основе сохраненных данных формы * @param string|array $json сохраненная строка или массив * @param array $opt опции 'dynamic' => false - вернуть URL, true - динамический URL с макросом {sitehost} * @return array */ public static function getFilesURL($json, $opt = []) { $opt['field'] = 'url'; return static::_getFiles($json, $opt); } /** * Получение URL первого файла, на основе сохраненных данных формы * @param string|array $json сохраненная строка или массив * @param array $opt опции 'dynamic' => false - вернуть URL, true - динамический URL с макросом {sitehost} * @return string|array */ public static function getFileURL($json, $opt = []) { $opt['oneFile'] = true; return static::getFilesURL($json, $opt); } /** * Получение массива путей файлов, на основе сохраненных данных формы * @param string|array $json сохраненная строка или массив * @param array $opt опции 'dynamic' => false - вернуть полный путь, true - динамический путь с макросом {path_base} * @return array */ public static function getFilesPath($json, $opt = []) { $opt['field'] = 'path'; return static::_getFiles($json, $opt); } /** * Получение пути первого файла, на основе сохраненных данных формы * @param string|array $json сохраненная строка или массив * @param array $opt опции 'dynamic' => false - вернуть полный путь, true - динамический путь с макросом {path_base} * @return string|array */ public static function getFilePath($json, $opt = []) { $opt['oneFile'] = true; return static::getFilesPath($json, $opt); } /** * Служебный метод получения url или путей файлов * @param string|array $json сохраненная строка или массив * @param array $opt * @return array|string */ protected static function _getFiles($json, $opt = []) { $opt = func::array_defaults($opt, [ 'oneFile' => false, 'dynamic' => false, 'field' => 'url', ]); $field = $opt['field']; if ($opt['dynamic']) { $dynamic = function($data) { return $data; }; } else { if ($field == 'url') { $dynamic = function($url) { return Url::dynamic($url, [], ['lang' => Lang::getDefaultLanguage()]); }; } elseif ($field == 'path') { $dynamic = function($path) { return str_replace('{path_base}', PATH_BASE, $path); }; } else { return false; } } if (is_string($json)) { $json = json_decode($json, true); } $result = []; if ( ! is_array($json)) { $json = []; } if ($opt['oneFile']) { $result = ''; $file = reset($json); if (isset($file[$field])) { $file = $file[$field]; while(is_array($file)) { $file = reset($file); } if (is_string($file)) { $result = $dynamic($file); } } } else { foreach ($json as $v) { if (isset($v[$field])) { $result[] = $dynamic($v[$field]); } } } return $result; } /** * Получение значения зашифрованного поля типа bff\tpl\admin\form\Password * @param string $password зашифрованное значение * @return string расшифрованное значение */ public static function getPassword($password) { return Security::decrypt($password); } }