Ignore:
Timestamp:
06/16/12 09:54:21 (7 years ago)
Author:
gogo
Message:

Update to latest of
https://github.com/sleemanj/mootools-filemanager

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/MootoolsFileManager-Update/plugins/MootoolsFileManager/mootools-filemanager/Assets/Connector/FileManager.php

    r1309 r1319  
    5858 *     Note that currently support for copying subdirectories is missing. 
    5959 *     The parameter $action = 'move'. 
     60 *     UploadIsComplete_cb (function/reference, default is *null*) Upload complete callback which can be used to post process a newly upload file. 
     61 *     The parameter $action = 'upload'. 
     62 *     DownloadIsComplete_cb (function/reference, default is *null*) Download complete callback which can be used to post process after a file has been downloaded file. 
     63 *     The parameter $action = 'download'. 
     64 *     DestroyIsComplete_cb (function/reference, default is *null*) Destroy complete callback which can be used to cleanup after a newly deleted/destroyed file. 
     65 *     The parameter $action = 'destroy'. 
    6066 * 
    6167 * Obsoleted options: 
     
    525531 
    526532 
    527 require(strtr(dirname(__FILE__), '\\', '/') . '/Tooling.php'); 
    528 require(strtr(dirname(__FILE__), '\\', '/') . '/Image.class.php'); 
     533require_once(strtr(dirname(__FILE__), '\\', '/') . '/Tooling.php'); 
     534require_once(strtr(dirname(__FILE__), '\\', '/') . '/Image.class.php'); 
    529535 
    530536 
     
    10311037                        'DestroyIsAuthorized_cb' => null, 
    10321038                        'MoveIsAuthorized_cb' => null, 
     1039                         
     1040                        'UploadIsComplete_cb' => null, 
     1041                        'DownloadIsComplete_cb' => null, 
     1042                        'DestroyIsComplete_cb' => null, 
     1043                         
    10331044                        'showHiddenFoldersAndFiles' => false,      // Hide dot dirs/files ? 
    1034                         'useGetID3IfAvailable' => true 
     1045                        'useGetID3IfAvailable' => true, 
     1046                        'enableXSendFile' => false 
    10351047                ), (is_array($options) ? $options : array())); 
    10361048 
     
    18251837                                        'content' => 'destroyed' 
    18261838                                )); 
     1839                         
     1840                        if (!empty($this->options['DestroyIsComplete_cb']) && function_exists($this->options['DestroyIsComplete_cb'])) 
     1841                                $this->options['DestroyIsComplete_cb']($this, 'destroy', $fileinfo);     
     1842                         
    18271843                        return; 
    18281844                } 
     
    21302146                                $fsize = filesize($file); 
    21312147                                $fi = pathinfo($legal_url); 
     2148                                 
     2149                                // Based on the gist here: https://gist.github.com/854168 
     2150                                // Reference: http://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/ 
     2151                                // We should: 
     2152                                // 1. try to use Apache mod_xsendfile 
     2153                                // 2. Try to chunk the file into pieces 
     2154                                // 3. If the file is sufficiently small, send it directly 
    21322155 
    21332156                                $hdrs = array(); 
     
    21442167                                        break; 
    21452168                                } 
     2169                                 
    21462170                                $hdrs[] = 'Content-Disposition: attachment; filename="' . $fi['basename'] . '"'; // use 'attachment' to force a download 
    2147                                 $hdrs[] = 'Content-length: ' . $fsize; 
    2148                                 $hdrs[] = 'Expires: 0'; 
    2149                                 $hdrs[] = 'Cache-Control: must-revalidate, post-check=0, pre-check=0'; 
    2150                                 $hdrs[] = '!Cache-Control: private'; // flag as FORCED APPEND; use this to open files directly 
     2171                                 
     2172                                // Content length isn't requied for mod_xsendfile (Apache handles this for us) 
     2173                                $modx = $this->options['enableXSendFile'] && function_exists('apache_get_modules') && in_array('mod_xsendfile', apache_get_modules()); 
     2174                                if ($modx) 
     2175                                { 
     2176                                        $hdrs[] = 'X-Sendfile: '.$file; 
     2177                                } 
     2178                                else 
     2179                                { 
     2180                                        $hdrs[] = 'Content-length: ' . $fsize; 
     2181                                        $hdrs[] = 'Expires: 0'; 
     2182                                        $hdrs[] = 'Cache-Control: must-revalidate, post-check=0, pre-check=0'; 
     2183                                        $hdrs[] = '!Cache-Control: private'; // flag as FORCED APPEND; use this to open files directly 
     2184                                } 
    21512185 
    21522186                                $this->sendHttpHeaders($hdrs); 
    2153  
    2154                                 fpassthru($fd); 
     2187                                 
     2188                                if (!$modx) 
     2189                                { 
     2190                                        $chunksize = 4*1024; // 4KB blocks 
     2191                                        if ($fsize > $chunksize) 
     2192                                        { 
     2193                                                // Turn off compression which prevents files from being re-assembled properly (especially zip files) 
     2194                                                function_exists('apache_setenv') && @apache_setenv('no-gzip', 1); 
     2195                                                @ini_set('zlib.output_compression', 0); 
     2196                                                 
     2197                                                // Turn off any additional buffering by the server 
     2198                                                @ini_set('implicit_flush', 1); 
     2199                                                 
     2200                                                // Disable any timeouts 
     2201                                                @set_time_limit(0); 
     2202                                                while (!feof($fd)) 
     2203                                                { 
     2204                                                        echo @fread($fd, $chunksize); 
     2205                                                        ob_flush(); 
     2206                                                        flush(); 
     2207                                                } 
     2208                                        } 
     2209                                        else 
     2210                                        { 
     2211                                                fpassthru($fd); 
     2212                                        } 
     2213                                } 
     2214 
    21552215                                fclose($fd); 
     2216                                 
     2217                                if (!empty($this->options['DownloadIsComplete_cb']) && function_exists($this->options['DownloadIsComplete_cb'])) 
     2218                                  $this->options['DownloadIsComplete_cb']($this, 'download', $fileinfo); 
     2219         
    21562220                                return; 
    21572221                        } 
    21582222                         
    21592223                        $emsg = 'read_error'; 
     2224 
     2225                         
    21602226                } 
    21612227                catch(FileManagerException $e) 
     
    24332499                                        'name' => basename($file) 
    24342500                                )); 
     2501                         
     2502                        if (!empty($this->options['UploadIsComplete_cb']) && function_exists($this->options['UploadIsComplete_cb'])) 
     2503                                $this->options['UploadIsComplete_cb']($this, 'upload', $fileinfo); 
     2504                         
    24352505                        return; 
    24362506                } 
Note: See TracChangeset for help on using the changeset viewer.