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

namespace ConcreteFlysystemAdapter;

use 
DropboxClient;
use 
DropboxWriteMode;
use 
DropboxException;
use 
ConcreteFlysystemUtil;

class 
Dropbox extends AbstractAdapter
{
    
/**
     * @var  array  $resultMap
     */
    
protected static $resultMap = array(
        
'bytes'          => 'size',
        
'mime_type'      => 'mimetype',
    );

    
/**
     * @var  DropboxClient  $client
     */
    
protected $client;

    
/**
     * @var  string  $prefix
     */
    
protected $prefix;

    
/**
     * Constructor
     *
     * @param  DropboxClient  $client
     * @param  string           $prefix
     */
    
public function __construct(Client $client$prefix null)
    {
        
$prefix trim($prefix'/');
        
$this->client $client;
        
$this->prefix '/' $prefix;
    }

    
/**
     * Check weather a file exists
     *
     * @param   string       $path
     * @return  false|array  false or file metadata
     */
    
public function has($path)
    {
        return 
$this->getMetadata($path);
    }

    
/**
     * Write a file
     *
     * @param   string  $path
     * @param   string  $contents
     * @param   mixed   $config
     * @return  array   file metadata
     */
    
public function write($path$contents$config null)
    {
        return 
$this->upload($path$contentsWriteMode::add());
    }

    
/**
     * Write a file using a stream
     *
     * @param   string    $path
     * @param   resource  $resource
     * @param   mixed     $config
     * @return  array     file metadata
     */
    
public function writeStream($path$resource$config null)
    {
        return 
$this->uploadStream($path$resourceWriteMode::add());
    }

    
/**
     * Update a file
     *
     * @param   string  $path
     * @param   string  $contents
     * @param   mixed   $config   Config object or visibility setting
     * @return  array   file metadata
     */
    
public function update($path$contents$config null)
    {
        return 
$this->upload($path$contentsWriteMode::force());
    }

    
/**
     * Update a file using a stream
     *
     * @param   string    $path
     * @param   resource  $resource
     * @param   mixed     $config   Config object or visibility setting
     * @return  array     file metadata
     */
    
public function updateStream($path$resource$config null)
    {
        return 
$this->uploadStream($path$resourceWriteMode::force());
    }

    
/**
     * Do the actual upload of a string file
     *
     * @param   string  $path
     * @param   string  $contents
     * @param   WriteMode  $mode
     * @return  array|false   file metadata
     */
    
protected function upload($path$contentsWriteMode $mode)
    {
        
$location $this->prefix($path);

        if ( ! 
$result $this->client->uploadFileFromString($location$mode$contents)) {
            return 
false;
        }

        return 
$this->normalizeObject($result$path);
    }

    
/**
     * Do the actual upload of a file resource
     *
     * @param   string  $path
     * @param   resource  $resource
     * @param   WriteMode  $mode
     * @return  array|false   file metadata
     */
    
protected function uploadStream($path$resourceWriteMode $mode)
    {
        
$location $this->prefix($path);

        if ( ! 
$result $this->client->uploadFile($location$mode$resource)) {
            return 
false;
        }

        return 
$this->normalizeObject($result$path);
    }

    public function 
read($path)
    {
        if ( ! 
$object $this->readStream($path)) {
            return 
false;
        }

        
$object['contents'] = stream_get_contents($object['stream']);
        
fclose($object['stream']);
        unset(
$object['stream']);

        return 
$object;
    }

    public function 
readStream($path)
    {
        
$stream fopen('php://temp''w+');
        
$location $this->prefix($path);

        if ( ! 
$this->client->getFile($location$stream)) {
            
fclose($stream);
            return 
false;
        }

        
rewind($stream);

        return 
compact('stream');
    }

    public function 
rename($path$newpath)
    {
        
$path $this->prefix($path);
        
$newpath $this->prefix($newpath);

        try {
            
$result $this->client->move($path$newpath);
        } catch (
Exception $e) {
            return 
false;
        }

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

    public function 
copy($path$newpath)
    {
        
$path $this->prefix($path);
        
$newpath $this->prefix($newpath);

        try {
            
$result $this->client->copy($path$newpath);
        } catch (
Exception $e) {
            return 
false;
        }

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

    public function 
delete($path)
    {
        return 
$this->client->delete($this->prefix($path));
    }

    public function 
deleteDir($path)
    {
        return 
$this->delete($path);
    }

    public function 
createDir($path)
    {
        return array(
'path' => $path'type' => 'dir');
    }

    public function 
getMetadata($path)
    {
        
$object $this->client->getMetadata($this->prefix($path));

        if ( ! 
$object) {
            return 
false;
        }

        return 
$this->normalizeObject($object$path);
    }

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

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

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

    public function 
listContents($directory ''$recursive false)
    {
        
$listing = array();
        
$directory trim($directory'/.');
        
$prefixLength strlen($this->prefix);
        
$location '/' trim($this->prefix($directory), '/');

        if ( ! 
$result $this->client->getMetadataWithChildren($location)) {
            return array();
        }

        foreach (
$result['contents'] as $object) {
            
$path substr($object['path'], $prefixLength);
            
$listing[] = $this->normalizeObject($objecttrim($path'/'));

            if (
$recursive && $object['is_dir']) {
                
$listing array_merge($listing$this->listContents($path));
            }
        }

        return 
$listing;
    }

    protected function 
normalizeObject($object$path null)
    {
        
$result = array('path' => $path ?: ltrim($object['path'], '/'));

        if (isset(
$object['modified'])) {
            
$result['timestamp'] = strtotime($object['modified']);
        }

        
$result array_merge($resultUtil::map($object, static::$resultMap));
        
$result['type'] = $object['is_dir'] ? 'dir' 'file';

        return 
$result;
    }

    protected function 
prefix($path)
    {
        
$prefix rtrim($this->prefix'/');

        return 
$prefix '/' ltrim($path'/');
    }
}
Онлайн: 3
Реклама