[TASK] Streamline Wizard-Controllers 84/35084/3
authorFrank Nägler <typo3@naegler.net>
Fri, 5 Dec 2014 19:50:39 +0000 (20:50 +0100)
committerWouter Wolters <typo3@wouterwolters.nl>
Sat, 6 Dec 2014 12:46:50 +0000 (13:46 +0100)
This patch introduce an abstract wizard controller to
remove duplicate code and prevent the usage of
$GLOBALS in a lot of places.

Resolves: #63618
Releases: master
Change-Id: I870d024df5e05e52d979af04750e472de2ed5995
Reviewed-on: http://review.typo3.org/35084
Reviewed-by: Markus Klein <klein.t3@reelworx.at>
Tested-by: Markus Klein <klein.t3@reelworx.at>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
typo3/sysext/backend/Classes/Controller/Wizard/AbstractWizardController.php [new file with mode: 0644]
typo3/sysext/backend/Classes/Controller/Wizard/AddController.php
typo3/sysext/backend/Classes/Controller/Wizard/ColorpickerController.php
typo3/sysext/backend/Classes/Controller/Wizard/EditController.php
typo3/sysext/backend/Classes/Controller/Wizard/FormsController.php
typo3/sysext/backend/Classes/Controller/Wizard/ListController.php
typo3/sysext/backend/Classes/Controller/Wizard/RteController.php
typo3/sysext/backend/Classes/Controller/Wizard/TableController.php

diff --git a/typo3/sysext/backend/Classes/Controller/Wizard/AbstractWizardController.php b/typo3/sysext/backend/Classes/Controller/Wizard/AbstractWizardController.php
new file mode 100644 (file)
index 0000000..79d0828
--- /dev/null
@@ -0,0 +1,103 @@
+<?php
+namespace TYPO3\CMS\Backend\Controller\Wizard;
+
+/**
+ * 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!
+ */
+
+use TYPO3\CMS\Backend\Template\DocumentTemplate;
+use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
+use TYPO3\CMS\Core\Database\DatabaseConnection;
+use TYPO3\CMS\Lang\LanguageService;
+
+/**
+ * Class AbstractWizardController
+ */
+class AbstractWizardController {
+
+       /**
+        * Checks access for element
+        *
+        * @param string $table Table name
+        * @param int $uid Record uid
+        * @return bool
+        */
+       protected function checkEditAccess($table, $uid) {
+               $calcPermissionRecord = BackendUtility::getRecord($table, $uid);
+               BackendUtility::fixVersioningPid($table, $calcPermissionRecord);
+               if (is_array($calcPermissionRecord)) {
+                       // If pages:
+                       if ($table === 'pages') {
+                               $calculatedPermissions = $this->getBackendUserAuthentication()->calcPerms($calcPermissionRecord);
+                               $hasAccess = $calculatedPermissions & 2;
+                       } else {
+                               // Fetching pid-record first.
+                               $calculatedPermissions = $this->getBackendUserAuthentication()->calcPerms(
+                                       BackendUtility::getRecord('pages', $calcPermissionRecord['pid']));
+                               $hasAccess = $calculatedPermissions & 16;
+                       }
+                       // Check internals regarding access:
+                       if ($hasAccess) {
+                               $hasAccess = $this->getBackendUserAuthentication()->recordEditAccessInternals($table, $calcPermissionRecord);
+                       }
+               } else {
+                       $hasAccess = FALSE;
+               }
+               return (bool)$hasAccess;
+       }
+
+       /**
+        * Returns an instance of BackendUserAuthentication
+        *
+        * @return BackendUserAuthentication
+        */
+       protected function getBackendUserAuthentication() {
+               return $GLOBALS['BE_USER'];
+       }
+
+       /**
+        * Returns an instance of LanguageService
+        *
+        * @return LanguageService
+        */
+       protected function getLanguageService() {
+               return $GLOBALS['LANG'];
+       }
+
+       /**
+        * Returns the backpath
+        *
+        * @return string
+        */
+       protected function getBackPath() {
+               return $GLOBALS['BACK_PATH'];
+       }
+
+       /**
+        * Returns an instance of DocumentTemplate
+        *
+        * @return DocumentTemplate
+        */
+       protected function getDocumentTemplate() {
+               return $GLOBALS['TBE_TEMPLATE'];
+       }
+
+       /**
+        * Returns an instance of DatabaseConnection
+        *
+        * @return DatabaseConnection
+        */
+       protected function getDatabaseConnection() {
+               return $GLOBALS['TYPO3_DB'];
+       }
+}
index 6b77c82..82934db 100644 (file)
@@ -23,7 +23,7 @@ use TYPO3\CMS\Core\Utility\HttpUtility;
  *
  * @author Kasper Skårhøj <kasperYYYY@typo3.com>
  */
