[TASK] Make file_edit.php dispatched 38/28238/10
authorWouter Wolters <typo3@wouterwolters.nl>
Mon, 10 Mar 2014 22:16:07 +0000 (23:16 +0100)
committerBenjamin Mack <benni@typo3.org>
Tue, 9 Sep 2014 21:18:43 +0000 (23:18 +0200)
Use dispatching for file_edit.php

Resolves: #56743
Releases: 6.3
Change-Id: Ib25745dd29642a83aa5700752c83cda8e11ea7fa
Reviewed-on: http://review.typo3.org/28238
Tested-by: Helmut Hummel <helmut.hummel@typo3.org>
Reviewed-by: Helmut Hummel <helmut.hummel@typo3.org>
typo3/file_edit.php
typo3/sysext/backend/Classes/ClickMenu/ClickMenu.php
typo3/sysext/backend/Classes/Controller/File/EditFileController.php
typo3/sysext/backend/Classes/Template/DocumentTemplate.php
typo3/sysext/backend/Classes/Toolbar/ShortcutToolbarItem.php
typo3/sysext/backend/Modules/File/Edit/conf.php [new file with mode: 0644]
typo3/sysext/backend/Modules/File/Edit/index.php [new file with mode: 0644]
typo3/sysext/backend/ext_tables.php
typo3/sysext/filelist/Classes/FileList.php
typo3/sysext/t3editor/Classes/Hook/FileEditHook.php

index c267df3..0d409a0 100644 (file)
  */
 require __DIR__ . '/init.php';
 
+\TYPO3\CMS\Core\Utility\GeneralUtility::deprecationLog(
+       'Editing a file is moved to an own module. Please use BackendUtility::getModuleUrl(\'file_edit\') to link to file_edit.php. This script will be removed in two versions.'
+);
+
 $editFileController = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Backend\\Controller\\File\\EditFileController');
 $editFileController->main();
 $editFileController->printContent();
index b6c928a..6d5705a 100644 (file)
@@ -761,7 +761,7 @@ class ClickMenu {
                                        $menuItems['edit2'] = $this->DB_edit('sys_file_metadata', $metaData['uid']);
                                }
                                if (!$folder && GeneralUtility::inList($GLOBALS['TYPO3_CONF_VARS']['SYS']['textfile_ext'], $fileObject->getExtension())) {
-                                       $menuItems['edit'] = $this->FILE_launch($identifier, 'file_edit.php', 'editcontent', 'edit_file.gif');
+                                       $menuItems['edit'] = $this->FILE_launch($identifier, 'file_edit', 'editcontent', 'edit_file.gif');
                                } elseif ($isStorageRoot && $userMayEditStorage) {
                                        $menuItems['edit'] = $this->DB_edit('sys_file_storage', $fileObject->getStorage()->getUid());
                                }
