[TASK] Check for proper extension key parts 69/28469/9
authorPascal Dürsteler <pascal.duersteler@gmail.com>
Mon, 17 Mar 2014 13:50:43 +0000 (14:50 +0100)
committerWouter Wolters <typo3@wouterwolters.nl>
Wed, 15 Jul 2015 18:06:16 +0000 (20:06 +0200)
Introduce a check for proper vendor names. If the vendor name of an
extension does not begin with a capital letter, a warning is logged
to the deprecation log.

As improper vendor names lead to errors, this check can be seen as
a first step to restrict the usage of extensions with wrong vendor
names, similar to a deprecation process.

Additionally, a refactoring of copy-pasted checks is made.

Resolves: #56944
Releases: master
Change-Id: I085f63e29c1639c0cc49fa43e225b46049d67003
Reviewed-on: http://review.typo3.org/28469
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
typo3/sysext/extbase/Classes/Utility/ExtensionUtility.php

index b22a7bb..696f0c2 100644 (file)
@@ -43,18 +43,19 @@ class ExtensionUtility {
         * @return void
         */
        static public function configurePlugin($extensionName, $pluginName, array $controllerActions, array $nonCacheableControllerActions = array(), $pluginType = self::PLUGIN_TYPE_PLUGIN) {
-               if (empty($pluginName)) {
-                       throw new \InvalidArgumentException('The plugin name must not be empty', 1239891987);
-               }
-               if (empty($extensionName)) {
-                       throw new \InvalidArgumentException('The extension name was invalid (must not be empty and must match /[A-Za-z][_A-Za-z0-9]/)', 1239891989);
-               }
+               self::checkPluginNameFormat($pluginName);
+               self::checkExtensionNameFormat($extensionName);
+
                // Check if vendor name is prepended to extensionName in the format {vendorName}.{extensionName}
                $vendorName = NULL;
                $delimiterPosition = strrpos($extensionName, '.');
                if ($delimiterPosition !== FALSE) {
                        $vendorName = str_replace('.', '\\', substr($extensionName, 0, $delimiterPosition));
                        $extensionName = substr($extensionName, $delimiterPosition + 1);
+
+                       if (!empty($vendorName)) {
+                               self::checkVendorNameFormat($vendorName, $extensionName);
+                       }
                }
                $extensionName = str_replace(' ', '', ucwords(str_replace('_', ' ', $extensionName)));
 
@@ -113,12 +114,9 @@ tt_content.' . $pluginSignature . ' {
         * @return void
         */
        static public function registerPlugin($extensionName, $pluginName, $pluginTitle, $pluginIconPathAndFilename = NULL) {
-               if (empty($pluginName)) {
-                       throw new \InvalidArgumentException('The plugin name must not be empty', 1239891988);
-               }
-               if (empty($extensionName)) {
-                       throw new \InvalidArgumentException('The extension name was invalid (must not be empty and must match /[A-Za-z][_A-Za-z0-9]/)', 1239891991);
-               }
+               self::checkPluginNameFormat($pluginName);
+               self::checkExtensionNameFormat($extensionName);
+
                $delimiterPosition = strrpos($extensionName, '.');
                if ($delimiterPosition !== FALSE) {
                        $extensionName = substr($extensionName, $delimiterPosition + 1);
@@ -170,14 +168,17 @@ tt_content.' . $pluginSignature . ' {
         * @return void
         */
        static public function registerModule($extensionName, $mainModuleName = '', $subModuleName = '', $position = '', array $controllerActions = array(), array $moduleConfiguration = array()) {
-               if (empty($extensionName)) {
-                       throw new \InvalidArgumentException('The extension name must not be empty', 1239891990);
-               }
+               self::checkExtensionNameFormat($extensionName);
+
                // Check if vendor name is prepended to extensionName in the format {vendorName}.{extensionName}
                $vendorName = NULL;
                if (FALSE !== $delimiterPosition = strrpos($extensionName, '.')) {
                        $vendorName = str_replace('.', '\\', substr($extensionName, 0, $delimiterPosition));
                        $extensionName = substr($extensionName, $delimiterPosition + 1);
+
+                       if (!empty($vendorName)) {
+                               self::checkVendorNameFormat($vendorName, $extensionName);
+                       }
                }
                $extensionKey = \TYPO3\CMS\Core\Utility\GeneralUtility::camelCaseToLowerCaseUnderscored($extensionName);
                $extensionName = str_replace(' ', '', ucwords(str_replace('_', ' ', $extensionName)));
@@ -235,4 +236,43 @@ tt_content.' . $pluginSignature . ' {
                $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['typeConverters'][] = $typeConverterClassName;
        }
 
+       /**
+        * Check a given vendor name for CGL compliance.
+        * Log a deprecation message if it is not.
+        *
+        * @param string $vendorName The vendor name to check
+        * @param string $extensionName The extension name that is affected
+        * @return void
+        */
+       static protected function checkVendorNameFormat($vendorName, $extensionName) {
+               if (preg_match('/^[A-Z]/', $vendorName) !== 1) {
+                       \TYPO3\CMS\Core\Utility\GeneralUtility::deprecationLog('The vendor name from tx_' . $extensionName . ' must begin with a capital letter.');
+               }
+       }
+
+       /**
+        * Check a given extension name for validity.
+        *
+        * @param string $extensionName The name of the extension
+        * @throws \InvalidArgumentException
+        * @return void
+        */
+       static protected function checkExtensionNameFormat($extensionName) {
+               if (empty($extensionName)) {
+                       throw new \InvalidArgumentException('The extension name must not be empty', 1239891990);
+               }
+       }
+
+       /**
+        * Check a given plugin name for validity.
+        *
+        * @param string $pluginName The name of the plugin
+        * @throws \InvalidArgumentException
+        * @return void
+        */
+       static protected function checkPluginNameFormat($pluginName) {
+               if (empty($pluginName)) {
+                       throw new \InvalidArgumentException('The plugin name must not be empty', 1239891988);
+               }
+       }
 }