[!!!][TASK] Remove deprecated backend-related PHP classes 22/45422/4
authorBenni Mack <benni@typo3.org>
Wed, 23 Dec 2015 15:16:27 +0000 (16:16 +0100)
committerAndreas Fernandez <typo3@scripting-base.de>
Wed, 23 Dec 2015 18:43:53 +0000 (19:43 +0100)
Resolves: #72418
Releases: master
Change-Id: Ib0021e66e00be0979841368db2b62acf89e8e604
Reviewed-on: https://review.typo3.org/45422
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: Andreas Fernandez <typo3@scripting-base.de>
typo3/sysext/backend/Classes/Module/ModuleController.php [deleted file]
typo3/sysext/backend/Classes/Module/ModuleSettings.php [deleted file]
typo3/sysext/backend/Classes/View/LogoView.php [deleted file]
typo3/sysext/backend/Classes/View/ModuleMenuView.php [deleted file]
typo3/sysext/backend/Classes/View/PageLayout/Extdirect/ExtdirectPageCommands.php [deleted file]
typo3/sysext/backend/Classes/View/ThumbnailView.php [deleted file]
typo3/sysext/backend/Tests/Unit/Module/ModuleControllerTest.php [deleted file]
typo3/sysext/backend/Tests/Unit/View/ModuleMenuViewTest.php [deleted file]
typo3/sysext/core/Classes/Core/Bootstrap.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-72418-DeprecatedBackend-relatedPHPClasses.rst [new file with mode: 0644]

