Файл: concrete5.7.5.6/concrete/vendor/concrete5/flysystem/src/Util.php
Строк: 208
<?php
namespace ConcreteFlysystem;
use LogicException;
class Util
{
protected $mime_type_util;
/**
* @return mixed
*/
public function getMimeTypeUtil()
{
if (!$this->mime_type_util) {
$this->setMimeTypeUtil(new UtilMimeType);
}
return $this->mime_type_util;
}
/**
* @param mixed $mime_type_util
*/
public function setMimeTypeUtil($mime_type_util)
{
$this->mime_type_util = $mime_type_util;
}
/**
* Get normalized pathinfo
*
* @param string $path
* @return array pathinfo
*/
public static function pathinfo($path)
{
$pathinfo = pathinfo($path) + compact('path');
$pathinfo['dirname'] = static::normalizeDirname($pathinfo['dirname']);
return $pathinfo;
}
/**
* Normalize a dirname return value
*
* @param string $dirname
* @return string normalized dirname
*/
public static function normalizeDirname($dirname)
{
if ($dirname === '.') {
return '';
}
return $dirname;
}
/**
* Get a normalized dirname from a path
*
* @param string $path
* @return string dirname
*/
public static function dirname($path)
{
return static::normalizeDirname(dirname($path));
}
/**
* Map result arrays
*
* @param array $object
* @param array $map
* @return array mapped result
*/
public static function map(array $object, array $map)
{
$result = array();
foreach ($map as $from => $to) {
if ( ! isset($object[$from]))
continue;
$result[$to] = $object[$from];
}
return $result;
}
/**
* Normalize path
*
* @param string $path
* @param string $separator
* @return string normalized path
*/
public static function normalizePath($path, $separator = '\/')
{
// Remove any kind of funky unicode whitespace
$normalized = preg_replace('#p{C}+|^./#u', '', $path);
// Path remove self referring paths ("/./").
$normalized = preg_replace('#/.(?=/)|^./|./$#', '', $normalized);
// Regex for resolving relative paths
$regex = '#/*[^/.]+/..#Uu';
while (preg_match($regex, $normalized)) {
$normalized = preg_replace($regex, '', $normalized);
}
if (preg_match('#/.{2}|.{2}/#', $normalized)) {
throw new LogicException('Path is outside of the defined root, path: [' . $path . '], resolved: [' . $normalized . ']');
}
return trim($normalized, $separator);
}
/**
* Normalize prefix
*
* @param string $prefix
* @param string $separator
* @return string normalized path
*/
public static function normalizePrefix($prefix, $separator)
{
return rtrim($prefix, $separator).$separator;
}
/**
* Get content size
*
* @param string $contents
* @return int content size
*/
public static function contentSize($contents)
{
return mb_strlen($contents, '8bit');
}
/**
* Guess MIME Type based on the path of the file and it's content
*
* @param string $path
* @param string $content
* @return string|null MIME Type or NULL if no extension detected
*/
public static function guessMimeType($path, $content)
{
return UtilMimeType::detectMimeType($path, $content);
}
/**
* Emulate directories
*
* @param array $listing
* @return array listing with emulated directories
*/
public static function emulateDirectories(array $listing)
{
$directories = array();
foreach ($listing as $object) {
if (empty($object['dirname'])) {
continue;
}
$parent = $object['dirname'];
while( ! empty($parent) && ! in_array($parent, $directories)) {
$directories[] = $parent;
$parent = static::dirname($parent);
}
}
$directories = array_unique($directories);
foreach ($directories as $directory) {
$listing[] = static::pathinfo($directory) + array('type' => 'dir');
}
return $listing;
}
/**
* Ensure a Config instance
*
* @param string|array|Config $config
* @return Config config instance
* @throw LogicException
*/
public static function ensureConfig($config)
{
if ($config === null) {
return new Config;
}
if ($config instanceof Config) {
return $config;
}
// Backwards compatibility
if (is_string($config)) {
$config = array('visibility' => $config);
}
if (is_array($config)) {
return new Config($config);
}
throw new LogicException('A config should either be an array or a FlysystemConfig object.');
}
}