Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/concrete5/flysystem/src/Adapter/AbstractFtpAdapter.php
Строк: 288
<?php

namespace ConcreteFlysystemAdapter;

use 
ConcreteFlysystemAdapterInterface;

abstract class 
AbstractFtpAdapter extends AbstractAdapter
{
    protected 
$connection;
    protected 
$host;
    protected 
$port = 21;
    protected 
$username;
    protected 
$password;
    protected 
$ssl = false;
    protected 
$timeout = 90;
    protected 
$passive = true;
    protected 
$separator = '/';
    protected 
$root;
    protected 
$permPublic = 0744;
    protected 
$permPrivate = 0700;
    protected 
$configurable = array();

    public function 
__construct(array $config)
    {
        
$this->setConfig($config);
    }

    
/**
     * Set the config
     *
     * @param   array  $config
     * @return  $this
     */
    
public function setConfig(array $config)
    {
        foreach (
$this->configurable as $setting) {
            if ( ! isset(
$config[$setting]))
                continue;
            
$this->{'set' . ucfirst($setting)}($config[$setting]);
        }

        return 
$this;
    }

    
/**
     * Returns the host
     *
     * @return  string
     */
    
public function getHost()
    {
        return 
$this->host;
    }

    
/**
     * Set the host
     *
     * @param   string  $host
     * @return  $this
     */
    
public function setHost($host)
    {
        
$this->host = $host;

        return 
$this;
    }

    
/**
     * Set the public permission value
     *
     * @param   int  $permPublic
     * @return  $this
     */
    
public function setPermPublic($permPublic)
    {
        
$this->permPublic = $permPublic;

        return 
$this;
    }

    
/**
     * Set the private permission value
     *
     * @param   int  $permPrivate
     * @return  $this
     */
    
public function setPermPrivate($permPrivate)
    {
        
$this->permPrivate = $permPrivate;

        return 
$this;
    }

    
/**
     * Returns the ftp port
     *
     * @return int
     */
    
public function getPort()
    {
        return 
$this->port;
    }

    
/**
     * Set the ftp port
     *
     * @param   int|string $port
     * @return  $this
     */
    
public function setPort($port)
    {
        
$this->port = (int) $port;

        return 
$this;
    }

    
/**
     * Set the root folder to work from
     *
     * @param   string  $root
     * @return  $this
     */
    
public function setRoot($root)
    {
        
$this->root = rtrim($root, '\/') . $this->separator;

        return 
$this;
    }

    
/**
     * Returns the ftp username
     *
     * @return  string  username
     */
    
public function getUsername()
    {
        return empty(
$this->username) ? 'anonymous' : $this->username;
    }

    
/**
     * Set ftp username
     *
     * @param   string  $username
     * @return  $this
     */
    
public function setUsername($username)
    {
        
$this->username = $username;

        return 
$this;
    }

    
/**
     * Returns the password
     *
     * @return  string  password
     */
    
public function getPassword()
    {
        return 
$this->password;
    }

    
/**
     * Set the ftp password
     *
     * @param   string  $password
     * @return  $this
     */
    
public function setPassword($password)
    {
        
$this->password = $password;

        return 
$this;
    }

    
/**
     * Returns the amount of seconds before the connection will timeout
     *
     * @return  int
     */
    
public function getTimeout()
    {
        return 
$this->timeout;
    }

    
/**
     * Set the amount of seconds before the connection should timeout
     *
     * @param   int    $timeout
     * @return  $this
     */
    
public function setTimeout($timeout)
    {
        
$this->timeout = (int) $timeout;

        return 
$this;
    }

    
/**
     * {inheritdoc}
     */
    
public function listContents($directory = '', $recursive = false)
    {
        return 
$this->listDirectoryContents($directory, $recursive);
    }

    
/**
     * Normalize a directory listing
     *
     * @param   array   $listing
     * @param   string  $prefix
     * @return  array   directory listing
     */
    
protected function normalizeListing(array $listing, $prefix = '')
    {
        
$base = $prefix;
        
$result = array();
        
$listing = $this->removeDotDirectories($listing);

        while (
$item = array_shift($listing)) {
            if (
preg_match('#^.*:$#', $item)) {
                
$base = trim($item, './:');
                continue;
            }

            
$result[] = $this->normalizeObject($item, $base);
        }

        return 
$this->sortListing($result);
    }

    
/**
     * Sort a directory listing
     *
     * @param   array   $result
     * @return  array   sorted listing
     */
    
protected function sortListing(array $result)
    {
        
$compare = function ($one, $two) {
            return 
strnatcmp($one['path'], $two['path']);
        };

        
usort($result, $compare);

        return 
$result;
    }

    
/**
     * Normalize a file entry
     *
     * @param   string  $item
     * @param   string  $base
     * @return  array   normalized file array
     */
    
protected function normalizeObject($item, $base)
    {
        
$item = preg_replace('#s+#', ' ', trim($item));
        list (
$permissions, /* $number */, /* $owner */, /* $group */, $size, $month, $day, $time, $name) = explode(' ', $item, 9);
        
$type = $this->detectType($permissions);
        
$path = empty($base) ? $name : $base . $this->separator . $name;

        if (
$type === 'dir') {
            return 
compact('type', 'path');
        }

        
$permissions = $this->normalizePermissions($permissions);
        
$visibility = $permissions & 0044 ? AdapterInterface::VISIBILITY_PUBLIC : AdapterInterface::VISIBILITY_PRIVATE;
        
$size = (int) $size;
        
$timestamp = strtotime($month . ' ' . $day . ' ' . $time);

        return 
compact('type', 'path', 'visibility', 'size', 'timestamp');
    }

    
/**
     * Get the file type from the permissions
     *
     * @param   string  $permissions
     * @return  string  file type
     */
    
protected function detectType($permissions)
    {
        return 
substr($permissions, 0, 1) === 'd' ? 'dir' : 'file';
    }

    
/**
     * Normalize a permissions string
     *
     * @param   string  $permissions
     * @return  integer
     */
    
protected function normalizePermissions($permissions)
    {
        
// remove the type identifier
        
$permissions = substr($permissions, 1);

        
// map the string rights to the numeric counterparts
        
$map = array('-' => '0', 'r' => '4', 'w' => '2', 'x' => '1');
        
$permissions = strtr($permissions, $map);

        
// split up the permission groups
        
$parts = str_split($permissions, 3);

        
// convert the groups
        
$mapper = function ($part) {
            return 
array_sum(str_split($part));
        };

        
// get the sum of the groups
        
return array_sum(array_map($mapper, $parts));
    }

    
/**
     * Filter out dot-directories
     *
     * @param   array   $list
     * @return  array
     */
    
protected function removeDotDirectories(array $list)
    {
        
$filter = function ($line) {
            if ( ! empty(
$line) && ! preg_match('#.* .(.)?$|^total#', $line)) {
                return 
true;
            }

            return 
false;
        };

        return 
array_filter($list, $filter);
    }

    public function 
has($path)
    {
        return 
$this->getMetadata($path);
    }

    public function 
getSize($path)
    {
        return 
$this->getMetadata($path);
    }

    public function 
getTimestamp($path)
    {
        return 
$this->getMetadata($path);
    }

    public function 
getVisibility($path)
    {
        return 
$this->getMetadata($path);
    }

    public function 
ensureDirectory($dirname)
    {
        if ( ! empty(
$dirname) && ! $this->has($dirname)) {
            
$this->createDir($dirname);
        }
    }

    public function 
getConnection()
    {
        if ( ! 
$this->connection) {
            
$this->connect();
        }

        return 
$this->connection;
    }

    public function 
getPermPublic()
    {
        return 
$this->permPublic;
    }

    public function 
getPermPrivate()
    {
        return 
$this->permPrivate;
    }

    public function 
__destruct()
    {
        
$this->disconnect();
    }
}
Онлайн: 1
Реклама