-class AddController {
+class AddController extends AbstractWizardController {
 
        /**
         * Content accumulation for the module.
@@ -78,7 +78,7 @@ class AddController {
         * Constructor
         */
        public function __construct() {
-               $GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_wizards.xlf');
+               $this->getLanguageService()->includeLLFile('EXT:lang/locallang_wizards.xlf');
                $GLOBALS['SOBE'] = $this;
 
                $this->init();
index 0de8ac0..c6cea57 100644 (file)
@@ -24,7 +24,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  * @author Peter Kühn <peter@kuehn.com>
  * @author Kasper Skårhøj <typo3@typo3.com>
  */
-class ColorpickerController {
+class ColorpickerController extends AbstractWizardController {
 
        /**
         * Wizard parameters, coming from TCEforms linking to the wizard.
@@ -115,7 +115,7 @@ class ColorpickerController {
         * Constructor
         */
        public function __construct() {
-               $GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_wizards.xlf');
+               $this->getLanguageService()->includeLLFile('EXT:lang/locallang_wizards.xlf');
                $GLOBALS['SOBE'] = $this;
 
                $this->init();
@@ -157,7 +157,7 @@ class ColorpickerController {
                }
                // Initialize document object:
                $this->doc = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Template\DocumentTemplate::class);
-               $this->doc->backPath = $GLOBALS['BACK_PATH'];
+               $this->doc->backPath = $this->getBackPath();
                $this->doc->JScode = $this->doc->wrapScriptTags('
                        function checkReference() {     //
                                if (parent.opener && parent.opener.document && parent.opener.document.' . $this->formName . ' && parent.opener.document.' . $this->formName . '["' . $this->fieldName . '"]) {
@@ -189,7 +189,7 @@ class ColorpickerController {
                        }
                ');
                // Start page:
-               $this->content .= $this->doc->startPage($GLOBALS['LANG']->getLL('colorpicker_title'));
+               $this->content .= $this->doc->startPage($this->getLanguageService()->getLL('colorpicker_title'));
        }
 
        /**
@@ -210,12 +210,12 @@ class ColorpickerController {
                                        ' . $this->colorImage() . '
 
                                                <!-- Value box: -->
-                                       <p class="c-head">' . $GLOBALS['LANG']->getLL('colorpicker_colorValue', TRUE) . '</p>
+                                       <p class="c-head">' . $this->getLanguageService()->getLL('colorpicker_colorValue', TRUE) . '</p>
                                        <table border="0" cellpadding="0" cellspacing="3">
                                                <tr>
                                                        <td><input type="text" ' . $this->doc->formWidth(7) . ' maxlength="10" name="colorValue" value="' . htmlspecialchars($this->colorValue) . '" /></td>
-                                                       <td style="background-color:' . htmlspecialchars($this->colorValue) . '; border: 1px solid black;">&nbsp;<span style="color: black;">' . $GLOBALS['LANG']->getLL('colorpicker_black', TRUE) . '</span>&nbsp;<span style="color: white;">' . $GLOBALS['LANG']->getLL('colorpicker_white', TRUE) . '</span>&nbsp;</td>
-                                                       <td><input type="submit" name="save_close" value="' . $GLOBALS['LANG']->getLL('colorpicker_setClose', TRUE) . '" /></td>
+                                                       <td style="background-color:' . htmlspecialchars($this->colorValue) . '; border: 1px solid black;">&nbsp;<span style="color: black;">' . $this->getLanguageService()->getLL('colorpicker_black', TRUE) . '</span>&nbsp;<span style="color: white;">' . $this->getLanguageService()->getLL('colorpicker_white', TRUE) . '</span>&nbsp;</td>
+                                                       <td><input type="submit" name="save_close" value="' . $this->getLanguageService()->getLL('colorpicker_setClose', TRUE) . '" /></td>
                                                </tr>
                                        </table>
 
@@ -236,7 +236,7 @@ class ColorpickerController {
                                ');
                        }
                        // Output:
-                       $this->content .= $this->doc->section($GLOBALS['LANG']->getLL('colorpicker_title'), $content, 0, 1);
+                       $this->content .= $this->doc->section($this->getLanguageService()->getLL('colorpicker_title'), $content, 0, 1);
                }
        }
 
@@ -259,13 +259,13 @@ class ColorpickerController {
         * @return void
         */
        public function frameSet() {
-               $GLOBALS['TBE_TEMPLATE']->JScode = $GLOBALS['TBE_TEMPLATE']->wrapScriptTags('
+               $this->getDocumentTemplate()->JScode = $this->getDocumentTemplate()->wrapScriptTags('
                                if (!window.opener) {
                                        alert("ERROR: Sorry, no link to main window... Closing");
                                        close();
                                }
                ');
-               $GLOBALS['TBE_TEMPLATE']->startPage($GLOBALS['LANG']->getLL('colorpicker_title'));
+               $this->getDocumentTemplate()->startPage($this->getLanguageService()->getLL('colorpicker_title'));
 
                // URL for the inner main frame:
                $url = BackendUtility::getModuleUrl(
@@ -281,7 +281,7 @@ class ColorpickerController {
                                'fieldChangeFuncHash' => $this->P['fieldChangeFuncHash'],
                        )
                );
-               $this->content = $GLOBALS['TBE_TEMPLATE']->getPageRenderer()->render(\TYPO3\CMS\Core\Page\PageRenderer::PART_HEADER) . '
+               $this->content = $this->getDocumentTemplate()->getPageRenderer()->render(\TYPO3\CMS\Core\Page\PageRenderer::PART_HEADER) . '
                        <frameset rows="*,1" framespacing="0" frameborder="0" border="0">
                                <frame name="content" src="' . htmlspecialchars($url) . '" marginwidth="0" marginheight="0" frameborder="0" scrolling="auto" noresize="noresize" />
                                <frame name="menu" src="dummy.php" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" noresize="noresize" />
@@ -326,7 +326,7 @@ class ColorpickerController {
                        $rows++;
                }
                $table = '
-                       <p class="c-head">' . $GLOBALS['LANG']->getLL('colorpicker_fromMatrix', TRUE) . '</p>
+                       <p class="c-head">' . $this->getLanguageService()->getLL('colorpicker_fromMatrix', TRUE) . '</p>
                        <table border="0" cellpadding="1" cellspacing="1" style="width:100%; border: 1px solid black; cursor:crosshair;">' . implode('', $tRows) . '
                        </table>';
                return $table;
@@ -349,7 +349,7 @@ class ColorpickerController {
                }
                // Compile selector box and return result:
                $output = '
-                       <p class="c-head">' . $GLOBALS['LANG']->getLL('colorpicker_fromList', TRUE) . '</p>
+                       <p class="c-head">' . $this->getLanguageService()->getLL('colorpicker_fromList', TRUE) . '</p>
                        <select onchange="document.colorform.colorValue.value = this.options[this.selectedIndex].value; document.colorform.submit(); return false;">
                                ' . implode('
                                ', $opt) . '
@@ -370,7 +370,7 @@ class ColorpickerController {
                                        $this->colorValue = '#' . $this->getIndex(\TYPO3\CMS\Core\Imaging\GraphicalFunctions::imageCreateFromFile($this->pickerImage), GeneralUtility::_POST('coords_x'), GeneralUtility::_POST('coords_y'));
                                }
                                $pickerFormImage = '
-                               <p class="c-head">' . $GLOBALS['LANG']->getLL('colorpicker_fromImage', TRUE) . '</p>
+                               <p class="c-head">' . $this->getLanguageService()->getLL('colorpicker_fromImage', TRUE) . '</p>
                                <input type="image" src="../' . \TYPO3\CMS\Core\Utility\PathUtility::stripPathSitePrefix($this->pickerImage) . '" name="coords" style="cursor:crosshair;" /><br />';
                        } else {
                                $pickerFormImage = '';
index e82994f..23c0106 100644 (file)
@@ -23,7 +23,7 @@ use TYPO3\CMS\Core\Utility\HttpUtility;
  *
  * @author Kasper Skårhøj <kasperYYYY@typo3.com>
  */
-class EditController {
+class EditController extends AbstractWizardController {
 
        /**
         * Wizard parameters, coming from TCEforms linking to the wizard.
@@ -43,7 +43,7 @@ class EditController {
         * Constructor
         */
        public function __construct() {
-               $GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_wizards.xlf');
+               $this->getLanguageService()->includeLLFile('EXT:lang/locallang_wizards.xlf');
                $GLOBALS['SOBE'] = $this;
 
                $this->init();
index 568a5d1..3adb409 100644 (file)
@@ -107,7 +107,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  *
  * @author Kasper Skårhøj <kasperYYYY@typo3.com>
  */
-class FormsController {
+class FormsController extends AbstractWizardController {
 
        /**
         * document template object
@@ -164,7 +164,7 @@ class FormsController {
         * Constructor
         */
        public function __construct() {
-               $GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_wizards.xlf');
+               $this->getLanguageService()->includeLLFile('EXT:lang/locallang_wizards.xlf');
                $GLOBALS['SOBE'] = $this;
 
                $this->init();
@@ -184,7 +184,7 @@ class FormsController {
                $this->xmlStorage = $this->P['params']['xmlOutput'];
                // Document template object:
                $this->doc = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Template\DocumentTemplate::class);
-               $this->doc->backPath = $GLOBALS['BACK_PATH'];
+               $this->doc->backPath = $this->getBackPath();
                $this->doc->setModuleTemplate('EXT:backend/Resources/Private/Templates/wizard_forms.html');
                // Setting form tag:
                list($rUri) = explode('#', GeneralUtility::getIndpEnv('REQUEST_URI'));
@@ -198,9 +198,9 @@ class FormsController {
         */
        public function main() {
                if ($this->P['table'] && $this->P['field'] && $this->P['uid']) {
-                       $this->content .= $this->doc->section($GLOBALS['LANG']->getLL('forms_title'), $this->formsWizard(), 0, 1);
+                       $this->content .= $this->doc->section($this->getLanguageService()->getLL('forms_title'), $this->formsWizard(), 0, 1);
                } else {
-                       $this->content .= $this->doc->section($GLOBALS['LANG']->getLL('forms_title'), '<span class="typo3-red">' . $GLOBALS['LANG']->getLL('table_noData', 1) . '</span>', 0, 1);
+                       $this->content .= $this->doc->section($this->getLanguageService()->getLL('forms_title'), '<span class="typo3-red">' . $this->getLanguageService()->getLL('table_noData', 1) . '</span>', 0, 1);
                }
                // Setting up the buttons and markers for docheader
                $docHeaderButtons = $this->getButtons();
@@ -242,13 +242,13 @@ class FormsController {
                        // CSH Buttons
                        $buttons['csh_buttons'] = BackendUtility::cshItem('xMOD_csh_corebe', 'wizard_forms_wiz_buttons');
                        // Close
-                       $buttons['close'] = '<a href="#" onclick="' . htmlspecialchars(('jumpToUrl(unescape(\'' . rawurlencode(GeneralUtility::sanitizeLocalUrl($this->P['returnUrl'])) . '\')); return false;')) . '">' . IconUtility::getSpriteIcon('actions-document-close', array('title' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:rm.closeDoc', TRUE))) . '</a>';
+                       $buttons['close'] = '<a href="#" onclick="' . htmlspecialchars(('jumpToUrl(unescape(\'' . rawurlencode(GeneralUtility::sanitizeLocalUrl($this->P['returnUrl'])) . '\')); return false;')) . '">' . IconUtility::getSpriteIcon('actions-document-close', array('title' => $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:rm.closeDoc', TRUE))) . '</a>';
                        // Save
-                       $buttons['save'] = '<input type="image" class="c-inputButton" name="savedok"' . IconUtility::skinImg($this->doc->backPath, 'gfx/savedok.gif') . ' title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveDoc', TRUE) . '" />';
+                       $buttons['save'] = '<input type="image" class="c-inputButton" name="savedok"' . IconUtility::skinImg($this->doc->backPath, 'gfx/savedok.gif') . ' title="' . $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveDoc', TRUE) . '" />';
                        // Save & Close
-                       $buttons['save_close'] = '<input type="image" class="c-inputButton" name="saveandclosedok"' . IconUtility::skinImg($this->doc->backPath, 'gfx/saveandclosedok.gif') . ' title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveCloseDoc', TRUE) . '" />';
+                       $buttons['save_close'] = '<input type="image" class="c-inputButton" name="saveandclosedok"' . IconUtility::skinImg($this->doc->backPath, 'gfx/saveandclosedok.gif') . ' title="' . $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveCloseDoc', TRUE) . '" />';
                        // Reload
-                       $buttons['reload'] = '<input type="image" class="c-inputButton" name="_refresh"' . IconUtility::skinImg('', 'gfx/refresh_n.gif') . ' title="' . $GLOBALS['LANG']->getLL('forms_refresh', TRUE) . '" />';
+                       $buttons['reload'] = '<input type="image" class="c-inputButton" name="_refresh"' . IconUtility::skinImg('', 'gfx/refresh_n.gif') . ' title="' . $this->getLanguageService()->getLL('forms_refresh', TRUE) . '" />';
                }
                return $buttons;
        }
@@ -357,9 +357,9 @@ class FormsController {
                $tRows = array();
                // Set header row:
                $cells = array(
-                       $GLOBALS['LANG']->getLL('forms_preview', TRUE) . ':',
-                       $GLOBALS['LANG']->getLL('forms_element', TRUE) . ':',
-                       $GLOBALS['LANG']->getLL('forms_config', TRUE) . ':'
+                       $this->getLanguageService()->getLL('forms_preview', TRUE) . ':',
+                       $this->getLanguageService()->getLL('forms_element', TRUE) . ':',
+                       $this->getLanguageService()->getLL('forms_config', TRUE) . ':'
                );
                $tRows[] = '
                        <tr class="bgColor2" id="typo3-formWizardHeader">
@@ -388,20 +388,20 @@ class FormsController {
                                        $types = explode(',', 'input,textarea,select,check,radio,password,file,hidden,submit,property,label');
                                        foreach ($types as $t) {
                                                $opt[] = '
-                                                               <option value="' . $t . '"' . ($confData['type'] == $t ? ' selected="selected"' : '') . '>' . $GLOBALS['LANG']->getLL(('forms_type_' . $t), TRUE) . '</option>';
+                                                               <option value="' . $t . '"' . ($confData['type'] == $t ? ' selected="selected"' : '') . '>' . $this->getLanguageService()->getLL(('forms_type_' . $t), TRUE) . '</option>';
                                        }
-                                       $temp_cells[$GLOBALS['LANG']->getLL('forms_type')] = '
+                                       $temp_cells[$this->getLanguageService()->getLL('forms_type')] = '
                                                        <select name="FORMCFG[c][' . ($k + 1) * 2 . '][type]">
                                                                ' . implode('
                                                                ', $opt) . '
                                                        </select>';
                                        // Title field:
                                        if (!GeneralUtility::inList('hidden,submit', $confData['type'])) {
-                                               $temp_cells[$GLOBALS['LANG']->getLL('forms_label')] = '<input type="text"' . $this->doc->formWidth(15) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][label]" value="' . htmlspecialchars($confData['label']) . '" />';
+                                               $temp_cells[$this->getLanguageService()->getLL('forms_label')] = '<input type="text"' . $this->doc->formWidth(15) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][label]" value="' . htmlspecialchars($confData['label']) . '" />';
                                        }
                                        // Required checkbox:
                                        if (!GeneralUtility::inList('check,hidden,submit,label', $confData['type'])) {
-                                               $temp_cells[$GLOBALS['LANG']->getLL('forms_required')] = '<input type="checkbox" name="FORMCFG[c][' . ($k + 1) * 2 . '][required]" value="1"' . ($confData['required'] ? ' checked="checked"' : '') . ' title="' . $GLOBALS['LANG']->getLL('forms_required', TRUE) . '" />';
+                                               $temp_cells[$this->getLanguageService()->getLL('forms_required')] = '<input type="checkbox" name="FORMCFG[c][' . ($k + 1) * 2 . '][required]" value="1"' . ($confData['required'] ? ' checked="checked"' : '') . ' title="' . $this->getLanguageService()->getLL('forms_required', TRUE) . '" />';
                                        }
                                        // Put sub-items together into table cell:
                                        $cells[] = $this->formatCells($temp_cells);
@@ -412,28 +412,28 @@ class FormsController {
                                                $confData['fieldname'] = 'attachment' . ++$this->attachmentCounter;
                                        }
                                        if (!GeneralUtility::inList('label', $confData['type'])) {
-                                               $temp_cells[$GLOBALS['LANG']->getLL('forms_fieldName')] = '<input type="text"' . $this->doc->formWidth(10) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][fieldname]" value="' . htmlspecialchars($confData['fieldname']) . '" title="' . $GLOBALS['LANG']->getLL('forms_fieldName', TRUE) . '" />';
+                                               $temp_cells[$this->getLanguageService()->getLL('forms_fieldName')] = '<input type="text"' . $this->doc->formWidth(10) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][fieldname]" value="' . htmlspecialchars($confData['fieldname']) . '" title="' . $this->getLanguageService()->getLL('forms_fieldName', TRUE) . '" />';
                                        }
                                        // Field configuration depending on the fields type:
                                        switch ((string)$confData['type']) {
                                                case 'textarea':
-                                                       $temp_cells[$GLOBALS['LANG']->getLL('forms_cols')] = '<input type="text"' . $this->doc->formWidth(5) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][cols]" value="' . htmlspecialchars($confData['cols']) . '" title="' . $GLOBALS['LANG']->getLL('forms_cols', TRUE) . '" />';
-                                                       $temp_cells[$GLOBALS['LANG']->getLL('forms_rows')] = '<input type="text"' . $this->doc->formWidth(5) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][rows]" value="' . htmlspecialchars($confData['rows']) . '" title="' . $GLOBALS['LANG']->getLL('forms_rows', TRUE) . '" />';
-                                                       $temp_cells[$GLOBALS['LANG']->getLL('forms_extra')] = '<input type="checkbox" name="FORMCFG[c][' . ($k + 1) * 2 . '][extra]" value="OFF"' . ($confData['extra'] == 'OFF' ? ' checked="checked"' : '') . ' title="' . $GLOBALS['LANG']->getLL('forms_extra', TRUE) . '" />';
+                                                       $temp_cells[$this->getLanguageService()->getLL('forms_cols')] = '<input type="text"' . $this->doc->formWidth(5) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][cols]" value="' . htmlspecialchars($confData['cols']) . '" title="' . $this->getLanguageService()->getLL('forms_cols', TRUE) . '" />';
+                                                       $temp_cells[$this->getLanguageService()->getLL('forms_rows')] = '<input type="text"' . $this->doc->formWidth(5) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][rows]" value="' . htmlspecialchars($confData['rows']) . '" title="' . $this->getLanguageService()->getLL('forms_rows', TRUE) . '" />';
+                                                       $temp_cells[$this->getLanguageService()->getLL('forms_extra')] = '<input type="checkbox" name="FORMCFG[c][' . ($k + 1) * 2 . '][extra]" value="OFF"' . ($confData['extra'] == 'OFF' ? ' checked="checked"' : '') . ' title="' . $this->getLanguageService()->getLL('forms_extra', TRUE) . '" />';
                                                        break;
                                                case 'input':
 
                                                case 'password':
-                                                       $temp_cells[$GLOBALS['LANG']->getLL('forms_size')] = '<input type="text"' . $this->doc->formWidth(5) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][size]" value="' . htmlspecialchars($confData['size']) . '" title="' . $GLOBALS['LANG']->getLL('forms_size', TRUE) . '" />';
-                                                       $temp_cells[$GLOBALS['LANG']->getLL('forms_max')] = '<input type="text"' . $this->doc->formWidth(5) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][max]" value="' . htmlspecialchars($confData['max']) . '" title="' . $GLOBALS['LANG']->getLL('forms_max', TRUE) . '" />';
+                                                       $temp_cells[$this->getLanguageService()->getLL('forms_size')] = '<input type="text"' . $this->doc->formWidth(5) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][size]" value="' . htmlspecialchars($confData['size']) . '" title="' . $this->getLanguageService()->getLL('forms_size', TRUE) . '" />';
+                                                       $temp_cells[$this->getLanguageService()->getLL('forms_max')] = '<input type="text"' . $this->doc->formWidth(5) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][max]" value="' . htmlspecialchars($confData['max']) . '" title="' . $this->getLanguageService()->getLL('forms_max', TRUE) . '" />';
                                                        break;
                                                case 'file':
-                                                       $temp_cells[$GLOBALS['LANG']->getLL('forms_size')] = '<input type="text"' . $this->doc->formWidth(5) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][size]" value="' . htmlspecialchars($confData['size']) . '" title="' . $GLOBALS['LANG']->getLL('forms_size', TRUE) . '" />';
+                                                       $temp_cells[$this->getLanguageService()->getLL('forms_size')] = '<input type="text"' . $this->doc->formWidth(5) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][size]" value="' . htmlspecialchars($confData['size']) . '" title="' . $this->getLanguageService()->getLL('forms_size', TRUE) . '" />';
                                                        break;
                                                case 'select':
-                                                       $temp_cells[$GLOBALS['LANG']->getLL('forms_size')] = '<input type="text"' . $this->doc->formWidth(5) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][size]" value="' . htmlspecialchars($confData['size']) . '" title="' . $GLOBALS['LANG']->getLL('forms_size', TRUE) . '" />';
-                                                       $temp_cells[$GLOBALS['LANG']->getLL('forms_autosize')] = '<input type="checkbox" name="FORMCFG[c][' . ($k + 1) * 2 . '][autosize]" value="1"' . ($confData['autosize'] ? ' checked="checked"' : '') . ' title="' . $GLOBALS['LANG']->getLL('forms_autosize', TRUE) . '" />';
-                                                       $temp_cells[$GLOBALS['LANG']->getLL('forms_multiple')] = '<input type="checkbox" name="FORMCFG[c][' . ($k + 1) * 2 . '][multiple]" value="1"' . ($confData['multiple'] ? ' checked="checked"' : '') . ' title="' . $GLOBALS['LANG']->getLL('forms_multiple', TRUE) . '" />';
+                                                       $temp_cells[$this->getLanguageService()->getLL('forms_size')] = '<input type="text"' . $this->doc->formWidth(5) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][size]" value="' . htmlspecialchars($confData['size']) . '" title="' . $this->getLanguageService()->getLL('forms_size', TRUE) . '" />';
+                                                       $temp_cells[$this->getLanguageService()->getLL('forms_autosize')] = '<input type="checkbox" name="FORMCFG[c][' . ($k + 1) * 2 . '][autosize]" value="1"' . ($confData['autosize'] ? ' checked="checked"' : '') . ' title="' . $this->getLanguageService()->getLL('forms_autosize', TRUE) . '" />';
+                                                       $temp_cells[$this->getLanguageService()->getLL('forms_multiple')] = '<input type="checkbox" name="FORMCFG[c][' . ($k + 1) * 2 . '][multiple]" value="1"' . ($confData['multiple'] ? ' checked="checked"' : '') . ' title="' . $this->getLanguageService()->getLL('forms_multiple', TRUE) . '" />';
                                                        break;
                                        }
                                        // Field configuration depending on the fields type:
@@ -450,11 +450,11 @@ class FormsController {
                                        }
                                        // Default data
                                        if ($confData['type'] == 'select' || $confData['type'] == 'radio') {
-                                               $temp_cells[$GLOBALS['LANG']->getLL('forms_options')] = '<textarea ' . $this->doc->formWidth(15) . ' rows="4" name="FORMCFG[c][' . ($k + 1) * 2 . '][options]" title="' . $GLOBALS['LANG']->getLL('forms_options', TRUE) . '">' . GeneralUtility::formatForTextarea($confData['default']) . '</textarea>';
+                                               $temp_cells[$this->getLanguageService()->getLL('forms_options')] = '<textarea ' . $this->doc->formWidth(15) . ' rows="4" name="FORMCFG[c][' . ($k + 1) * 2 . '][options]" title="' . $this->getLanguageService()->getLL('forms_options', TRUE) . '">' . GeneralUtility::formatForTextarea($confData['default']) . '</textarea>';
                                        } elseif ($confData['type'] == 'check') {
-                                               $temp_cells[$GLOBALS['LANG']->getLL('forms_checked')] = '<input type="checkbox" name="FORMCFG[c][' . ($k + 1) * 2 . '][default]" value="1"' . (trim($confData['default']) ? ' checked="checked"' : '') . ' title="' . $GLOBALS['LANG']->getLL('forms_checked', TRUE) . '" />';
+                                               $temp_cells[$this->getLanguageService()->getLL('forms_checked')] = '<input type="checkbox" name="FORMCFG[c][' . ($k + 1) * 2 . '][default]" value="1"' . (trim($confData['default']) ? ' checked="checked"' : '') . ' title="' . $this->getLanguageService()->getLL('forms_checked', TRUE) . '" />';
                                        } elseif ($confData['type'] && $confData['type'] != 'file') {
-                                               $temp_cells[$GLOBALS['LANG']->getLL('forms_default')] = '<input type="text"' . $this->doc->formWidth(15) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][default]" value="' . htmlspecialchars($confData['default']) . '" title="' . $GLOBALS['LANG']->getLL('forms_default', TRUE) . '" />';
+                                               $temp_cells[$this->getLanguageService()->getLL('forms_default')] = '<input type="text"' . $this->doc->formWidth(15) . ' name="FORMCFG[c][' . ($k + 1) * 2 . '][default]" value="' . htmlspecialchars($confData['default']) . '" title="' . $this->getLanguageService()->getLL('forms_default', TRUE) . '" />';
                                        }
                                        $cells[] = $confData['type'] ? $this->formatCells($temp_cells) : '';
                                        // CTRL panel for an item (move up/down/around):
@@ -464,18 +464,18 @@ class FormsController {
                                        // FIXME $inputStyle undefined
                                        $brTag = $inputStyle ? '' : '<br />';
                                        if ($k != 0) {
-                                               $ctrl .= '<input type="image" name="FORMCFG[row_up][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/pil2up.gif', '') . $onClick . ' title="' . $GLOBALS['LANG']->getLL('table_up', TRUE) . '" />' . $brTag;
+                                               $ctrl .= '<input type="image" name="FORMCFG[row_up][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/pil2up.gif', '') . $onClick . ' title="' . $this->getLanguageService()->getLL('table_up', TRUE) . '" />' . $brTag;
                                        } else {
-                                               $ctrl .= '<input type="image" name="FORMCFG[row_bottom][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/turn_up.gif', '') . $onClick . ' title="' . $GLOBALS['LANG']->getLL('table_bottom', TRUE) . '" />' . $brTag;
+                                               $ctrl .= '<input type="image" name="FORMCFG[row_bottom][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/turn_up.gif', '') . $onClick . ' title="' . $this->getLanguageService()->getLL('table_bottom', TRUE) . '" />' . $brTag;
                                        }
-                                       $ctrl .= '<input type="image" name="FORMCFG[row_remove][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/garbage.gif', '') . $onClick . ' title="' . $GLOBALS['LANG']->getLL('table_removeRow', TRUE) . '" />' . $brTag;
+                                       $ctrl .= '<input type="image" name="FORMCFG[row_remove][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/garbage.gif', '') . $onClick . ' title="' . $this->getLanguageService()->getLL('table_removeRow', TRUE) . '" />' . $brTag;
                                        // FIXME $tLines undefined
                                        if ($k + 1 != count($tLines)) {
-                                               $ctrl .= '<input type="image" name="FORMCFG[row_down][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/pil2down.gif', '') . $onClick . ' title="' . $GLOBALS['LANG']->getLL('table_down', TRUE) . '" />' . $brTag;
+                                               $ctrl .= '<input type="image" name="FORMCFG[row_down][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/pil2down.gif', '') . $onClick . ' title="' . $this->getLanguageService()->getLL('table_down', TRUE) . '" />' . $brTag;
                                        } else {
-                                               $ctrl .= '<input type="image" name="FORMCFG[row_top][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/turn_down.gif', '') . $onClick . ' title="' . $GLOBALS['LANG']->getLL('table_top', TRUE) . '" />' . $brTag;
+                                               $ctrl .= '<input type="image" name="FORMCFG[row_top][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/turn_down.gif', '') . $onClick . ' title="' . $this->getLanguageService()->getLL('table_top', TRUE) . '" />' . $brTag;
                                        }
