[BUGFIX] Move issueCommand to BackendUtility 29/44329/5
authorJan Helke <typo3@helke.de>
Wed, 28 Oct 2015 11:56:44 +0000 (12:56 +0100)
committerJan Helke <typo3@helke.de>
Wed, 28 Oct 2015 14:45:40 +0000 (15:45 +0100)
To mitigate the dependencies to DocumentTemplate, the method
issueCommand() was moved to BackendUtility and given the
speaking name getLinkToDataHandlerAction().

Resolves: #65728
Releases: master
Change-Id: Ie38108bbf97c4d44329f68b3a262af7e97166a86
Reviewed-on: https://review.typo3.org/44329
Reviewed-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Tested-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Reviewed-by: Gernot Schulmeister <gernotschulmeister@gmx.at>
Tested-by: Gernot Schulmeister <gernotschulmeister@gmx.at>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Jan Helke <typo3@helke.de>
Tested-by: Jan Helke <typo3@helke.de>
typo3/sysext/backend/Classes/Controller/EditDocumentController.php
typo3/sysext/backend/Classes/Template/DocumentTemplate.php
typo3/sysext/backend/Classes/Template/ModuleTemplate.php
typo3/sysext/backend/Classes/Utility/BackendUtility.php
typo3/sysext/backend/Classes/View/PageLayoutView.php
typo3/sysext/beuser/Classes/ViewHelpers/IssueCommandViewHelper.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-65728-DocumentTemplate-issueCommand.rst [new file with mode: 0644]
typo3/sysext/filelist/Classes/FileList.php
typo3/sysext/recordlist/Classes/RecordList/DatabaseRecordList.php
typo3/sysext/version/Classes/Controller/VersionModuleController.php
typo3/sysext/version/Classes/View/VersionView.php

index f6498f8..d309f1c 100644 (file)
@@ -1556,7 +1556,7 @@ class EditDocumentController extends AbstractModule
                                     'justLocalized' => $table . ':' . $rowsByLang[0]['uid'] . ':' . $lang['uid'],
                                     'returnUrl' => $this->retUrl
                                 ));
