EnabledExtensionsValidator.php
Namespace
Drupal\package_manager\ValidatorFile
-
core/
modules/ package_manager/ src/ Validator/ EnabledExtensionsValidator.php
View source
<?php
declare (strict_types=1);
namespace Drupal\package_manager\Validator;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Extension\ThemeHandlerInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\package_manager\ComposerInspector;
use Drupal\package_manager\Event\PreApplyEvent;
use Drupal\package_manager\PathLocator;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Validates no enabled Drupal extensions are removed from the stage directory.
*
* @internal
* This is an internal part of Package Manager and may be changed or removed
* at any time without warning. External code should not interact with this
* class.
*/
final class EnabledExtensionsValidator implements EventSubscriberInterface {
use StringTranslationTrait;
public function __construct(PathLocator $pathLocator, ModuleHandlerInterface $moduleHandler, ComposerInspector $composerInspector, ThemeHandlerInterface $themeHandler) {
}
/**
* Validates that no enabled Drupal extensions have been removed.
*
* @param \Drupal\package_manager\Event\PreApplyEvent $event
* The event object.
*/
public function validate(PreApplyEvent $event) : void {
$active_packages_list = $this->composerInspector
->getInstalledPackagesList($this->pathLocator
->getProjectRoot());
$stage_packages_list = $this->composerInspector
->getInstalledPackagesList($event->stage
->getStageDirectory());
$extensions_list = $this->moduleHandler
->getModuleList() + $this->themeHandler
->listInfo();
foreach ($extensions_list as $extension) {
$extension_name = $extension->getName();
$package = $active_packages_list->getPackageByDrupalProjectName($extension_name);
if ($package && $stage_packages_list->getPackageByDrupalProjectName($extension_name) === NULL) {
$removed_project_messages[] = t("'@name' @type (provided by <code>@package</code>)", [
'@name' => $extension_name,
'@type' => $extension->getType(),
'@package' => $package->name,
]);
}
}
if (!empty($removed_project_messages)) {
$removed_packages_summary = $this->formatPlural(count($removed_project_messages), 'The update cannot proceed because the following enabled Drupal extension was removed during the update.', 'The update cannot proceed because the following enabled Drupal extensions were removed during the update.');
$event->addError($removed_project_messages, $removed_packages_summary);
}
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() : array {
return [
PreApplyEvent::class => 'validate',
];
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
EnabledExtensionsValidator | Validates no enabled Drupal extensions are removed from the stage directory. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.