diff --git a/typo3/sysext/backend/Classes/Module/ModuleController.php b/typo3/sysext/backend/Classes/Module/ModuleController.php
deleted file mode 100644 (file)
index ef1c7a6..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\Module;
-
-/*
- * 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\Core\Utility\GeneralUtility;
-
-/**
- * Class with utility functions for module menu
- */
-class ModuleController
-{
-    /**
-     * @var \TYPO3\CMS\Backend\Module\ModuleStorage
-     */
-    protected $moduleMenu;
-
-    /**
-     * @var \TYPO3\CMS\Backend\Domain\Repository\Module\BackendModuleRepository
-     */
-    protected $moduleMenuRepository;
-
-    /**
-     * Constructor
-     * @deprecated since TYPO3 CMS 7, will be removed in TYPO3 CMS 8, not in use, as everything can be done via the ModuleMenuRepository directly
-     */
-    public function __construct()
-    {
-        GeneralUtility::logDeprecatedFunction();
-        $this->moduleMenu = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Module\ModuleStorage::class);
-        $this->moduleMenuRepository = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Domain\Repository\Module\BackendModuleRepository::class);
-    }
-
-    /**
-     * This method creates the module menu if necessary
-     * afterwards you only need an instance of \TYPO3\CMS\Backend\Module\ModuleStorage
-     * to get the menu
-     *
-     * @return void
-     */
-    public function createModuleMenu()
-    {
-        if (empty($this->moduleMenu->getEntries())) {
-            /** @var $moduleMenu \TYPO3\CMS\Backend\View\ModuleMenuView */
-            $moduleMenu = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\View\ModuleMenuView::class);
-            $rawData = $moduleMenu->getRawModuleData();
-            $this->convertRawModuleDataToModuleMenuObject($rawData);
-            $this->createMenuEntriesForTbeModulesExt();
-        }
-    }
-
-    /**
-     * Creates the module menu object structure from the raw data array
-     *
-     * @param array $rawModuleData
-     * @see class.modulemenu.php getRawModuleData()
-     * @return void
-     */
-    protected function convertRawModuleDataToModuleMenuObject(array $rawModuleData)
-    {
-        foreach ($rawModuleData as $module) {
-            $entry = $this->createEntryFromRawData($module);
-            if (isset($module['subitems']) && !empty($module['subitems'])) {
-                foreach ($module['subitems'] as $subitem) {
-                    $subEntry = $this->createEntryFromRawData($subitem);
-                    $entry->addChild($subEntry);
-                }
-            }
-            $this->moduleMenu->attachEntry($entry);
-        }
-    }
-
-    /**
-     * Creates a menu entry object from an array
-     *
-     * @param array $module
-     * @return \TYPO3\CMS\Backend\Domain\Model\Module\BackendModule
-     */
-    protected function createEntryFromRawData(array $module)
-    {
-        /** @var $entry \TYPO3\CMS\Backend\Domain\Model\Module\BackendModule */
-        $entry = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Domain\Model\Module\BackendModule::class);
-        if (!empty($module['name']) && is_string($module['name'])) {
-            $entry->setName($module['name']);
-        }
-        if (!empty($module['title']) && is_string($module['title'])) {
-            $entry->setTitle($this->getLanguageService()->sL($module['title']));
-        }
-        if (!empty($module['onclick']) && is_string($module['onclick'])) {
-            $entry->setOnClick($module['onclick']);
-        }
-        if (!empty($module['link']) && is_string($module['link'])) {
-            $entry->setLink($module['link']);
-        }
-        if (empty($module['link']) && !empty($module['path']) && is_string($module['path'])) {
-            $entry->setLink($module['path']);
-        }
-        if (!empty($module['description']) && is_string($module['description'])) {
-            $entry->setDescription($module['description']);
-        }
-        if (!empty($module['icon']) && is_array($module['icon'])) {
-            $entry->setIcon($module['icon']);
-        }
-        if (!empty($module['navigationComponentId']) && is_string($module['navigationComponentId'])) {
-            $entry->setNavigationComponentId($module['navigationComponentId']);
-        }
-        return $entry;
-    }
-
-    /**
-     * Creates the "third level" menu entries (submodules for the info module for
-     * example) from the TBE_MODULES_EXT array
-     *
-     * @return void
-     */
-    protected function createMenuEntriesForTbeModulesExt()
-    {
-        foreach ($GLOBALS['TBE_MODULES_EXT'] as $mainModule => $tbeModuleExt) {
-            list($main) = explode('_', $mainModule);
-            $mainEntry = $this->moduleMenuRepository->findByModuleName($main);
-            if ($mainEntry !== false) {
-                $subEntries = $mainEntry->getChildren();
-                if (!empty($subEntries)) {
-                    $matchingSubEntry = $this->moduleMenuRepository->findByModuleName($mainModule);
-                    if ($matchingSubEntry !== false) {
-                        if (array_key_exists('MOD_MENU', $tbeModuleExt) && array_key_exists('function', $tbeModuleExt['MOD_MENU'])) {
-                            foreach ($tbeModuleExt['MOD_MENU']['function'] as $subModule) {
-                                $entry = $this->createEntryFromRawData($subModule);
-                                $matchingSubEntry->addChild($entry);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Return language service instance
-     *
-     * @return \TYPO3\CMS\Lang\LanguageService
-     */
-    protected function getLanguageService()
-    {
-        return $GLOBALS['LANG'];
-    }
-}
diff --git a/typo3/sysext/backend/Classes/Module/ModuleSettings.php b/typo3/sysext/backend/Classes/Module/ModuleSettings.php
deleted file mode 100644 (file)
index 05b64eb..0000000
+++ /dev/null
@@ -1,469 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend;
-
-/*
- * 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\Module\BaseScriptClass;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Manage storing and restoring of $this->getModule()->MOD_SETTINGS settings.
- * Provides a presets box for BE modules.
- *
- * usage inside of BaseScriptClass class
- *
- * ....
- *
- * $this->MOD_MENU = array(
- * 'function' => array('xxx'),
- * 'tx_someext_storedSettings' => '',
- *
- * ....
- *
- * function main() {
- * // reStore settings
- * $store = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Backend\ModuleSettings::class);
- * $store->init('tx_someext');
- * $store->setStoreList('tx_someext');
- * $store->processStoreControl();
- *
- * // show control panel
- * $this->content .= '<h2>Settings</h2>' . '<div>' . $store->getStoreControl() . '</div>';
- *
- * Format of saved settings
- *
- * $this->getModule()->MOD_SETTINGS[$this->prefix . '_storedSettings'] = serialize(
- * array (
- *   'any id' => array(
- *     'title' => 'title for saved settings',
- *     'desc' => 'description text, not mandatory',
- *     'data' => array(),      // data from MOD_SETTINGS
- *     'user' => NULL, // can be used for extra data used by the application to identify this entry
- *     'tstamp' => 12345, // $GLOBALS['EXEC_TIME']
- *   ),
- *   'another id' => ...
- * )
- *
- * @deprecated since TYPO3 CMS 7, will be removed with TYPO3 CMS 8.
- */
-class ModuleSettings
-{
-    /**
-     * If type is set 'ses' then the module data will be stored into the session and will be lost with logout.
-     * Type 'perm' will store the data permanently.
-     *
-     * @var string
-     */
-    public $type = 'perm';
-
-    /**
-     * prefix of MOD_SETTING array keys that should be stored
-     *
-     * @var string
-     */
-    public $prefix = '';
-
-    /**
-     * Names of keys of the MOD_SETTING array which should be stored
-     *
-     * @var array
-     */
-    public $storeList = array();
-
-    /**
-     * The stored settings array
-     *
-     * @var array
-     */
-    public $storedSettings = array();
-
-    /**
-     * Message from the last storage command
-     *
-     * @var string
-     */
-    public $msg = '';
-
-    /**
-     * Name of the form. Needed for JS
-     *
-     * @var string
-     */
-    public $formName = 'storeControl';
-
-    /**
-     * Write messages into the devlog?
-     *
-     * @var bool
-     */
-    public $writeDevLog = false;
-
-    /********************************
-     *
-     * Init / setup
-     *
-     ********************************/
-
-    /**
-     * Default constructor
-     */
-    public function __construct()
-    {
-        GeneralUtility::deprecationLog('Class ModuleSettings is deprecated since TYPO3 CMS 7 and will be removed with TYPO3 CMS 8');
-    }
-
-    /**
-     * Initializes the object
-     *
-     * @param string $prefix Prefix of MOD_SETTING array keys that should be stored
-     * @param array|string $storeList Additional names of keys of the MOD_SETTING array which should be stored (array or comma list)
-     * @return void
-     */
-    public function init($prefix = '', $storeList = '')
-    {
-        $this->prefix = $prefix;
-        $this->setStoreList($storeList);
-        $this->type = 'perm';
-        // Enable dev logging if set
-        if (!empty($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_modSettings.php']['writeDevLog'])) {
-            $this->writeDevLog = true;
-        }
-        if (TYPO3_DLOG) {
-            $this->writeDevLog = true;
-        }
-    }
-
-    /**
-     * Set session type to 'ses' which will store the settings data not permanently.
-     *
-     * @param string $type Default is 'ses'
-     * @return void
-     */
-    public function setSessionType($type = 'ses')
-    {
-        $this->type = $type;
-    }
-
-    /********************************
-     *
-     * Store list - which values should be stored
-     *
-     ********************************/
-    /**
-     * Set MOD_SETTINGS keys which should be stored
-     *
-     * @param array|string $storeList Add names of keys of the MOD_SETTING array which should be stored
-     * @return void
-     */
-    public function setStoreList($storeList)
-    {
-        $this->storeList = array();
-        $this->addToStoreList($storeList);
-    }
-
-    /**
-     * Add MOD_SETTINGS keys to the current list
-     *
-     * @param array|string $storeList Add names of keys of the MOD_SETTING array which should be stored
-     * @return void
-     */
-    public function addToStoreList($storeList)
-    {
-        $storeList = is_array($storeList) ? $storeList : GeneralUtility::trimExplode(',', $storeList, true);
-        $this->storeList = array_merge($this->storeList, $storeList);
-        if ($this->writeDevLog) {
-            GeneralUtility::devLog('Store list:' . implode(',', $this->storeList), __CLASS__, 0);
-        }
-    }
-
-    /**
-     * Add names of keys of the MOD_SETTING array by a prefix
-     *
-     * @param string $prefix Prefix of MOD_SETTING array keys that should be stored
-     * @return void
-     */
-    public function addToStoreListFromPrefix($prefix = '')
-    {
-        $prefix = $prefix ?: $this->prefix;
-        $prefix = preg_quote($prefix, '/');
-        foreach ($this->getModule()->MOD_SETTINGS as $key => $value) {
-            if (preg_match('/^' . $prefix . '/', $key)) {
-                $this->storeList[$key] = $key;
-            }
-        }
-        unset($this->storeList[$this->prefix . '_storedSettings']);
-        if ($this->writeDevLog) {
-            GeneralUtility::devLog('Store list:' . implode(',', $this->storeList), __CLASS__, 0);
-        }
-    }
-
-    /********************************
-     *
-     * Process storage array
-     *
-     ********************************/
-    /**
-     * Get the stored settings from MOD_SETTINGS and set them in $this->storedSettings
-     *
-     * @return void
-     */
-    public function initStorage()
-    {
-        $storedSettings = unserialize($this->getModule()->MOD_SETTINGS[$this->prefix . '_storedSettings']);
-        $this->storedSettings = $this->cleanupStorageArray($storedSettings);
-    }
-
-    /**
-     * Remove corrupted data entries from the stored settings array
-     *
-     * @param array $storedSettings The stored settings
-     * @return array Cleaned up stored settings
-     */
-    public function cleanupStorageArray($storedSettings)
-    {
-        $storedSettings = is_array($storedSettings) ? $storedSettings : array();
-        // Clean up the array
-        foreach ($storedSettings as $id => $sdArr) {
-            if (!is_array($sdArr)) {
-                unset($storedSettings[$id]);
-            } elseif (!is_array($sdArr['data'])) {
-                unset($storedSettings[$id]);
-            } elseif (!trim($sdArr['title'])) {
-                $storedSettings[$id]['title'] = '[no title]';
-            }
-        }
-        return $storedSettings;
-    }
-
-    /**
-     * Creates an entry for the stored settings array
-     * Collects data from MOD_SETTINGS selected by the storeList
-     *
-     * @param array $data Should work with data from _GP('storeControl'). This is ['title']: Title for the entry. ['desc']: A description text. Currently not used by this class
-     * @return array Entry for the stored settings array
-     */
-    public function compileEntry($data)
-    {
-        $storageData = array();
-        foreach ($this->storeList as $MS_key) {
-            $storageData[$MS_key] = $this->getModule()->MOD_SETTINGS[$MS_key];
-        }
-        $storageArr = array(
-            'title' => $data['title'],
-            'desc' => (string)$data['desc'],
-            'data' => $storageData,
-            'user' => null,
-            'tstamp' => $GLOBALS['EXEC_TIME']
-        );
-        $storageArr = $this->processEntry($storageArr);
-        return $storageArr;
-    }
-
-    /**
-     * Copies the stored data from entry $index to $writeArray which can be used to set MOD_SETTINGS
-     *
-     * @param mixed $storeIndex The entry key
-     * @param array $writeArray Preset data array. Will be overwritten by copied values.
-     * @return array Data array
-     */
-    public function getStoredData($storeIndex, $writeArray = array())
-    {
-        if ($this->storedSettings[$storeIndex]) {
-            foreach ($this->storeList as $k) {
-                $writeArray[$k] = $this->storedSettings[$storeIndex]['data'][$k];
-            }
-        }
-        return $writeArray;
-    }
-
-    /**
-     * Processing of the storage command LOAD, SAVE, REMOVE
-     *
-     * @param string $mconfName Name of the module to store the settings for. Default: $this->getModule()->MCONF['name'] (current module)
-     * @return string Storage message. Also set in $this->msg
-     */
-    public function processStoreControl($mconfName = '')
-    {
-        $this->initStorage();
-        $storeControl = GeneralUtility::_GP('storeControl');
-        $storeIndex = $storeControl['STORE'];
-        $msg = '';
-        $saveSettings = false;
-        $writeArray = array();
-        if (is_array($storeControl)) {
-            if ($this->writeDevLog) {
-                GeneralUtility::devLog('Store command: ' . GeneralUtility::arrayToLogString($storeControl), __CLASS__, 0);
-            }
-            // Processing LOAD
-            if ($storeControl['LOAD'] && $storeIndex) {
-                $writeArray = $this->getStoredData($storeIndex, $writeArray);
-                $saveSettings = true;
-                $msg = '\'' . $this->storedSettings[$storeIndex]['title'] . '\' preset loaded!';
-            } elseif ($storeControl['SAVE']) {
-                if (trim($storeControl['title'])) {
-                    // Get the data to store
-                    $newEntry = $this->compileEntry($storeControl);
-                    // Create an index for the storage array
-                    if (!$storeIndex) {
-                        $storeIndex = GeneralUtility::shortMD5($newEntry['title']);
-                    }
-                    // Add data to the storage array
-                    $this->storedSettings[$storeIndex] = $newEntry;
-                    $saveSettings = true;
-                    $msg = '\'' . $newEntry['title'] . '\' preset saved!';
-                } else {
-                    $msg = 'Please enter a name for the preset!';
-                }
-            } elseif ($storeControl['REMOVE'] and $storeIndex) {
-                // Removing entry
-                $msg = '\'' . $this->storedSettings[$storeIndex]['title'] . '\' preset entry removed!';
-                unset($this->storedSettings[$storeIndex]);
-                $saveSettings = true;
-            }
-            $this->msg = $msg;
-            if ($saveSettings) {
-                $this->writeStoredSetting($writeArray, $mconfName);
-            }
-        }
-        return $this->msg;
-    }
-
-    /**
-     * Write the current storage array and update MOD_SETTINGS
-     *
-     * @param array $writeArray Array of settings which should be overwrite current MOD_SETTINGS
-     * @param string $mconfName Name of the module to store the settings for. Default: $this->getModule()->MCONF['name'] (current module)
-     * @return void
-     */
-    public function writeStoredSetting($writeArray = array(), $mconfName = '')
-    {
-        // Making sure, index 0 is not set
-        unset($this->storedSettings[0]);
-        $this->storedSettings = $this->cleanupStorageArray($this->storedSettings);
-        $writeArray[$this->prefix . '_storedSettings'] = serialize($this->storedSettings);
-        $this->getModule()->MOD_SETTINGS = Utility\BackendUtility::getModuleData(
-            $this->getModule()->MOD_MENU,
-            $writeArray,
-            $mconfName ?: $this->getModule()->MCONF['name'],
-            $this->type
-        );
-        if ($this->writeDevLog) {
-            GeneralUtility::devLog('Settings stored:' . $this->msg, __CLASS__, 0);
-        }
-    }
-
-    /********************************
-     *
-     * GUI
-     *
-     ********************************/
-    /**
-     * Returns the storage control box
-     *
-     * @param string $showElements List of elemetns which should be shown: load,remove,save
-     * @param bool $useOwnForm If set the box is wrapped with own form tag
-     * @return string HTML code
-     */
-    public function getStoreControl($showElements = 'load,remove,save', $useOwnForm = true)
-    {
-        $showElements = GeneralUtility::trimExplode(',', $showElements, true);
-        $this->initStorage();
-        // Preset selector
-        $opt = array();
-        $opt[] = '<option value="0">   </option>';
-        foreach ($this->storedSettings as $id => $v) {
-            $opt[] = '<option value="' . $id . '">' . htmlspecialchars($v['title']) . '</option>';
-        }
-        $storedEntries = count($opt) > 1;
-        $codeTD = array();
-        $code = '';
-        // LOAD, REMOVE, but also show selector so you can overwrite an entry with SAVE
-        if ($storedEntries && !empty($showElements)) {
-            // Selector box
-            $onChange = 'document.forms[' . GeneralUtility::quoteJSvalue($this->formName) . '][\'storeControl[title]\'].value= this.options[this.selectedIndex].value!=0 ? this.options[this.selectedIndex].text : \'\';';
-            $code = '
-                                       <select name="storeControl[STORE]" onChange="' . htmlspecialchars($onChange) . '">
-                                       ' . implode('
-                                               ', $opt) . '
-                                       </select>';
-            // Load button
-            if (in_array('load', $showElements)) {
-                $code .= '
-                                       <input class="btn btn-default" type="submit" name="storeControl[LOAD]" value="Load" /> ';
-            }
-            // Remove button
-            if (in_array('remove', $showElements)) {
-                $code .= '
-                                       <input class="btn btn-default" type="submit" name="storeControl[REMOVE]" value="Remove" /> ';
-            }
-            $codeTD[] = '<td width="1%">Preset:</td>';
-            $codeTD[] = '<td nowrap="nowrap">' . $code . '&nbsp;&nbsp;</td>';
-        }
-        // SAVE
-        if (in_array('save', $showElements)) {
-            $onClick = !$storedEntries ? '' : 'if (document.forms[' . GeneralUtility::quoteJSvalue($this->formName) . '][\'storeControl[STORE]\'].options[document.forms[' . GeneralUtility::quoteJSvalue($this->formName) . '][\'storeControl[STORE]\'].selectedIndex].value<0) return confirm(\'Are you sure you want to overwrite the existing entry?\');';
-            $code = '<input name="storeControl[title]" value="" type="text" max="80" width="25"> ';
-            $code .= '<input class="btn btn-default" type="submit" name="storeControl[SAVE]" value="Save" onClick="' . htmlspecialchars($onClick) . '" />';
-            $codeTD[] = '<td nowrap="nowrap">' . $code . '</td>';
-        }
-        $codeTD = implode('
-                       ', $codeTD);
-        if (trim($code)) {
-            $code = '
-                       <!--
-                               Store control
-                       -->
-                       <table border="0" cellpadding="3" cellspacing="0" width="100%">
-                               <tr class="bgColor4">
-                               ' . $codeTD . '
-                               </tr>
-                       </table>
-                       ';
-        }
-        if ($this->msg) {
-            $code .= '
-                       <div><strong>' . htmlspecialchars($this->msg) . '</strong></div>';
-        }
-        if ($useOwnForm && trim($code)) {
-            $code = '
-               <form action="' . GeneralUtility::getIndpEnv('SCRIPT_NAME') . '" method="post" name="' . $this->formName . '" enctype="multipart/form-data">' . $code . '</form>';
-        }
-        return $code;
-    }
-
-    /********************************
-     *
-     * Misc
-     *
-     ********************************/
-    /**
-     * Processing entry for the stored settings array
-     * Can be overwritten by extended class
-     *
-     * @param array $storageArr Entry for the stored settings array
-     * @return array Entry for the stored settings array
-     */
-    public function processEntry($storageArr)
-    {
-        return $storageArr;
-    }
-
-    /**
-     * @return BaseScriptClass
-     */
-    protected function getModule()
-    {
-        return $GLOBALS['SOBE'];
-    }
-}
diff --git a/typo3/sysext/backend/Classes/View/LogoView.php b/typo3/sysext/backend/Classes/View/LogoView.php
deleted file mode 100644 (file)
index cc6ca8e..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\View;
-
-/*
- * 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!
- */
-
-/**
- * class to render the TYPO3 logo in the backend
- * @deprecated since TYPO3 CMS 7, will be removed in TYPO3 CMS 8 - change the logic of the logo directly in the corresponding Fluid template
- */
-class LogoView
-{
-    /**
-     * @var string
-     */
-    protected $logo = '';
-
-    /**
-     * Constructor
-     * @deprecated since TYPO3 CMS 7, will be removed in TYPO3 CMS 8 - change the logic of the logo directly in the corresponding Fluid template
-     */
-    public function __construct()
-    {
-        \TYPO3\CMS\Core\Utility\GeneralUtility::logDeprecatedFunction();
-        $this->logo = 'sysext/backend/Resources/Public/Images/typo3-topbar@2x.png';
-    }
-
-    /**
-     * renders the actual logo code
-     *
-     * @return string Logo html code snippet to use in the backend
-     */
-    public function render()
-    {
-        $imgInfo = getimagesize(PATH_site . TYPO3_mainDir . $this->logo);
-        $imgUrl = $this->logo;
-
-        // Overwrite with custom logo
-        if ($GLOBALS['TBE_STYLES']['logo']) {
-            $imgInfo = @getimagesize(\TYPO3\CMS\Core\Utility\GeneralUtility::resolveBackPath((PATH_typo3 . $GLOBALS['TBE_STYLES']['logo']), 3));
-            $imgUrl = $GLOBALS['TBE_STYLES']['logo'];
-        }
-
-        // High-res?
-        $width = $imgInfo[0];
-        $height = $imgInfo[1];
-
-        if (strpos($imgUrl, '@2x.')) {
-            $width = $width/2;
-            $height = $height/2;
-        }
-
-        $logoTag = '<img src="' . $imgUrl . '" width="' . $width . '" height="' . $height . '" title="TYPO3 Content Management System" alt="" />';
-        return '<a class="typo3-topbar-site-logo" href="' . htmlspecialchars(TYPO3_URL_GENERAL) . '" target="_blank">' . $logoTag . '</a> <span class="typo3-topbar-site-name">' . htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']) . ' [' . TYPO3_version . ']</span>';
-    }
-
-    /**
-     * Sets the logo
-     *
-     * @param string $logo Path to logo file as seen from typo3/
-     * @throws \InvalidArgumentException
-     */
-    public function setLogo($logo)
-    {
-        if (!is_string($logo)) {
-            throw new \InvalidArgumentException('parameter $logo must be of type string', 1194041104);
-        }
-        $this->logo = $logo;
-    }
-}
diff --git a/typo3/sysext/backend/Classes/View/ModuleMenuView.php b/typo3/sysext/backend/Classes/View/ModuleMenuView.php
deleted file mode 100644 (file)
index 304fcad..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\View;
-
-/*
- * 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\Utility\BackendUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * class to render the TYPO3 backend menu for the modules
- */
-class ModuleMenuView
-{
-    /**
-     * Module loading object
-     *
-     * @var \TYPO3\CMS\Backend\Module\ModuleLoader
-     */
-    protected $moduleLoader;
-
-    /**
-     * @var string
-     */
-    protected $backPath;
-
-    /**
-     * @var bool
-     */
-    protected $linkModules;
-
-    /**
-     * @var array
-     */
-    protected $loadedModules;
-
-    /**
-     * Constructor, initializes several variables
-     * @deprecated since TYPO3 CMS 7, will be removed in TYPO3 CMS 8, not in use, as everything can be done via the ModuleMenuRepository directly
-     */
-    public function __construct()
-    {
-        GeneralUtility::logDeprecatedFunction();
-        if (TYPO3_REQUESTTYPE & TYPO3_REQUESTTYPE_AJAX) {
-            $GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_misc.xlf');
-        }
-        $this->backPath = '';
-        $this->linkModules = true;
-        // Loads the backend modules available for the logged in user.
-        $this->moduleLoader = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Module\ModuleLoader::class);
-        $this->moduleLoader->observeWorkspaces = true;
-        $this->moduleLoader->load($GLOBALS['TBE_MODULES']);
-        $this->loadedModules = $this->moduleLoader->modules;
-    }
-
-    /**
-     * sets the path back to /typo3/
-     *
-     * @param string $backPath Path back to /typo3/
-     * @throws \InvalidArgumentException
-     * @return void
-     */
-    public function setBackPath($backPath)
-    {
-        if (!is_string($backPath)) {
-            throw new \InvalidArgumentException('parameter $backPath must be of type string', 1193315266);
-        }
-        $this->backPath = $backPath;
-    }
-
-    /**
-     * loads the collapse states for the main modules from user's configuration (uc)
-     *
-     * @return array Collapse states
-     */
-    protected function getCollapsedStates()
-    {
-        $collapsedStates = array();
-        if ($GLOBALS['BE_USER']->uc['moduleData']['moduleMenu']) {
-            $collapsedStates = $GLOBALS['BE_USER']->uc['moduleData']['moduleMenu'];
-        }
-        return $collapsedStates;
-    }
-
-    /**
-     * ModuleMenu Store loading data
-     *
-     * @param array $params
-     * @param \TYPO3\CMS\Core\Http\AjaxRequestHandler $ajaxObj
-     * @return array
-     */
-    public function getModuleData($params, $ajaxObj)
-    {
-        $data = array('success' => true, 'root' => array());
-        $rawModuleData = $this->getRawModuleData();
-        $index = 0;
-        $dummyLink = BackendUtility::getModuleUrl('dummy');
-        foreach ($rawModuleData as $moduleKey => $moduleData) {
-            $key = substr($moduleKey, 8);
-            $num = count($data['root']);
-            if ($moduleData['link'] != $dummyLink || $moduleData['link'] == $dummyLink && is_array($moduleData['subitems'])) {
-                $data['root'][$num]['key'] = $key;
-                $data['root'][$num]['menuState'] = $GLOBALS['BE_USER']->uc['moduleData']['menuState'][$moduleKey];
-                $data['root'][$num]['label'] = $moduleData['title'];
-                $data['root'][$num]['subitems'] = is_array($moduleData['subitems']) ? count($moduleData['subitems']) : 0;
-                if ($moduleData['link'] && $this->linkModules) {
-                    $data['root'][$num]['link'] = 'top.goToModule(' . GeneralUtility::quoteJSvalue($moduleData['name']) . ')';
-                }
-                // Traverse submodules
-                if (is_array($moduleData['subitems'])) {
-                    foreach ($moduleData['subitems'] as $subKey => $subData) {
-                        $data['root'][$num]['sub'][] = array(
-                            'name' => $subData['name'],
-                            'description' => $subData['description'],
-                            'label' => $subData['title'],
-                            'icon' => $subData['icon']['filename'],
-                            'navframe' => $subData['parentNavigationFrameScript'],
-                            'link' => $subData['link'],
-                            'originalLink' => $subData['originalLink'],
-                            'index' => $index++,
-                            'navigationFrameScript' => $subData['navigationFrameScript'],
-                            'navigationFrameScriptParam' => $subData['navigationFrameScriptParam'],
-                            'navigationComponentId' => $subData['navigationComponentId']
-                        );
-                    }
-                }
-            }
-        }
-        if ($ajaxObj) {
-            $ajaxObj->setContent($data);
-            $ajaxObj->setContentFormat('jsonbody');
-        } else {
-            return $data;
-        }
-    }
-
-    /**
-     * Returns the loaded modules
-     *
-     * @return array Array of loaded modules
-     */
-    public function getLoadedModules()
-    {
-        return $this->loadedModules;
-    }
-
-    /**
-     * saves the menu's toggle state in the backend user's uc
-     *
-     * @param array $params Array of parameters from the AJAX interface, currently unused
-     * @param \TYPO3\CMS\Core\Http\AjaxRequestHandler $ajaxObj Object of type AjaxRequestHandler
-     * @return void
-     */
-    public function saveMenuState($params, $ajaxObj)
-    {
-        $menuItem = GeneralUtility::_POST('menuid');
-        $state = GeneralUtility::_POST('state') === 'true' ? 1 : 0;
-        $GLOBALS['BE_USER']->uc['moduleData']['menuState'][$menuItem] = $state;
-        $GLOBALS['BE_USER']->writeUC();
-    }
-
-    /**
-     * Reads User configuration from options.hideModules and removes
-     * modules from $this->loadedModules accordingly.
-     *
-     * @return void
-     */
-    protected function unsetHiddenModules()
-    {
-        // Hide modules if set in userTS.
-        $hiddenModules = $GLOBALS['BE_USER']->getTSConfig('options.hideModules');
-        if (!empty($hiddenModules['value'])) {
-            $hiddenMainModules = GeneralUtility::trimExplode(',', $hiddenModules['value'], true);
-            foreach ($hiddenMainModules as $hiddenMainModule) {
-                unset($this->loadedModules[$hiddenMainModule]);
-            }
-        }
-
-        // Hide sub-modules if set in userTS.
-        if (!empty($hiddenModules['properties']) && is_array($hiddenModules['properties'])) {
-            foreach ($hiddenModules['properties'] as $mainModuleName => $subModules) {
-                $hiddenSubModules = GeneralUtility::trimExplode(',', $subModules, true);
-                foreach ($hiddenSubModules as $hiddenSubModule) {
-                    unset($this->loadedModules[$mainModuleName]['sub'][$hiddenSubModule]);
-                }
-            }
-        }
-    }
-
-    /**
-     * gets the raw module data
-     *
-     * @return array Multi dimension array with module data
-     */
-    public function getRawModuleData()
-    {
-        $modules = array();
-
-        // Unset modules that are meant to be hidden from the menu.
-        $this->unsetHiddenModules();
-        $dummyScript = BackendUtility::getModuleUrl('dummy');
-        foreach ($this->loadedModules as $moduleName => $moduleData) {
-            $moduleLink = '';
-            if (!is_array($moduleData['sub'])) {
-                $moduleLink = $moduleData['script'];
-            }
-            $moduleLink = GeneralUtility::resolveBackPath($moduleLink);
-            $moduleKey = 'modmenu_' . $moduleName;
-            $moduleIcon = $this->getModuleIcon($moduleKey);
-            $modules[$moduleKey] = array(
-                'name' => $moduleName,
-                'title' => $GLOBALS['LANG']->moduleLabels['tabs'][$moduleName . '_tab'],
-                'onclick' => 'top.goToModule(' . GeneralUtility::quoteJSvalue($moduleName) . ');',
-                'icon' => $moduleIcon,
-                'link' => $moduleLink,
-                'description' => $GLOBALS['LANG']->moduleLabels['labels'][$moduleKey . 'label']
-            );
-            if (!is_array($moduleData['sub']) && $moduleData['script'] != $dummyScript) {
-                // Work around for modules with own main entry, but being self the only submodule
-                $modules[$moduleKey]['subitems'][$moduleKey] = array(
-                    'name' => $moduleName,
-                    'title' => $GLOBALS['LANG']->moduleLabels['tabs'][$moduleName . '_tab'],
-                    'onclick' => 'top.goToModule(' . GeneralUtility::quoteJSvalue($moduleName) . ');',
-                    'icon' => $this->getModuleIcon($moduleName . '_tab'),
-                    'link' => $moduleLink,
-                    'originalLink' => $moduleLink,
-                    'description' => $GLOBALS['LANG']->moduleLabels['labels'][$moduleKey . 'label'],
-                    'navigationFrameScript' => null,
-                    'navigationFrameScriptParam' => null,
-                    'navigationComponentId' => null
-                );
-            } elseif (is_array($moduleData['sub'])) {
-                foreach ($moduleData['sub'] as $submoduleName => $submoduleData) {
-                    if (isset($submoduleData['script'])) {
-                        $submoduleLink = GeneralUtility::resolveBackPath($submoduleData['script']);
-                    } else {
-                        $submoduleLink = BackendUtility::getModuleUrl($submoduleData['name']);
-                    }
-                    $submoduleKey = $moduleName . '_' . $submoduleName . '_tab';
-                    $submoduleIcon = $this->getModuleIcon($submoduleKey);
-                    $submoduleDescription = $GLOBALS['LANG']->moduleLabels['labels'][$submoduleKey . 'label'];
-                    $originalLink = $submoduleLink;
-                    $navigationFrameScript = $submoduleData['navFrameScript'];
-                    $modules[$moduleKey]['subitems'][$submoduleKey] = array(
-                        'name' => $moduleName . '_' . $submoduleName,
-                        'title' => $GLOBALS['LANG']->moduleLabels['tabs'][$submoduleKey],
-                        'onclick' => 'top.goToModule(' . GeneralUtility::quoteJSvalue($moduleName . '_' . $submoduleName) . ');',
-                        'icon' => $submoduleIcon,
-                        'link' => $submoduleLink,
-                        'originalLink' => $originalLink,
-                        'description' => $submoduleDescription,
-                        'navigationFrameScript' => $navigationFrameScript,
-                        'navigationFrameScriptParam' => $submoduleData['navFrameScriptParam'],
-                        'navigationComponentId' => $submoduleData['navigationComponentId']
-                    );
-                    // if the main module has a navframe script, inherit to the submodule,
-                    // but only if it is not disabled explicitly (option is set to FALSE)
-                    if ($moduleData['navFrameScript'] && $submoduleData['inheritNavigationComponentFromMainModule'] !== false) {
-                        $modules[$moduleKey]['subitems'][$submoduleKey]['parentNavigationFrameScript'] = $moduleData['navFrameScript'];
-                    }
-                }
-            }
-        }
-        return $modules;
-    }
-
-    /**
-     * gets the module icon and its size
-     *
-     * @param string $moduleKey Module key
-     * @return array Icon data array with 'filename', 'size', and 'html'
-     */
-    protected function getModuleIcon($moduleKey)
-    {
-        $icon = array(
-            'filename' => '',
-            'size' => '',
-            'title' => '',
-            'html' => ''
-        );
-
-        if (!empty($GLOBALS['LANG']->moduleLabels['tabs_images'][$moduleKey])) {
-            $imageReference = $GLOBALS['LANG']->moduleLabels['tabs_images'][$moduleKey];
-            $iconFileRelative = $this->getModuleIconRelative($imageReference);
-            if (!empty($iconFileRelative)) {
-                $iconTitle = $GLOBALS['LANG']->moduleLabels['tabs'][$moduleKey];
-                $iconFileAbsolute = $this->getModuleIconAbsolute($imageReference);
-                $iconSizes = @getimagesize($iconFileAbsolute);
-                $icon['filename'] = $iconFileRelative;
-                $icon['size'] = $iconSizes[3];
-                $icon['title'] = htmlspecialchars($iconTitle);
-                $icon['html'] = '<img src="' . $iconFileRelative . '" ' . $iconSizes[3] . ' title="' . htmlspecialchars($iconTitle) . '" alt="' . htmlspecialchars($iconTitle) . '" />';
-            }
-        }
-        return $icon;
-    }
-
-    /**
-     * Returns the filename readable for the script from PATH_typo3.
-     * That means absolute names are just returned while relative names are
-     * prepended with the path pointing back to typo3/ dir
-     *
-     * @param string $iconFilename Icon filename
-     * @return string Icon filename with absolute path
-     * @see getModuleIconRelative()
-     */
-    protected function getModuleIconAbsolute($iconFilename)
-    {
-        if (!GeneralUtility::isAbsPath($iconFilename)) {
-            $iconFilename = $this->backPath . $iconFilename;
-        }
-        return $iconFilename;
-    }
-
-    /**
-     * Returns relative path to the icon filename for use in img-tags
-     *
-     * @param string $iconFilename Icon filename
-     * @return string Icon filename with relative path
-     * @see getModuleIconAbsolute()
-     */
-    protected function getModuleIconRelative($iconFilename)
-    {
-        if (GeneralUtility::isAbsPath($iconFilename)) {
-            $iconFilename = '../' . \TYPO3\CMS\Core\Utility\PathUtility::stripPathSitePrefix($iconFilename);
-        }
-        return $this->backPath . $iconFilename;
-    }
-
-    /**
-     * Appends a '?' if there is none in the string already
-     *
-     * @param string $link Link URL
-     * @return string Link URl appended with ? if there wasn't one
-     */
-    protected function appendQuestionmarkToLink($link)
-    {
-        if (!strstr($link, '?')) {
-            $link .= '?';
-        }
-        return $link;
-    }
-
-    /**
-     * renders the logout button form
-     *
-     * @return string Html code snippet displaying the logout button
-     */
-    public function renderLogoutButton()
-    {
-        $buttonLabel = $GLOBALS['BE_USER']->user['ses_backuserid'] ? 'LLL:EXT:lang/locallang_core.xlf:buttons.exit' : 'LLL:EXT:lang/locallang_core.xlf:buttons.logout';
-        $buttonForm = '
-               <form action="' . htmlspecialchars(BackendUtility::getModuleUrl('logout')) . '" target="_top">
-                       <input class="btn btn-default" type="submit" id="logout-submit-button" value="' . $GLOBALS['LANG']->sL($buttonLabel, true) . '" />
-               </form>';
-        return $buttonForm;
-    }
-
-    /**
-     * turns linking of modules on or off
-     *
-     * @param bool $linkModules Status for linking modules with a-tags, set to FALSE to turn lining off
-     * @throws \InvalidArgumentException
-     * @return void
-     */
-    public function setLinkModules($linkModules)
-    {
-        if (!is_bool($linkModules)) {
-            throw new \InvalidArgumentException('parameter $linkModules must be of type bool', 1193326558);
-        }
-        $this->linkModules = $linkModules;
-    }
-}
diff --git a/typo3/sysext/backend/Classes/View/PageLayout/Extdirect/ExtdirectPageCommands.php b/typo3/sysext/backend/Classes/View/PageLayout/Extdirect/ExtdirectPageCommands.php
deleted file mode 100644 (file)
index fbe111d..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\View\PageLayout\ExtDirect;
-
-/*
- * 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\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\MathUtility;
-
-/**
- * Commands for the Page module
- * @deprecated since TYPO3 CMS 7, this file will be removed in TYPO3 CMS 8, as Drag&Drop does this
- * logic now directly and calls DataHandler via AJAX directly.
- */
-class ExtdirectPageCommands
-{
-    /**
-     * Move content element to a position and/or column.
-     *
-     * Function is called from the Page module javascript.
-     *
-     * @param int $sourceElement  Id attribute of content element which must be moved
-     * @param string $destinationColumn Column to move the content element to
-     * @param int $destinationElement Id attribute of the element it was dropped on
-     * @return array
-     * @deprecated since TYPO3 CMS 7, will be removed in TYPO3 CMS 8
-     */
-    public function moveContentElement($sourceElement, $destinationColumn, $destinationElement)
-    {
-        GeneralUtility::logDeprecatedFunction();
-        $moveElementUid = 0;
-        $afterElementUid = -1;
-        $targetColumn = 0;
-        $targetPage = 0;
-        list($_, $table, $uid) = GeneralUtility::trimExplode('-', $sourceElement);
-        if ($table === 'tt_content' && MathUtility::canBeInterpretedAsInteger($uid)) {
-            $moveElementUid = (int)$uid;
-        }
-        list($_, $table, $uid) = GeneralUtility::trimExplode('-', $destinationElement);
-        if ($table === 'tt_content' && MathUtility::canBeInterpretedAsInteger($uid)) {
-            $afterElementUid = (int)$uid;
-        } else {
-            // it's dropped in an empty column
-            $afterElementUid = -1;
-        }
-        list($prefix, $column, $prefix2, $page, $_) = GeneralUtility::trimExplode('-', $destinationColumn);
-        if ($prefix === 'colpos' && MathUtility::canBeInterpretedAsInteger($column) &&
-                $prefix2 === 'page' && MathUtility::canBeInterpretedAsInteger($page)
-        ) {
-            $targetColumn = (int)$column;
-            $targetPage = (int)$page;
-        }
-        // move to empty column
-        if ($afterElementUid === -1) {
-            $action['cmd']['tt_content'][$moveElementUid]['move'] = $targetPage;
-        } else {
-            $action['cmd']['tt_content'][$moveElementUid]['move'] = -$afterElementUid;
-        }
-
-        $action['data']['tt_content'][$moveElementUid]['colPos'] = $targetColumn;
-
-        GeneralUtility::devLog(
-            'Dragdrop',
-            'core',
-            -1,
-            array(
-                'action' => $action,
-                'sourceElement' => $sourceElement,
-                'destinationColumn' => $destinationColumn,
-                'destinationElement' => $destinationElement,
-            )
-        );
-        /** @var $tce \TYPO3\CMS\Core\DataHandling\DataHandler */
-        $tce = GeneralUtility::makeInstance(\TYPO3\CMS\Core\DataHandling\DataHandler::class);
-        $tce->stripslashes_values = 0;
-        $tce->start($action['data'], $action['cmd']);
-        $tce->process_datamap();
-        $tce->process_cmdmap();
-
-        return array('success' => true);
-    }
-}
diff --git a/typo3/sysext/backend/Classes/View/ThumbnailView.php b/typo3/sysext/backend/Classes/View/ThumbnailView.php
deleted file mode 100644 (file)
index 838dbb2..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\View;
-
-/*
- * 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\Core\Resource\File;
-use TYPO3\CMS\Core\Resource\ResourceFactory;
-use TYPO3\CMS\Core\Type\Bitmask\Permission;
-use TYPO3\CMS\Core\Utility\CommandUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\MathUtility;
-
-/**
- * Class for generating a thumbnail from the input parameters given to the script
- *
- * Input GET var, &file: relative or absolute reference to an imagefile. WILL be validated against PATH_site / lockRootPath
- * Input GET var, &size: integer-values defining size of thumbnail, format '[int]' or '[int]x[int]'
- *
- * Relative paths MUST BE the first two characters ONLY: eg: '../dir/file.gif', otherwise it is expect to be absolute
- * @deprecated since TYPO3 CMS 7, will be removed with TYPO3 CMS 8, use the corresponding Resource objects and Processing functionality
- */
-class ThumbnailView
-{
-    /**
-     * The output directory of temporary files in PATH_site
-     *
-     * @var string
-     */
-    public $outdir = 'typo3temp/';
-
-    /**
-     * @var string
-     */
-    public $output = '';
-
-    /**
-     * @var string
-     */
-    public $sizeDefault = '64x64';
-
-    /**
-     * Coming from $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
-     *
-     * @var string
-     */
-    public $imageList;
-
-    /**
-     * will hold the file Object
-     *
-     * @var \TYPO3\CMS\Core\Resource\File
-     */
-    public $image;
-
-    /**
-     * Holds the input size (GET: size)
-     *
-     * @var string
-     */
-    public $size;
-
-    /**
-     * Last modification time of the supplied file
-     *
-     * @var int
-     */
-    public $mTime = 0;
-
-    /**
-     * Initialize; reading parameters with GPvar and checking file path
-     *
-     * @return void
-     * @throws \InvalidArgumentException
-     * @throws \RuntimeException
-     * @throws \TYPO3\CMS\Core\Resource\Exception\FileDoesNotExistException
-     */
-    public function init()
-    {
-        GeneralUtility::deprecationLog('The class ThumbnailView is deprecated since TYPO3 CMS 7 and will be removed with TYPO3 CMS 8, use the corresponding Resource objects and Processing functionality');
-        // Setting GPvars:
-        // Only needed for MD5 sum calculation of backwards-compatibility uploads/ files thumbnails.
-        $size = GeneralUtility::_GP('size');
-        $filePathOrCombinedFileIdentifier = rawurldecode(GeneralUtility::_GP('file'));
-        $md5sum = GeneralUtility::_GP('md5sum');
-        // Image extension list is set:
-        // valid extensions. OBS: No spaces in the list, all lowercase...
-        $this->imageList = $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'];
-        // Check if we got a combined file identifier of the form storageUid:fileIdentifer.
-        // We need to distinguish it from absolute Windows paths by cbecking for an integer as first part.
-        $parts = GeneralUtility::trimExplode(':', $filePathOrCombinedFileIdentifier);
-        // Best case: we get a sys_file UID
-        if (!empty($filePathOrCombinedFileIdentifier) && MathUtility::canBeInterpretedAsInteger($filePathOrCombinedFileIdentifier)) {
-            /** @var File $filePathOrCombinedFileIdentifier */
-            $fileObject = ResourceFactory::getInstance()->getFileObject($filePathOrCombinedFileIdentifier);
-        } elseif (count($parts) <= 1 || !MathUtility::canBeInterpretedAsInteger($parts[0])) {
-            // @todo Historically, the input parameter could also be an absolute path. This should be supported again to stay compatible.
-            // We assume the FilePath to be a relative file path (as in backwards compatibility mode)
-            $relativeFilePath = $filePathOrCombinedFileIdentifier;
-            // The incoming relative path is relative to the typo3/ directory, but we need it relative to PATH_site. This is corrected here:
-            if (substr($relativeFilePath, 0, 3) == '../') {
-                $relativeFilePath = substr($relativeFilePath, 3);
-            } else {
-                $relativeFilePath = 'typo3/' . $relativeFilePath;
-            }
-            $relativeFilePath = ltrim($relativeFilePath, '/');
-            $mTime = 0;
-            // Checking for backpath and double slashes + the thumbnail can be made from files which are in the PATH_site OR the lockRootPath only!
-            if (GeneralUtility::isAllowedAbsPath(PATH_site . $relativeFilePath)) {
-                $mTime = filemtime(PATH_site . $relativeFilePath);
-            }
-            if (strstr($relativeFilePath, '../') !== false) {
-                // Maybe this could be relaxed to not throw an error as long as the path is still within PATH_site
-                $this->errorGif('File path', 'must not contain', '"../"');
-            }
-            if ($relativeFilePath && file_exists(PATH_site . $relativeFilePath)) {
-                // Check file extension:
-                $reg = array();
-                if (preg_match('/(.*)\\.([^\\.]*$)/', $relativeFilePath, $reg)) {
-                    $ext = strtolower($reg[2]);
-                    $ext = $ext == 'jpeg' ? 'jpg' : $ext;
-                    if (!GeneralUtility::inList($this->imageList, $ext)) {
-                        $this->errorGif('Not imagefile!', $ext, basename($relativeFilePath));
-                    }
-                } else {
-                    $this->errorGif('Not imagefile!', 'No ext!', basename($relativeFilePath));
-                }
-            } else {
-                $this->errorGif('Input file not found.', 'not found in thumbs.php', basename($relativeFilePath));
-            }
-            // Do an MD5 check to prevent viewing of images without permission
-            $OK = false;
-            if ($mTime) {
-                // Always use the absolute path for this check!
-                $check = basename($relativeFilePath) . ':' . $mTime . ':' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'];
-                if (GeneralUtility::shortMD5($check) === (string)$md5sum) {
-                    $OK = true;
-                }
-            }
-            $combinedIdentifier = '0:' . $relativeFilePath;
-        } else {
-            $combinedIdentifier = $filePathOrCombinedFileIdentifier;
-            $OK = false;
-        }
-        if (empty($fileObject)) {
-            $fileObject = ResourceFactory::getInstance()->getFileObjectFromCombinedIdentifier($combinedIdentifier);
-        }
-        if (empty($OK)) {
-            $OK = $fileObject !== null && $fileObject->checkActionPermission('read') && $fileObject->calculateChecksum() == $md5sum;
-        }
-        if ($OK) {
-            $this->image = $fileObject;
-            $this->size = $size;
-        } else {
-            // Hide the path to the document root;
-            throw new \RuntimeException('TYPO3 Fatal Error: The requested image does not exist and/or MD5 checksum did not match. If the target file exists and its file name contains special characters, the setting of $TYPO3_CONF_VARS[SYS][systemLocale] might be wrong.', 1270853950);
-        }
-    }
-
-    /**
-     * Create the thumbnail
-     * Will exit before return if all is well.
-     *
-     * @return void
-     */
-    public function main()
-    {
-        // Clean output buffer to ensure no extraneous output exists
-        ob_clean();
-        // If file exists, we make a thumbnail of the file.
-        if (is_object($this->image)) {
-            // Check file extension:
-            if ($this->image->getExtension() == 'ttf') {
-                // Make font preview... (will not return)
-                $this->fontGif($this->image);
-            } elseif ($this->image->getType() != File::FILETYPE_IMAGE && !GeneralUtility::inList($GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'], $this->image->getExtension())) {
-                $this->errorGif('Not imagefile!', 'No ext!', $this->image->getName());
-            }
-            // ... so we passed the extension test meaning that we are going to make a thumbnail here:
-            // default
-            if (!$this->size) {
-                $this->size = $this->sizeDefault;
-            }
-            // I added extra check, so that the size input option could not be fooled to pass other values.
-            // That means the value is exploded, evaluated to an integer and the imploded to [value]x[value].
-            // Furthermore you can specify: size=340 and it'll be translated to 340x340.
-            // explodes the input size (and if no "x" is found this will add size again so it is the same for both dimensions)
-            $sizeParts = explode('x', $this->size . 'x' . $this->size);
-            // Cleaning it up, only two parameters now.
-            $sizeParts = array(MathUtility::forceIntegerInRange($sizeParts[0], 1, 1000), MathUtility::forceIntegerInRange($sizeParts[1], 1, 1000));
-            // Imploding the cleaned size-value back to the internal variable
-            $this->size = implode('x', $sizeParts);
-            // Getting max value
-            $sizeMax = max($sizeParts);
-            // Init
-            $outpath = PATH_site . $this->outdir;
-            // Should be - ? 'png' : 'gif' - , but doesn't work (ImageMagick prob.?)
-            // René: png work for me
-            $thmMode = MathUtility::forceIntegerInRange($GLOBALS['TYPO3_CONF_VARS']['GFX']['thumbnails_png'], 0);
-            $outext = $this->image->getExtension() != 'jpg' || $thmMode & Permission::PAGE_EDIT ? ($thmMode & 1 ? 'png' : 'gif') : 'jpg';
-            $outfile = 'tmb_' . substr(md5(($this->image->getName() . $this->mtime . $this->size)), 0, 10) . '.' . $outext;
-            $this->output = $outpath . $outfile;
-            if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['im']) {
-                // If thumbnail does not exist, we generate it
-                if (!file_exists($this->output)) {
-                    $parameters = '-sample ' . $this->size . ' ' . CommandUtility::escapeShellArgument($this->image->getForLocalProcessing(false)) . '[0] ' . CommandUtility::escapeShellArgument($this->output);
-                    $cmd = GeneralUtility::imageMagickCommand('convert', $parameters);
-                    \TYPO3\CMS\Core\Utility\CommandUtility::exec($cmd);
-                    if (!file_exists($this->output)) {
-                        $this->errorGif('No thumb', 'generated!', $this->image->getName());
-                    } else {
-                        GeneralUtility::fixPermissions($this->output);
-                    }
-                }
-                // The thumbnail is read and output to the browser
-                if ($fd = @fopen($this->output, 'rb')) {
-                    $fileModificationTime = filemtime($this->output);
-                    header('Content-Type: image/' . ($outext === 'jpg' ? 'jpeg' : $outext));
-                    header('Last-Modified: ' . date('r', $fileModificationTime));
-                    header('ETag: ' . md5($this->output) . '-' . $fileModificationTime);
-                    // Expiration time is chosen arbitrary to 1 month
-                    header('Expires: ' . date('r', ($fileModificationTime + 30 * 24 * 60 * 60)));
-                    fpassthru($fd);
-                    fclose($fd);
-                } else {
-                    $this->errorGif('Read problem!', '', $this->output);
-                }
-            } else {
-                die;
-            }
-        } else {
-            $this->errorGif('No valid', 'inputfile!', basename($this->image));
-        }
-    }
-
-    /***************************
-     *
-     * OTHER FUNCTIONS:
-     *
-     ***************************/
-    /**
-     * Creates error image based on gfx/notfound_thumb.png
-     * Requires GD lib enabled, otherwise it will exit with the three textstrings outputted as text.
-     * Outputs the image stream to browser and exits!
-     *
-     * @param string $l1 Text line 1
-     * @param string $l2 Text line 2
-     * @param string $l3 Text line 3
-     * @return void
-     */
-    public function errorGif($l1, $l2, $l3)
-    {
-        if (!$GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib']) {
-            throw new \RuntimeException('TYPO3 Fatal Error: No gdlib. ' . $l1 . ' ' . $l2 . ' ' . $l3, 1270853954);
-        }
-        // Creates the basis for the error image
-        $basePath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('core') . 'Resources/Public/Images/';
-        if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png']) {
-            header('Content-type: image/png');
-            $im = imagecreatefrompng($basePath . 'NotFound.png');
-        } else {
-            header('Content-type: image/gif');
-            $im = imagecreatefromgif($basePath . 'NotFound.gif');
-        }
-        // Sets background color and print color.
-        $white = imageColorAllocate($im, 255, 255, 255);
-        $black = imageColorAllocate($im, 0, 0, 0);
-        // Prints the text strings with the build-in font functions of GD
-        $x = 0;
-        $font = 0;
-        if ($l1) {
-            imagefilledrectangle($im, $x, 9, 56, 16, $white);
-            imageString($im, $font, $x, 9, $l1, $black);
-        }
-        if ($l2) {
-            imagefilledrectangle($im, $x, 19, 56, 26, $white);
-            imageString($im, $font, $x, 19, $l2, $black);
-        }
-        if ($l3) {
-            imagefilledrectangle($im, $x, 29, 56, 36, $white);
-            imageString($im, $font, $x, 29, substr($l3, -14), $black);
-        }
-        // Outputting the image stream and exit
-        if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png']) {
-            imagePng($im);
-        } else {
-            imageGif($im);
-        }
-        imagedestroy($im);
-        die;
-    }
-
-    /**
-     * Creates a font-preview thumbnail.
-     * This means a PNG/GIF file with the text "AaBbCc...." set with the font-file given as input and in various sizes to show how the font looks
-     * Requires GD lib enabled.
-     * Outputs the image stream to browser and exits!
-     *
-     * @param string $font The filepath to the font file (absolute, probably)
-     * @return void
-     */
-    public function fontGif($font)
-    {
-        if (!$GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib']) {
-            throw new \RuntimeException('TYPO3 Fatal Error: No gdlib.', 1270853953);
-        }
-        // Create image and set background color to white.
-        $im = imageCreate(250, 76);
-        $white = imageColorAllocate($im, 255, 255, 255);
-        $col = imageColorAllocate($im, 0, 0, 0);
-        // The test string and offset in x-axis.
-        $string = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzÆæØøÅåÄäÖöÜüß';
-        $x = 13;
-        // Print (with non-ttf font) the size displayed
-        imagestring($im, 1, 0, 2, '10', $col);
-        imagestring($im, 1, 0, 15, '12', $col);
-        imagestring($im, 1, 0, 30, '14', $col);
-        imagestring($im, 1, 0, 47, '18', $col);
-        imagestring($im, 1, 0, 68, '24', $col);
-        // Print with ttf-font the test string
-        imagettftext($im, GeneralUtility::freetypeDpiComp(10), 0, $x, 8, $col, $font, $string);
-        imagettftext($im, GeneralUtility::freetypeDpiComp(12), 0, $x, 21, $col, $font, $string);
-        imagettftext($im, GeneralUtility::freetypeDpiComp(14), 0, $x, 36, $col, $font, $string);
-        imagettftext($im, GeneralUtility::freetypeDpiComp(18), 0, $x, 53, $col, $font, $string);
-        imagettftext($im, GeneralUtility::freetypeDpiComp(24), 0, $x, 74, $col, $font, $string);
-        // Output PNG or GIF based on $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png']
-        if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png']) {
-            header('Content-type: image/png');
-            imagePng($im);
-        } else {
-            header('Content-type: image/gif');
-            imageGif($im);
-        }
-        imagedestroy($im);
-        die;
-    }
-}
diff --git a/typo3/sysext/backend/Tests/Unit/Module/ModuleControllerTest.php b/typo3/sysext/backend/Tests/Unit/Module/ModuleControllerTest.php
deleted file mode 100644 (file)
index 3235693..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\Tests\Unit\Module;
-
-/*
- * 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!
- */
-
-/**
- * Test case
- */
-class ModuleControllerTest extends \TYPO3\CMS\Core\Tests\UnitTestCase
-{
-    /**
-     * @var \TYPO3\CMS\Backend\Module\ModuleController|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface
-     */
-    protected $moduleController;
-
-    protected function setUp()
-    {
-        $this->moduleController = $this->getAccessibleMock(\TYPO3\CMS\Backend\Module\ModuleController::class, array('getLanguageService'), array(), '', false);
-    }
-
-    /**
-     * @test
-     */
-    public function createEntryFromRawDataGeneratesMenuEntry()
-    {
-        $entry = $this->moduleController->_call('createEntryFromRawData', array());
-        $this->assertInstanceOf(\TYPO3\CMS\Backend\Domain\Model\Module\BackendModule::class, $entry);
-    }
-
-    /**
-     * @test
-     */
-    public function createEntryFromRawDataSetsPropertiesInEntryObject()
-    {
-        $rawModule = array(
-            'name' => 'nameTest',
-            'title' => 'titleTest',
-            'onclick' => 'onclickTest',
-            'icon' => array(
-                'test' => '123'
-            ),
-            'link' => 'linkTest',
-            'description' => 'descriptionTest',
-            'navigationComponentId' => 'navigationComponentIdTest'
-        );
-
-        $languageServiceMock = $this->getMock(\TYPO3\CMS\Lang\LanguageService::class, array(), array(), '', false);
-        $languageServiceMock->expects($this->once())->method('sL')->will($this->returnValue('titleTest'));
-        $this->moduleController->expects($this->once())->method('getLanguageService')->will($this->returnValue($languageServiceMock));
-
-        /** @var $entry \TYPO3\CMS\Backend\Domain\Model\Module\BackendModule */
-        $entry = $this->moduleController->_call('createEntryFromRawData', $rawModule);
-        $this->assertEquals('nameTest', $entry->getName());
-        $this->assertEquals('titleTest', $entry->getTitle());
-        $this->assertEquals('linkTest', $entry->getLink());
-        $this->assertEquals('onclickTest', $entry->getOnClick());
-        $this->assertEquals('navigationComponentIdTest', $entry->getNavigationComponentId());
-        $this->assertEquals('descriptionTest', $entry->getDescription());
-        $this->assertEquals(array('test' => '123'), $entry->getIcon());
-    }
-
-    /**
-     * @test
-     */
-    public function createEntryFromRawDataSetsLinkIfPathIsGivenInEntryObject()
-    {
-        $rawModule = array(
-            'path' => 'pathTest'
-        );
-        /** @var $entry \TYPO3\CMS\Backend\Domain\Model\Module\BackendModule */
-        $entry = $this->moduleController->_call('createEntryFromRawData', $rawModule);
-        $this->assertEquals('pathTest', $entry->getLink());
-    }
-}
diff --git a/typo3/sysext/backend/Tests/Unit/View/ModuleMenuViewTest.php b/typo3/sysext/backend/Tests/Unit/View/ModuleMenuViewTest.php
deleted file mode 100644 (file)
index ef66825..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\Tests\Unit\View;
-
-/*
- * 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!
- */
-
-/**
- * Test for TYPO3\CMS\Backend\ModuleMenuView
- */
-class ModuleMenuViewTest extends \TYPO3\CMS\Core\Tests\UnitTestCase
-{
-    /**
-     * @test
-     */
-    public function unsetHiddenModulesUnsetsHiddenModules()
-    {
-        /** @var \TYPO3\CMS\Backend\View\ModuleMenuView|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface $moduleMenuViewMock */
-        $moduleMenuViewMock = $this->getAccessibleMock(
-            \TYPO3\CMS\Backend\View\ModuleMenuView::class,
-            array('dummy'),
-            array(),
-            '',
-            false
-        );
-
-        $loadedModulesFixture = array(
-            'file' => array(),
-            'tools' => array(),
-            'web' => array(
-                'sub' => array(
-                    'list' => array(),
-                    'func' => array(),
-                    'info' => array(),
-                ),
-            ),
-            'user' => array(
-                'sub' => array(
-                    'task' => array(),
-                    'settings' => array(),
-                ),
-            ),
-        );
-        $moduleMenuViewMock->_set('loadedModules', $loadedModulesFixture);
-
-        $userTsFixture = array(
-            'value' => 'file,help',
-            'properties' => array(
-                'web' => 'list,func',
-                'user' => 'task',
-            ),
-        );
-
-        $GLOBALS['BE_USER'] = $this->getMock(\TYPO3\CMS\Core\Authentication\BackendUserAuthentication::class, array(), array(), '', false);
-        $GLOBALS['BE_USER']->expects($this->any())->method('getTSConfig')->will($this->returnValue($userTsFixture));
-
-        $expectedResult = array(
-            'tools' => array(),
-            'web' => array(
-                'sub' => array(
-                    'info' => array(),
-                ),
-            ),
-            'user' => array(
-                'sub' => array(
-                    'settings' => array(),
-                ),
-            ),
-        );
-
-        $moduleMenuViewMock->_call('unsetHiddenModules');
-        $actualResult = $moduleMenuViewMock->_get('loadedModules');
-        $this->assertSame($expectedResult, $actualResult);
-    }
-}
index fadbcea..52bf833 100644 (file)
@@ -560,10 +560,6 @@ class Bootstrap
                 'TYPO3.ExtDirectStateProvider.ExtDirect',
                 \TYPO3\CMS\Backend\InterfaceState\ExtDirect\DataProvider::class
             );
-            ExtensionManagementUtility::registerExtDirectComponent(
-                'TYPO3.Components.DragAndDrop.CommandController',
-                ExtensionManagementUtility::extPath('backend') . 'Classes/View/PageLayout/Extdirect/ExtdirectPageCommands.php:' . \TYPO3\CMS\Backend\View\PageLayout\ExtDirect\ExtdirectPageCommands::class
-            );
         }
         return $this;
     }
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-72418-DeprecatedBackend-relatedPHPClasses.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-72418-DeprecatedBackend-relatedPHPClasses.rst
new file mode 100644 (file)
index 0000000..965caf8
--- /dev/null
@@ -0,0 +1,27 @@
+=========================================================
+Breaking: #72418 - Deprecated backend-related PHP classes
+=========================================================
+
+Description
+===========
+
+The following PHP classes have been removed:
+
+* ``TYPO3\CMS\Backend\Module\ModuleController``
+* ``TYPO3\CMS\Backend\Module\ModuleSettings``
+* ``TYPO3\CMS\Backend\View\LogoView``
+* ``TYPO3\CMS\Backend\View\ModuleMenuView``
+* ``TYPO3\CMS\Backend\View\PageLayout\ExtDirect\ExtdirectPageCommands``
+* ``TYPO3\CMS\Backend\View\ThumbnailView``
+
+
+Impact
+======
+
+Calling any of these PHP classes directly will result in a fatal error.
+
+
+Affected Installations
+======================
+
+Any installation with a custom PHP code accessing these PHP classes.
\ No newline at end of file