Fixed bug #10289: Pre-Cleanup for integration of a mass uploader
authorBenni Mack <benni.mack@typo3.org>
Wed, 28 Jan 2009 10:56:22 +0000 (10:56 +0000)
committerBenni Mack <benni.mack@typo3.org>
Wed, 28 Jan 2009 10:56:22 +0000 (10:56 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@4879 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
typo3/file_upload.php
typo3/tce_file.php

index 3959ff7..6b3af1b 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2009-01-28  Benjamin Mack  <benni@typo3.org>
+
+       * Fixed bug #10289: Pre-Cleanup for integration of a mass uploader
+
 2009-01-27  Benjamin Mack  <benni@typo3.org>
 
        * Fixed bug #10287: Two typos in typo3-TCEforms.css (Thanks to Uschi Renziehausen)
index 43f5ff4..d9778ab 100755 (executable)
  *
  */
 
-
-
 $BACK_PATH = '';
 require('init.php');
 require('template.php');
 $LANG->includeLLFile('EXT:lang/locallang_misc.xml');
-require_once(PATH_t3lib.'class.t3lib_basicfilefunc.php');
-require_once(PATH_t3lib.'class.t3lib_parsehtml.php');
-
-
-
-
-
+require_once(PATH_t3lib . 'class.t3lib_basicfilefunc.php');
+require_once(PATH_t3lib . 'class.t3lib_parsehtml.php');
 
 
 
@@ -77,7 +70,7 @@ require_once(PATH_t3lib.'class.t3lib_parsehtml.php');
 class SC_file_upload {
 
                // External, static:
-       var $uploadNumber=10;
+       var $uploadNumber = 10;
 
                // Internal, static:
        /**
@@ -118,24 +111,22 @@ class SC_file_upload {
         *
         * @return      void
         */
-       function init() {
-               global $LANG,$BACK_PATH,$TYPO3_CONF_VARS;
-
+       function init() {
                        // Initialize GPvars:
                $this->number = t3lib_div::_GP('number');
                $this->target = t3lib_div::_GP('target');
                $this->returnUrl = t3lib_div::_GP('returnUrl');
-               $this->returnUrl = $this->returnUrl ? $this->returnUrl : t3lib_div::getIndpEnv('TYPO3_SITE_URL').TYPO3_mainDir.'file_list.php?id='.rawurlencode($this->target);
+               $this->returnUrl = $this->returnUrl ? $this->returnUrl : t3lib_div::getIndpEnv('TYPO3_SITE_URL') . TYPO3_mainDir . 'file_list.php?id=' . rawurlencode($this->target);
 
-               if (empty($this->number))       {
-                       $defaultFileUploads = $GLOBALS['BE_USER']->getTSConfigVal('options.defaultFileUploads');
-                       if ($defaultFileUploads)        {
-                               $this->number = t3lib_div::intInRange($defaultFileUploads,1,$this->uploadNumber);
-                       }
+               // set the number of input fields
+               if (empty($this->number)) {
+                       $this->number = $GLOBALS['BE_USER']->getTSConfigVal('options.defaultFileUploads');
                }
+               $this->number = t3lib_div::intInRange($this->number, 1, $this->uploadNumber);
+
                        // Init basic-file-functions object:
                $this->basicff = t3lib_div::makeInstance('t3lib_basicFileFunctions');
-               $this->basicff->init($GLOBALS['FILEMOUNTS'],$TYPO3_CONF_VARS['BE']['fileExtensions']);
+               $this->basicff->init($GLOBALS['FILEMOUNTS'], $GLOBALS['TYPO3_CONF_VARS']['BE']['fileExtensions']);
 
                        // Init basic-charset-functions object:
                $this->charsetConversion = t3lib_div::makeInstance('t3lib_cs');
@@ -143,164 +134,178 @@ class SC_file_upload {
                        // Cleaning and checking target
                $this->target = $this->charsetConversion->conv($this->target, 'utf-8', $GLOBALS['LANG']->charSet);
                $this->target = $this->basicff->is_directory($this->target);
-               $key=$this->basicff->checkPathAgainstMounts($this->target.'/');
-               if (!$this->target || !$key)    {
-                       t3lib_BEfunc::typo3PrintError ($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_mod_file_list.xml:paramError', true), $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_mod_file_list.xml:targetNoDir', true), '');
+               $key = $this->basicff->checkPathAgainstMounts($this->target . '/');
+               if (!$this->target || !$key) {
+                       t3lib_BEfunc::typo3PrintError($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_mod_file_list.xml:paramError', true), $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_mod_file_list.xml:targetNoDir', true), '');
                        exit;
                }
 
                        // Finding the icon
-               switch($GLOBALS['FILEMOUNTS'][$key]['type'])    {
-                       case 'user':    $this->icon = 'gfx/i/_icon_ftp_user.gif';       break;
-                       case 'group':   $this->icon = 'gfx/i/_icon_ftp_group.gif';      break;
-                       default:                $this->icon = 'gfx/i/_icon_ftp.gif';    break;
+               switch ($GLOBALS['FILEMOUNTS'][$key]['type']) {
+                       case 'user':
+                           $this->icon = 'gfx/i/_icon_ftp_user.gif';
+                       break;
+                       case 'group':
+                           $this->icon = 'gfx/i/_icon_ftp_group.gif';
+                       break;
+                       default:
+                           $this->icon = 'gfx/i/_icon_ftp.gif';
+                       break;
                }
 
-               $this->icon = '<img'.t3lib_iconWorks::skinImg($this->backPath,$this->icon,'width="18" height="16"').' title="" alt="" />';
+               $this->icon = '<img' . t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'], $this->icon, 'width="18" height="16"') . ' title="" alt="" />';
 
                        // Relative path to filemount, $key:
-               $this->shortPath = substr($this->target,strlen($GLOBALS['FILEMOUNTS'][$key]['path']));
+               $this->shortPath = substr($this->target, strlen($GLOBALS['FILEMOUNTS'][$key]['path']));
 
                        // Setting title:
-               $this->title = $this->icon.$GLOBALS['FILEMOUNTS'][$key]['name'].': '.$this->shortPath;
+               $this->title = $this->icon . $GLOBALS['FILEMOUNTS'][$key]['name'] . ': ' . $this->shortPath;
 
                        // Setting template object
                $this->doc = t3lib_div::makeInstance('template');
                $this->doc->setModuleTemplate('templates/file_upload.html');
-               $this->doc->backPath = $BACK_PATH;
+               $this->doc->backPath = $GLOBALS['BACK_PATH'];
+               $this->doc->form = '<form action="tce_file.php" method="post" name="editform" enctype="' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype'] . '">';
 
-               if($GLOBALS['BE_USER']->jsConfirmation(1))      {
-                       $confirm = ' && confirm('.$LANG->JScharCode($LANG->sL('LLL:EXT:lang/locallang_core.php:mess.redraw')).')';
+               if($GLOBALS['BE_USER']->jsConfirmation(1)) {
+                       $confirm = ' && confirm(' . $GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:mess.redraw')) . ')';
                } else {
                        $confirm = '';
                }
-               $this->doc->JScode=$this->doc->wrapScriptTags('
+               $this->doc->JScode = $this->doc->wrapScriptTags('
                        var path = "'.$this->target.'";
 
-                       function reload(a)      {       //
-                               if (!changed || (changed '.$confirm.')) {
+                       function reload(a) {    //
+                               if (!changed || (changed ' . $confirm . ')) {
                                        var params = "&target="+encodeURIComponent(path)+"&number="+a+"&returnUrl='
                                                        . urlencode($this->charsetConversion->conv($this->returnUrl, $GLOBALS['LANG']->charSet, 'utf-8'))
                                                        . '";
                                        window.location.href = "file_upload.php?"+params;
                                }
                        }
-                       function backToList()   {       //
+                       function backToList() { //
                                top.goToModule("file_list");
                        }
                        var changed = 0;
                ');
        }
 
+
        /**
         * Main function, rendering the upload file form fields
         *
         * @return      void
         */
-       function main() {
-               global $LANG;
-
+       function main() {
                        // Make page header:
-               $this->content = $this->doc->startPage($LANG->sL('LLL:EXT:lang/locallang_core.php:file_upload.php.pagetitle'));
+               $this->content = $this->doc->startPage($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:file_upload.php.pagetitle'));
+
+               $form = $this->renderUploadForm();
+
+               $pageContent = 
+                       $this->doc->header($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:file_upload.php.pagetitle')) .
+                       $this->doc->section('', $form);
+
+
+                       // Header Buttons
+               $docHeaderButtons = array(
+                       'csh' => t3lib_BEfunc::cshItem('xMOD_csh_corebe', 'file_upload', $GLOBALS['BACK_PATH'])
+               );
+
+               $markerArray = array(
+                       'CSH'       => $docHeaderButtons['csh'],
+                       'FUNC_MENU' => t3lib_BEfunc::getFuncMenu($this->id, 'SET[function]', $this->MOD_SETTINGS['function'], $this->MOD_MENU['function']),
+                       'CONTENT'  => $pageContent,
+                       'PATH'     => $this->title,
+               );
 
-               $pageContent.=$this->doc->header($LANG->sL('LLL:EXT:lang/locallang_core.php:file_upload.php.pagetitle'));
-               $pageContent.=$this->doc->spacer(5);
-               $pageContent.=$this->doc->divider(5);
+               $this->content .= $this->doc->moduleBody(array(), $docHeaderButtons, $markerArray);
+               $this->content .= $this->doc->endPage();
+               $this->content  = $this->doc->insertStylesAndJS($this->content);
+       }
 
 
-               $code = '<form action="tce_file.php" method="post" name="editform" enctype="'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype'].'">';
-                       // Making the selector box for the number of concurrent uploads
-               $this->number = t3lib_div::intInRange($this->number,1,10);
-               $code .= '
+       /**
+        * This function renders the upload form
+        *
+        * @return      string  the HTML form as a string, ready for outputting
+        */
+       function renderUploadForm() {
+               $content = '
                        <div id="c-select">
                                <label for="number-of-uploads">' .
-                               $LANG->sL('LLL:EXT:lang/locallang_core.php:file_upload.php.number_of_files') .
+                               $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:file_upload.php.number_of_files') .
                                '</label>
                                <select name="number" id="number-of-uploads" onchange="reload(this.options[this.selectedIndex].value);">';
-               for ($a=1;$a<=$this->uploadNumber;$a++) {
-                       $code.='<option value="' . $a . '"' .
+
+               for ($a = 1; $a <= $this->uploadNumber; $a++) {
+                   $content .= '<option value="' . $a . '"' .
                                                ($this->number == $a ? ' selected="selected"' : '' ) .
                                                '>' . $a . '</option>';
                }
-               $code.='
+               $content .= '
                                </select>
                        </div>
                        ';
 
+
                        // Make checkbox for "overwrite"
-               $code.='
+               $content .= '
                        <div id="c-override">
-                               <input type="checkbox" class="checkbox" name="overwriteExistingFiles" id="overwriteExistingFiles" value="1" /> <label for="overwriteExistingFiles">'.$LANG->getLL('overwriteExistingFiles',1).'</label>
+                               <input type="checkbox" class="checkbox" name="overwriteExistingFiles" id="overwriteExistingFiles" value="1" /> <label for="overwriteExistingFiles">' . $GLOBALS['LANG']->getLL('overwriteExistingFiles', 1) . '</label>
                        </div>
                        ';
 
+
                        // Produce the number of upload-fields needed:
-               $code.='
+               $content .= '
                        <div id="c-upload">
                ';
-               for ($a=0;$a<$this->number;$a++)        {
+               for ($a = 0; $a < $this->number; $a++) {
                                // Adding 'size="50" ' for the sake of Mozilla!
-                       $code.='
-                               <input type="file" name="upload_'.$a.'"'.$this->doc->formWidth(35).' size="50" onclick="changed=1;" />
-                               <input type="hidden" name="file[upload]['.$a.'][target]" value="'.htmlspecialchars($this->target).'" />
-                               <input type="hidden" name="file[upload]['.$a.'][data]" value="'.$a.'" /><br />
+                       $content .= '
+                               <input type="file" name="upload_' . $a . '"' . $this->doc->formWidth(35) . ' size="50" onclick="changed=1;" />
+                               <input type="hidden" name="file[upload][' . $a . '][target]" value="' . htmlspecialchars($this->target) . '" />
+                               <input type="hidden" name="file[upload][' . $a . '][data]" value="' . $a . '" /><br />
                        ';
                }
-               $code.='
+               $content .= '
                        </div>
                ';
 
                        // Submit button:
-               $code.='
+               $content .= '
                        <div id="c-submit">
-                               <input type="submit" value="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:file_upload.php.submit',1).'" />
-                               <input type="submit" value="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:labels.cancel',1).'" onclick="backToList(); return false;" />
-                               <input type="hidden" name="redirect" value="'.htmlspecialchars($this->returnUrl).'" />
+                               <input type="submit" value="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:file_upload.php.submit', 1) . '" />
+                               <input type="submit" value="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.cancel', 1) . '" onclick="backToList(); return false;" />
+                               <input type="hidden" name="redirect" value="' . htmlspecialchars($this->returnUrl) . '" />
                        </div>
                ';
 
-                       // Add the HTML as a section:
-               $pageContent.= $this->doc->section('',$code);
-
-
-                       // Header Buttons
-               $docHeaderButtons = array(
-                       'csh' => t3lib_BEfunc::cshItem('xMOD_csh_corebe', 'file_upload', $GLOBALS['BACK_PATH'])
-               );
-
-               $markerArray = array(
-                       'CSH' => $docHeaderButtons['csh'],
-                       'FUNC_MENU' => t3lib_BEfunc::getFuncMenu($this->id, 'SET[function]', $this->MOD_SETTINGS['function'], $this->MOD_MENU['function']),
-                       'CONTENT' => $pageContent,
-                       'PATH' => $this->title,
-               );
-
-               $this->content.= $this->doc->moduleBody(array(), $docHeaderButtons, $markerArray);
-               $this->content.= $this->doc->endPage();
-               $this->content = $this->doc->insertStylesAndJS($this->content);
+               return $content;
        }
 
+
        /**
         * Outputting the accumulated content to screen
         *
         * @return      void
         */
-       function printContent() {
+       function printContent() {
                echo $this->content;
        }
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/file_upload.php'])  {
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/file_upload.php']) {
        include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/file_upload.php']);
 }
 
 
-
 // Make instance:
 $SOBE = t3lib_div::makeInstance('SC_file_upload');
 $SOBE->init();
 $SOBE->main();
 $SOBE->printContent();
 
-?>
+?>
\ No newline at end of file
index b0328c5..60822ef 100755 (executable)
  *
  */
 
-require ('init.php');
-require ('template.php');
-require_once (PATH_t3lib.'class.t3lib_basicfilefunc.php');
-require_once (PATH_t3lib.'class.t3lib_extfilefunc.php');
-
-
-
-
-
-
-
-
+require('init.php');
+require('template.php');
+require_once(PATH_t3lib . 'class.t3lib_basicfilefunc.php');
+require_once(PATH_t3lib . 'class.t3lib_extfilefunc.php');
 
 
 
@@ -84,7 +76,7 @@ class SC_tce_file {
        var $vC;                                                // VeriCode - a hash of server specific value and other things which identifies if a submission is OK. (see $BE_USER->veriCode())
 
                // Internal, dynamic:
-       var $include_once=array();              // Used to set the classes to include after the init() function is called.
+       var $include_once = array();    // Used to set the classes to include after the init() function is called.
        var $fileProcessor;                             // File processor object
 
 
@@ -94,8 +86,7 @@ class SC_tce_file {
         *
         * @return      void
         */
-       function init() {
-
+       function init() {
                        // GPvars:
                $this->file = t3lib_div::_GP('file');
                $this->redirect = t3lib_div::_GP('redirect');
@@ -104,8 +95,8 @@ class SC_tce_file {
                $this->vC = t3lib_div::_GP('vC');
 
                        // If clipboard is set, then include the clipboard class:
-               if (is_array($this->CB))        {
-                       $this->include_once[] = PATH_t3lib.'class.t3lib_clipboard.php';
+               if (is_array($this->CB)) {
+                       $this->include_once[] = PATH_t3lib . 'class.t3lib_clipboard.php';
                }
        }
 
@@ -114,15 +105,15 @@ class SC_tce_file {
         *
         * @return      void
         */
-       function initClipboard()        {
-               if (is_array($this->CB))        {
+       function initClipboard() {
+               if (is_array($this->CB)) {
                        $clipObj = t3lib_div::makeInstance('t3lib_clipboard');
                        $clipObj->initializeClipboard();
-                       if ($this->CB['paste']) {
+                       if ($this->CB['paste']) {
                                $clipObj->setCurrentPad($this->CB['pad']);
-                               $this->file = $clipObj->makePasteCmdArray_file($this->CB['paste'],$this->file);
+                               $this->file = $clipObj->makePasteCmdArray_file($this->CB['paste'], $this->file);
                        }
-                       if ($this->CB['delete'])        {
+                       if ($this->CB['delete']) {
                                $clipObj->setCurrentPad($this->CB['pad']);
                                $this->file = $clipObj->makeDeleteCmdArray_file($this->file);
                        }
@@ -135,20 +126,20 @@ class SC_tce_file {
         *
         * @return      void
         */
-       function main() {
+       function main() {
                global $FILEMOUNTS,$TYPO3_CONF_VARS,$BE_USER;
 
                        // Initializing:
                $this->fileProcessor = t3lib_div::makeInstance('t3lib_extFileFunctions');
-               $this->fileProcessor->init($FILEMOUNTS, $TYPO3_CONF_VARS['BE']['fileExtensions']);
+               $this->fileProcessor->init($GLOBALS['FILEMOUNTS'], $GLOBALS['TYPO3_CONF_VARS']['BE']['fileExtensions']);
                $this->fileProcessor->init_actionPerms($GLOBALS['BE_USER']->getFileoperationPermissions());
                $this->fileProcessor->dontCheckForUnique = $this->overwriteExistingFiles ? 1 : 0;
 
                        // Checking referer / executing:
                $refInfo = parse_url(t3lib_div::getIndpEnv('HTTP_REFERER'));
                $httpHost = t3lib_div::getIndpEnv('TYPO3_HOST_ONLY');
-               if ($httpHost!=$refInfo['host'] && $this->vC!=$BE_USER->veriCode() && !$TYPO3_CONF_VARS['SYS']['doNotCheckReferer'])    {
-                       $this->fileProcessor->writeLog(0,2,1,'Referer host "%s" and server host "%s" did not match!',array($refInfo['host'],$httpHost));
+               if ($httpHost != $refInfo['host'] && $this->vC != $GLOBALS['BE_USER']->veriCode() && !$GLOBALS['TYPO3_CONF_VARS']['SYS']['doNotCheckReferer']) {
+                       $this->fileProcessor->writeLog(0, 2, 1, 'Referer host "%s" and server host "%s" did not match!', array($refInfo['host'], $httpHost));
                } else {
                        $this->fileProcessor->start($this->file);
                        $this->fileProcessor->processData();
@@ -161,7 +152,7 @@ class SC_tce_file {
         *
         * @return      void
         */
-       function finish()       {
+       function finish() {
                        // Prints errors, if...
                $this->fileProcessor->printLogErrorMessages($this->redirect);
 
@@ -173,7 +164,7 @@ class SC_tce_file {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/tce_file.php'])     {
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/tce_file.php']) {
        include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/tce_file.php']);
 }
 
@@ -184,7 +175,9 @@ $SOBE = t3lib_div::makeInstance('SC_tce_file');
 $SOBE->init();
 
 // Include files?
-foreach($SOBE->include_once as $INC_FILE)      include_once($INC_FILE);
+foreach ($SOBE->include_once as $INC_FILE) {
+    include_once($INC_FILE);
+}
 
 $SOBE->initClipboard();
 $SOBE->main();