MDL-48493 admin: Fix PHP warning thrown if unable to detect component
authorDavid Mudrák <david@moodle.com>
Thu, 22 Jan 2015 09:02:01 +0000 (10:02 +0100)
committerDavid Mudrák <david@moodle.com>
Thu, 22 Jan 2015 09:02:01 +0000 (10:02 +0100)
The method detect_plugin_component() returns false or string. The
normalize_component() expects strings only. Passing false to it
(typically when the plugin does not declare its component) caused the
PHP warning.

Credit goes to Ankit Agarwal for spotting this during testing.

admin/tool/installaddon/index.php

index d7eb99b..e493296 100644 (file)
@@ -55,11 +55,15 @@ if ($form->is_cancelled()) {
     if (empty($data->plugintype)) {
         $versiondir = make_temp_directory('tool_installaddon/'.$jobid.'/version');
         $detected = $installer->detect_plugin_component($sourcedir.'/'.$zipfilename, $versiondir);
     if (empty($data->plugintype)) {
         $versiondir = make_temp_directory('tool_installaddon/'.$jobid.'/version');
         $detected = $installer->detect_plugin_component($sourcedir.'/'.$zipfilename, $versiondir);
-        list($detectedtype, $detectedname) = core_component::normalize_component($detected);
-        if ($detectedtype and $detectedname and $detectedtype !== 'core') {
-            $data->plugintype = $detectedtype;
-        } else {
+        if (empty($detected)) {
             $form->require_explicit_plugintype();
             $form->require_explicit_plugintype();
+        } else {
+            list($detectedtype, $detectedname) = core_component::normalize_component($detected);
+            if ($detectedtype and $detectedname and $detectedtype !== 'core') {
+                $data->plugintype = $detectedtype;
+            } else {
+                $form->require_explicit_plugintype();
+            }
         }
     }
     // Redirect to the validation page.
         }
     }
     // Redirect to the validation page.