-                                $href = $this->moduleTemplate->issueCommand(
+                                $href = BackendUtility::getLinkToDataHandlerAction(
                                     '&cmd[' . $table . '][' . $rowsByLang[0]['uid'] . '][localize]=' . $lang['uid'],
                                     $redirectUrl
                                 );
index 2da2649..91c551a 100644 (file)
@@ -556,23 +556,12 @@ function jumpToUrl(URL) {
      * @param string|int $redirectUrl Redirect URL, default is to use GeneralUtility::getIndpEnv('REQUEST_URI'), -1 means to generate an URL for JavaScript using T3_THIS_LOCATION
      * @return string URL to BackendUtility::getModuleUrl('tce_db') + parameters
      * @see \TYPO3\CMS\Backend\Utility\BackendUtility::editOnClick()
+     * @deprecated since TYPO3 CMS 7, will be removed in TYPO3 CMS 8, use BackendUtility::getLinkToDataHandlerAction() instead
      */
     public function issueCommand($params, $redirectUrl = '')
     {
-        /** @var BackendUserAuthentication $beUser */
-        $beUser = $GLOBALS['BE_USER'];
-        $urlParameters = [
-            'prErr' => 1,
-            'uPT' => 1,
-            'vC' => $beUser->veriCode()
-        ];
-        $url = BackendUtility::getModuleUrl('tce_db', $urlParameters) . $params . '&redirect=';
-        if ((int)$redirectUrl === -1) {
-            $url = GeneralUtility::quoteJSvalue($url) . '+T3_THIS_LOCATION';
-        } else {
-            $url .= rawurlencode($redirectUrl ?: GeneralUtility::getIndpEnv('REQUEST_URI'));
-        }
-        return $url;
+        GeneralUtility::logDeprecatedFunction();
+        return BackendUtility::getLinkToDataHandlerAction($params, $redirectUrl);
     }
 
     /**
index a0140a7..7ff335f 100644 (file)
@@ -565,36 +565,6 @@ class ModuleTemplate
     }
 
     /**
-     * Returns a URL with a command to TYPO3 Core Engine (tce_db.php)
-     * See description of the API elsewhere.
-     *
-     * @param string $params Is a set of GET params to send to tce_db.php.
-     * Example: "&cmd[tt_content][123][move]=456" or
-     * "&data[tt_content][123][hidden]=1&data[tt_content][123][title]=Hello%20World
-     * @param string|int $redirectUrl Redirect URL, default is to use
-     * GeneralUtility::getIndpEnv('REQUEST_URI'), -1 means to generate
-     * an URL for JavaScript using T3_THIS_LOCATION
-     *
-     * @return string URL to BackendUtility::getModuleUrl('tce_db') + parameters
-     * @internal
-     */
-    public function issueCommand($params, $redirectUrl = '')
-    {
-        $urlParameters = [
-            'prErr' => 1,
-            'uPT' => 1,
-            'vC' => $this->getBackendUserAuthentication()->veriCode()
-        ];
-        $url = BackendUtility::getModuleUrl('tce_db', $urlParameters) . $params . '&redirect=';
-        if ((int)$redirectUrl === -1) {
-            $url = GeneralUtility::quoteJSvalue($url) . '+T3_THIS_LOCATION';
-        } else {
-            $url .= rawurlencode($redirectUrl ?: GeneralUtility::getIndpEnv('REQUEST_URI'));
-        }
-        return $url;
-    }
-
-    /**
      * Creates the version selector for the page id inputted.
      * Requires the core version management extension, "version" to be loaded.
      *
index 1fc6e49..1eba835 100755 (executable)
@@ -2890,7 +2890,6 @@ class BackendUtility
      * @param string $requestUri An optional returnUrl you can set - automatically set to REQUEST_URI.
      *
      * @return string
-     * @see \TYPO3\CMS\Backend\Template\DocumentTemplate::issueCommand()
      */
     public static function editOnClick($params, $_ = '', $requestUri = '')
     {
@@ -2996,6 +2995,29 @@ class BackendUtility
     }
 
     /**
+     * Returns a URL with a command to TYPO3 Datahandler
+     *
+     * @param string $parameters Set of GET params to send. Example: "&cmd[tt_content][123][move]=456" or "&data[tt_content][123][hidden]=1&data[tt_content][123][title]=Hello%20World
+     * @param string|int $redirectUrl Redirect URL, default is to use GeneralUtility::getIndpEnv('REQUEST_URI'), -1 means to generate an URL for JavaScript using T3_THIS_LOCATION
+     * @return string URL to BackendUtility::getModuleUrl('tce_db') + parameters
+     */
+    public static function getLinkToDataHandlerAction($parameters, $redirectUrl = '')
+    {
+        $urlParameters = [
+            'prErr' => 1,
+            'uPT' => 1,
+            'vC' => static::getBackendUserAuthentication()->veriCode()
+        ];
+        $url = BackendUtility::getModuleUrl('tce_db', $urlParameters) . $parameters . '&redirect=';
+        if ((int)$redirectUrl === -1) {
+            $url = GeneralUtility::quoteJSvalue($url) . '+T3_THIS_LOCATION';
+        } else {
+            $url .= rawurlencode($redirectUrl ?: GeneralUtility::getIndpEnv('REQUEST_URI'));
+        }
+        return $url;
+    }
+
+    /**
      * Creates the view-on-click preview URL without any alternative URL.
      *
      * @param int $pageUid Page UID
index 58e5bc7..50bf150 100644 (file)
@@ -1273,7 +1273,7 @@ class PageLayoutView extends \TYPO3\CMS\Recordlist\RecordList\AbstractDatabaseRe
                     }
                     $params = '&data[tt_content][' . ($row['_ORIG_uid'] ? $row['_ORIG_uid'] : $row['uid'])
                         . '][' . $hiddenField . ']=' . $value;
-                    $out .= '<a class="btn btn-default" href="' . htmlspecialchars($this->getPageLayoutController()->getModuleTemplate()->issueCommand($params))
+                    $out .= '<a class="btn btn-default" href="' . htmlspecialchars(BackendUtility::getLinkToDataHandlerAction($params))
                         . '" title="' . $this->getLanguageService()->getLL($label, true) . '">'
                         . $this->iconFactory->getIcon('actions-edit-' . strtolower($label), Icon::SIZE_SMALL)->render() . '</a>';
                 }
@@ -1282,7 +1282,7 @@ class PageLayoutView extends \TYPO3\CMS\Recordlist\RecordList\AbstractDatabaseRe
                 $confirm = $this->getLanguageService()->getLL('deleteWarning')
                     . BackendUtility::translationCount('tt_content', $row['uid'], (' '
                     . $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:labels.translationsOfRecord')));
-                $out .= '<a class="btn btn-default t3js-modal-trigger" href="' . htmlspecialchars($this->getPageLayoutController()->getModuleTemplate()->issueCommand($params)) . '"'
+                $out .= '<a class="btn btn-default t3js-modal-trigger" href="' . htmlspecialchars(BackendUtility::getLinkToDataHandlerAction($params)) . '"'
                     . ' data-severity="warning"'
                     . ' data-title="' . htmlspecialchars($this->getLanguageService()->sL('LLL:EXT:lang/locallang_alt_doc.xlf:label.confirm.delete_record.title')) . '"'
                     . ' data-content="' . htmlspecialchars($confirm) . '" '
@@ -1301,7 +1301,7 @@ class PageLayoutView extends \TYPO3\CMS\Recordlist\RecordList\AbstractDatabaseRe
                     if ($this->tt_contentData['prev'][$row['uid']]) {
                         $params = '&cmd[tt_content][' . $row['uid'] . '][move]=' . $this->tt_contentData['prev'][$row['uid']];
                         $moveButtonContent .= '<a class="btn btn-default" href="'
-                            . htmlspecialchars($this->getPageLayoutController()->getModuleTemplate()->issueCommand($params))
+                            . htmlspecialchars(BackendUtility::getLinkToDataHandlerAction($params))
                             . '" title="' . $this->getLanguageService()->getLL('moveUp', true) . '">'
                             . $this->iconFactory->getIcon('actions-move-up', Icon::SIZE_SMALL)->render() . '</a>';
                         if (!$dragDropEnabled) {
@@ -1314,7 +1314,7 @@ class PageLayoutView extends \TYPO3\CMS\Recordlist\RecordList\AbstractDatabaseRe
                     if ($this->tt_contentData['next'][$row['uid']]) {
                         $params = '&cmd[tt_content][' . $row['uid'] . '][move]= ' . $this->tt_contentData['next'][$row['uid']];
                         $moveButtonContent .= '<a class="btn btn-default" href="'
-                            . htmlspecialchars($this->getPageLayoutController()->getModuleTemplate()->issueCommand($params))
+                            . htmlspecialchars(BackendUtility::getLinkToDataHandlerAction($params))
                             . '" title="' . $this->getLanguageService()->getLL('moveDown', true) . '">'
                             . $this->iconFactory->getIcon('actions-move-down', Icon::SIZE_SMALL)->render() . '</a>';
                         if (!$dragDropEnabled) {
@@ -1656,7 +1656,7 @@ class PageLayoutView extends \TYPO3\CMS\Recordlist\RecordList\AbstractDatabaseRe
         foreach ($this->getLanguagesToCopyFrom(GeneralUtility::_GP('id'), $lP, $colPos) as $languageId => $label) {
             $elementsInColumn = $languageId === 0 ? $defLanguageCount : $this->getElementsFromColumnAndLanguage(GeneralUtility::_GP('id'), $colPos, $languageId);
             if (!empty($elementsInColumn)) {
-                $onClick = 'window.location.href=' . GeneralUtility::quoteJSvalue($this->getPageLayoutController()->getModuleTemplate()->issueCommand('&cmd[tt_content][' . implode(',', $elementsInColumn) . '][copyFromLanguage]=' . GeneralUtility::_GP('id') . ',' . $lP)) . '; return false;';
+                $onClick = 'window.location.href=' . GeneralUtility::quoteJSvalue(BackendUtility::getLinkToDataHandlerAction('&cmd[tt_content][' . implode(',', $elementsInColumn) . '][copyFromLanguage]=' . GeneralUtility::_GP('id') . ',' . $lP)) . '; return false;';
                 $copyFromLanguageMenu .= '<li><a href="#" onclick="' . htmlspecialchars($onClick) . '">' . $this->languageFlag($languageId, false) . ' ' . htmlspecialchars($label) . '</a></li>' . LF;
             }
         }
@@ -1674,7 +1674,7 @@ class PageLayoutView extends \TYPO3\CMS\Recordlist\RecordList\AbstractDatabaseRe
             }
 
             // We have content in the default language, create a split button
-            $onClick = 'window.location.href=' . GeneralUtility::quoteJSvalue($this->getPageLayoutController()->getModuleTemplate()->issueCommand($params)) . '; return false;';
+            $onClick = 'window.location.href=' . GeneralUtility::quoteJSvalue(BackendUtility::getLinkToDataHandlerAction($params)) . '; return false;';
             $theNewButton =
                 '<div class="btn-group">
                     <input
index bf836b0..18a738a 100644 (file)
@@ -22,7 +22,7 @@ use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
 use TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface;
 
 /**
- * Issue command ViewHelper, see TYPO3 Core Engine method issueCommand
+ * Render a link to DataHandler command
  * @internal
  */
 class IssueCommandViewHelper extends AbstractViewHelper implements CompilableInterface
@@ -34,7 +34,7 @@ class IssueCommandViewHelper extends AbstractViewHelper implements CompilableInt
      * @param string $redirectUrl Redirect URL if any other that \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('REQUEST_URI') is wished
      *
      * @return string URL to tce_db.php + parameters
-     * @see \TYPO3\CMS\Backend\Template\DocumentTemplate::issueCommand()
+     * @see \TYPO3\CMS\Backend\Utility\BackendUtility::getLinkToDataHandlerAction()
      */
     public function render($parameters, $redirectUrl = '')
     {
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-65728-DocumentTemplate-issueCommand.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-65728-DocumentTemplate-issueCommand.rst
new file mode 100644 (file)
index 0000000..da326c1
--- /dev/null
@@ -0,0 +1,20 @@
+======================================================
+Deprecation: #65728 - DocumentTemplate->issueCommand()
+======================================================
+
+Description
+===========
+
+Method ``TYPO3\CMS\Backend\Template\DocumentTemplate::issueCommand()`` has been deprecated.
+
+
+Affected Installations
+======================
+
+Instances with custom backend modules that use this method.
+
+
+Migration
+=========
+
+Use ``TYPO3\CMS\Backend\Utility\BackendUtility::getLinkToDataHandlerAction()`` instead.
\ No newline at end of file
index 44e6b77..c363200 100644 (file)
@@ -738,7 +738,7 @@ class FileList extends AbstractRecordList
                                         'returnUrl' => $this->listURL()
                                     ];
                                     $returnUrl = BackendUtility::getModuleUrl('record_edit', $parameters);
-                                    $href = $this->fileListController->doc->issueCommand(
+                                    $href = BackendUtility::getLinkToDataHandlerAction(
                                         '&cmd[sys_file_metadata][' . $metaDataRecord['uid'] . '][localize]=' . $languageId,
                                         $returnUrl
                                     );
index bc5cc57..eff18a9 100644 (file)
@@ -1477,7 +1477,7 @@ class DatabaseRecordList extends AbstractDatabaseRecordList
                     // Up
                     $params = '&cmd[' . $table . '][' . $row['uid'] . '][move]=' . $this->currentTable['prev'][$row['uid']];
                     $moveUpAction = '<a class="btn btn-default" href="#" onclick="'
-                        . htmlspecialchars('return jumpToUrl(' . $module->getModuleTemplate()->issueCommand($params, -1) . ');')
+                        . htmlspecialchars('return jumpToUrl(' . BackendUtility::getLinkToDataHandlerAction($params, -1) . ');')
                         . '" title="' . $this->getLanguageService()->getLL('moveUp', true) . '">'
                         . $this->iconFactory->getIcon('actions-move-up', Icon::SIZE_SMALL)->render() . '</a>';
                 } else {
@@ -1489,7 +1489,7 @@ class DatabaseRecordList extends AbstractDatabaseRecordList
                     // Down
                     $params = '&cmd[' . $table . '][' . $row['uid'] . '][move]=' . $this->currentTable['next'][$row['uid']];
                     $moveDownAction = '<a class="btn btn-default" href="#" onclick="'
-                        . htmlspecialchars('return jumpToUrl(' . $module->getModuleTemplate()->issueCommand($params, -1) . ');')
+                        . htmlspecialchars('return jumpToUrl(' . BackendUtility::getLinkToDataHandlerAction($params, -1) . ');')
                         . '" title="' . $this->getLanguageService()->getLL('moveDown', true) . '">'
                         . $this->iconFactory->getIcon('actions-move-down', Icon::SIZE_SMALL)->render() . '</a>';
                 } else {
@@ -1571,7 +1571,7 @@ class DatabaseRecordList extends AbstractDatabaseRecordList
                 if ($this->calcPerms & Permission::PAGE_NEW) {
                     $params = '&cmd[' . $table . '][' . $row['uid'] . '][move]=' . -$this->id;
                     $moveLeftAction = '<a class="btn btn-default" href="#" onclick="'
-                        . htmlspecialchars('return jumpToUrl(' . $module->getModuleTemplate()->issueCommand($params, -1) . ');')
+                        . htmlspecialchars('return jumpToUrl(' . BackendUtility::getLinkToDataHandlerAction($params, -1) . ');')
                         . '" title="' . $this->getLanguageService()->getLL('prevLevel', true) . '">'
                         . $this->iconFactory->getIcon('actions-move-left', Icon::SIZE_SMALL)->render() . '</a>';
                     $this->addActionToCellGroup($cells, $moveLeftAction, 'moveLeft');
@@ -1582,7 +1582,7 @@ class DatabaseRecordList extends AbstractDatabaseRecordList
                     if ($localCalcPerms & Permission::PAGE_NEW) {
                         $params = '&cmd[' . $table . '][' . $row['uid'] . '][move]=' . $this->currentTable['prevUid'][$row['uid']];
                         $moveRightAction = '<a class="btn btn-default" href="#" onclick="'
-                            . htmlspecialchars('return jumpToUrl(' . $module->getModuleTemplate()->issueCommand($params, -1) . ');')
+                            . htmlspecialchars('return jumpToUrl(' . BackendUtility::getLinkToDataHandlerAction($params, -1) . ');')
                             . '" title="' . $this->getLanguageService()->getLL('nextLevel', true) . '">'
                             . $this->iconFactory->getIcon('actions-move-right', Icon::SIZE_SMALL)->render() . '</a>';
                     } else {
@@ -1814,7 +1814,7 @@ class DatabaseRecordList extends AbstractDatabaseRecordList
             foreach ($this->pageOverlays as $lUid_OnPage => $lsysRec) {
                 if ($this->isEditable($table) && !isset($translations['translations'][$lUid_OnPage]) && $this->getBackendUserAuthentication()->checkLanguageAccess($lUid_OnPage)) {
                     $url = $this->listURL();
-                    $href = $this->getModule()->getModuleTemplate()->issueCommand(
+                    $href = BackendUtility::getLinkToDataHandlerAction(
                         '&cmd[' . $table . '][' . $row['uid'] . '][localize]=' . $lUid_OnPage,
                         $url . '&justLocalized=' . rawurlencode($table . ':' . $row['uid'] . ':' . $lUid_OnPage)
                     );
index b5cb12d..328b897 100644 (file)
@@ -377,7 +377,7 @@ class VersionModuleController extends \TYPO3\CMS\Backend\Module\BaseScriptClass
                                <tr' . ($row['uid'] != $this->uid ? '' : ' class="active"') . '>
                                        <td class="col-icon">' .
                         ($row['uid'] != $this->uid ?
-                            '<a href="' . $this->doc->issueCommand('&cmd[' . $this->table . '][' . $this->uid . '][version][swapWith]=' . $row['uid'] . '&cmd[' . $this->table . '][' . $this->uid . '][version][action]=swap') . '" title="' . $GLOBALS['LANG']->getLL('swapWithCurrent', true) . '">' . $this->moduleTemplate->getIconFactory()->getIcon('actions-version-swap-version', Icon::SIZE_SMALL)->render() . '</a>' :
+                            '<a href="' . BackendUtility::getLinkToDataHandlerAction('&cmd[' . $this->table . '][' . $this->uid . '][version][swapWith]=' . $row['uid'] . '&cmd[' . $this->table . '][' . $this->uid . '][version][action]=swap') . '" title="' . $GLOBALS['LANG']->getLL('swapWithCurrent', true) . '">' . $this->moduleTemplate->getIconFactory()->getIcon('actions-version-swap-version', Icon::SIZE_SMALL)->render() . '</a>' :
                             '<span title="' . $GLOBALS['LANG']->getLL('currentOnlineVersion', true) . '">' . $this->moduleTemplate->getIconFactory()->getIcon('status-status-current', Icon::SIZE_SMALL)->render() . '</span>'
                         ) . '
                                        </td>
@@ -533,7 +533,7 @@ class VersionModuleController extends \TYPO3\CMS\Backend\Module\BaseScriptClass
         ]);
         $adminLink = '<a class="btn btn-default" href="' . htmlspecialchars($editUrl) . '" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:cm.edit', true) . '">' . $this->moduleTemplate->getIconFactory()->getIcon('actions-document-open', Icon::SIZE_SMALL)->render() . '</a>';
         // Delete link:
-        $adminLink .= '<a class="btn btn-default" href="' . htmlspecialchars($this->doc->issueCommand('&cmd[' . $table . '][' . $row['uid'] . '][delete]=1')) . '" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:cm.delete', true) . '">' . $this->moduleTemplate->getIconFactory()->getIcon('actions-edit-delete', Icon::SIZE_SMALL)->render() . '</a>';
+        $adminLink .= '<a class="btn btn-default" href="' . htmlspecialchars(BackendUtility::getLinkToDataHandlerAction('&cmd[' . $table . '][' . $row['uid'] . '][delete]=1')) . '" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:cm.delete', true) . '">' . $this->moduleTemplate->getIconFactory()->getIcon('actions-edit-delete', Icon::SIZE_SMALL)->render() . '</a>';
         if ($table === 'pages') {
             // If another page module was specified, replace the default Page module with the new one
             $newPageModule = trim($GLOBALS['BE_USER']->getTSConfigVal('options.overridePageModule'));
index b97c710..1881ace 100644 (file)
@@ -73,7 +73,7 @@ class VersionView
                 if ($id == $onlineId) {
                     $controls = '<strong class="text-success">' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:ver.online', true) . '</strong>';
                 } elseif (!$noAction) {
-                    $href = $GLOBALS['TBE_TEMPLATE']->issueCommand(
+                    $href = BackendUtility::getLinkToDataHandlerAction(
                         '&cmd[pages][' . $onlineId . '][version][swapWith]=' . $id . '&cmd[pages][' . $onlineId . '][version][action]=swap',
                         GeneralUtility::linkThisScript(array('id' => $onlineId))
                     );