[!!!][TASK] Drop usage of TypoScript includeLibs 39/46739/4
authorBenni Mack <benni@typo3.org>
Tue, 16 Feb 2016 23:44:40 +0000 (00:44 +0100)
committerChristian Kuhn <lolli@schwarzbu.ch>
Fri, 19 Feb 2016 15:26:14 +0000 (16:26 +0100)
The TypoScript option includeLibs within
USER/USER_INT and COA/COA_INT is removed.

The methods
$TSFE->includeLibraries() and $cObj->includeLibs()
have been marked as deprecated.

ExtensionManagementUtility::addPItoST43() does not add
the option "includeLibs" to the TypoScript anymore. Its second
method parameter is unused now.

Resolves: #73514
Releases: master
Change-Id: I613cd4fc7a8239c9a090242e3db7e45ec95bc322
Reviewed-on: https://review.typo3.org/46739
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
13 files changed:
typo3/sysext/core/Classes/Utility/ExtensionManagementUtility.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-73514-TypoScriptPropertyIncludeLibsRemoved.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Deprecation-73514-IncludeLibraryMethods.rst [new file with mode: 0644]
typo3/sysext/frontend/Classes/ContentObject/ContentObjectArrayContentObject.php
typo3/sysext/frontend/Classes/ContentObject/ContentObjectArrayInternalContentObject.php
typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
typo3/sysext/frontend/Classes/ContentObject/UserContentObject.php
typo3/sysext/frontend/Classes/ContentObject/UserInternalContentObject.php
typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php
typo3/sysext/frontend/Classes/Plugin/AbstractPlugin.php
typo3/sysext/frontend/Tests/Unit/Controller/TypoScriptFrontendControllerTest.php
typo3/sysext/t3editor/Resources/Private/tsref.xml
typo3/sysext/t3editor/Resources/Public/JavaScript/parse_typoscript/tokenizetyposcript.js

index d8cbc71..6b16a82 100644 (file)
@@ -1395,24 +1395,21 @@ class ExtensionManagementUtility
      * FOR USE IN ext_localconf.php FILES
      *
      * @param string $key The extension key
-     * @param string $classFile The PHP-class filename relative to the extension root directory. If set to blank a default value is chosen according to convensions.
+     * @param string $_ unused since TYPO3 CMS 8
      * @param string $suffix Is used as a suffix of the class name (e.g. "_pi1")
      * @param string $type See description above
      * @param int $cached If $cached is set as USER content object (cObject) is created - otherwise a USER_INT object is created.
      *
      * @return void
      */
