[TASK] Mark ExtJS related API calls as deprecated
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / Utility / ExtensionManagementUtility.php
index 0e6c400..db407e8 100644 (file)
@@ -15,6 +15,8 @@ namespace TYPO3\CMS\Core\Utility;
  */
 
 use TYPO3\CMS\Core\Category\CategoryRegistry;
+use TYPO3\CMS\Core\Imaging\IconProvider\BitmapIconProvider;
+use TYPO3\CMS\Core\Imaging\IconRegistry;
 use TYPO3\CMS\Core\Migrations\TcaMigration;
 use TYPO3\CMS\Core\Package\PackageManager;
 
@@ -143,9 +145,11 @@ class ExtensionManagementUtility
      *
      * @throws \BadFunctionCallException
      * @return string
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9, use PathUtility::getAbsoluteWebPath(), or ->siteRelPath()
      */
     public static function extRelPath($key)
     {
+        GeneralUtility::logDeprecatedFunction();
         if (!static::$packageManager->isPackageActive($key)) {
             throw new \BadFunctionCallException('TYPO3 Fatal Error: Extension key "' . $key . '" is NOT loaded!', 1365429673);
         }
@@ -195,7 +199,7 @@ class ExtensionManagementUtility
         $result = false;
         // Build map of short keys referencing to real keys:
         if (!isset(self::$extensionKeyMap)) {
-            self::$extensionKeyMap = array();
+            self::$extensionKeyMap = [];
             foreach (static::$packageManager->getActivePackages() as $package) {
                 $shortKey = str_replace('_', '', $package->getPackageKey());
                 self::$extensionKeyMap[$shortKey] = $package->getPackageKey();
@@ -290,7 +294,7 @@ class ExtensionManagementUtility
             return;
         }
         list($positionIdentifier, $entityName) = GeneralUtility::trimExplode(':', $position);
-        $palettesChanged = array();
+        $palettesChanged = [];
 
         foreach ($GLOBALS['TCA'][$table]['types'] as $type => &$typeDetails) {
             // skip if we don't want to add the field for this type
@@ -298,7 +302,12 @@ class ExtensionManagementUtility
                 continue;
             }
             // skip if fields were already added
-            if (!isset($typeDetails['showitem']) || strpos($typeDetails['showitem'], $newFieldsString) !== false) {
+            if (!isset($typeDetails['showitem'])) {
+                continue;
+            }
+
+            $fieldArray = GeneralUtility::trimExplode(',', $typeDetails['showitem'], true);
+            if (in_array($newFieldsString, $fieldArray, true)) {
                 continue;
             }
 
@@ -415,7 +424,7 @@ class ExtensionManagementUtility
             }
             $fieldArrayWithOptions = GeneralUtility::trimExplode(',', $typeArray['showitem']);
             // Find the field we're handling
-            $newFieldStringArray = array();
+            $newFieldStringArray = [];
             foreach ($fieldArrayWithOptions as $fieldNumber => $fieldString) {
                 $newFieldStringArray[] = $fieldString;
                 $fieldArray = GeneralUtility::trimExplode(';', $fieldString);
@@ -424,7 +433,7 @@ class ExtensionManagementUtility
                 }
                 if (
                     isset($fieldArrayWithOptions[$fieldNumber + 1])
-                    && StringUtility::beginsWith($fieldArrayWithOptions[$fieldNumber + 1],  '--palette--')
+                    && strpos($fieldArrayWithOptions[$fieldNumber + 1], '--palette--') === 0
                 ) {
                     // Match for $field and next field is a palette - add fields to this one
                     $paletteName = GeneralUtility::trimExplode(';', $fieldArrayWithOptions[$fieldNumber + 1]);
@@ -527,7 +536,7 @@ class ExtensionManagementUtility
                     } else {
                         $offset = $relativeItemKey + 1;
                     }
-                    array_splice($GLOBALS['TCA'][$table]['columns'][$field]['config']['items'], $offset, 0, array(0 => $item));
+                    array_splice($GLOBALS['TCA'][$table]['columns'][$field]['config']['items'], $offset, 0, [0 => $item]);
                 }
             } else {
                 // Insert at new item at the end of the array if relative position was not found
@@ -549,49 +558,49 @@ class ExtensionManagementUtility
      *
      * @return array
      */
-    public static function getFileFieldTCAConfig($fieldName, array $customSettingOverride = array(), $allowedFileExtensions = '', $disallowedFileExtensions = '')
+    public static function getFileFieldTCAConfig($fieldName, array $customSettingOverride = [], $allowedFileExtensions = '', $disallowedFileExtensions = '')
     {
-        $fileFieldTCAConfig = array(
+        $fileFieldTCAConfig = [
             'type' => 'inline',
             'foreign_table' => 'sys_file_reference',
             'foreign_field' => 'uid_foreign',
             'foreign_sortby' => 'sorting_foreign',
             'foreign_table_field' => 'tablenames',
-            'foreign_match_fields' => array(
+            'foreign_match_fields' => [
                 'fieldname' => $fieldName
-            ),
+            ],
             'foreign_label' => 'uid_local',
             'foreign_selector' => 'uid_local',
-            'foreign_selector_fieldTcaOverride' => array(
-                'config' => array(
-                    'appearance' => array(
+            'foreign_selector_fieldTcaOverride' => [
+                'config' => [
+                    'appearance' => [
                         'elementBrowserType' => 'file',
                         'elementBrowserAllowed' => $allowedFileExtensions
-                    )
-                )
-            ),
-            'filter' => array(
-                array(
+                    ]
+                ]
+            ],
+            'filter' => [
+                [
                     'userFunc' => \TYPO3\CMS\Core\Resource\Filter\FileExtensionFilter::class . '->filterInlineChildren',
-                    'parameters' => array(
+                    'parameters' => [
                         'allowedFileExtensions' => $allowedFileExtensions,
                         'disallowedFileExtensions' => $disallowedFileExtensions
-                    )
-                )
-            ),
-            'appearance' => array(
+                    ]
+                ]
+            ],
+            'appearance' => [
                 'useSortable' => true,
-                'headerThumbnail' => array(
+                'headerThumbnail' => [
                     'field' => 'uid_local',
                     'width' => '45',
                     'height' => '45c',
-                ),
+                ],
                 'showPossibleLocalizationRecords' => false,
                 'showRemovedLocalizationRecords' => false,
                 'showSynchronizationLink' => false,
                 'showAllLocalizationLink' => false,
 
-                'enabledControls' => array(
+                'enabledControls' => [
                     'info' => true,
                     'new' => false,
                     'dragdrop' => true,
@@ -599,13 +608,13 @@ class ExtensionManagementUtility
                     'hide' => true,
                     'delete' => true,
                     'localize' => true,
-                ),
-            ),
-            'behaviour' => array(
+                ],
+            ],
+            'behaviour' => [
                 'localizationMode' => 'select',
                 'localizeChildrenAtParentLocalization' => true,
-            ),
-        );
+            ],
+        ];
         ArrayUtility::mergeRecursiveWithOverrule($fileFieldTCAConfig, $customSettingOverride);
         return $fileFieldTCAConfig;
     }
@@ -645,7 +654,7 @@ class ExtensionManagementUtility
     {
         $list = $newList = trim($list, ", \t\n\r\0\x0B");
 
-        list($location, $positionName) = GeneralUtility::trimExplode(':', $insertionPosition);
+        list($location, $positionName) = GeneralUtility::trimExplode(':', $insertionPosition, false, 2);
 
         if ($location !== 'replace') {
             $insertionList = self::removeDuplicatesForInsertion($insertionList, $list);
@@ -664,6 +673,7 @@ class ExtensionManagementUtility
         // The $insertPosition may be a palette: after:--palette--;;title
         // In the $list the palette may contain a LLL string in between the ;;
         // Adjust the regex to match that
+        $positionName = preg_quote($positionName, '/');
         if (strpos($positionName, ';;') !== false) {
             $positionName = str_replace(';;', ';[^;]*;', $positionName);
         }
@@ -707,13 +717,13 @@ class ExtensionManagementUtility
     protected static function removeDuplicatesForInsertion($insertionList, $list = '')
     {
         $insertionListParts = preg_split('/\\s*,\\s*/', $insertionList);
-        $listMatches = array();
+        $listMatches = [];
         if ($list !== '') {
             preg_match_all('/(?:^|,)\\s*\\b([^;,]+)\\b[^,]*/', $list, $listMatches);
             $listMatches = $listMatches[1];
         }
 
-        $cleanInsertionListParts = array();
+        $cleanInsertionListParts = [];
         foreach ($insertionListParts as $fieldName) {
             $fieldNameParts = explode(';', $fieldName, 2);
             $cleanFieldName = $fieldNameParts[0];
@@ -738,7 +748,7 @@ class ExtensionManagementUtility
      */
     protected static function explodeItemList($itemList)
     {
-        $items = array();
+        $items = [];
         $itemParts = GeneralUtility::trimExplode(',', $itemList, true);
         foreach ($itemParts as $itemPart) {
             $itemDetails = GeneralUtility::trimExplode(';', $itemPart, false, 5);
@@ -748,11 +758,11 @@ class ExtensionManagementUtility
                 $key .= count($items);
             }
             if (!isset($items[$key])) {
-                $items[$key] = array(
+                $items[$key] = [
                     'rawData' => $itemPart,
-                    'details' => array()
-                );
-                $details = array(0 => 'field', 1 => 'label', 2 => 'palette');
+                    'details' => []
+                ];
+                $details = [0 => 'field', 1 => 'label', 2 => 'palette'];
                 foreach ($details as $id => $property) {
                     $items[$key]['details'][$property] = isset($itemDetails[$id]) ? $itemDetails[$id] : '';
                 }
@@ -771,18 +781,18 @@ class ExtensionManagementUtility
      */
     protected static function generateItemList(array $items, $useRawData = false)
     {
-        $itemParts = array();
+        $itemParts = [];
         foreach ($items as $item => $itemDetails) {
             if (strpos($item, '--') !== false) {
                 // If $item is a separator (--div--) or palette (--palette--) then it may have been appended by a unique number. This must be stripped away here.
-                $item = str_replace(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), '', $item);
+                $item = str_replace([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], '', $item);
             }
             if ($useRawData) {
                 $itemParts[] = $itemDetails['rawData'];
             } else {
                 if (count($itemDetails['details']) > 1) {
-                    $details = array('palette', 'label', 'field');
-                    $elements = array();
+                    $details = ['palette', 'label', 'field'];
+                    $elements = [];
                     $addEmpty = false;
                     foreach ($details as $property) {
                         if ($itemDetails['details'][$property] !== '' || $addEmpty) {
@@ -815,27 +825,26 @@ class ExtensionManagementUtility
      * Adds an ExtJS module (main or sub) to the backend interface
      * FOR USE IN ext_tables.php FILES
      *
-     * @static
      * @param string $extensionName
      * @param string $mainModuleName Is the main module key
      * @param string $subModuleName Is the submodule key, if blank a plain main module is generated
      * @param string $position Passed to \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addModule, see reference there
      * @param array $moduleConfiguration Icon with array keys: access, icon, labels to configure the module
      * @throws \InvalidArgumentException
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9, use addModule instead for a regular module, as ExtJS usage is discouraged,
      */
-    public static function addExtJSModule($extensionName, $mainModuleName, $subModuleName = '', $position = '', array $moduleConfiguration = array())
+    public static function addExtJSModule($extensionName, $mainModuleName, $subModuleName = '', $position = '', array $moduleConfiguration = [])
     {
+        GeneralUtility::logDeprecatedFunction();
         if (empty($extensionName)) {
             throw new \InvalidArgumentException('The extension name must not be empty', 1325938973);
         }
-        $extensionKey = GeneralUtility::camelCaseToLowerCaseUnderscored($extensionName);
         $extensionName = str_replace(' ', '', ucwords(str_replace('_', ' ', $extensionName)));
-        $defaultModuleConfiguration = array(
+        $defaultModuleConfiguration = [
             'access' => 'admin',
-            'icon' => self::extRelPath('backend') . 'Resources/Public/Images/Logo.png',
+            'icon' => 'EXT:backend/Resources/Public/Images/Logo.png',
             'labels' => '',
-            'extRelPath' => self::extRelPath($extensionKey) . 'Classes/'
-        );
+        ];
         // Add mandatory parameter to use new pagetree
         if ($mainModuleName === 'web') {
             $defaultModuleConfiguration['navigationComponentId'] = 'typo3-pagetree';
@@ -850,7 +859,7 @@ class ExtensionManagementUtility
         $moduleConfiguration['name'] = $moduleSignature;
         $moduleConfiguration['script'] = 'extjspaneldummy.html';
         $moduleConfiguration['extensionName'] = $extensionName;
-        $moduleConfiguration['configureModuleFunction'] = array(ExtensionManagementUtility::class, 'configureModule');
+        $moduleConfiguration['configureModuleFunction'] = [self::class, 'configureModule'];
         $GLOBALS['TBE_MODULES']['_configuration'][$moduleSignature] = $moduleConfiguration;
         self::addModule($mainModuleName, $subModuleName, $position);
     }
@@ -865,24 +874,23 @@ class ExtensionManagementUtility
     public static function configureModule($moduleSignature)
     {
         $moduleConfiguration = $GLOBALS['TBE_MODULES']['_configuration'][$moduleSignature];
-        $iconPathAndFilename = $moduleConfiguration['icon'];
-        if (substr($iconPathAndFilename, 0, 4) === 'EXT:') {
-            list($extensionKey, $relativePath) = explode('/', substr($iconPathAndFilename, 4), 2);
-            $iconPathAndFilename = self::extPath($extensionKey) . $relativePath;
-        }
-        $moduleLabels = array(
-            'tabs_images' => array(
-                'tab' => $iconPathAndFilename
-            ),
-            'labels' => array(
-                'tablabel' => $GLOBALS['LANG']->sL($moduleConfiguration['labels'] . ':mlang_labels_tablabel'),
-                'tabdescr' => $GLOBALS['LANG']->sL($moduleConfiguration['labels'] . ':mlang_labels_tabdescr')
-            ),
-            'tabs' => array(
-                'tab' => $GLOBALS['LANG']->sL($moduleConfiguration['labels'] . ':mlang_tabs_tab')
-            )
-        );
-        $GLOBALS['LANG']->addModuleLabels($moduleLabels, $moduleSignature . '_');
+        if (!empty($moduleConfiguration['labels']['tabs_images']['tab'])) {
+            GeneralUtility::deprecationLog('Module registration for backend module "' . $moduleSignature . '" uses old referencing for the icon. Use the configuration option "icon" directly instead of [labels][tabs_images][tab]. The old option is removed with TYPO3 v9.');
+            $moduleConfiguration['icon'] = $moduleConfiguration['labels']['tabs_images']['tab'];
+            unset($moduleConfiguration['labels']['tabs_images']['tab']);
+        }
+
+        // Register the icon and move it too "iconIdentifier"
+        if (!empty($moduleConfiguration['icon'])) {
+            $iconIdentifier = 'module-' . $moduleSignature;
+            $iconRegistry = GeneralUtility::makeInstance(IconRegistry::class);
+            $iconRegistry->registerIcon($iconIdentifier, BitmapIconProvider::class, [
+                'source' => GeneralUtility::getFileAbsFileName($moduleConfiguration['icon'])
+            ]);
+            $moduleConfiguration['iconIdentifier'] = $iconIdentifier;
+            unset($moduleConfiguration['icon']);
+        }
+
         return $moduleConfiguration;
     }
 
@@ -897,7 +905,7 @@ class ExtensionManagementUtility
      * @param array $moduleConfiguration additional configuration, previously put in "conf.php" of the module directory
      * @return void
      */
-    public static function addModule($main, $sub = '', $position = '', $path = null, $moduleConfiguration = array())
+    public static function addModule($main, $sub = '', $position = '', $path = null, $moduleConfiguration = [])
     {
         // If there is already a main module by this name:
         // Adding the submodule to the correct position:
@@ -934,6 +942,23 @@ class ExtensionManagementUtility
         // add additional configuration
         if (is_array($moduleConfiguration) && !empty($moduleConfiguration)) {
             $fullModuleSignature = $main . ($sub ? '_' . $sub : '');
+
+            if (!empty($moduleConfiguration['labels']['tabs_images']['tab'])) {
+                GeneralUtility::deprecationLog('Module registration for module "' . $fullModuleSignature . '" uses old referencing for the icon. Use the configuration option "icon" directly instead of [labels][tabs_images][tab]. The old option is removed with TYPO3 v9.');
+                $moduleConfiguration['icon'] = $moduleConfiguration['labels']['tabs_images']['tab'];
+                unset($moduleConfiguration['labels']['tabs_images']['tab']);
+            }
+
+            if (!empty($moduleConfiguration['icon'])) {
+                $iconIdentifier = 'module-' . $fullModuleSignature;
+                $iconRegistry = GeneralUtility::makeInstance(IconRegistry::class);
+                $iconRegistry->registerIcon($iconIdentifier, BitmapIconProvider::class, [
+                    'source' => GeneralUtility::getFileAbsFileName($moduleConfiguration['icon'])
+                ]);
+                $moduleConfiguration['iconIdentifier'] = $iconIdentifier;
+                unset($moduleConfiguration['icon']);
+            }
+
             $GLOBALS['TBE_MODULES']['_configuration'][$fullModuleSignature] = $moduleConfiguration;
         }
     }
@@ -946,14 +971,15 @@ class ExtensionManagementUtility
      * @param string $moduleName Optional: must be <mainmodule> or <mainmodule>_<submodule>
      * @param string $accessLevel Optional: can be 'admin' or 'user,group'
      * @return void
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
      */
     public static function registerExtDirectComponent($endpointName, $callbackClass, $moduleName = null, $accessLevel = null)
     {
-        $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ExtDirect'][$endpointName] = array(
+        $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ExtDirect'][$endpointName] = [
             'callbackClass' => $callbackClass,
             'moduleName' => $moduleName,
             'accessLevel' => $accessLevel
-        );
+        ];
     }
 
     /**
@@ -962,13 +988,15 @@ class ExtensionManagementUtility
      * @param string $ajaxId Identifier of the handler, that is used in the request
      * @param string $callbackMethod TYPO3 callback method (className->methodName).
      * @param bool $csrfTokenCheck Only set this to FALSE if you are sure that the registered handler does not modify any data!
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
      */
     public static function registerAjaxHandler($ajaxId, $callbackMethod, $csrfTokenCheck = true)
     {
-        $GLOBALS['TYPO3_CONF_VARS']['BE']['AJAX'][$ajaxId] = array(
+        GeneralUtility::logDeprecatedFunction();
+        $GLOBALS['TYPO3_CONF_VARS']['BE']['AJAX'][$ajaxId] = [
             'callbackMethod' => $callbackMethod,
             'csrfTokenCheck' => $csrfTokenCheck
-        );
+        ];
     }
 
     /**
@@ -988,11 +1016,11 @@ class ExtensionManagementUtility
      */
     public static function insertModuleFunction($modname, $className, $classPath = null, $title, $MM_key = 'function', $WS = '')
     {
-        $GLOBALS['TBE_MODULES_EXT'][$modname]['MOD_MENU'][$MM_key][$className] = array(
+        $GLOBALS['TBE_MODULES_EXT'][$modname]['MOD_MENU'][$MM_key][$className] = [
             'name' => $className,
             'title' => $title,
             'ws' => $WS
-        );
+        ];
     }
 
     /**
@@ -1001,7 +1029,6 @@ class ExtensionManagementUtility
      * This also tracks which content was added by extensions (in TYPO3_CONF_VARS_extensionAdded)
      * so that they cannot be editted again through the Install Tool.
      *
-     * @static
      * @param string $group The group ('FE', 'BE', 'SYS' ...)
      * @param string $key The key of this setting within the group
      * @param string $content The text to add (include leading "\n" in case of multi-line entries)
@@ -1046,20 +1073,20 @@ class ExtensionManagementUtility
     /**
      * Adds a reference to a locallang file with $GLOBALS['TCA_DESCR'] labels
      * FOR USE IN ext_tables.php FILES
-     * eg. \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('pages', 'EXT:lang/locallang_csh_pages.xlf'); for the pages table or \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('_MOD_web_layout', 'EXT:frontend/Resources/Private/Language/locallang_csh_weblayout.xlf'); for the Web > Page module.
+     * eg. \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('pages', 'EXT:lang/Resources/Private/Language/locallang_csh_pages.xlf'); for the pages table or \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('_MOD_web_layout', 'EXT:frontend/Resources/Private/Language/locallang_csh_weblayout.xlf'); for the Web > Page module.
      *
      * @param string $tca_descr_key Description key. Typically a database table (like "pages") but for applications can be other strings, but prefixed with "_MOD_")
-     * @param string $file_ref File reference to locallang file, eg. "EXT:lang/locallang_csh_pages.xlf" (or ".xml")
+     * @param string $file_ref File reference to locallang file, eg. "EXT:lang/Resources/Private/Language/locallang_csh_pages.xlf" (or ".xml")
      * @return void
      */
     public static function addLLrefForTCAdescr($tca_descr_key, $file_ref)
     {
         if ($tca_descr_key) {
             if (!is_array($GLOBALS['TCA_DESCR'][$tca_descr_key])) {
-                $GLOBALS['TCA_DESCR'][$tca_descr_key] = array();
+                $GLOBALS['TCA_DESCR'][$tca_descr_key] = [];
             }
             if (!is_array($GLOBALS['TCA_DESCR'][$tca_descr_key]['refs'])) {
-                $GLOBALS['TCA_DESCR'][$tca_descr_key]['refs'] = array();
+                $GLOBALS['TCA_DESCR'][$tca_descr_key]['refs'] = [];
             }
             $GLOBALS['TCA_DESCR'][$tca_descr_key]['refs'][] = $file_ref;
         }
@@ -1072,7 +1099,7 @@ class ExtensionManagementUtility
      * @param string $componentId
      * @param string $extensionKey
      * @throws \RuntimeException
-     *@return void
+     * @return void
      */
     public static function addNavigationComponent($module, $componentId, $extensionKey = null)
     {
@@ -1080,11 +1107,11 @@ class ExtensionManagementUtility
         if (!isset($extensionKey)) {
             throw new \RuntimeException('No extensionKey set in addNavigationComponent(). Provide it as third Parameter', 1404068039);
         }
-        $GLOBALS['TBE_MODULES']['_navigationComponents'][$module] = array(
+        $GLOBALS['TBE_MODULES']['_navigationComponents'][$module] = [
             'componentId' => $componentId,
             'extKey' => $extensionKey,
             'isCoreComponent' => false
-        );
+        ];
     }
 
     /**
@@ -1109,8 +1136,8 @@ class ExtensionManagementUtility
      * Adds a service to the global services array
      *
      * @param string $extKey Extension key
-     * @param string $serviceType Service type, must not be prefixed "tx_" or "Tx_
-     * @param string $serviceKey Service key, must be prefixed "tx_", "Tx_" or "user_
+     * @param string $serviceType Service type, must not be prefixed "tx_" or "Tx_"
+     * @param string $serviceKey Service key, must be prefixed "tx_", "Tx_" or "user_"
      * @param array $info Service description array
      * @return void
      */
@@ -1141,7 +1168,7 @@ class ExtensionManagementUtility
                 }
             }
             // Convert subtype list to array for quicker access
-            $GLOBALS['T3_SERVICES'][$serviceType][$serviceKey]['serviceSubTypes'] = array();
+            $GLOBALS['T3_SERVICES'][$serviceType][$serviceKey]['serviceSubTypes'] = [];
             $serviceSubTypes = GeneralUtility::trimExplode(',', $info['subtype']);
             foreach ($serviceSubTypes as $subtype) {
                 $GLOBALS['T3_SERVICES'][$serviceType][$serviceKey]['serviceSubTypes'][$subtype] = $subtype;
@@ -1157,7 +1184,7 @@ class ExtensionManagementUtility
      * @param mixed $excludeServiceKeys Service keys that should be excluded in the search for a service. Array or comma list.
      * @return mixed Service info array if a service was found, FALSE otherwise
      */
-    public static function findService($serviceType, $serviceSubType = '', $excludeServiceKeys = array())
+    public static function findService($serviceType, $serviceSubType = '', $excludeServiceKeys = [])
     {
         $serviceKey = false;
         $serviceInfo = false;
@@ -1173,7 +1200,7 @@ class ExtensionManagementUtility
                 }
                 // Select a subtype randomly
                 // Useful to start a service by service key without knowing his subtypes - for testing purposes
-                if ($serviceSubType == '*') {
+                if ($serviceSubType === '*') {
                     $serviceSubType = key($info['serviceSubTypes']);
                 }
                 // This matches empty subtype too
@@ -1364,24 +1391,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);
@@ -1421,7 +1445,7 @@ tt_content.' . $key . $suffix . ' {
 
     /**
      * Call this method to add an entry in the static template list found in sys_templates
-     * FOR USE IN ext_tables.php FILES or files in Configuration/TCA/Overrides/*.php Use the latter to benefit from TCA caching!
+     * FOR USE IN ext_tables.php FILES or in Configuration/TCA/Overrides/sys_template.php Use the latter to benefit from TCA caching!
      *
      * @param string $extKey Is of course the extension key
      * @param string $path Is the path where the template files (fixed names) include_static.txt (integer list of uids from the table "static_templates"), constants.txt, setup.txt, and include_static_file.txt is found (relative to extPath, eg. 'static/'). The file include_static_file.txt, allows you to include other static templates defined in files, from your static template, and thus corresponds to the field 'include_static_file' in the sys_template table. The syntax for this is a comma separated list of static templates to include, like:  EXT:css_styled_content/static/,EXT:da_newsletter_subscription/static/,EXT:cc_random_image/pi2/static/
@@ -1433,14 +1457,14 @@ tt_content.' . $key . $suffix . ' {
     {
         if ($extKey && $path && is_array($GLOBALS['TCA']['sys_template']['columns'])) {
             $value = str_replace(',', '', 'EXT:' . $extKey . '/' . $path);
-            $itemArray = array(trim($title . ' (' . $extKey . ')'), $value);
+            $itemArray = [trim($title . ' (' . $extKey . ')'), $value];
             $GLOBALS['TCA']['sys_template']['columns']['include_static_file']['config']['items'][] = $itemArray;
         }
     }
 
     /**
      * Call this method to add an entry in the pageTSconfig list found in pages
-     * FOR USE in files in Configuration/TCA/Overrides/*.php Use the latter to benefit from TCA caching!
+     * FOR USE in Configuration/TCA/Overrides/pages.php Use the latter to benefit from TCA caching!
      *
      * @param string $extKey The extension key
      * @param string $filePath The path where the TSconfig file is located
@@ -1459,8 +1483,8 @@ tt_content.' . $key . $suffix . ' {
             throw new \InvalidArgumentException('No TCA definition for table "pages".', 1447789492);
         }
 
-        $value = str_replace(',',  '', 'EXT:' . $extKey . '/' . $filePath);
-        $itemArray = array(trim($title . ' (' . $extKey . ')'), $value);
+        $value = str_replace(',', '', 'EXT:' . $extKey . '/' . $filePath);
+        $itemArray = [trim($title . ' (' . $extKey . ')'), $value];
         $GLOBALS['TCA']['pages']['columns']['tsconfig_includes']['config']['items'][] = $itemArray;
     }
 
@@ -1553,10 +1577,17 @@ tt_content.' . $key . $suffix . ' {
     public static function getExtensionIcon($extensionPath, $returnFullPath = false)
     {
         $icon = '';
-        $iconFileTypesToCheckFor = array('png', 'svg', 'gif');
-        foreach ($iconFileTypesToCheckFor as $fileType) {
-            if (file_exists($extensionPath . 'ext_icon.' . $fileType)) {
-                $icon = 'ext_icon.' . $fileType;
+        $locationsToCheckFor = [
+            'Resources/Public/Icons/Extension.png',
+            'Resources/Public/Icons/Extension.svg',
+            'Resources/Public/Icons/Extension.gif',
+            'ext_icon.png',
+            'ext_icon.svg',
+            'ext_icon.gif',
+        ];
+        foreach ($locationsToCheckFor as $fileLocation) {
+            if (file_exists($extensionPath . $fileLocation)) {
+                $icon = $fileLocation;
                 break;
             }
         }
@@ -1622,7 +1653,7 @@ tt_content.' . $key . $suffix . ' {
     protected static function createExtLocalconfCacheEntry()
     {
         $extensionInformation = $GLOBALS['TYPO3_LOADED_EXT'];
-        $phpCodeToCache = array();
+        $phpCodeToCache = [];
         // Set same globals as in loadSingleExtLocalconfFiles()
         $phpCodeToCache[] = '/**';
         $phpCodeToCache[] = ' * Compiled ext_localconf.php cache file';
@@ -1644,7 +1675,7 @@ tt_content.' . $key . $suffix . ' {
                 $phpCodeToCache[] = '$_EXTCONF = $GLOBALS[\'TYPO3_CONF_VARS\'][\'EXT\'][\'extConf\'][$_EXTKEY];';
                 $phpCodeToCache[] = '';
                 // Add ext_localconf.php content of extension
-                $phpCodeToCache[] = trim(GeneralUtility::getUrl($extensionDetails['ext_localconf.php']));
+                $phpCodeToCache[] = trim(file_get_contents($extensionDetails['ext_localconf.php']));
                 $phpCodeToCache[] = '';
                 $phpCodeToCache[] = '';
             }
@@ -1709,7 +1740,7 @@ tt_content.' . $key . $suffix . ' {
      */
     protected static function buildBaseTcaFromSingleFiles()
     {
-        $GLOBALS['TCA'] = array();
+        $GLOBALS['TCA'] = [];
 
         $activePackages = static::$packageManager->getActivePackages();
 
@@ -1758,13 +1789,13 @@ tt_content.' . $key . $suffix . ' {
         }
 
         // TCA migration
-        // @deprecated since TYPO3 CMS 7, will be removed in TYPO3 CMS 8. This can be removed *if* no additional TCA migration is added with CMS 8, see class TcaMigration
+        // @deprecated since TYPO3 CMS 7. Not removed in TYPO3 CMS 8 though. This call will stay for now to allow further TCA migrations in 8.
         $tcaMigration = GeneralUtility::makeInstance(TcaMigration::class);
         $GLOBALS['TCA'] = $tcaMigration->migrate($GLOBALS['TCA']);
         $messages = $tcaMigration->getMessages();
         if (!empty($messages)) {
             $context = 'Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations'
-                . ' will be removed with TYPO3 CMS 8. The backend module "Configuration -> TCA" shows the modified values.'
+                . ' will be removed. The backend module "Configuration -> TCA" shows the modified values.'
                 . ' Please adapt these areas:';
             array_unshift($messages, $context);
             GeneralUtility::deprecationLog(implode(LF, $messages));
@@ -1785,7 +1816,7 @@ tt_content.' . $key . $suffix . ' {
      */
     protected static function emitTcaIsBeingBuiltSignal(array $tca)
     {
-        list($tca) = static::getSignalSlotDispatcher()->dispatch(__CLASS__, 'tcaIsBeingBuilt', array($tca));
+        list($tca) = static::getSignalSlotDispatcher()->dispatch(__CLASS__, 'tcaIsBeingBuilt', [$tca]);
         $GLOBALS['TCA'] = $tca;
     }
 
@@ -1799,7 +1830,7 @@ tt_content.' . $key . $suffix . ' {
     {
         /** @var $codeCache \TYPO3\CMS\Core\Cache\Frontend\PhpFrontend */
         $codeCache = self::getCacheManager()->getCache('cache_core');
-        $codeCache->set(static::getBaseTcaCacheIdentifier(), serialize(array('tca' => $GLOBALS['TCA'], 'categoryRegistry' => CategoryRegistry::getInstance())));
+        $codeCache->set(static::getBaseTcaCacheIdentifier(), serialize(['tca' => $GLOBALS['TCA'], 'categoryRegistry' => CategoryRegistry::getInstance()]));
     }
 
     /**
@@ -1874,7 +1905,7 @@ tt_content.' . $key . $suffix . ' {
     protected static function createExtTablesCacheEntry()
     {
         $extensionInformation = $GLOBALS['TYPO3_LOADED_EXT'];
-        $phpCodeToCache = array();
+        $phpCodeToCache = [];
         // Set same globals as in loadSingleExtTablesFiles()
         $phpCodeToCache[] = '/**';
         $phpCodeToCache[] = ' * Compiled ext_tables.php cache file';
@@ -1899,7 +1930,7 @@ tt_content.' . $key . $suffix . ' {
                 $phpCodeToCache[] = '$_EXTCONF = $GLOBALS[\'TYPO3_CONF_VARS\'][\'EXT\'][\'extConf\'][$_EXTKEY];';
                 $phpCodeToCache[] = '';
                 // Add ext_tables.php content of extension
-                $phpCodeToCache[] = trim(GeneralUtility::getUrl($extensionDetails['ext_tables.php']));
+                $phpCodeToCache[] = trim(file_get_contents($extensionDetails['ext_tables.php']));
                 $phpCodeToCache[] = '';
             }
         }
@@ -1997,7 +2028,7 @@ tt_content.' . $key . $suffix . ' {
      * @see addTCAcolumns
      * @see addToAllTCAtypes
      */
-    public static function makeCategorizable($extensionKey, $tableName, $fieldName = 'categories', array $options = array(), $override = false)
+    public static function makeCategorizable($extensionKey, $tableName, $fieldName = 'categories', array $options = [], $override = false)
     {
         // Update the category registry
         $result = CategoryRegistry::getInstance()->add($extensionKey, $tableName, $fieldName, $options, $override);