[TASK] Entry script handling cleanup 04/41004/4
authorChristian Kuhn <lolli@schwarzbu.ch>
Wed, 8 Jul 2015 17:07:16 +0000 (19:07 +0200)
committerBenjamin Mack <benni@typo3.org>
Wed, 8 Jul 2015 21:32:11 +0000 (23:32 +0200)
The patch drops handling and definition of the constants
TYPO3_MOD_PATH and PATH_typo3_mod that were used for script
path resolution and some resource calculations.
This is an important step for further routing scripts
within the core and module bootstrap.

Resolves: #67987
Releases: master
Change-Id: Iab2cd2ecac439a1da025825a0c16d8290e6d3332
Reviewed-on: http://review.typo3.org/41004
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Benjamin Mack <benni@typo3.org>
Tested-by: Benjamin Mack <benni@typo3.org>
18 files changed:
typo3/sysext/backend/Classes/Controller/PageLayoutController.php
typo3/sysext/backend/Classes/Form/Utility/FormEngineUtility.php
typo3/sysext/backend/Classes/Utility/BackendUtility.php
typo3/sysext/cms/layout/conf.php [deleted file]
typo3/sysext/cms/layout/db_layout.php [deleted file]
typo3/sysext/cms/layout/db_new_content_el.php [deleted file]
typo3/sysext/core/Classes/Authentication/AbstractUserAuthentication.php
typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php
typo3/sysext/core/Documentation/Changelog/7.1/Deprecation-64922-DeprecatedEntryPoints.rst
typo3/sysext/core/Documentation/Changelog/master/Breaking-67987-RemovedEntryScriptHandling.rst [new file with mode: 0644]
typo3/sysext/impexp/app/conf.php
typo3/sysext/indexed_search/cli/conf.php [deleted file]
typo3/sysext/lang/locallang_csh_em.xlf
typo3/sysext/openid/Classes/OpenidService.php
typo3/sysext/openid/class.tx_openid_return.php [deleted file]
typo3/sysext/openid/wizard/index.php
typo3/sysext/recordlist/Classes/RecordList/AbstractDatabaseRecordList.php
typo3/sysext/recordlist/mod1/index.php