-    public static function addPItoST43($key, $classFile = '', $suffix = '', $type = 'list_type', $cached = 0)
+    public static function addPItoST43($key, $_, $suffix = '', $type = 'list_type', $cached = 0)
     {
-        $classFile = $classFile ? $classFile : 'pi/class.tx_' . str_replace('_', '', $key) . $suffix . '.php';
         $cN = self::getCN($key);
         // General plugin
         $pluginContent = trim('
 plugin.' . $cN . $suffix . ' = USER' . ($cached ? '' : '_INT') . '
-plugin.' . $cN . $suffix . ' {
-       includeLibs = ' . $GLOBALS['TYPO3_LOADED_EXT'][$key]['siteRelPath'] . $classFile . '
-       userFunc = ' . $cN . $suffix . '->main
-}');
+plugin.' . $cN . $suffix . '.userFunc = ' . $cN . $suffix . '->main
+');
         self::addTypoScript($key, 'setup', '
 # Setting ' . $key . ' plugin TypoScript
 ' . $pluginContent);
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-73514-TypoScriptPropertyIncludeLibsRemoved.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-73514-TypoScriptPropertyIncludeLibsRemoved.rst
new file mode 100644 (file)
index 0000000..fee4f1d
--- /dev/null
@@ -0,0 +1,29 @@
+============================================================
+Breaking: #73514 - TypoScript property "includeLibs" removed
+============================================================
+
+Description
+===========
+
+The TypoScript property to load additional PHP libraries via ".includeLibs" has been removed from the Content
+Objects "COA/COA_INT" and "USER/USER_INT".
+
+
+Impact
+======
+
+Setting the ``.includeLibs`` property will have no effect anymore.
+
+
+Affected Installations
+======================
+
+Any installation using a very old pi_based extension that does not ship proper class naming or autoloading
+information.
+
+
+Migration
+=========
+
+Make sure everything that was previously loaded via includeLibs is now encapsulated in proper PHP classes,
+which is referenced by USER/USER_INT when needed.
\ No newline at end of file
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-73514-IncludeLibraryMethods.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-73514-IncludeLibraryMethods.rst
new file mode 100644 (file)
index 0000000..bdea272
--- /dev/null
@@ -0,0 +1,28 @@
+============================================
+Deprecation: #73514 - IncludeLibrary Methods
+============================================
+
+Description
+===========
+
+The PHP methods ``TypoScriptFrontendRenderer->includeLibraries()`` and ``ContentObjectRendereer->includeLibs()`` 
+to include PHP libraries during frontend output have been marked as deprecated.
+
+
+Impact
+======
+
+Calling any of the methods above will trigger a deprecation log entry.
+
+
+Affected Installations
+======================
+
+Any installation using custom Frontend output modified via PHP and TypoScript through e.g. a custom CType
+provided by a special extension.
+
+
+Migration
+=========
+
+Use proper object orientation and class loading methods to load code in the Frontend when necessary.
\ No newline at end of file
index be0fbf7..d073dec 100644 (file)
@@ -37,7 +37,6 @@ class ContentObjectArrayContentObject extends AbstractContentObject
             return '';
         }
 
-        $this->cObj->includeLibs($conf);
         $content = $this->cObj->cObjGet($conf);
         $wrap = isset($conf['wrap.']) ? $this->cObj->stdWrap($conf['wrap'], $conf['wrap.']) : $conf['wrap'];
         if ($wrap) {
index ea41df9..b6ba8a9 100644 (file)
@@ -35,10 +35,8 @@ class ContentObjectArrayInternalContentObject extends AbstractContentObject
             return '';
         }
         $substKey = 'INT_SCRIPT.' . $this->getTypoScriptFrontendController()->uniqueHash();
-        $includeLibs = isset($conf['includeLibs.']) ? $this->cObj->stdWrap($conf['includeLibs'], $conf['includeLibs.']) : $conf['includeLibs'];
         $content = '<!--' . $substKey . '-->';
         $this->getTypoScriptFrontendController()->config['INTincScript'][$substKey] = array(
-            'file' => $includeLibs,
             'conf' => $conf,
             'cObj' => serialize($this->cObj),
             'type' => 'COA'
index 07150bb..ed215e7 100644 (file)
@@ -7053,9 +7053,11 @@ class ContentObjectRenderer
      *
      * @param array $config TypoScript configuration
      * @return bool Whether a configuration for including libs was found and processed
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9, use proper class loading instead.
      */
     public function includeLibs(array $config)
     {
+        GeneralUtility::logDeprecatedFunction();
         $librariesIncluded = false;
         if (isset($config['includeLibs']) && $config['includeLibs']) {
             $libraries = GeneralUtility::trimExplode(',', $config['includeLibs'], true);
index e13408d..005b947 100644 (file)
@@ -36,7 +36,6 @@ class UserContentObject extends AbstractContentObject
             // Come here only if we are not called from $TSFE->INTincScript_process()!
             $this->cObj->setUserObjectType(ContentObjectRenderer::OBJECTTYPE_USER);
         }
-        $this->cObj->includeLibs($conf);
         $tempContent = $this->cObj->callUserFunction($conf['userFunc'], $conf, '');
         if ($this->cObj->doConvertToUserIntObject) {
             $this->cObj->doConvertToUserIntObject = false;
index 866e59a..4f1ffa8 100644 (file)
@@ -31,9 +31,7 @@ class UserInternalContentObject extends AbstractContentObject
         $tsfe = $this->getTypoScriptFrontendController();
         $substKey = 'INT_SCRIPT.' . $tsfe->uniqueHash();
         $content = '<!--' . $substKey . '-->';
-        $includeLibs = isset($conf['includeLibs.']) ? $this->cObj->stdWrap($conf['includeLibs'], $conf['includeLibs.']) : $conf['includeLibs'];
         $tsfe->config['INTincScript'][$substKey] = array(
-            'file' => $includeLibs,
             'conf' => $conf,
             'cObj' => serialize($this->cObj),
             'type' => 'FUNC'
index 075c345..ea5313d 100644 (file)
@@ -3350,7 +3350,6 @@ class TypoScriptFrontendController
     {
         do {
             $INTiS_config = $this->config['INTincScript'];
-            $this->INTincScript_includeLibs($INTiS_config);
             $this->INTincScript_process($INTiS_config);
             // Check if there were new items added to INTincScript during the previous execution:
             $INTiS_config = array_diff_assoc($this->config['INTincScript'], $INTiS_config);
@@ -3359,23 +3358,6 @@ class TypoScriptFrontendController
     }
 
     /**
-     * Include libraries for uncached objects.
-     *
-     * @param array $INTiS_config $GLOBALS['TSFE']->config['INTincScript'] or part of it
-     * @return void
-     * @see INTincScript()
-     */
-    protected function INTincScript_includeLibs($INTiS_config)
-    {
-        foreach ($INTiS_config as $INTiS_cPart) {
-            if (isset($INTiS_cPart['conf']['includeLibs']) && $INTiS_cPart['conf']['includeLibs']) {
-                $INTiS_resourceList = GeneralUtility::trimExplode(',', $INTiS_cPart['conf']['includeLibs'], true);
-                $this->includeLibraries($INTiS_resourceList);
-            }
-        }
-    }
-
-    /**
      * Processes the INTinclude-scripts and substitue in content.
      *
      * @param array $INTiS_config $GLOBALS['TSFE']->config['INTincScript'] or part of it
@@ -3396,7 +3378,9 @@ class TypoScriptFrontendController
             if (substr($INTiS_cPart, 32, 3) === '-->') {
                 $INTiS_key = 'INT_SCRIPT.' . substr($INTiS_cPart, 0, 32);
                 if (is_array($INTiS_config[$INTiS_key])) {
-                    $timeTracker->push('Include ' . $INTiS_config[$INTiS_key]['file'], '');
+                    $label = 'Include ' . $INTiS_config[$INTiS_key]['type'];
+                    $label = $label . isset($INTiS_config[$INTiS_key]['file']) ? ' ' . $INTiS_config[$INTiS_key]['file'] : '';
+                    $timeTracker->push($label, '');
                     $incContent = '';
                     $INTiS_cObj = unserialize($INTiS_config[$INTiS_key]['cObj']);
                     /* @var $INTiS_cObj ContentObjectRenderer */
@@ -3981,10 +3965,11 @@ class TypoScriptFrontendController
      *
      * @param array $libraries The libraries to be included.
      * @return void
-     * @todo deprecate this method
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9, use proper class loading instead.
      */
     public function includeLibraries(array $libraries)
     {
+        GeneralUtility::logDeprecatedFunction();
         $timeTracker = $this->getTimeTracker();
         $timeTracker->push('Include libraries');
         $timeTracker->setTSlogMessage('Files for inclusion: "' . implode(', ', $libraries) . '"');
index 6201516..a17591b 100644 (file)
@@ -203,7 +203,7 @@ class AbstractPlugin
      * Should normally be set in the main function with the TypoScript content passed to the method.
      *
      * $conf[LOCAL_LANG][_key_] is reserved for Local Language overrides.
-     * $conf[userFunc] / $conf[includeLibs]  reserved for setting up the USER / USER_INT object. See TSref
+     * $conf[userFunc] reserved for setting up the USER / USER_INT object. See TSref
      *
      * @var array
      */
index f5da211..d8e1cdb 100644 (file)
@@ -77,7 +77,6 @@ class TypoScriptFrontendControllerTest extends \TYPO3\CMS\Core\Tests\UnitTestCas
         /** @var \PHPUnit_Framework_MockObject_MockObject|TypoScriptFrontendController $tsfe */
         $tsfe = $this->getMock(TypoScriptFrontendController::class, array(
             'INTincScript_process',
-            'INTincScript_includeLibs',
             'INTincScript_loadJSCode',
             'setAbsRefPrefix',
             'regeneratePageTitle'
index dd76540..6a1b65b 100644 (file)
@@ -154,14 +154,6 @@ helloWorld.value = this item will be returned
        <type id="COA" extends="COBJ_ARRAY">
   </type>
        <type id="COA_INT" extends="COBJ_ARRAY">
-               <property name="includeLibs" type="stdWrap">
-                       <description><![CDATA[list of resources/stdWrap
-(This property is used only if the object is COA_INT!, See introduction.)
-This is a comma-separated list of resources that are included as PHP-scripts (with include_once() function) if this script is included.
-This is possible to do because any include-files will be known before the scripts are included.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
        </type>
        <type id="CONFIG">
                <property name="ATagParams" type="string">
@@ -5432,13 +5424,6 @@ In this example the MYLINK subpart will be substituted by the wrap which is the
                </property>
        </type>
        <type id="USER">
-               <property name="includeLibs" type="stringList">
-                       <description><![CDATA[(This property applies only if the object is created as USER_INT)
-This is a comma-separated list of resources that are included as PHP-scripts (with include_once() function) if this script is included.
-This is possible to do because any include-files will be known before the scripts are included.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
                <property name="userFunc" type="string">
                        <description><![CDATA[The name of the function. If you specify the name with a '->' in, it's intepreted as a call to a method in a class.
 Two parameters are sent: A content variable (which is empty in this case, but not when used from stdWrap function .postUserFunc and .preUserFunc) and the second parameter is an array with the properties of this cObject if any.
@@ -5449,7 +5434,6 @@ This TypoScript will display all content element headers of a page in reversed o
 
 page = PAGE
 page.typeNum=0
-includeLibs.something = media/scripts/example_callfunction.php
 
 page.30 = USER
 page.30 {
@@ -5461,13 +5445,6 @@ page.30 {
                </property>
        </type>
        <type id="USER_INT">
-               <property name="includeLibs" type="stringList">
-                       <description><![CDATA[(This property applies only if the object is created as USER_INT)
-This is a comma-separated list of resources that are included as PHP-scripts (with include_once() function) if this script is included.
-This is possible to do because any include-files will be known before the scripts are included.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
                <property name="userFunc" type="string">
                        <description><![CDATA[The name of the function. If you specify the name with a '->' in, it's intepreted as a call to a method in a class.
 Two parameters are sent: A content variable (which is empty in this case, but not when used from stdWrap function .postUserFunc and .preUserFunc) and the second parameter is an array with the properties of this cObject if any.
@@ -5478,7 +5455,6 @@ This TypoScript will display all content element headers of a page in reversed o
 
 page = PAGE
 page.typeNum=0
-includeLibs.something = media/scripts/example_callfunction.php
 
 page.30 = USER
 page.30 {
@@ -5501,12 +5477,6 @@ These values are stored with cached pages which means they are also accessible w
                        <default><![CDATA[
 ]]></default>
                </property>
-               <property name="includeLibs" type="array">
-                       <description><![CDATA[With this you can include php-files with function libraries for use in your includescript in TYPO3.
-Please see the PAGE-object, which has the same property.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
                <property name="resources" type="array">
                        <description><![CDATA[Resources in list (internal)]]></description>
                        <default><![CDATA[
@@ -5780,21 +5750,6 @@ includeJSLibs.twitter.external = 1
                        <default><![CDATA[
 ]]></default>
                </property>
-               <property name="includeLibs" type="array">
-                       <description><![CDATA[With this you may include php-files. This does the same as "includeLibrary" in ->CONFIG but this can include more than one file. These files are included after the file of includeLibrary.
-
-NOTE:
-The toplevel object "includeLibs" and the scripts defined with this property is added to each other. Script-keys (that is the "array of strings"-value, like below "ts_address") from this property of the page overrides any scripts-keys from the toplevel "includeLibs" property!
-The script-filenames are of the datatype "resource".
-
-Example:
-includeLibs.ts_address = lib_filename.php
-includeLibs.ts_shop = lib_filename.php
-
-Please do not use the prefix shown above ("ts_") as this will probably be used by the standard TYPO3 libraries that will appear in the future. ]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
                <property name="inlineLanguageLabel" type="array">
                        <description><![CDATA[array of strings
                        ExtJS specific, adds language labels to the page.
@@ -6756,11 +6711,6 @@ This works only if the plugin calls $this->pi_setPiVarDefaults().]]></descriptio
                        <default><![CDATA[
 ]]></default>
                </property>
-               <property name="includeLibs" type="stringList">
-                       <description><![CDATA[Property setting up the USER / USER_INT object of the plugin]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
                <property name="userFunc" type="string">
                        <description><![CDATA[Property setting up the USER / USER_INT object of the plugin]]></description>
                        <default><![CDATA[
@@ -7355,7 +7305,6 @@ You can paste this example directly into a new template record.
 
 page = PAGE
 page.typeNum=0
-includeLibs.something = media/scripts/example_callfunction.php
 
 page.10 = TEXT
 page.10 {
index 6e7a36c..c134a6f 100644 (file)
@@ -57,7 +57,6 @@ var typoscriptWords = {
        'IMGMENUITEM': 'keyword',
        'IMGTEXT': 'keyword',
        'INCLUDE_TYPOSCRIPT': 'keyword',
-       'includeLibs': 'keyword',
        'JSMENU': 'keyword',
        'JSMENUITEM': 'keyword',
        'LIT': 'keyword',
@@ -1363,7 +1362,6 @@ var typoscriptWords = {
        'IMGMENUITEM': 'keyword',
        'IMGTEXT': 'keyword',
        'INCLUDE_TYPOSCRIPT': 'keyword',
-       'includeLibs': 'keyword',
        'JSMENU': 'keyword',
        'JSMENUITEM': 'keyword',
        'LIT': 'keyword',