@@ -841,7 +841,7 @@ class ClickMenu {
         * Multi-function for adding an entry to the $menuItems array
         *
         * @param string $path Path to the file/directory (target)
-        * @param string $script Script (eg. file_edit.php) to pass &target= to
+        * @param string $moduleName Script (deprecated) or module name (e.g. file_edit) to pass &target= to
         * @param string $type "type" is the code which fetches the correct label for the element from "cm.
         * @param string $image icon image-filename from "gfx/" (12x12 icon)
         * @param boolean $noReturnUrl If set, the return URL parameter will not be set in the link
@@ -849,9 +849,21 @@ class ClickMenu {
         * @internal
         * @todo Define visibility
         */
-       public function FILE_launch($path, $script, $type, $image, $noReturnUrl = FALSE) {
+       public function FILE_launch($path, $moduleName, $type, $image, $noReturnUrl = FALSE) {
                $loc = 'top.content.list_frame';
-               $editOnClick = 'if(' . $loc . '){' . $loc . '.location.href=top.TS.PATH_typo3+\'' . $script . '?target=' . rawurlencode($path) . ($noReturnUrl ? '\'' : '&returnUrl=\'+top.rawurlencode(' . $this->frameLocation(($loc . '.document')) . '.pathname+' . $this->frameLocation(($loc . '.document')) . '.search)') . ';}';
+
+               if (strpos($moduleName, '.php') !== FALSE) {
+                       GeneralUtility::deprecationLog(
+                               'Using a php file directly in ClickMenu is deprecated since TYPO3 CMS 6.3.'
+                               . ' Register the class as module and use BackendUtility::getModuleUrl() to get the right link.'
+                               . ' For examples how to do this see ext_tables.php of EXT:backend.'
+                       );
+                       $scriptUrl = $moduleName;
+               } else {
+                       $scriptUrl = BackendUtility::getModuleUrl($moduleName);
+               }
+
+               $editOnClick = 'if(' . $loc . '){' . $loc . '.location.href=top.TS.PATH_typo3+' . GeneralUtility::quoteJSvalue($scriptUrl . '&target=' . rawurlencode($path)) . ($noReturnUrl ? '' : '+\'&returnUrl=\'+top.rawurlencode(' . $this->frameLocation($loc . '.document') . '.pathname+' . $this->frameLocation($loc . '.document') . '.search)') . ';}';
                return $this->linkItem($this->label($type), $this->excludeIcon('<img' . IconUtility::skinImg($this->PH_backPath, ('gfx/' . $image), 'width="12" height="12"') . ' alt="" />'), $editOnClick . 'top.nav.refresh();return hideCM();');
        }
 
index a3eeee1..2312302 100644 (file)
@@ -151,7 +151,10 @@ class EditFileController {
                        // Read file content to edit:
                        $fileContent = $this->fileObject->getContents();
                        // Making the formfields
-                       $hValue = 'file_edit.php?target=' . rawurlencode($this->origTarget) . '&returnUrl=' . rawurlencode($this->returnUrl);
+                       $hValue = BackendUtility::getModuleUrl('file_edit', array(
+                               'target' => $this->origTarget,
+                               'returnUrl' => $this->returnUrl
+                       ));
                        // Edit textarea:
                        $code .= '
                                <div id="c-edit">
@@ -163,8 +166,7 @@ class EditFileController {
                                <br />';
                        // Make shortcut:
                        if ($GLOBALS['BE_USER']->mayMakeShortcut()) {
-                               $this->MCONF['name'] = 'xMOD_file_edit.php';
-                               $docHeaderButtons['shortcut'] = $this->doc->makeShortcutIcon('target', '', $this->MCONF['name'], 1);
+                               $docHeaderButtons['shortcut'] = $this->doc->makeShortcutIcon('target', '', 'file_edit', 1);
                        } else {
                                $docHeaderButtons['shortcut'] = '';
                        }
index e5af453..864c8a3 100644 (file)
@@ -602,7 +602,7 @@ function jumpToUrl(URL) {
         * @param string $gvList Is the list of GET variables to store (if any)
         * @param string $setList Is the list of SET[] variables to store (if any) - SET[] variables a stored in $GLOBALS["SOBE"]->MOD_SETTINGS for backend modules
         * @param string $modName Module name string
-        * @param string $motherModName Is used to enter the "parent module name" if the module is a submodule under eg. Web>* or File>*. You can also set this value to "1" in which case the currentLoadedModule is sent to the shortcut script (so - not a fixed value!) - that is used in file_edit.php and wizard_rte.php scripts where those scripts are really running as a part of another module.
+        * @param string $motherModName Is used to enter the "parent module name" if the module is a submodule under eg. Web>* or File>*. You can also set this value to "1" in which case the currentLoadedModule is sent to the shortcut script (so - not a fixed value!) - that is used in file_edit and wizard_rte modules where those are really running as a part of another module.
         * @return string HTML content
         * @todo Define visibility
         */
index f5f94dd..b24cb86 100644 (file)
@@ -652,7 +652,7 @@ class ShortcutToolbarItem implements \TYPO3\CMS\Backend\Toolbar\ToolbarItemHookI
                                }
                                $icon = IconUtility::skinImg($this->backPath, $icon, '', 1);
                                break;
-                       case 'xMOD_file_edit.php':
+                       case 'file_edit':
                                $icon = 'gfx/edit_file.gif';
                                break;
                        case 'wizard_rte':
diff --git a/typo3/sysext/backend/Modules/File/Edit/conf.php b/typo3/sysext/backend/Modules/File/Edit/conf.php
new file mode 100644 (file)
index 0000000..58ebf10
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+//required for mod.php
+$MCONF['name'] = 'file_edit';
+$MCONF['script'] = '_DISPATCH';
+$MCONF['access'] = '';
\ No newline at end of file
diff --git a/typo3/sysext/backend/Modules/File/Edit/index.php b/typo3/sysext/backend/Modules/File/Edit/index.php
new file mode 100644 (file)
index 0000000..d93bef4
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+/**
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+$editFileController = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Backend\\Controller\\File\\EditFileController');
+$editFileController->main();
+$editFileController->printContent();
\ No newline at end of file
index 10b862b..63bfda8 100644 (file)
@@ -8,6 +8,12 @@ if (TYPO3_MODE === 'BE') {
                \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($_EXTKEY) . 'Modules/RecordHistory/'
        );
 
+       // Register file_edit
+       \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModulePath(
+               'file_edit',
+               \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($_EXTKEY) . 'Modules/File/Edit/'
+       );
+
        // Register edit wizard
        \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModulePath(
                'wizard_edit',
index b5c76de..b3188b1 100644 (file)
@@ -828,8 +828,9 @@ class FileList extends \TYPO3\CMS\Backend\RecordList\AbstractRecordList {
                }
                // Edit file content (if editable)
                if (is_a($fileOrFolderObject, 'TYPO3\\CMS\\Core\\Resource\\File') && $fileOrFolderObject->checkActionPermission('write') && GeneralUtility::inList($GLOBALS['TYPO3_CONF_VARS']['SYS']['textfile_ext'], $fileOrFolderObject->getExtension())) {
-                       $editOnClick = 'top.content.list_frame.location.href=top.TS.PATH_typo3+\'file_edit.php?target=' . rawurlencode($fullIdentifier) . '&returnUrl=\'+top.rawurlencode(top.content.list_frame.document.location.pathname+top.content.list_frame.document.location.search);return false;';
-                       $cells['edit'] = '<a href="#" onclick="' . $editOnClick . '" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:cm.editcontent') . '">' . IconUtility::getSpriteIcon('actions-page-open') . '</a>';
+                       $url = BackendUtility::getModuleUrl('file_edit', array('target' => $fullIdentifier));
+                       $editOnClick = 'top.content.list_frame.location.href=top.TS.PATH_typo3+' . GeneralUtility::quoteJSvalue($url) . '+\'&returnUrl=\'+top.rawurlencode(top.content.list_frame.document.location.pathname+top.content.list_frame.document.location.search);return false;';
+                       $cells['edit'] = '<a href="#" onclick="' . htmlspecialchars($editOnClick) . '" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:cm.editcontent') . '">' . IconUtility::getSpriteIcon('actions-page-open') . '</a>';
                } else {
                        $cells['edit'] = IconUtility::getSpriteIcon('empty-empty');
                }
index a737a71..0180515 100644 (file)
@@ -14,6 +14,8 @@ namespace TYPO3\CMS\T3editor\Hook;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
 /**
  * File edit hook for t3editor
  *
@@ -36,14 +38,14 @@ class FileEditHook {
         */
        protected function getT3editor() {
                if ($this->t3editor == NULL) {
-                       $this->t3editor = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\T3editor\\T3editor')->setAjaxSaveType($this->ajaxSaveType);
+                       $this->t3editor = GeneralUtility::makeInstance('TYPO3\\CMS\\T3editor\\T3editor')->setAjaxSaveType($this->ajaxSaveType);
                }
                return $this->t3editor;
        }
 
        /**
         * Hook-function: inject t3editor JavaScript code before the page is compiled
-        * called in file_edit.php:SC_file_edit->main
+        * called in file_edit module
         *
         * @param array $parameters
         * @param \TYPO3\CMS\Backend\Controller\File\EditFileController $pObj
@@ -66,7 +68,8 @@ class FileEditHook {
         * @see \TYPO3\CMS\Backend\Template\DocumentTemplate::startPage
         */
        public function preStartPageHook($parameters, $pObj) {
-               if (preg_match('/typo3\\/file_edit\\.php/', $_SERVER['SCRIPT_NAME'])) {
+               // The preg_match call is deprecated and can be removed if the file typo3/file_edit.php is removed.
+               if (GeneralUtility::_GET('M') === 'file_edit' || preg_match('/typo3\\/file_edit\\.php/', $_SERVER['SCRIPT_NAME'])) {
                        $t3editor = $this->getT3editor();
                        if (!$t3editor->isEnabled()) {
                                return;
@@ -78,7 +81,7 @@ class FileEditHook {
 
        /**
         * Hook-function:
-        * called in file_edit.php:SC_file_edit->main
+        * called in file_edit module
         *
         * @param array $parameters
         * @param \TYPO3\CMS\Backend\Controller\File\EditFileController $pObj
@@ -105,7 +108,7 @@ class FileEditHook {
        public function save($parameters, $pObj) {
                $savingsuccess = FALSE;
                if ($parameters['type'] == $this->ajaxSaveType) {
-                       $tceFile = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Backend\\Controller\\File\\FileController');
+                       $tceFile = GeneralUtility::makeInstance('TYPO3\\CMS\\Backend\\Controller\\File\\FileController');
                        $tceFile->processAjaxRequest(array(), $parameters['ajaxObj']);
                        $result = $parameters['ajaxObj']->getContent('result');
                        $savingsuccess = is_array($result) && $result['editfile'][0];