-                                       $ctrl .= '<input type="image" name="FORMCFG[row_add][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/add.gif', '') . $onClick . ' title="' . $GLOBALS['LANG']->getLL('table_addRow', TRUE) . '" />' . $brTag;
+                                       $ctrl .= '<input type="image" name="FORMCFG[row_add][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/add.gif', '') . $onClick . ' title="' . $this->getLanguageService()->getLL('table_addRow', TRUE) . '" />' . $brTag;
                                        $ctrl = '<span class="c-wizButtonsV">' . $ctrl . '</span>';
                                        // Finally, put together the full row from the generated content above:
                                        $bgC = $confData['type'] ? ' class="bgColor5"' : '';
@@ -503,14 +503,14 @@ class FormsController {
                        $tRows[] = '
                                <tr>
                                        <td colspan="2" class="bgColor2">&nbsp;</td>
-                                       <td colspan="2" class="bgColor2"><strong>' . $GLOBALS['LANG']->getLL('forms_special_eform', TRUE) . ':</strong>' . BackendUtility::cshItem('xMOD_csh_corebe', 'wizard_forms_wiz_formmail_info') . '</td>
+                                       <td colspan="2" class="bgColor2"><strong>' . $this->getLanguageService()->getLL('forms_special_eform', TRUE) . ':</strong>' . BackendUtility::cshItem('xMOD_csh_corebe', 'wizard_forms_wiz_formmail_info') . '</td>
                                </tr>';
                        // "FORM type":
                        $tRows[] = '
                                <tr class="bgColor5">
                                        <td>&nbsp;</td>
                                        <td class="bgColor4">&nbsp;</td>
-                                       <td>' . $GLOBALS['LANG']->getLL('forms_eform_formtype_mail', TRUE) . ':</td>
+                                       <td>' . $this->getLanguageService()->getLL('forms_eform_formtype_mail', TRUE) . ':</td>
                                        <td>
                                                <input type="hidden" name="FORMCFG[c][' . 1000 * 2 . '][fieldname]" value="formtype_mail" />
                                                <input type="hidden" name="FORMCFG[c][' . 1000 * 2 . '][type]" value="submit" />
@@ -522,7 +522,7 @@ class FormsController {
                                <tr class="bgColor5">
                                        <td>&nbsp;</td>
                                        <td class="bgColor4">&nbsp;</td>
-                                       <td>' . $GLOBALS['LANG']->getLL('forms_eform_html_enabled', TRUE) . ':</td>
+                                       <td>' . $this->getLanguageService()->getLL('forms_eform_html_enabled', TRUE) . ':</td>
                                        <td>
                                                <input type="hidden" name="FORMCFG[c][' . 1001 * 2 . '][fieldname]" value="html_enabled" />
                                                <input type="hidden" name="FORMCFG[c][' . 1001 * 2 . '][type]" value="hidden" />
@@ -534,7 +534,7 @@ class FormsController {
                                <tr class="bgColor5">
                                        <td>&nbsp;</td>
                                        <td class="bgColor4">&nbsp;</td>
-                                       <td>' . $GLOBALS['LANG']->getLL('forms_eform_subject', TRUE) . ':</td>
+                                       <td>' . $this->getLanguageService()->getLL('forms_eform_subject', TRUE) . ':</td>
                                        <td>
                                                <input type="hidden" name="FORMCFG[c][' . 1002 * 2 . '][fieldname]" value="subject" />
                                                <input type="hidden" name="FORMCFG[c][' . 1002 * 2 . '][type]" value="hidden" />
@@ -546,7 +546,7 @@ class FormsController {
                                <tr class="bgColor5">
                                        <td>&nbsp;</td>
                                        <td class="bgColor4">&nbsp;</td>
-                                       <td>' . $GLOBALS['LANG']->getLL('forms_eform_recipient', TRUE) . ':</td>
+                                       <td>' . $this->getLanguageService()->getLL('forms_eform_recipient', TRUE) . ':</td>
                                        <td>
                                                <input type="text"' . $this->doc->formWidth(15) . ' name="FORMCFG[recipient]" value="' . htmlspecialchars($row['subheader']) . '" />
                                        </td>
@@ -867,35 +867,4 @@ class FormsController {
                                ' . implode('', $lines) . '
                        </table>';
        }
-
-       /**
-        * Checks access for element
-        *
-        * @param string $table Table name
-        * @param int $uid Record uid
-        * @return bool
-        * @todo: Refactor to remove duplicate code (see TableController, RteController)
-        */
-       protected function checkEditAccess($table, $uid) {
-               $calcPRec = BackendUtility::getRecord($table, $uid);
-               BackendUtility::fixVersioningPid($table, $calcPRec);
-               if (is_array($calcPRec)) {
-                       // If pages:
-                       if ($table == 'pages') {
-                               $CALC_PERMS = $GLOBALS['BE_USER']->calcPerms($calcPRec);
-                               $hasAccess = $CALC_PERMS & 2 ? TRUE : FALSE;
-                       } else {
-                               // Fetching pid-record first.
-                               $CALC_PERMS = $GLOBALS['BE_USER']->calcPerms(BackendUtility::getRecord('pages', $calcPRec['pid']));
-                               $hasAccess = $CALC_PERMS & 16 ? TRUE : FALSE;
-                       }
-                       // Check internals regarding access:
-                       if ($hasAccess) {
-                               $hasAccess = $GLOBALS['BE_USER']->recordEditAccessInternals($table, $calcPRec);
-                       }
-               } else {
-                       $hasAccess = FALSE;
-               }
-               return $hasAccess;
-       }
 }
index d82be5c..21a9960 100644 (file)
@@ -22,7 +22,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  *
  * @author Kasper Skårhøj <kasperYYYY@typo3.com>
  */
-class ListController {
+class ListController extends AbstractWizardController {
 
        /**
         * @var int
@@ -54,7 +54,7 @@ class ListController {
         * Initialization of the class, setting GPvars.
         */
        public function __construct() {
-               $GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_wizards.xlf');
+               $this->getLanguageService()->includeLLFile('EXT:lang/locallang_wizards.xlf');
                $GLOBALS['SOBE'] = $this;
                $this->P = GeneralUtility::_GP('P');
                $this->table = GeneralUtility::_GP('table');
index 481e501..28cecdc 100644 (file)
@@ -23,7 +23,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  *
  * @author Kasper Skårhøj <kasperYYYY@typo3.com>
  */
-class RteController {
+class RteController extends AbstractWizardController {
 
        /**
         * document template object
@@ -64,7 +64,7 @@ class RteController {
         * Constructor
         */
        public function __construct() {
-               $GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_wizards.xlf');
+               $this->getLanguageService()->includeLLFile('EXT:lang/locallang_wizards.xlf');
                $GLOBALS['SOBE'] = $this;
 
                $this->init();
@@ -84,7 +84,7 @@ class RteController {
                $this->MCONF['name'] = 'wizard_rte';
                // Starting the document template object:
                $this->doc = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Template\DocumentTemplate::class);
-               $this->doc->backPath = $GLOBALS['BACK_PATH'];
+               $this->doc->backPath = $this->getBackPath();
                $this->doc->setModuleTemplate('EXT:backend/Resources/Private/Templates/wizard_rte.html');
                // Need to NOT have the page wrapped in DIV since if we do that we destroy
                // the feature that the RTE spans the whole height of the page!!!
@@ -99,7 +99,7 @@ class RteController {
         */
        public function main() {
                // Translate id to the workspace version:
-               if ($versionRec = BackendUtility::getWorkspaceVersionOfRecord($GLOBALS['BE_USER']->workspace, $this->P['table'], $this->P['uid'], 'uid')) {
+               if ($versionRec = BackendUtility::getWorkspaceVersionOfRecord($this->getBackendUserAuthentication()->workspace, $this->P['table'], $this->P['uid'], 'uid')) {
                        $this->P['uid'] = $versionRec['uid'];
                }
                // If all parameters are available:
@@ -175,7 +175,7 @@ class RteController {
                        $this->content .= $tceforms->printNeededJSFunctions_top() . $formContent . $tceforms->printNeededJSFunctions();
                } else {
                        // ERROR:
-                       $this->content .= $this->doc->section($GLOBALS['LANG']->getLL('forms_title'), '<span class="typo3-red">' . $GLOBALS['LANG']->getLL('table_noData', TRUE) . '</span>', 0, 1);
+                       $this->content .= $this->doc->section($this->getLanguageService()->getLL('forms_title'), '<span class="typo3-red">' . $this->getLanguageService()->getLL('table_noData', TRUE) . '</span>', 0, 1);
                }
                // Setting up the buttons and markers for docheader
                $docHeaderButtons = $this->getButtons();
@@ -216,18 +216,18 @@ class RteController {
                        $closeUrl = GeneralUtility::sanitizeLocalUrl($this->P['returnUrl']);
                        // Getting settings for the undo button:
                        $undoButton = 0;
-                       $undoRes = $GLOBALS['TYPO3_DB']->exec_SELECTquery('tstamp', 'sys_history', 'tablename=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($this->P['table'], 'sys_history') . ' AND recuid=' . (int)$this->P['uid'], '', 'tstamp DESC', '1');
-                       if ($undoButtonR = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($undoRes)) {
+                       $undoRes = $this->getDatabaseConnection()->exec_SELECTquery('tstamp', 'sys_history', 'tablename=' . $this->getDatabaseConnection()->fullQuoteStr($this->P['table'], 'sys_history') . ' AND recuid=' . (int)$this->P['uid'], '', 'tstamp DESC', '1');
+                       if ($undoButtonR = $this->getDatabaseConnection()->sql_fetch_assoc($undoRes)) {
                                $undoButton = 1;
                        }
                        // Close
-                       $buttons['close'] = '<a href="#" onclick="' . htmlspecialchars('jumpToUrl(unescape(\'' . rawurlencode($closeUrl) . '\')); return false;') . '" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:rm.closeDoc', TRUE) . '">' . IconUtility::getSpriteIcon('actions-document-close') . '</a>';
+                       $buttons['close'] = '<a href="#" onclick="' . htmlspecialchars('jumpToUrl(unescape(\'' . rawurlencode($closeUrl) . '\')); return false;') . '" title="' . $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:rm.closeDoc', TRUE) . '">' . IconUtility::getSpriteIcon('actions-document-close') . '</a>';
                        // Save
-                       $buttons['save'] = IconUtility::getSpriteIcon('actions-document-save', array('html' => '<input type="image" name="_savedok" class="c-inputButton" src="clear.gif" onclick="TBE_EDITOR.checkAndDoSubmit(1); return false;" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveDoc', TRUE) . '" />'));
+                       $buttons['save'] = IconUtility::getSpriteIcon('actions-document-save', array('html' => '<input type="image" name="_savedok" class="c-inputButton" src="clear.gif" onclick="TBE_EDITOR.checkAndDoSubmit(1); return false;" title="' . $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveDoc', TRUE) . '" />'));
                        // Save & View
-                       $buttons['save_view'] = IconUtility::getSpriteIcon('actions-document-save-view', array('html' => '<input type="image" class="c-inputButton" name="_savedokview" src="clear.gif" onclick="' . htmlspecialchars('document.editform.redirect.value+=\'&popView=1\'; TBE_EDITOR.checkAndDoSubmit(1); return false;') . '" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveDocShow', TRUE) . '" />'));
+                       $buttons['save_view'] = IconUtility::getSpriteIcon('actions-document-save-view', array('html' => '<input type="image" class="c-inputButton" name="_savedokview" src="clear.gif" onclick="' . htmlspecialchars('document.editform.redirect.value+=\'&popView=1\'; TBE_EDITOR.checkAndDoSubmit(1); return false;') . '" title="' . $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveDocShow', TRUE) . '" />'));
                        // Save & Close
-                       $buttons['save_close'] = IconUtility::getSpriteIcon('actions-document-save-close', array('html' => '<input type="image" class="c-inputButton" name="_saveandclosedok" src="clear.gif" onclick="' . htmlspecialchars('document.editform.redirect.value=\'' . $closeUrl . '\'; TBE_EDITOR.checkAndDoSubmit(1); return false;') . '" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveCloseDoc', TRUE) . '" />'));
+                       $buttons['save_close'] = IconUtility::getSpriteIcon('actions-document-save-close', array('html' => '<input type="image" class="c-inputButton" name="_saveandclosedok" src="clear.gif" onclick="' . htmlspecialchars('document.editform.redirect.value=\'' . $closeUrl . '\'; TBE_EDITOR.checkAndDoSubmit(1); return false;') . '" title="' . $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveCloseDoc', TRUE) . '" />'));
                        // Undo/Revert:
                        if ($undoButton) {
                                $aOnClick = 'window.location.href=' .
@@ -242,45 +242,13 @@ class RteController {
                                                        )
                                                )
                                        ) . '; return false;';
-                               $buttons['undo'] = '<a href="#" onclick="' . htmlspecialchars($aOnClick) . '"' . ' title="' . htmlspecialchars(sprintf($GLOBALS['LANG']->getLL('undoLastChange'), BackendUtility::calcAge(($GLOBALS['EXEC_TIME'] - $undoButtonR['tstamp']), $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:labels.minutesHoursDaysYears')))) . '">' . IconUtility::getSpriteIcon('actions-edit-undo') . '</a>';
+                               $buttons['undo'] = '<a href="#" onclick="' . htmlspecialchars($aOnClick) . '"' . ' title="' . htmlspecialchars(sprintf($this->getLanguageService()->getLL('undoLastChange'), BackendUtility::calcAge(($GLOBALS['EXEC_TIME'] - $undoButtonR['tstamp']), $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:labels.minutesHoursDaysYears')))) . '">' . IconUtility::getSpriteIcon('actions-edit-undo') . '</a>';
                        }
                        // Shortcut
-                       if ($GLOBALS['BE_USER']->mayMakeShortcut()) {
+                       if ($this->getBackendUserAuthentication()->mayMakeShortcut()) {
                                $buttons['shortcut'] = $this->doc->makeShortcutIcon('P', '', $this->MCONF['name'], 1);
                        }
                }
                return $buttons;
        }
-
-       /**
-        * Checks access for element
-        *
-        * @param string $table Table name
-        * @param int $uid Record uid
-        * @return bool
-        * @todo: Refactor to remove duplicate code (see FormsController, TableController)
-        */
-       public function checkEditAccess($table, $uid) {
-               $calcPRec = BackendUtility::getRecord($table, $uid);
-               BackendUtility::fixVersioningPid($table, $calcPRec);
-               if (is_array($calcPRec)) {
-                       // If pages:
-                       if ($table == 'pages') {
-                               $CALC_PERMS = $GLOBALS['BE_USER']->calcPerms($calcPRec);
-                               $hasAccess = $CALC_PERMS & 2 ? TRUE : FALSE;
-                       } else {
-                               // Fetching pid-record first.
-                               $CALC_PERMS = $GLOBALS['BE_USER']->calcPerms(BackendUtility::getRecord('pages', $calcPRec['pid']));
-                               $hasAccess = $CALC_PERMS & 16 ? TRUE : FALSE;
-                       }
-                       // Check internals regarding access:
-                       if ($hasAccess) {
-                               $hasAccess = $GLOBALS['BE_USER']->recordEditAccessInternals($table, $calcPRec);
-                       }
-               } else {
-                       $hasAccess = FALSE;
-               }
-               return $hasAccess;
-       }
-
 }
index 241f321..7dc381d 100644 (file)
@@ -24,7 +24,7 @@ use TYPO3\CMS\Core\Utility\MathUtility;
  *
  * @author Kasper Skårhøj <kasperYYYY@typo3.com>
  */
-class TableController {
+class TableController extends AbstractWizardController {
 
        /**
         * document template object
@@ -104,7 +104,7 @@ class TableController {
         * Constructor
         */
        public function __construct() {
-               $GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_wizards.xlf');
+               $this->getLanguageService()->includeLLFile('EXT:lang/locallang_wizards.xlf');
                $GLOBALS['SOBE'] = $this;
 
                $this->init();
@@ -126,7 +126,7 @@ class TableController {
                $this->inputStyle = isset($this->TABLECFG['textFields']) ? $this->TABLECFG['textFields'] : 1;
                // Document template object:
                $this->doc = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Template\DocumentTemplate::class);
-               $this->doc->backPath = $GLOBALS['BACK_PATH'];
+               $this->doc->backPath = $this->getBackPath();
                $this->doc->setModuleTemplate('EXT:backend/Resources/Private/Templates/wizard_table.html');
                // Setting form tag:
                list($rUri) = explode('#', GeneralUtility::getIndpEnv('REQUEST_URI'));
@@ -142,9 +142,9 @@ class TableController {
         */
        public function main() {
                if ($this->P['table'] && $this->P['field'] && $this->P['uid']) {
-                       $this->content .= $this->doc->section($GLOBALS['LANG']->getLL('table_title'), $this->tableWizard(), 0, 1);
+                       $this->content .= $this->doc->section($this->getLanguageService()->getLL('table_title'), $this->tableWizard(), 0, 1);
                } else {
-                       $this->content .= $this->doc->section($GLOBALS['LANG']->getLL('table_title'), '<span class="typo3-red">' . $GLOBALS['LANG']->getLL('table_noData', TRUE) . '</span>', 0, 1);
+                       $this->content .= $this->doc->section($this->getLanguageService()->getLL('table_title'), '<span class="typo3-red">' . $this->getLanguageService()->getLL('table_noData', TRUE) . '</span>', 0, 1);
                }
                // Setting up the buttons and markers for docheader
                $docHeaderButtons = $this->getButtons();
@@ -186,13 +186,13 @@ class TableController {
                        // CSH Buttons
                        $buttons['csh_buttons'] = BackendUtility::cshItem('xMOD_csh_corebe', 'wizard_table_wiz_buttons');
                        // Close
-                       $buttons['close'] = '<a href="#" onclick="' . htmlspecialchars(('jumpToUrl(unescape(\'' . rawurlencode(GeneralUtility::sanitizeLocalUrl($this->P['returnUrl'])) . '\')); return false;')) . '">' . IconUtility::getSpriteIcon('actions-document-close', array('title' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:rm.closeDoc', TRUE))) . '</a>';
+                       $buttons['close'] = '<a href="#" onclick="' . htmlspecialchars(('jumpToUrl(unescape(\'' . rawurlencode(GeneralUtility::sanitizeLocalUrl($this->P['returnUrl'])) . '\')); return false;')) . '">' . IconUtility::getSpriteIcon('actions-document-close', array('title' => $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:rm.closeDoc', TRUE))) . '</a>';
                        // Save
-                       $buttons['save'] = '<input type="image" class="c-inputButton" name="savedok"' . IconUtility::skinImg($this->doc->backPath, 'gfx/savedok.gif') . ' title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveDoc', TRUE) . '" />';
+                       $buttons['save'] = '<input type="image" class="c-inputButton" name="savedok"' . IconUtility::skinImg($this->doc->backPath, 'gfx/savedok.gif') . ' title="' . $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveDoc', TRUE) . '" />';
                        // Save & Close
-                       $buttons['save_close'] = '<input type="image" class="c-inputButton" name="saveandclosedok"' . IconUtility::skinImg($this->doc->backPath, 'gfx/saveandclosedok.gif') . ' title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveCloseDoc', TRUE) . '" />';
+                       $buttons['save_close'] = '<input type="image" class="c-inputButton" name="saveandclosedok"' . IconUtility::skinImg($this->doc->backPath, 'gfx/saveandclosedok.gif') . ' title="' . $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:rm.saveCloseDoc', TRUE) . '" />';
                        // Reload
-                       $buttons['reload'] = '<input type="image" class="c-inputButton" name="_refresh"' . IconUtility::skinImg($this->doc->backPath, 'gfx/refresh_n.gif') . ' title="' . $GLOBALS['LANG']->getLL('forms_refresh', TRUE) . '" />';
+                       $buttons['reload'] = '<input type="image" class="c-inputButton" name="_refresh"' . IconUtility::skinImg($this->doc->backPath, 'gfx/refresh_n.gif') . ' title="' . $this->getLanguageService()->getLL('forms_refresh', TRUE) . '" />';
                }
                return $buttons;
        }
@@ -320,17 +320,17 @@ class TableController {
                                $ctrl = '';
                                $brTag = $this->inputStyle ? '' : '<br />';
                                if ($k != 0) {
-                                       $ctrl .= '<input type="image" name="TABLE[row_up][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/pil2up.gif', '') . $onClick . ' title="' . $GLOBALS['LANG']->getLL('table_up', TRUE) . '" />' . $brTag;
+                                       $ctrl .= '<input type="image" name="TABLE[row_up][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/pil2up.gif', '') . $onClick . ' title="' . $this->getLanguageService()->getLL('table_up', TRUE) . '" />' . $brTag;
                                } else {
-                                       $ctrl .= '<input type="image" name="TABLE[row_bottom][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/turn_up.gif', '') . $onClick . ' title="' . $GLOBALS['LANG']->getLL('table_bottom', TRUE) . '" />' . $brTag;
+                                       $ctrl .= '<input type="image" name="TABLE[row_bottom][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/turn_up.gif', '') . $onClick . ' title="' . $this->getLanguageService()->getLL('table_bottom', TRUE) . '" />' . $brTag;
                                }
-                               $ctrl .= '<input type="image" name="TABLE[row_remove][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/garbage.gif', '') . $onClick . ' title="' . $GLOBALS['LANG']->getLL('table_removeRow', TRUE) . '" />' . $brTag;
+                               $ctrl .= '<input type="image" name="TABLE[row_remove][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/garbage.gif', '') . $onClick . ' title="' . $this->getLanguageService()->getLL('table_removeRow', TRUE) . '" />' . $brTag;
                                if ($k + 1 != $countLines) {
-                                       $ctrl .= '<input type="image" name="TABLE[row_down][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/pil2down.gif', '') . $onClick . ' title="' . $GLOBALS['LANG']->getLL('table_down', TRUE) . '" />' . $brTag;
+                                       $ctrl .= '<input type="image" name="TABLE[row_down][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/pil2down.gif', '') . $onClick . ' title="' . $this->getLanguageService()->getLL('table_down', TRUE) . '" />' . $brTag;
                                } else {
-                                       $ctrl .= '<input type="image" name="TABLE[row_top][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/turn_down.gif', '') . $onClick . ' title="' . $GLOBALS['LANG']->getLL('table_top', TRUE) . '" />' . $brTag;
+                                       $ctrl .= '<input type="image" name="TABLE[row_top][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/turn_down.gif', '') . $onClick . ' title="' . $this->getLanguageService()->getLL('table_top', TRUE) . '" />' . $brTag;
                                }
-                               $ctrl .= '<input type="image" name="TABLE[row_add][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/add.gif', '') . $onClick . ' title="' . $GLOBALS['LANG']->getLL('table_addRow', TRUE) . '" />' . $brTag;
+                               $ctrl .= '<input type="image" name="TABLE[row_add][' . ($k + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/add.gif', '') . $onClick . ' title="' . $this->getLanguageService()->getLL('table_addRow', TRUE) . '" />' . $brTag;
                                $tRows[] = '
                                        <tr class="bgColor4">
                                                <td class="bgColor5"><a name="ANC_' . ($k + 1) * 2 . '"></a><span class="c-wizButtonsV">' . $ctrl . '</span></td>
@@ -354,17 +354,17 @@ class TableController {
                        foreach ($firstRow as $temp) {
                                $ctrl = '';
                                if ($a != 0) {
-                                       $ctrl .= '<input type="image" name="TABLE[col_left][' . ($a + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/pil2left.gif', '') . ' title="' . $GLOBALS['LANG']->getLL('table_left', TRUE) . '" />';
+                                       $ctrl .= '<input type="image" name="TABLE[col_left][' . ($a + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/pil2left.gif', '') . ' title="' . $this->getLanguageService()->getLL('table_left', TRUE) . '" />';
                                } else {
-                                       $ctrl .= '<input type="image" name="TABLE[col_end][' . ($a + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/turn_left.gif', '') . ' title="' . $GLOBALS['LANG']->getLL('table_end', TRUE) . '" />';
+                                       $ctrl .= '<input type="image" name="TABLE[col_end][' . ($a + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/turn_left.gif', '') . ' title="' . $this->getLanguageService()->getLL('table_end', TRUE) . '" />';
                                }
-                               $ctrl .= '<input type="image" name="TABLE[col_remove][' . ($a + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/garbage.gif', '') . ' title="' . $GLOBALS['LANG']->getLL('table_removeColumn', TRUE) . '" />';
+                               $ctrl .= '<input type="image" name="TABLE[col_remove][' . ($a + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/garbage.gif', '') . ' title="' . $this->getLanguageService()->getLL('table_removeColumn', TRUE) . '" />';
                                if ($a + 1 != $cols) {
-                                       $ctrl .= '<input type="image" name="TABLE[col_right][' . ($a + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/pil2right.gif', '') . ' title="' . $GLOBALS['LANG']->getLL('table_right', TRUE) . '" />';
+                                       $ctrl .= '<input type="image" name="TABLE[col_right][' . ($a + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/pil2right.gif', '') . ' title="' . $this->getLanguageService()->getLL('table_right', TRUE) . '" />';
                                } else {
-                                       $ctrl .= '<input type="image" name="TABLE[col_start][' . ($a + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/turn_right.gif', '') . ' title="' . $GLOBALS['LANG']->getLL('table_start', TRUE) . '" />';
+                                       $ctrl .= '<input type="image" name="TABLE[col_start][' . ($a + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/turn_right.gif', '') . ' title="' . $this->getLanguageService()->getLL('table_start', TRUE) . '" />';
                                }
-                               $ctrl .= '<input type="image" name="TABLE[col_add][' . ($a + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/add.gif', '') . ' title="' . $GLOBALS['LANG']->getLL('table_addColumn', TRUE) . '" />';
+                               $ctrl .= '<input type="image" name="TABLE[col_add][' . ($a + 1) * 2 . ']"' . IconUtility::skinImg($this->doc->backPath, 'gfx/add.gif', '') . ' title="' . $this->getLanguageService()->getLL('table_addColumn', TRUE) . '" />';
                                $cells[] = '<span class="c-wizButtonsH">' . $ctrl . '</span>';
                                // Incr. counter:
                                $a++;
@@ -393,7 +393,7 @@ class TableController {
                                Input mode check box:
                        -->
                        <div id="c-inputMode">
-                               ' . '<input type="hidden" name="TABLE[textFields]" value="0" />' . '<input type="checkbox" name="TABLE[textFields]" id="textFields" value="1"' . ($this->inputStyle ? ' checked="checked"' : '') . ' /> <label for="textFields">' . $GLOBALS['LANG']->getLL('table_smallFields') . '</label>
+                               ' . '<input type="hidden" name="TABLE[textFields]" value="0" />' . '<input type="checkbox" name="TABLE[textFields]" id="textFields" value="1"' . ($this->inputStyle ? ' checked="checked"' : '') . ' /> <label for="textFields">' . $this->getLanguageService()->getLL('table_smallFields') . '</label>
                        </div>
 
                        <br /><br />
@@ -579,35 +579,4 @@ class TableController {
                // Return configuration array:
                return $cfgArr;
        }
-
-       /**
-        * Checks access for element
-        *
-        * @param string $table Table name
-        * @param int $uid Record uid
-        * @return bool
-        * @todo: Refactor to remove duplicate code (see FormsController, RteController)
-        */
-       protected function checkEditAccess($table, $uid) {
-               $calcPRec = BackendUtility::getRecord($table, $uid);
-               BackendUtility::fixVersioningPid($table, $calcPRec);
-               if (is_array($calcPRec)) {
-                       // If pages:
-                       if ($table == 'pages') {
-                               $CALC_PERMS = $GLOBALS['BE_USER']->calcPerms($calcPRec);
-                               $hasAccess = $CALC_PERMS & 2 ? TRUE : FALSE;
-                       } else {
-                               // Fetching pid-record first.
-                               $CALC_PERMS = $GLOBALS['BE_USER']->calcPerms(BackendUtility::getRecord('pages', $calcPRec['pid']));
-                               $hasAccess = $CALC_PERMS & 16 ? TRUE : FALSE;
-                       }
-                       // Check internals regarding access:
-                       if ($hasAccess) {
-                               $hasAccess = $GLOBALS['BE_USER']->recordEditAccessInternals($table, $calcPRec);
-                       }
-               } else {
-                       $hasAccess = FALSE;
-               }
-               return $hasAccess;
-       }
 }