Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/croogo/croogo/FileManager/src/Utility/FileManager.php
<?php

namespace Croogo\FileManager\Utility;

use
Cake\Core\Configure;
use
Cake\Filesystem\Folder;
use
Cake\Log\Log;

/**
 * FileManager Model
 *
 * @category FileManager.Model
 * @package  Croogo.FileManager.Model
 * @version  2.1.0
 * @author   Fahad Ibnay Heylaal <contact@fahad19.com>
 * @license  http://www.opensource.org/licenses/mit-license.php The MIT License
 * @link     http://www.croogo.org
 */
class FileManager
{

    protected
$ext2MimeType = [
       
'ai'      => 'application/postscript',
       
'aif'     => 'audio/x-aiff',
       
'aifc'    => 'audio/x-aiff',
       
'aiff'    => 'audio/x-aiff',
       
'asc'     => 'text/plain',
       
'atom'    => 'application/atom+xml',
       
'au'      => 'audio/basic',
       
'avi'     => 'video/x-msvideo',
       
'bcpio'   => 'application/x-bcpio',
       
'bin'     => 'application/octet-stream',
       
'bmp'     => 'image/bmp',
       
'cdf'     => 'application/x-netcdf',
       
'cgm'     => 'image/cgm',
       
'class'   => 'application/octet-stream',
       
'cpio'    => 'application/x-cpio',
       
'cpt'     => 'application/mac-compactpro',
       
'csh'     => 'application/x-csh',
       
'css'     => 'text/css',
       
'csv'     => 'text/csv',
       
'dcr'     => 'application/x-director',
       
'dir'     => 'application/x-director',
       
'djv'     => 'image/vnd.djvu',
       
'djvu'    => 'image/vnd.djvu',
       
'dll'     => 'application/octet-stream',
       
'dmg'     => 'application/octet-stream',
       
'dms'     => 'application/octet-stream',
       
'doc'     => 'application/msword',
       
'dtd'     => 'application/xml-dtd',
       
'dvi'     => 'application/x-dvi',
       
'dxr'     => 'application/x-director',
       
'eps'     => 'application/postscript',
       
'etx'     => 'text/x-setext',
       
'exe'     => 'application/octet-stream',
       
'ez'      => 'application/andrew-inset',
       
'gif'     => 'image/gif',
       
'gram'    => 'application/srgs',
       
'grxml'   => 'application/srgs+xml',
       
'gtar'    => 'application/x-gtar',
       
'hdf'     => 'application/x-hdf',
       
'hqx'     => 'application/mac-binhex40',
       
'htm'     => 'text/html',
       
'html'    => 'text/html',
       
'ice'     => 'x-conference/x-cooltalk',
       
'ico'     => 'image/x-icon',
       
'ics'     => 'text/calendar',
       
'ief'     => 'image/ief',
       
'ifb'     => 'text/calendar',
       
'iges'    => 'model/iges',
       
'igs'     => 'model/iges',
       
'jpe'     => 'image/jpeg',
       
'jpeg'    => 'image/jpeg',
       
'jpg'     => 'image/jpeg',
       
'js'      => 'application/x-javascript',
       
'json'    => 'application/json',
       
'kar'     => 'audio/midi',
       
'latex'   => 'application/x-latex',
       
'lha'     => 'application/octet-stream',
       
'lzh'     => 'application/octet-stream',
       
'm3u'     => 'audio/x-mpegurl',
       
'man'     => 'application/x-troff-man',
       
'mathml'  => 'application/mathml+xml',
       
'me'      => 'application/x-troff-me',
       
'mesh'    => 'model/mesh',
       
'mid'     => 'audio/midi',
       
'midi'    => 'audio/midi',
       
'mif'     => 'application/vnd.mif',
       
'mov'     => 'video/quicktime',
       
'movie'   => 'video/x-sgi-movie',
       
'mp2'     => 'audio/mpeg',
       
'mp3'     => 'audio/mpeg',
       
'mp4'     => 'video/mpeg',
       
'mpe'     => 'video/mpeg',
       
'mpeg'    => 'video/mpeg',
       
'mpg'     => 'video/mpeg',
       
'mpga'    => 'audio/mpeg',
       
'ms'      => 'application/x-troff-ms',
       
'msh'     => 'model/mesh',
       
'mxu'     => 'video/vnd.mpegurl',
       
'nc'      => 'application/x-netcdf',
       
'oda'     => 'application/oda',
       
'ogg'     => 'application/ogg',
       
'pbm'     => 'image/x-portable-bitmap',
       
'pdb'     => 'chemical/x-pdb',
       
'pdf'     => 'application/pdf',
       
'pgm'     => 'image/x-portable-graymap',
       
'pgn'     => 'application/x-chess-pgn',
       
'png'     => 'image/png',
       
'pnm'     => 'image/x-portable-anymap',
       
'ppm'     => 'image/x-portable-pixmap',
       
'ppt'     => 'application/vnd.ms-powerpoint',
       
'ps'      => 'application/postscript',
       
'qt'      => 'video/quicktime',
       
'ra'      => 'audio/x-pn-realaudio',
       
'ram'     => 'audio/x-pn-realaudio',
       
'ras'     => 'image/x-cmu-raster',
       
'rdf'     => 'application/rdf+xml',
       
'rgb'     => 'image/x-rgb',
       
'rm'      => 'application/vnd.rn-realmedia',
       
'roff'    => 'application/x-troff',
       
'rss'     => 'application/rss+xml',
       
'rtf'     => 'text/rtf',
       
'rtx'     => 'text/richtext',
       
'sgm'     => 'text/sgml',
       
'sgml'    => 'text/sgml',
       
'sh'      => 'application/x-sh',
       
'shar'    => 'application/x-shar',
       
'silo'    => 'model/mesh',
       
'sit'     => 'application/x-stuffit',
       
'skd'     => 'application/x-koan',
       
'skm'     => 'application/x-koan',
       
'skp'     => 'application/x-koan',
       
'skt'     => 'application/x-koan',
       
'smi'     => 'application/smil',
       
'smil'    => 'application/smil',
       
'snd'     => 'audio/basic',
       
'so'      => 'application/octet-stream',
       
'spl'     => 'application/x-futuresplash',
       
'src'     => 'application/x-wais-source',
       
'sv4cpio' => 'application/x-sv4cpio',
       
'sv4crc'  => 'application/x-sv4crc',
       
'svg'     => 'image/svg+xml',
       
'svgz'    => 'image/svg+xml',
       
'swf'     => 'application/x-shockwave-flash',
       
't'       => 'application/x-troff',
       
'tar'     => 'application/x-tar',
       
'tcl'     => 'application/x-tcl',
       
'tex'     => 'application/x-tex',
       
'texi'    => 'application/x-texinfo',
       
'texinfo' => 'application/x-texinfo',
       
'tif'     => 'image/tiff',
       
'tiff'    => 'image/tiff',
       
'tr'      => 'application/x-troff',
       
'tsv'     => 'text/tab-separated-values',
       
'txt'     => 'text/plain',
       
'ustar'   => 'application/x-ustar',
       
'vcd'     => 'application/x-cdlink',
       
'vrml'    => 'model/vrml',
       
'vxml'    => 'application/voicexml+xml',
       
'wav'     => 'audio/x-wav',
       
'wbmp'    => 'image/vnd.wap.wbmp',
       
'wbxml'   => 'application/vnd.wap.wbxml',
       
'webm'    => 'video/webm',
       
'wml'     => 'text/vnd.wap.wml',
       
'wmlc'    => 'application/vnd.wap.wmlc',
       
'wmls'    => 'text/vnd.wap.wmlscript',
       
'wmlsc'   => 'application/vnd.wap.wmlscriptc',
       
'wrl'     => 'model/vrml',
       
'xbm'     => 'image/x-xbitmap',
       
'xht'     => 'application/xhtml+xml',
       
'xhtml'   => 'application/xhtml+xml',
       
'xls'     => 'application/vnd.ms-excel',
       
'xml'     => 'application/xml',
       
'xpm'     => 'image/x-xpixmap',
       
'xsl'     => 'application/xml',
       
'xslt'    => 'application/xslt+xml',
       
'xul'     => 'application/vnd.mozilla.xul+xml',
       
'xwd'     => 'image/x-xwindowdump',
       
'xyz'     => 'chemical/x-xyz',
       
'zip'     => 'application/zip'
   
];

   
/**
     * Checks wether given $path is editable
     *
     * A file is editable when it resides under directories registered in
     * FileManager.editablePaths
     *
     * @param string $path Path to check
     * @return bool true if file is editable
     */
   
public function isEditable($path)
    {
       
$editablePaths = (array)Configure::check('FileManager.editablePaths');
        foreach (
$editablePaths as $editablePath) {
            if (
$this->_isWithinPath($editablePath, $path)) {
                return
true;
            }
        }

        return
false;
    }

   
/**
     * Checks wether given $path is deletable
     *
     * A file is deleteable when it resides under directories registered in
     * FileManager.deletablePaths
     *
     * @param string $path Path to check
     * @return bool true when file is deletable
     */
   
public function isDeletable($path)
    {
       
$deletablePaths = (array)Configure::read('FileManager.deletablePaths');
        foreach (
$deletablePaths as $deletablePath) {
            if (
$deletablePath == $path) {
                continue;
            }
            if (
$this->_isWithinPath($deletablePath, $path)) {
                return
true;
            }
        }

        return
false;
    }

   
/**
     * Rename $oldPath to $newPath
     *
     * @param string $oldPath Old filename/directory
     * @param string $newPath New filename/directory
     * @return bool True if rename was successful
     */
   
public function rename($oldPath, $newPath)
    {
        if (
is_dir($oldPath)) {
           
$Folder = new Folder($oldPath);

            return
$Folder->move(['from' => $oldPath, 'to' => $newPath]);
        } else {
            return
rename($oldPath, $newPath);
        }
    }

   
/**
     * Checks that $pathToCheck resides under $referencePath
     *
     * @param string $referencePath Reference path
     * @param string $pathToCheck Path to check
     * @return bool True if $pathToCheck resides under $referencePath
     */
   
protected function _isWithinPath($referencePath, $pathToCheck)
    {
       
$path = realpath($pathToCheck);
       
$regex = '/^' . preg_quote(realpath($referencePath), '/') . '/';

        return
preg_match($regex, $path) > 0;
    }

    public function
filename2mime($filename) {
       
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
        if (isset(
$this->ext2MimeType[$ext])) {
            return
$this->ext2MimeType[$ext];
        }
       
Log::warning('Cannot get mimeType for ' . $filename);
        return
null;
    }

}