diff --git a/setup/runtimeenv.class.inc.php b/setup/runtimeenv.class.inc.php index 0158c18c7..c38eb17c0 100644 --- a/setup/runtimeenv.class.inc.php +++ b/setup/runtimeenv.class.inc.php @@ -1479,28 +1479,31 @@ class RunTimeEnvironment // Check that all the extensions have a code $aNoCodeExtensionSourceDirs = []; $bSetupFailure = false; + $aNoCodeExtensionLabelsThatBreakSetup = []; foreach ($oExtensionsMap->GetAllExtensions() as $oExtension) { if (in_array($oExtension->sCode, $aSelectedExtensionCodes)) { $oExtension->bMarkedAsChosen = in_array($oExtension->sCode, $aSelectedExtensionCodes); } if (empty($oExtension->sCode)) { - if ($oExtension->bMarkedAsChosen){ - $bSetupFailure = true; - } - - if (empty($oExtension->sLabel)){ + if (empty($oExtension->sLabel)) { + $sExtensionLabel = $oExtension->sSourceDir; $aNoCodeExtensionSourceDirs = [$oExtension->sSourceDir]; } else { $sExtensionLabel = $oExtension->sLabel; $aNoCodeExtensionSourceDirs = [$sExtensionLabel => $oExtension->sSourceDir]; } + + if ($oExtension->bMarkedAsChosen) { + $aNoCodeExtensionLabelsThatBreakSetup[]= $sExtensionLabel; + $bSetupFailure = true; + } } } - if (count($aNoCodeExtensionSourceDirs) >0){ - if ($bSetupFailure){ - $sErrorMessage = 'Selected extension(s) cannot be installed: Missing extension code'; + if (count($aNoCodeExtensionSourceDirs) > 0) { + if ($bSetupFailure) { + $sErrorMessage = sprintf('Selected extension(s) cannot be installed: Missing extension code (%s)', implode(',', $aNoCodeExtensionLabelsThatBreakSetup)); $e = new CoreException($sErrorMessage); SetupLog::Exception($sErrorMessage, $e, null, $aNoCodeExtensionSourceDirs); throw $e; diff --git a/tests/php-unit-tests/unitary-tests/setup/RunTimeEnvironmentTest.php b/tests/php-unit-tests/unitary-tests/setup/RunTimeEnvironmentTest.php index 72f73dcbb..a1ccbd70e 100644 --- a/tests/php-unit-tests/unitary-tests/setup/RunTimeEnvironmentTest.php +++ b/tests/php-unit-tests/unitary-tests/setup/RunTimeEnvironmentTest.php @@ -70,7 +70,7 @@ XML; $oRunTimeEnvironment = $this->CreateRunTimeEnvironment($sToken); $this->expectException(Exception::class); - $this->expectExceptionMessage('Selected extension(s) cannot be installed: Missing extension code'); + $this->expectExceptionMessage("Selected extension(s) cannot be installed: Missing extension code (Broken extension)"); $oRunTimeEnvironment->DoCompile([""], [], [], $sSourceDirRelative, $sExtensionsDirRelative); } @@ -93,7 +93,7 @@ XML; $oRunTimeEnvironment = $this->CreateRunTimeEnvironment($sToken); $this->expectException(Exception::class); - $this->expectExceptionMessage('Selected extension(s) cannot be installed: Missing extension code'); + $this->expectExceptionMessage("Selected extension(s) cannot be installed: Missing extension code ($sExtensionsDirAbsolute)"); $oRunTimeEnvironment->DoCompile([""], [], [], $sSourceDirRelative, $sExtensionsDirRelative, false); }