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.
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.