index 754ea43..073c0b3 100644 (file)
@@ -942,7 +942,6 @@ class PageLayoutController {
         * @return string
         */
        public function renderListContent() {
-               // Initialize list object (see "class.db_layout.inc"):
                /** @var $dbList \TYPO3\CMS\Backend\View\PageLayoutView */
                $dbList = GeneralUtility::makeInstance(PageLayoutView::class);
                $dbList->backPath = $GLOBALS['BACK_PATH'];
index a347280..3a1a776 100644 (file)
@@ -227,7 +227,7 @@ class FormEngineUtility {
         */
        static public function getIconHtml($icon, $alt = '', $title = '') {
                $iconArray = static::getIcon($icon);
-               if (!empty($iconArray[0]) && is_file(GeneralUtility::resolveBackPath(PATH_typo3 . PATH_typo3_mod . $iconArray[0]))) {
+               if (!empty($iconArray[0]) && is_file(GeneralUtility::resolveBackPath(PATH_typo3 . $iconArray[0]))) {
                        return '<img src="' . $iconArray[0] . '" alt="' . $alt . '" ' . ($title ? 'title="' . $title . '"' : '') . ' />';
                } else {
                        return IconUtility::getSpriteIcon($icon, array('alt' => $alt, 'title' => $title));
index aec89b5..b3acee6 100644 (file)
@@ -3313,7 +3313,6 @@ class BackendUtility {
         * @param int $uid Record uid
         * @return array
         * @internal
-        * @see class.db_layout.inc, alt_db_navframe.php, EditDocumentController, db_layout.php
         */
        static public function isRecordLocked($table, $uid) {
                if (!is_array($GLOBALS['LOCKED_RECORDS'])) {
diff --git a/typo3/sysext/cms/layout/conf.php b/typo3/sysext/cms/layout/conf.php
deleted file mode 100644 (file)
index ec101c4..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-define('TYPO3_MOD_PATH', 'sysext/cms/layout/');
-$BACK_PATH = '../../../';
-$MLANG['default']['tabs_images']['tab'] = '../../backend/Resources/Public/Icons/module-page.png';
-$MLANG['default']['ll_ref'] = 'LLL:EXT:cms/layout/locallang_mod.xlf';
-$MCONF['script'] = 'db_layout.php';
-$MCONF['access'] = 'user,group';
-$MCONF['name'] = 'web_layout';
diff --git a/typo3/sysext/cms/layout/db_layout.php b/typo3/sysext/cms/layout/db_layout.php
deleted file mode 100644 (file)
index 5ea4918..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * Module: Web>Page
- *
- * This module lets you view a page in a more Content Management like style than the ordinary record-list
- *
- * @author Kasper Skårhøj <kasperYYYY@typo3.com>
- */
-unset($MCONF);
-require __DIR__ . '/conf.php';
-
-define('TYPO3_MODE', 'BE');
-
-require $BACK_PATH . 'sysext/core/Classes/Core/Bootstrap.php';
-\TYPO3\CMS\Core\Core\Bootstrap::getInstance()->run('typo3/');
-$LANG->includeLLFile('EXT:cms/layout/locallang.xlf');
-
-$BE_USER->modAccess($MCONF, 1);
-// Will open up records locked by current user. It's assumed that the locking should end if this script is hit.
-\TYPO3\CMS\Backend\Utility\BackendUtility::lockRecords();
-
-\TYPO3\CMS\Core\Utility\GeneralUtility::deprecationLog(
-       'The page layout class is moved to an own module. Please use BackendUtility::getModuleUrl(\'web_layout\') to link to db_layout.php. This script will be removed with version TYPO3 CMS 8.'
-);
-
-$GLOBALS['SOBE'] = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Controller\PageLayoutController::class);
-$GLOBALS['SOBE']->init();
-$GLOBALS['SOBE']->clearCache();
-$GLOBALS['SOBE']->main();
-$GLOBALS['SOBE']->printContent();
diff --git a/typo3/sysext/cms/layout/db_new_content_el.php b/typo3/sysext/cms/layout/db_new_content_el.php
deleted file mode 100644 (file)
index 1c55970..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * New content elements wizard
- * (Part of the 'cms' extension)
- *
- * @author Kasper Skårhøj <kasperYYYY@typo3.com>
- */
-unset($MCONF);
-require __DIR__ . '/conf.php';
-
-define('TYPO3_MODE', 'BE');
-require $BACK_PATH . 'sysext/core/Classes/Core/Bootstrap.php';
-\TYPO3\CMS\Core\Core\Bootstrap::getInstance()->run('typo3/');
-// Unset MCONF/MLANG since all we wanted was back path etc. for this particular script.
-unset($MCONF);
-unset($MLANG);
-// Merging locallang files/arrays:
-$GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_misc.xlf');
-$LOCAL_LANG_orig = $LOCAL_LANG;
-$LANG->includeLLFile('EXT:cms/layout/locallang_db_new_content_el.xlf');
-\TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($LOCAL_LANG_orig, $LOCAL_LANG);
-$LOCAL_LANG = $LOCAL_LANG_orig;
-
-\TYPO3\CMS\Core\Utility\GeneralUtility::deprecationLog(
-       'The new element class is moved to an own module. Please use BackendUtility::getModuleUrl(\'new_content_element\') to link to db_new_content_el.php. This script will be removed with version 8.'
-);
-
-$GLOBALS['SOBE'] = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Controller\ContentElement\NewContentElementController::class);
-$GLOBALS['SOBE']->init();
-$GLOBALS['SOBE']->main();
-$GLOBALS['SOBE']->printContent();
index 6030d5e..7c64ac1 100644 (file)
@@ -1290,12 +1290,11 @@ abstract class AbstractUserAuthentication {
         */
        public function getLoginFormData() {
                $loginData = array();
+               $loginData['status'] = GeneralUtility::_GP($this->formfield_status);
                if ($this->getMethodEnabled) {
-                       $loginData['status'] = GeneralUtility::_GP($this->formfield_status);
                        $loginData['uname'] = GeneralUtility::_GP($this->formfield_uname);
                        $loginData['uident'] = GeneralUtility::_GP($this->formfield_uident);
                } else {
-                       $loginData['status'] = GeneralUtility::_POST($this->formfield_status);
                        $loginData['uname'] = GeneralUtility::_POST($this->formfield_uname);
                        $loginData['uident'] = GeneralUtility::_POST($this->formfield_uident);
                }
index e94d008..dc686c3 100644 (file)
@@ -168,11 +168,6 @@ class SystemEnvironmentBuilder {
                // Absolute path of the typo3 directory of the instance with trailing slash
                // Example "/var/www/instance-name/htdocs/typo3/"
                define('PATH_typo3', PATH_site . TYPO3_mainDir);
-               // Relative path (from the PATH_typo3) to a BE module NOT using mod.php dispatcher with trailing slash
-               // Example "sysext/perms/mod/" for an extension installed in typo3/sysext/
-               // Example "install/" for the install tool entry script
-               // Example "../typo3conf/ext/templavoila/mod2/ for an extension installed in typo3conf/ext/
-               define('PATH_typo3_mod', defined('TYPO3_MOD_PATH') ? TYPO3_MOD_PATH : '');
                // Absolute path to the typo3conf directory with trailing slash
                // Example "/var/www/instance-name/htdocs/typo3conf/"
                define('PATH_typo3conf', PATH_site . 'typo3conf/');
@@ -370,70 +365,18 @@ class SystemEnvironmentBuilder {
        /**
         * Calculate the document root part to the instance from PATH_thisScript
         *
-        * There are two ways to hint correct calculation:
-        * Either an explicit specified sub path or the defined constant TYPO3_MOD_PATH. Which one is
-        * used depends on which entry script was called in the first place.
-        *
         * We have two main scenarios for entry points:
         * - Directly called documentRoot/index.php (-> FE call or eiD include): index.php sets $relativePathPart to
         * empty string to hint this code that the document root is identical to the directory the script is located at.
         * - An indirect include of any Backend related script (-> a backend module, the install tool, or scripts like ajax.php).
-        * If in backend mode we distinguish two cases:
-        * -- A backend module defines 'TYPO3_MOD_PATH': This is the case for "old" modules that are not called through
-        * "mod.php" dispatcher, and in the install tool. The TYPO3_MOD_PATH defines the relative path to the typo3/
-        * directory. This is taken as base to calculate the document root.
-        * -- A Backend script that does not define 'TYPO3_MOD_PATH': This is the case for the mod.php dispatcher
-        * and other entry scripts like 'cli_dispatch.phpsh' or 'ajax.php' that are located inside typo3/ directly. In
-        * this case the Bootstrap->run() command sets 'typo3/' as $relativePathPart as base to calculate the document root.
-        *
-        * This basically boils down to the following code:
-        * If TYPO3_MOD_PATH is defined, subtract this 'local' part from the entry point directory, else use
-        * $relativePathPart to subtract this from the the script entry point to find out the document root.
+        * - A Backend script: This is the case for the mod.php dispatcher and other entry scripts like 'cli_dispatch.phpsh'
+        * or 'ajax.php' that are located inside typo3/ directly. In this case the Bootstrap->run() command sets
+        * 'typo3/' as $relativePathPart as base to calculate the document root.
         *
-        * @param string $relativePathPart Relative directory part from document root to script path if TYPO3_MOD_PATH is not used
+        * @param string $relativePathPart Relative directory part from document root to script path
         * @return string Absolute path to document root of installation
         */
        static protected function getPathSite($relativePathPart) {
-               // If end of path is not "typo3/" and TYPO3_MOD_PATH is given
-               if (defined('TYPO3_MOD_PATH')) {
-                       return self::getPathSiteByTypo3ModulePath();
-               } else {
-                       return self::getPathSiteByRelativePathPart($relativePathPart);
-               }
-       }
-
-       /**
-        * Calculate document root by TYPO3_MOD_PATH
-        *
-        * TYPO3_MOD_PATH can have the following values:
-        * - "sysext/extensionName/path/entryScript.php" -> extension is below 'docRoot'/typo3/sysext
-        * - "ext/extensionName/path/entryScript.php" -> extension is below 'docRoot'/typo3/ext
-        * - "../typo3conf/ext/extensionName/path/entryScript.php" -> extension is below 'docRoot'/typo3conf/ext
-        * - "install/index.php" -> install tool in 'docRoot'/typo3/install/
-        *
-        * The method unifies the above and subtracts the calculated path part from PATH_thisScript
-        *
-        * @return string Absolute path to document root of installation
-        */
-       static protected function getPathSiteByTypo3ModulePath() {
-               if (substr(TYPO3_MOD_PATH, 0, 7) === 'sysext/' || substr(TYPO3_MOD_PATH, 0, 4) === 'ext/' || substr(TYPO3_MOD_PATH, 0, 8) === 'install/') {
-                       $pathPartRelativeToDocumentRoot = TYPO3_mainDir . TYPO3_MOD_PATH;
-               } elseif (substr(TYPO3_MOD_PATH, 0, strlen('../typo3conf/')) === '../typo3conf/') {
-                       $pathPartRelativeToDocumentRoot = substr(TYPO3_MOD_PATH, 3);
-               } else {
-                       static::dieWithMessage('Unable to determine TYPO3 document root.');
-               }
-               $entryScriptDirectory = self::getUnifiedDirectoryNameWithTrailingSlash(PATH_thisScript);
-               return substr($entryScriptDirectory, 0, -strlen($pathPartRelativeToDocumentRoot));
-       }
-
-       /**
-        * Find out document root by subtracting $relativePathPart from PATH_thisScript
-        *
-        * @param string $relativePathPart Relative part of script from document root
-        * @return string Absolute path to document root of installation
-        */
-       static protected function getPathSiteByRelativePathPart($relativePathPart) {
                $entryScriptDirectory = self::getUnifiedDirectoryNameWithTrailingSlash(PATH_thisScript);
                if ($relativePathPart !== '') {
                        $pathSite = substr($entryScriptDirectory, 0, -strlen($relativePathPart));
index b2323aa..84db011 100644 (file)
@@ -36,10 +36,4 @@ typo3/tce_db.php
 ``\TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl('tce_db')``
 
 typo3/login_frameset.php
-``\TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl('login_frameset')``
-
-typo3/sysext/cms/layout/db_new_content_el.php
-``\TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl('new_content_element')``
-
-typo3/sysext/cms/layout/db_layout.php
-``\TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl('web_layout')``
+``\TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl('login_frameset')``
\ No newline at end of file
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-67987-RemovedEntryScriptHandling.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-67987-RemovedEntryScriptHandling.rst
new file mode 100644 (file)
index 0000000..b00d8d9
--- /dev/null
@@ -0,0 +1,35 @@
+================================================
+Breaking: #67987 - Removed entry script handling
+================================================
+
+Description
+===========
+
+Definition and handling of constants ``TYPO3_MOD_PATH`` and ``PATH_typo3_mod`` have been dropped.
+These constants were important for modules that were still not called through the ``mod.php``
+``_DISPATCH`` system that was introduces in TYPO3 CMS version 4.2.
+It is required to route modules through ``typo3/mod.php`` from now on in case the module relies
+on the definition of those constants.
+
+The following old entry scripts were removed:
+
+* typo3/sysext/cms/layout/db_layout.php, use ``\TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl('web_layout')`` to link to the module
+* typo3/sysext/cms/layout/db_new_content_el.php, use ``\TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl('new_content_element')`` to link to the module
+
+
+Impact
+======
+
+Path resolving may fail for script that rely on entry points different from ``typo3/mod.php``
+Constants ``TYPO3_MOD_PATH`` and ``PATH_typo3_mod`` are not defined anymore and scripts may
+throw a PHP warning level error if they access these constants.
+
+
+Affected Installations
+======================
+
+Installations may fail if linking to modules that use an entry script with a ``conf.php`` file that do not
+use ``$MCONF['script'] = '_DISPATCH';``. Those modules must be adapted to ``mod.php`` entry point and may
+need adaption of further references that are defined relative to the entry script.
+
+Searching for extension with backend modules that define ``TYPO3_MOD_PATH`` is a good entry point.
\ No newline at end of file
index 6e07eab..dbe03fe 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-define('TYPO3_MOD_PATH', 'sysext/impexp/app/');
 $BACK_PATH = '../../../';
 $MCONF['name'] = 'xMOD_tximpexp';
 $MCONF['script'] = '_DISPATCH';
diff --git a/typo3/sysext/indexed_search/cli/conf.php b/typo3/sysext/indexed_search/cli/conf.php
deleted file mode 100644 (file)
index 16b9845..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-// DO NOT REMOVE OR CHANGE THESE 3 LINES:
-define('TYPO3_MOD_PATH', 'sysext/indexed_search/cli/');
-$BACK_PATH = '../../../';
-$MCONF['name'] = '_CLI_indexedsearch';
index 1430ec8..8baa582 100644 (file)
@@ -286,15 +286,6 @@ Documentation Matrix | http://typo3.org/documentation/document-library/Matrix/</
                        <trans-unit id="emconf_priority.description">
                                <source>This tells the EM to try to put the extensions as the very first in the list. Default is last.</source>
                        </trans-unit>
-                       <trans-unit id="emconf_module.alttitle">
-                               <source>Backend modules included</source>
-                       </trans-unit>
-                       <trans-unit id="emconf_module.description">
-                               <source>If any subfolders to an extension contains backend modules, those foldernames should be listed here.</source>
-                       </trans-unit>
-                       <trans-unit id="emconf_module.details">
-                               <source>It allows the EM to know about the existence of the module, which is important because the EM has to update the conf.php file of the module in order to set the correct TYPO3_MOD_PATH  constant.</source>
-                       </trans-unit>
                        <trans-unit id="emconf_state.alttitle">
                                <source>Development state</source>
                        </trans-unit>
@@ -472,12 +463,6 @@ In effect you can therefore have, say, a "stable" version of an extension instal
                        <trans-unit id="emconf_locallang.description">
                                <source>Shows which files named "locallang.xlf" are present in the extension folder (recursive search). Such files are usually used to present an array $LOCAL_LANG with labels for the application in the system languages.</source>
                        </trans-unit>
-                       <trans-unit id="emconf_moduleNames.alttitle">
-                               <source>Backend Module names</source>
-                       </trans-unit>
-                       <trans-unit id="emconf_moduleNames.description">
-                               <source>Shows which module names were found inside the extension.</source>
-                       </trans-unit>
                        <trans-unit id="emconf_classNames.alttitle">
                                <source>PHP Class names</source>
                        </trans-unit>
index e1edfe2..9645c4f 100644 (file)
@@ -418,7 +418,7 @@ class OpenidService extends AbstractService {
                        // It is much easier for the Backend to manage users.
                        // Notice: 'login_status' parameter name cannot be changed!
                        // It is essential for BE user authentication.
-                       $returnURL = GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . TYPO3_mainDir . 'sysext/' . $this->extKey . '/class.tx_openid_return.php?login_status=login';
+                       $returnURL = GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . TYPO3_mainDir . 'index.php?login_status=login';
                }
                if (GeneralUtility::_GP('tx_openid_mode') === 'finish') {
                        $requestURL = GeneralUtility::_GP('tx_openid_location');
diff --git a/typo3/sysext/openid/class.tx_openid_return.php b/typo3/sysext/openid/class.tx_openid_return.php
deleted file mode 100644 (file)
index a15ee17..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-// Fix _GET/_POST values for authentication (login_status has to be submitted via POST for BE auth)
-if (isset($_GET['login_status'])) {
-       $_POST['login_status'] = $_GET['login_status'];
-}
-
-call_user_func(function() {
-       define('TYPO3_MOD_PATH', 'sysext/openid/');
-
-       $classLoader = require __DIR__ . '/../../contrib/vendor/autoload.php';
-       (new \TYPO3\CMS\Backend\Http\Application($classLoader))->run(function() {
-               /** @var \TYPO3\CMS\Core\Authentication\BackendUserAuthentication $beUser */
-               $beUser = $GLOBALS['BE_USER'];
-               if ($beUser->user['uid']) {
-                       \TYPO3\CMS\Core\Utility\GeneralUtility::cleanOutputBuffers();
-                       $backendURL = \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . TYPO3_mainDir . 'backend.php';
-                       \TYPO3\CMS\Core\Utility\HttpUtility::redirect($backendURL);
-               }
-       });
-});
index abefc42..fbee2a0 100644 (file)
@@ -11,7 +11,5 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-define('TYPO3_MOD_PATH', 'sysext/openid/wizard/');
-
 $wizard = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Openid\Wizard::class);
 $wizard->main();
index 56006eb..bbca124 100644 (file)
@@ -26,8 +26,8 @@ use TYPO3\CMS\Core\Utility\HttpUtility;
 use TYPO3\CMS\Core\Utility\MathUtility;
 
 /**
- * Child class for rendering of Web > List (not the final class.
- * Shared between Web>List (db_list.php) and Web>Page (sysext/cms/layout/db_layout.php)
+ * Child class for rendering of Web > List (not the final class)
+ * Shared between Web>List and Web>Page
  *
  * @author Kasper Skårhøj <kasperYYYY@typo3.com>
  * @see \TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList
index e1cfd97..59c7329 100644 (file)
@@ -17,7 +17,7 @@
  *
  * Listing database records from the tables configured in $GLOBALS['TCA'] as they are related to the current page or root.
  *
- * Notice: This module and Web>Page (db_layout.php) module has a special status since they
+ * Notice: This module and Web>Page module has a special status since they
  * are NOT located in their actual module directories (fx. mod/web/list/) but in the
  * backend root directory. This has some historical and practical causes.
  *