From 7e060424b701403c07c7046acc84ba08aae662ec Mon Sep 17 00:00:00 2001 From: Adam G-H <32250-phenaproxima@users.noreply.drupalcode.org> Date: Wed, 12 Jun 2024 16:35:16 +0000 Subject: [PATCH] Issue #3446257 by phenaproxima, sime, bnjmnm, chrisfromredfin: Create a source plugin that exposes recipes in the file system --- .cspell-project-words.txt | 1 + composer.json | 9 +- images/recipe-logo.png | Bin 0 -> 152840 bytes .../ProjectBrowserSource/RandomDataPlugin.php | 3 +- .../ProjectBrowserSourceExample.php | 6 +- phpstan.neon | 21 ++ project_browser.install | 9 + project_browser.module | 16 ++ src/ActivationInstructionsTrait.php | 54 +++++ src/ActivationStatus.php | 19 ++ src/Activator.php | 4 +- src/ActivatorInterface.php | 6 +- src/Controller/BrowserController.php | 28 +-- .../ProjectBrowserEndpointController.php | 3 + src/ModuleActivator.php | 55 ++--- .../ProjectBrowserSource/DrupalCore.php | 3 +- .../ProjectBrowserSource/MockDrupalDotOrg.php | 3 +- src/Plugin/ProjectBrowserSource/Recipes.php | 194 ++++++++++++++++++ src/Plugin/ProjectBrowserSourceBase.php | 5 +- src/ProjectBrowser/Project.php | 17 +- src/ProjectBrowser/ProjectsResultsPage.php | 3 - src/ProjectBrowserServiceProvider.php | 11 + src/ProjectType.php | 4 +- src/RecipeActivator.php | 140 +++++++++++++ sveltejs/public/build/bundle.js | Bin 454518 -> 452595 bytes sveltejs/public/build/bundle.js.map | Bin 311720 -> 310035 bytes sveltejs/src/Project/ActionButton.svelte | 37 +--- sveltejs/src/Project/AddInstallButton.svelte | 23 ++- sveltejs/src/ProjectBrowser.svelte | 7 +- sveltejs/src/constants.js | 2 +- sveltejs/src/stores.js | 3 - .../DrupalDotOrgJsonApi.php | 3 +- .../src/TestActivator.php | 10 +- .../ProjectBrowserInstallerUiTest.php | 38 +++- .../ProjectBrowserUiTest.php | 32 +++ tests/src/Kernel/RecipesSourceTest.php | 108 ++++++++++ 36 files changed, 720 insertions(+), 157 deletions(-) create mode 100644 images/recipe-logo.png create mode 100644 src/ActivationInstructionsTrait.php create mode 100644 src/ActivationStatus.php create mode 100644 src/Plugin/ProjectBrowserSource/Recipes.php create mode 100644 src/RecipeActivator.php create mode 100644 tests/src/Kernel/RecipesSourceTest.php diff --git a/.cspell-project-words.txt b/.cspell-project-words.txt index 00af16fb8..c9c2091ca 100644 --- a/.cspell-project-words.txt +++ b/.cspell-project-words.txt @@ -5,3 +5,4 @@ sirv yarncheck colinodell testlogger +kanopi diff --git a/composer.json b/composer.json index b66cdb388..a824a0bb2 100644 --- a/composer.json +++ b/composer.json @@ -5,13 +5,16 @@ "license": "GPL-2.0-or-later", "require": { "php": ">=8.1", - "guzzlehttp/guzzle": "^6 || ^7", + "ext-simplexml": "*", + "composer-runtime-api": "^2", "composer/semver": "^3.2", - "ext-simplexml": "*" + "guzzlehttp/guzzle": "^6 || ^7", + "symfony/finder": "^6.3 || ^7" }, "require-dev": { + "colinodell/psr-testlogger": "^1.2", "drupal/automatic_updates": "^3.1.2", - "colinodell/psr-testlogger": "^1.2" + "kanopi/imagemagick-configuration": "@dev" }, "conflict": { "drupal/automatic_updates": "<3.0" diff --git a/images/recipe-logo.png b/images/recipe-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..db5b58b2a026ebcea47ee2b16151b8acc664d552 GIT binary patch literal 152840 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�PGqJ{ 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%0Ay0%{eZ9_Wa$KabOvRPEaC1dZTY5ox@5uQ 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 literal 0 HcmV?d00001 diff --git a/modules/project_browser_devel/src/Plugin/ProjectBrowserSource/RandomDataPlugin.php b/modules/project_browser_devel/src/Plugin/ProjectBrowserSource/RandomDataPlugin.php index 896e5c677..7abcf406f 100644 --- a/modules/project_browser_devel/src/Plugin/ProjectBrowserSource/RandomDataPlugin.php +++ b/modules/project_browser_devel/src/Plugin/ProjectBrowserSource/RandomDataPlugin.php @@ -135,7 +135,7 @@ class RandomDataPlugin extends ProjectBrowserSourceBase { $projects = array_filter($projects, fn(Project $project) => stripos($project->title, $query['search']) !== FALSE); } - return $this->createResultsPage($projects, TRUE); + return $this->createResultsPage($projects); } /** @@ -192,7 +192,6 @@ class RandomDataPlugin extends ProjectBrowserSourceBase { 'value' => $this->randomGenerator->paragraphs(5), ], title: ucwords($machine_name), - status: rand(0, 1), changed: $this->getRandomDate(), created: $this->getRandomDate(), author: [ diff --git a/modules/project_browser_source_example/src/Plugin/ProjectBrowserSource/ProjectBrowserSourceExample.php b/modules/project_browser_source_example/src/Plugin/ProjectBrowserSource/ProjectBrowserSourceExample.php index cc5d84a40..959711f1f 100644 --- a/modules/project_browser_source_example/src/Plugin/ProjectBrowserSource/ProjectBrowserSourceExample.php +++ b/modules/project_browser_source_example/src/Plugin/ProjectBrowserSource/ProjectBrowserSourceExample.php @@ -149,8 +149,6 @@ class ProjectBrowserSourceExample extends ProjectBrowserSourceBase { 'value' => $project_from_source['long_description'], ], title: $project_from_source['label'], - // Status: 1 enabled / 0 disabled. - status: 1, changed: $project_from_source['updated_at'], created: $project_from_source['created_at'], author: $author, @@ -176,8 +174,6 @@ class ProjectBrowserSourceExample extends ProjectBrowserSourceBase { 'value' => $project_from_source['long_description'] . ' (different commands)', ], title: 'A project with different commands', - // Status: 1 enabled / 0 disabled. - status: 1, changed: $project_from_source['updated_at'], created: $project_from_source['created_at'], author: $author, @@ -190,7 +186,7 @@ class ProjectBrowserSourceExample extends ProjectBrowserSourceBase { // Return one page of results. The first parameter is the total number of // results for the set, as filtered by $query. - return $this->createResultsPage($projects, TRUE); + return $this->createResultsPage($projects); } /** diff --git a/phpstan.neon b/phpstan.neon index f715d17e0..7e8cbc5c3 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -9,3 +9,24 @@ parameters: - # @see https://www.drupal.org/docs/develop/development-tools/phpstan/handling-unsafe-usage-of-new-static#s-ignoring-the-issue identifier: new.static + + # @todo: Remove the following rules when support is dropped for Drupal 10.2, which does not have recipes. + - + message: "#^Access to constant COMPOSER_PROJECT_TYPE on an unknown class Drupal\\\\Core\\\\Recipe\\\\Recipe\\.$#" + paths: + - src/Plugin/ProjectBrowserSource/Recipes.php + - src/RecipeActivator.php + - tests/src/Kernel/RecipesSourceTest.php + reportUnmatched: false + - + message: "#^Call to static method [a-zA-Z]+\\(\\) on an unknown class Drupal\\\\Core\\\\Recipe\\\\Recipe[a-zA-Z]*\\.$#" + path: src/RecipeActivator.php + reportUnmatched: false + - + message: "#^Class Drupal\\\\Core\\\\Recipe\\\\RecipeAppliedEvent not found\\.$#" + path: src/RecipeActivator.php + reportUnmatched: false + - + message: "#^Parameter \\$event of method Drupal\\\\project_browser\\\\RecipeActivator\\:\\:onApply\\(\\) has invalid type Drupal\\\\Core\\\\Recipe\\\\RecipeAppliedEvent\\.$#" + path: src/RecipeActivator.php + reportUnmatched: false diff --git a/project_browser.install b/project_browser.install index 824cf9937..cb07f6e64 100644 --- a/project_browser.install +++ b/project_browser.install @@ -6,6 +6,7 @@ */ use Drupal\Core\Database\Database; +use Drupal\Core\Recipe\Recipe; /** * Implements hook_schema(). @@ -135,6 +136,14 @@ function project_browser_schema() { */ function project_browser_install() { _project_browser_populate_from_fixture(); + + if (class_exists(Recipe::class)) { + $config = \Drupal::configFactory() + ->getEditable('project_browser.admin_settings'); + $enabled_sources = $config->get('enabled_sources'); + $enabled_sources[] = 'recipes'; + $config->set('enabled_sources', $enabled_sources)->save(); + } } /** diff --git a/project_browser.module b/project_browser.module index 24e5fba4e..f47f581b7 100644 --- a/project_browser.module +++ b/project_browser.module @@ -5,8 +5,10 @@ * Provides hook implementations for the Project Browser module. */ +use Drupal\Core\Recipe\Recipe; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Url; +use Drupal\project_browser\Plugin\ProjectBrowserSource\Recipes; use Drupal\project_browser\ProjectBrowserFixtureHelper; /** @@ -60,3 +62,17 @@ function project_browser_menu_links_discovered_alter(&$links) { unset($links['admin_toolbar_tools.extra_links:update.module_install']); } } + +/** + * Implements hook_project_browser_source_info_alter(). + */ +function project_browser_project_browser_source_info_alter(array &$definitions): void { + if (class_exists(Recipe::class)) { + $definitions['recipes'] = [ + 'id' => 'recipes', + 'label' => t('Recipes'), + 'description' => t('Shows recipes available in the local code base.'), + 'class' => Recipes::class, + ]; + } +} diff --git a/src/ActivationInstructionsTrait.php b/src/ActivationInstructionsTrait.php new file mode 100644 index 000000000..ff2683bb1 --- /dev/null +++ b/src/ActivationInstructionsTrait.php @@ -0,0 +1,54 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\project_browser; + +use Drupal\Core\Extension\ModuleExtensionList; +use Drupal\Core\File\FileUrlGeneratorInterface; +use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\Core\StringTranslation\TranslatableMarkup; + +/** + * Provides helper methods for activators which generate instructions. + */ +trait ActivationInstructionsTrait { + + use StringTranslationTrait; + + public function __construct( + protected readonly ModuleExtensionList $moduleList, + protected readonly FileUrlGeneratorInterface $fileUrlGenerator, + ) { + } + + /** + * Generates the markup for a copy-and-paste terminal command. + * + * @param string $command + * A terminal command. + * @param string $action + * An identifier of the action, like `download` or `run`. + * @param \Drupal\Core\StringTranslation\TranslatableMarkup|null $alt + * (optional) The alt text of the "copy" button. Defaults to "Copy the + * $action command". + * + * @return string + * The given command, in a format that can be copied and pasted. + */ + protected function commandBox(string $command, string $action, ?TranslatableMarkup $alt = NULL): string { + $alt ??= $this->t('Copy the @action command', ['@action' => $action]); + + $icon_url = $this->moduleList->getPath('project_browser') . '/images/copy-icon.svg'; + $icon_url = $this->fileUrlGenerator->generateString($icon_url); + + $command_box = '<div class="command-box">'; + $command_box .= '<input value="' . $command . '" readonly />'; + $command_box .= '<button data-copy-command id="' . $action . '-btn">'; + $command_box .= '<img src="' . $icon_url . '" alt="' . $alt . '" />'; + $command_box .= '</button>'; + $command_box .= '</div>'; + return $command_box; + } + +} diff --git a/src/ActivationStatus.php b/src/ActivationStatus.php new file mode 100644 index 000000000..12ba43a43 --- /dev/null +++ b/src/ActivationStatus.php @@ -0,0 +1,19 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\project_browser; + +/** + * Defines the possible states of a project in the current site. + */ +enum ActivationStatus { + + // Not physically present, but can be required and activated. + case Absent; + // Physically present, but not yet activated. + case Present; + // Physically present and activated. + case Active; + +} diff --git a/src/Activator.php b/src/Activator.php index ae6879867..19245c186 100644 --- a/src/Activator.php +++ b/src/Activator.php @@ -60,8 +60,8 @@ final class Activator implements ActivatorInterface { /** * {@inheritdoc} */ - public function isActive(Project $project): bool { - return $this->getActivatorForProject($project)->isActive($project); + public function getStatus(Project $project): ActivationStatus { + return $this->getActivatorForProject($project)->getStatus($project); } /** diff --git a/src/ActivatorInterface.php b/src/ActivatorInterface.php index faa635101..b174ae34b 100644 --- a/src/ActivatorInterface.php +++ b/src/ActivatorInterface.php @@ -23,10 +23,10 @@ interface ActivatorInterface { * @param \Drupal\project_browser\ProjectBrowser\Project $project * A project to check. * - * @return bool - * TRUE if the project is activated on the current site, FALSE otherwise. + * @return \Drupal\project_browser\ActivationStatus + * The state of the project on the current site. */ - public function isActive(Project $project): bool; + public function getStatus(Project $project): ActivationStatus; /** * Determines if this activator can handle a particular project. diff --git a/src/Controller/BrowserController.php b/src/Controller/BrowserController.php index eb4e3d2ce..5874890af 100644 --- a/src/Controller/BrowserController.php +++ b/src/Controller/BrowserController.php @@ -3,7 +3,6 @@ namespace Drupal\project_browser\Controller; use Drupal\Core\Controller\ControllerBase; -use Drupal\Core\Extension\InfoParserException; use Drupal\Core\Extension\ModuleExtensionList; use Drupal\project_browser\DevelopmentStatus; use Drupal\project_browser\EnabledSourceHandler; @@ -71,7 +70,6 @@ class BrowserController extends ControllerBase { * A render array. */ public function browse($module_name) { - $modules_status = $this->getModuleStatuses(); $request = $this->requestStack->getCurrentRequest(); $current_sources = $this->enabledSource->getCurrentSources(); $ui_install_enabled = (bool) $this->config('project_browser.admin_settings')->get('allow_ui_install') && (bool) $this->installReadiness; @@ -101,7 +99,6 @@ class BrowserController extends ControllerBase { 'drupalSettings' => [ 'project_browser' => [ 'active_plugins' => $active_plugins, - 'modules' => $modules_status, 'drupal_version' => \Drupal::VERSION, 'drupal_core_compatibility' => \Drupal::CORE_COMPATIBILITY, 'module_path' => $this->moduleHandler()->getModule('project_browser')->getPath(), @@ -116,6 +113,7 @@ class BrowserController extends ControllerBase { 'ui_install' => $ui_install_enabled, 'stage_available' => $ui_install_enabled ? $this->installReadiness->installerAvailable() : FALSE, 'pm_validation' => $ui_install_enabled ? $this->installReadiness->validatePackageManager() : TRUE, + 'package_manager_available' => array_key_exists('package_manager', $this->moduleList->getAllInstalledInfo()), ], ], ], @@ -148,28 +146,4 @@ class BrowserController extends ControllerBase { ]; } - /** - * Gets all module statuses. - * - * @return array - * An array of module statues, keyed by machine name. - */ - protected function getModuleStatuses(): array { - // Sort all modules by their names. - try { - // The module list needs to be reset so that it can re-scan and include - // any new modules that may have been added directly into the filesystem. - $modules = $this->moduleList->reset()->getList(); - uasort($modules, [ModuleExtensionList::class, 'sortByName']); - } - catch (InfoParserException $e) { - $this->messenger()->addError($this->t('Modules could not be listed due to an error: %error', ['%error' => $e->getMessage()])); - $modules = []; - } - - return array_map(function ($value) { - return $value->status; - }, $modules); - } - } diff --git a/src/Controller/ProjectBrowserEndpointController.php b/src/Controller/ProjectBrowserEndpointController.php index 6d706ba5b..4a7396ee3 100644 --- a/src/Controller/ProjectBrowserEndpointController.php +++ b/src/Controller/ProjectBrowserEndpointController.php @@ -158,6 +158,9 @@ class ProjectBrowserEndpointController extends ControllerBase { foreach ($projects as $result_page) { foreach ($result_page->list as $project) { + // The project's activator is the source of truth about the status of + // the project with respect to the current site. + $project->status = $this->activator->getStatus($project); // The activator is responsible for generating the instructions. $project->commands = $this->activator->getInstructions($project); } diff --git a/src/ModuleActivator.php b/src/ModuleActivator.php index e96868010..e001e9350 100644 --- a/src/ModuleActivator.php +++ b/src/ModuleActivator.php @@ -7,8 +7,6 @@ namespace Drupal\project_browser; use Drupal\Core\Extension\ModuleExtensionList; use Drupal\Core\Extension\ModuleInstallerInterface; use Drupal\Core\File\FileUrlGeneratorInterface; -use Drupal\Core\StringTranslation\StringTranslationTrait; -use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\Core\Url; use Drupal\project_browser\ProjectBrowser\Project; use Symfony\Component\HttpFoundation\Response; @@ -18,19 +16,29 @@ use Symfony\Component\HttpFoundation\Response; */ final class ModuleActivator implements ActivatorInterface { - use StringTranslationTrait; + use ActivationInstructionsTrait { + __construct as traitConstruct; + } public function __construct( - private readonly ModuleExtensionList $moduleList, private readonly ModuleInstallerInterface $moduleInstaller, - private readonly FileUrlGeneratorInterface $fileUrlGenerator, - ) {} + ModuleExtensionList $moduleList, + FileUrlGeneratorInterface $fileUrlGenerator, + ) { + $this->traitConstruct($moduleList, $fileUrlGenerator); + } /** * {@inheritdoc} */ - public function isActive(Project $project): bool { - return array_key_exists($project->machineName, $this->moduleList->getAllInstalledInfo()); + public function getStatus(Project $project): ActivationStatus { + if (array_key_exists($project->machineName, $this->moduleList->getAllInstalledInfo())) { + return ActivationStatus::Active; + } + elseif (array_key_exists($project->machineName, $this->moduleList->getAllAvailableInfo())) { + return ActivationStatus::Present; + } + return ActivationStatus::Absent; } /** @@ -52,7 +60,7 @@ final class ModuleActivator implements ActivatorInterface { * {@inheritdoc} */ public function getInstructions(Project $project): string|Url|null { - if (array_key_exists($project->machineName, $this->moduleList->getAllAvailableInfo())) { + if ($this->getStatus($project) === ActivationStatus::Present) { return Url::fromRoute('system.modules_list', options: [ 'fragment' => 'module-' . str_replace('_', '-', $project->machineName), ]); @@ -96,33 +104,4 @@ final class ModuleActivator implements ActivatorInterface { return $commands; } - /** - * Generates the markup for a copy-and-paste terminal command. - * - * @param string $command - * A terminal command. - * @param string $action - * An identifier of the action, like `download` or `run`. - * @param \Drupal\Core\StringTranslation\TranslatableMarkup|null $alt - * (optional) The alt text of the "copy" button. Defaults to "Copy the - * $action command". - * - * @return string - * The given command, in a format that can be copied and pasted. - */ - private function commandBox(string $command, string $action, ?TranslatableMarkup $alt = NULL): string { - $alt ??= $this->t('Copy the @action command', ['@action' => $action]); - - $icon_url = $this->moduleList->getPath('project_browser') . '/images/copy-icon.svg'; - $icon_url = $this->fileUrlGenerator->generateString($icon_url); - - $command_box = '<div class="command-box">'; - $command_box .= '<input value="' . $command . '" readonly />'; - $command_box .= '<button data-copy-command id="' . $action . '-btn">'; - $command_box .= '<img src="' . $icon_url . '" alt="' . $alt . '" />'; - $command_box .= '</button>'; - $command_box .= '</div>'; - return $command_box; - } - } diff --git a/src/Plugin/ProjectBrowserSource/DrupalCore.php b/src/Plugin/ProjectBrowserSource/DrupalCore.php index 66bd1404b..a839ac053 100644 --- a/src/Plugin/ProjectBrowserSource/DrupalCore.php +++ b/src/Plugin/ProjectBrowserSource/DrupalCore.php @@ -159,7 +159,7 @@ class DrupalCore extends ProjectBrowserSourceBase { if (!empty($query['page']) && !empty($query['limit'])) { $projects = array_chunk($projects, $query['limit'])[$query['page']] ?? []; } - return $this->createResultsPage($projects, FALSE, $project_count); + return $this->createResultsPage($projects, $project_count); } /** @@ -200,7 +200,6 @@ class DrupalCore extends ProjectBrowserSourceBase { 'value' => $module->info['description'], ], title: $module->info['name'], - status: $module->status, changed: 280299600, created: 280299600, author: [ diff --git a/src/Plugin/ProjectBrowserSource/MockDrupalDotOrg.php b/src/Plugin/ProjectBrowserSource/MockDrupalDotOrg.php index 2f5eac49f..6b26ac60d 100644 --- a/src/Plugin/ProjectBrowserSource/MockDrupalDotOrg.php +++ b/src/Plugin/ProjectBrowserSource/MockDrupalDotOrg.php @@ -384,7 +384,6 @@ class MockDrupalDotOrg extends ProjectBrowserSourceBase { machineName: $project_data['field_project_machine_name'], body: $this->relativeToAbsoluteUrls($project_data['project_data']['body'], 'https://www.drupal.org'), title: $project_data['title'], - status: $project_data['status'], changed: $project_data['changed'], created: $project_data['created'], author: ['name' => $project_data['author']], @@ -398,7 +397,7 @@ class MockDrupalDotOrg extends ProjectBrowserSourceBase { } } - return $this->createResultsPage($returned_list, TRUE, $api_response['total_results'] ?? 0); + return $this->createResultsPage($returned_list, $api_response['total_results'] ?? 0); } /** diff --git a/src/Plugin/ProjectBrowserSource/Recipes.php b/src/Plugin/ProjectBrowserSource/Recipes.php new file mode 100644 index 000000000..54e0bad5c --- /dev/null +++ b/src/Plugin/ProjectBrowserSource/Recipes.php @@ -0,0 +1,194 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\project_browser\Plugin\ProjectBrowserSource; + +use Composer\InstalledVersions; +use Drupal\Component\Serialization\Json; +use Drupal\Component\Serialization\Yaml; +use Drupal\Core\Cache\CacheBackendInterface; +use Drupal\Core\Extension\ModuleExtensionList; +use Drupal\Core\File\FileSystemInterface; +use Drupal\Core\File\FileUrlGeneratorInterface; +use Drupal\Core\Recipe\Recipe; +use Drupal\project_browser\Plugin\ProjectBrowserSourceBase; +use Drupal\project_browser\ProjectBrowser\Project; +use Drupal\project_browser\ProjectBrowser\ProjectsResultsPage; +use Drupal\project_browser\ProjectType; +use Drupal\project_browser\SecurityStatus; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\Finder\Finder; + +/** + * A source plugin that exposes recipes installed locally. + */ +class Recipes extends ProjectBrowserSourceBase { + + public function __construct( + private readonly FileSystemInterface $fileSystem, + private readonly CacheBackendInterface $cacheBin, + private readonly ModuleExtensionList $moduleList, + private readonly FileUrlGeneratorInterface $fileUrlGenerator, + private readonly string $appRoot, + mixed ...$arguments, + ) { + parent::__construct(...$arguments); + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition): static { + return new static( + $container->get(FileSystemInterface::class), + $container->get('cache.project_browser'), + $container->get(ModuleExtensionList::class), + $container->get(FileUrlGeneratorInterface::class), + $container->getParameter('app.root'), + ...array_slice(func_get_args(), 1), + ); + } + + /** + * {@inheritdoc} + */ + public function getProjects(array $query = []): ProjectsResultsPage { + $cached = $this->cacheBin->get($this->getPluginId()); + if ($cached) { + $projects = $cached->data; + } + else { + $projects = []; + + $logo_url = $this->moduleList->getPath('project_browser') . '/images/recipe-logo.png'; + $logo_url = $this->fileUrlGenerator->generateString($logo_url); + + /** @var \Symfony\Component\Finder\SplFileInfo $file */ + foreach ($this->getFinder() as $file) { + $path = $file->getPath(); + + // If the recipe isn't part of Drupal core, get its package name from + // `composer.json`. This shouldn't be necessary once drupal.org has a + // proper API endpoint that provides project information for recipes. + if (str_starts_with($path, $this->appRoot . '/core/recipes/')) { + $package_name = 'drupal/core'; + } + else { + $package = file_get_contents($path . '/composer.json'); + $package = Json::decode($package); + $package_name = $package['name']; + } + + $recipe = Yaml::decode($file->getContents()); + $description = $recipe['description'] ?? NULL; + + $projects[] = new Project( + logo: [ + 'file' => [ + 'uri' => $logo_url, + 'resource' => 'image', + ], + 'alt' => (string) $this->t('@name logo', [ + '@name' => $recipe['name'], + ]), + ], + isCompatible: TRUE, + isMaintained: TRUE, + isCovered: TRUE, + isActive: TRUE, + starUserCount: 0, + projectUsageTotal: 0, + machineName: basename($path), + body: $description ? ['value' => $description] : [], + title: $recipe['name'], + changed: 0, + created: 0, + author: [], + packageName: $package_name, + type: ProjectType::Recipe, + ); + } + $this->cacheBin->set($this->getPluginId(), $projects); + } + + $total = count($projects); + + // Filter by project machine name. + if (!empty($query['machine_name'])) { + $projects = array_filter($projects, fn(Project $project) => $project->machineName === $query['machine_name']); + } + + // Filter by coverage. + if (!empty($query['security_advisory_coverage']) && $query['security_advisory_coverage'] === SecurityStatus::Covered->value) { + $projects = array_filter($projects, fn(Project $project) => $project->isCovered); + } + + // Filter by categories. + if (!empty($query['categories'])) { + $projects = array_filter($projects, fn(Project $project) => array_intersect(array_column($project->categories, 'id'), explode(',', $query['categories']))); + } + + // Filter by search text. + if (!empty($query['search'])) { + $projects = array_filter($projects, fn(Project $project) => stripos($project->title, $query['search']) !== FALSE); + } + + // Filter by sorting criterion. + if (!empty($query['sort'])) { + $sort = $query['sort']; + switch ($sort) { + case 'a_z': + usort($projects, fn($x, $y) => $x->title <=> $y->title); + break; + + case 'z_a': + usort($projects, fn($x, $y) => $y->title <=> $x->title); + break; + } + } + + if (array_key_exists('page', $query) && !empty($query['limit'])) { + $projects = array_chunk($projects, $query['limit'])[$query['page']] ?? []; + } + + return $this->createResultsPage($projects, $total); + } + + /** + * Prepares a Symfony Finder to search for recipes in the file system. + * + * @return \Symfony\Component\Finder\Finder + * A Symfony Finder object, configured to find locally installed recipes. + */ + private function getFinder(): Finder { + $search_in = [$this->appRoot . '/core/recipes']; + + // If any recipes have been installed by Composer, also search there. The + // recipe system requires that all non-core recipes be located next to each + // other, in the same directory. + $contrib_recipe_names = InstalledVersions::getInstalledPackagesByType(Recipe::COMPOSER_PROJECT_TYPE); + if ($contrib_recipe_names) { + $path = InstalledVersions::getInstallPath($contrib_recipe_names[0]); + $path = $this->fileSystem->realpath($path); + + $search_in[] = dirname($path); + } + + return Finder::create() + ->files() + ->in($search_in) + ->depth(1) + // The example recipe exists for documentation purposes only. + ->notPath('example/') + ->name('recipe.yml'); + } + + /** + * {@inheritdoc} + */ + public function getCategories(): array { + return []; + } + +} diff --git a/src/Plugin/ProjectBrowserSourceBase.php b/src/Plugin/ProjectBrowserSourceBase.php index a003cfacf..6d41c41b3 100644 --- a/src/Plugin/ProjectBrowserSourceBase.php +++ b/src/Plugin/ProjectBrowserSourceBase.php @@ -66,21 +66,18 @@ abstract class ProjectBrowserSourceBase extends PluginBase implements ProjectBro * * @param \Drupal\project_browser\ProjectBrowser\Project[] $results * The projects to list on the page. - * @param bool $package_manager_required - * Whether Package Manager is required for these projects. * @param int|null $total_results * (optional) The total number of results. Defaults to the size of $results. * * @return \Drupal\project_browser\ProjectBrowser\ProjectsResultsPage * A list of projects to send to the client. */ - protected function createResultsPage(array $results, bool $package_manager_required, ?int $total_results = NULL): ProjectsResultsPage { + protected function createResultsPage(array $results, ?int $total_results = NULL): ProjectsResultsPage { return new ProjectsResultsPage( $total_results ?? count($results), array_values($results), (string) $this->getPluginDefinition()['label'], $this->getPluginId(), - $package_manager_required, ); } diff --git a/src/ProjectBrowser/Project.php b/src/ProjectBrowser/Project.php index e571ca97e..07951f7dc 100644 --- a/src/ProjectBrowser/Project.php +++ b/src/ProjectBrowser/Project.php @@ -6,6 +6,7 @@ use Drupal\Component\Utility\Html; use Drupal\Component\Utility\Unicode; use Drupal\Component\Utility\Xss; use Drupal\Core\Url; +use Drupal\project_browser\ActivationStatus; use Drupal\project_browser\ProjectType; /** @@ -20,6 +21,13 @@ class Project implements \JsonSerializable { */ public readonly string $id; + /** + * The status of this project in the current site. + * + * @var \Drupal\project_browser\ActivationStatus + */ + public ActivationStatus $status; + /** * The instructions, if any, to activate this project. * @@ -59,8 +67,6 @@ class Project implements \JsonSerializable { * Body field of the project in array format. * @param string $title * Title of the project. - * @param int $status - * Status of the project. * @param int $changed * When was the project changed last timestamp. * @param int $created @@ -95,7 +101,6 @@ class Project implements \JsonSerializable { public string $machineName, private array $body, public string $title, - public int $status, public int $changed, public int $created, public array $author, @@ -182,7 +187,11 @@ class Project implements \JsonSerializable { 'is_active' => $this->isActive, 'flag_project_star_user_count' => $this->starUserCount, 'url' => $this->url, - 'status' => $this->status, + 'status' => match ($this->status) { + ActivationStatus::Absent => 'absent', + ActivationStatus::Present => 'present', + ActivationStatus::Active => 'active', + }, 'changed' => $this->changed, 'created' => $this->created, 'selector_id' => $this->getSelectorId(), diff --git a/src/ProjectBrowser/ProjectsResultsPage.php b/src/ProjectBrowser/ProjectsResultsPage.php index 5f520abaa..8a23685db 100644 --- a/src/ProjectBrowser/ProjectsResultsPage.php +++ b/src/ProjectBrowser/ProjectsResultsPage.php @@ -18,15 +18,12 @@ class ProjectsResultsPage implements \JsonSerializable { * The source plugin's label. * @param string $pluginId * The source plugin's ID. - * @param bool $isPackageManagerRequired - * True if Package Manager is required. */ public function __construct( public readonly int $totalResults, public readonly array $list, public readonly string $pluginLabel, public readonly string $pluginId, - public readonly bool $isPackageManagerRequired, ) { assert(array_is_list($list)); } diff --git a/src/ProjectBrowserServiceProvider.php b/src/ProjectBrowserServiceProvider.php index 9977fcee8..e9b8ddd67 100644 --- a/src/ProjectBrowserServiceProvider.php +++ b/src/ProjectBrowserServiceProvider.php @@ -12,11 +12,13 @@ use Drupal\Core\Extension\ThemeExtensionList; use Drupal\Core\PrivateKey; use Drupal\Core\Queue\QueueFactory; use Drupal\Core\Queue\QueueInterface; +use Drupal\Core\Recipe\Recipe; use Drupal\Core\State\StateInterface; use Drupal\Core\StreamWrapper\StreamWrapperManagerInterface; use Drupal\project_browser\ComposerInstaller\Installer; use Drupal\project_browser\ComposerInstaller\Validator\CoreNotUpdatedValidator; use Drupal\project_browser\ComposerInstaller\Validator\PackageNotInstalledValidator; +use Symfony\Component\DependencyInjection\Parameter; /** * Base class acts as a helper for Project Browser services. @@ -45,6 +47,15 @@ class ProjectBrowserServiceProvider extends ServiceProviderBase { ->setAutowired(TRUE); } + if (class_exists(Recipe::class)) { + $container->register(RecipeActivator::class, RecipeActivator::class) + ->setAutowired(TRUE) + ->setArgument('$appRoot', new Parameter('app.root')) + ->addTag('project_browser.activator') + // Because it's an event subscriber, the activator needs to be public. + ->addTag('event_subscriber'); + } + // @todo Remove the following Drupal 10.0 autowiring shim in // https://www.drupal.org/i/3349193. $autowire_aliases = [ diff --git a/src/ProjectType.php b/src/ProjectType.php index de1e22a7e..85ebba500 100644 --- a/src/ProjectType.php +++ b/src/ProjectType.php @@ -7,13 +7,11 @@ namespace Drupal\project_browser; /** * The different project types known to Project Browser. * - * @todo Add a case for recipes once support for Drupal 10.2 and earlier is - * dropped. - * * @see \Drupal\project_browser\ProjectBrowser\Project */ enum ProjectType: string { case Module = 'module'; + case Recipe = 'recipe'; } diff --git a/src/RecipeActivator.php b/src/RecipeActivator.php new file mode 100644 index 000000000..b3315f9e6 --- /dev/null +++ b/src/RecipeActivator.php @@ -0,0 +1,140 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\project_browser; + +use Composer\InstalledVersions; +use Drupal\Core\Extension\ModuleExtensionList; +use Drupal\Core\File\FileSystemInterface; +use Drupal\Core\File\FileUrlGeneratorInterface; +use Drupal\Core\Recipe\Recipe; +use Drupal\Core\Recipe\RecipeAppliedEvent; +use Drupal\Core\Recipe\RecipeRunner; +use Drupal\Core\State\StateInterface; +use Drupal\Core\Url; +use Drupal\project_browser\ProjectBrowser\Project; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpFoundation\Response; + +/** + * Applies locally installed recipes. + */ +class RecipeActivator implements ActivatorInterface, EventSubscriberInterface { + + use ActivationInstructionsTrait { + __construct as traitConstruct; + } + + /** + * The state key that stores the record of all applied recipes. + * + * @var string + */ + private const STATE_KEY = 'project_browser.applied_recipes'; + + public function __construct( + private readonly string $appRoot, + private readonly StateInterface $state, + private readonly FileSystemInterface $fileSystem, + ModuleExtensionList $moduleList, + FileUrlGeneratorInterface $fileUrlGenerator, + ) { + $this->traitConstruct($moduleList, $fileUrlGenerator); + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents(): array { + return [ + RecipeAppliedEvent::class => 'onApply', + ]; + } + + /** + * Reacts when a recipe is applied to the site. + * + * @param \Drupal\Core\Recipe\RecipeAppliedEvent $event + * The event object. + */ + public function onApply(RecipeAppliedEvent $event): void { + $list = $this->state->get(static::STATE_KEY, []); + $list[] = $event->recipe->path; + $this->state->set(static::STATE_KEY, $list); + } + + /** + * {@inheritdoc} + */ + public function getStatus(Project $project): ActivationStatus { + $path = $this->getPath($project); + + if (in_array($path, $this->state->get(static::STATE_KEY, []), TRUE)) { + return ActivationStatus::Active; + } + elseif ($project->packageName === 'drupal/core') { + // Recipes that are part of core are always present. + return ActivationStatus::Present; + } + else { + return is_string($path) ? ActivationStatus::Present : ActivationStatus::Absent; + } + } + + /** + * {@inheritdoc} + */ + public function supports(Project $project): bool { + // @see \Drupal\project_browser\Plugin\ProjectBrowserSource\Recipes + return $project->type === ProjectType::Recipe; + } + + /** + * {@inheritdoc} + */ + public function activate(Project $project): ?Response { + $recipe = Recipe::createFromDirectory($this->getPath($project)); + RecipeRunner::processRecipe($recipe); + return NULL; + } + + /** + * {@inheritdoc} + */ + public function getInstructions(Project $project): string|Url|null { + $instructions = '<p>' . $this->t('To apply this recipe, run the following command at the command line:') . '</p>'; + + $command = sprintf( + 'cd %s && %s/php %s/core/scripts/drupal recipe %s', + $this->appRoot, + // cspell:ignore BINDIR + PHP_BINDIR, + $this->appRoot, + $this->getPath($project), + ); + $instructions .= $this->commandBox($command, 'apply'); + + return $instructions; + } + + /** + * Returns the absolute path of an installed recipe, if known. + * + * @param \Drupal\project_browser\ProjectBrowser\Project $project + * A project object with info about the recipe. + * + * @return string|null + * The absolute local path of the recipe, or NULL if it's not installed. + */ + private function getPath(Project $project): ?string { + if ($project->packageName === 'drupal/core') { + // The machine name is the directory name. + // @see \Drupal\project_browser\Plugin\ProjectBrowserSource\Recipes::getProjects() + return $this->appRoot . '/core/recipes/' . $project->machineName; + } + $path = InstalledVersions::getInstallPath($project->packageName); + return $path ? $this->fileSystem->realpath($path) : NULL; + } + +} diff --git a/sveltejs/public/build/bundle.js b/sveltejs/public/build/bundle.js index 6558e541937bd38640dea02b3812b9ca23467174..d325379796e6afd1cf3e0143736c1e03c7299a40 100644 GIT binary patch delta 2566 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 delta 3969 zcmcgvYitzP71o`5@7P{H!1(<DreN7?cfmWm>wTDqO)!m|nBZc_AIC+5cWkySyY}uH zl2B^9jg*9l05Nb%XeogLjY<Q?CYO}7P@*6!l<){ugPIT$QKX_gN})laZRnYOICjNG zX%uxOduR5Z^PO|Px%Yf$Zk{dq^m56eJHwd^7d0$xTCl8T$-E^?TL$W1o|dvI=<V_A z;h~R*&yb-KF(DhuTG_<<klx+n3+b!$KxC##!B2ZI5RNFmaI@CFQtQ+gY61KoS{yU; zDsz-IAzwsW?$^y7nm?=$+;~0j$5kUwR*eu*H6mR-Nu1j@)9+;Z5JmI*7e=GP(#>?L z9KT+>nL3Nhk_A`?XB9SG{QDU?LQ-oiirZ#UYM}2bYZ1z`^gZb-!Ivb5S71{CSp+4| z(XGS-gU?Y*Np)3HbC`FD=D_m<!~`db*c4$NpqnJg(*~M{7EDg+R#mMypg)h5rh9#1 zgDZnK`2As;V^+$`l`jd1p6!uGTWxKi?j?n=p_HY-rLDA>xm8aM>?mbVz)y>%R#2v} zThRAsUIgcIS%&xo=p<5<G#}{qO8K^Alv|XFBumhLotyLSxf5XUIxi{3hm$;L_BEaZ z$8V4Y;=b+l8X+~X@c=Cm4Lj&{HeuZUFjs;#SI$R^roFTXg1hLuq(&@!fzBsc<92c@ z{O*2UDz_n>>MZELAmzdABh&=uL7D-d?4~6Mfo{ccX)l`qlTC6u)a{|C;#*H-{DRhD z9s;AhCf^Hrih*pMWs07JH2jp6`2wpozt5{hbh8T{IY4c(Iu2%yuK;dLp?Pq8HA@vM ze@(;Ee;t624$^6+*a0v{LOpO}B`F@LzmN)jz0y=T^B!%2wqZIAvEP3~s)7@pOol_l zv~0Az?-3WwIYO5cH|#n>H^8AjQUN;;)9mp_9d<PGV%S|Emq0{kMTJQotQWF|=+1_5 zC0OD`dxL8N{-EZKWt;dl`D0e!CUyT?1p+IWMiwN6OvL;u>A}z6lJdpfm#Nj*VAi9! z1)R`yl$I8_5-@4u6~Q$v5iQaau2tNk_b9z&*s4#Fd<g!A?m&m=_02>01f9p|c6j(t zQUP2$Mqfm>yZ=cF#Qs<5bqjO5YHgraGPC&YU+HPd<aSvUhedIz&aK(xyHLFz_uMN_ z;Box?Lpmr+ZWj#Rqzh8q_F9{#QW+RrlLvoWDW{9cx2S`1)oFJ-#M0aJu*3`#Q1?l* zsp?k619xaAm)t7gg#ugJWe>Gk?MEiC`m|KMsI}WG6*ylidC=MeD<(0Ucs-51kSfLQ zR-&~Vsw>&I1<7HTrD&w&%>%G`bik&=vI!n6WHUHA*Sg_uH@gpU9B^YQs}dg;vd5)N zytOE*6)SeBF1W#@W_YcHU5r<P&8dYZT#Ot%Vwu8*qzs#iZNm6-TVq6FBd>tdi{%P~ zGPC&0bT&mY>;dgV@Mt;n$Tq99R<%R+Gc;G6E@zq2*k9o9W;RRm*ag=3Mke#v<N0#c zW5vtveUe3Vx!5*Y@>n5tE_+aNJ7DfS)-3kUWj2!T#xk5(g|!CDGpfKe@&>Nl&H$?> zXTY+0_AYt|^mvS>yF3;JOLn?E_5tnmE$BT<CW(;+?4&%w8|vxO{4IJU;tO<!EztZt zEpDu?s)`;YrAlegBYJ3+FQB8GDw@(23VvU2H?$Qm^)M=~;tME|6}sXNwrhT+Aqs~A z?A4cRVI6kV%SvzD=^<^Eo`6M>UV=^uxBxE2q#Hw`o=18@0cGv-V9>8?fpuRvEeZ8t zA|26y3EwYLNg!0mx<E%ypgrOX26_`=8p93ozMy-}W0I;=*2X;2;*ledb?LzlWjr^^ zx8}@IDtZE5y#wj+Rv0Qc2E^cDT%Vs6!(3;A0+XCwKZeMT@kGX31Pbier1BeNax|BF zbJ-h6l-w9@j7>-X4=N3+qudrJ#=+Jx%%k4nlY#ziEEo1QvEq!exkbg6RKmq3R-QR- z1H@OvgoW&I!95g6yyaykk~wY@!23^01vBEY$D$?r^ytzkJ75{2^Pep5V4}Q(|Eqke z$B<{gFC1z0wZ*qc`wE}myUduGYE+oFfj^DiTqBa5+TBhd&+@y(BgjU+OTzEnoB91X zKpH=nLDm*Ni@3!DTljK<lOQ?D^C7aGJH=;P`43XC@#9J}ocbABIiO`Xw}_cLc^Qk{ zbP_up+s*f<JKJV<`FlEjfkrRPJBWhv&`vIkr}yy3$+)%ble`=H_V9GEelLHA#N4OD z`u)6Ca;W0eetwIl*QnShqb;^(VAtI|IM>N#xbiFhL53sVK~<~G37fM>uK3^pFC`f$ zKv4%(b-8f@k&0mYOK9$n^;^~IcDNw>AYYv6FrcxGA%HE`y2Xiu{6&VrVdXGy;+|SZ zOrpg3VP4H}NFuNBQpsdTM}+fuR5<@fnhP5#4s~}ANvZJgF+Rg&H(Dbuqt->27u88A z@XKS|VL~S?#Z%+3#(Jz^NbnDTLMDnwUgbj^157;03t231RLxTCZtG|kKRU(FlQitT z1|O;ex=Yw%Xx2!cfsrpRjqo=mIcA@59xVYrJC8(X{()CZ>9I7BA5@cQua9E9G=t`d z<8Sg19TT70QPt|+!8B*5l1#Dn0<TU<v8k%P#_klSFY&NMTmskE8q>qMLQ+}Siq)^u zBJC^muu`W)1zo9CtZlGp8`%Pf{z0?FuFHI(G>UTT3YS?ylA%m|bd_hz-~5<fT8bnj z9ku|+^l9Sr>%5=h5$XGw&rgNvcX&Z>k}SPnf`z9O2W73bOhfTltuN7*x6S+-FqOst zUV$=)12_tnIce@jZ;QTG!QD@J_2h99GP5i80=sNg><v~_-R9e-CLf58=F1l{#v(v} cfxH;f-X>W>DwNMi$zAI%O2y(zv7B?}KO^5Bw*UYD diff --git a/sveltejs/public/build/bundle.js.map b/sveltejs/public/build/bundle.js.map index 862e17e11551bcb04c6adf61a50ad58cfdbad3e6..7ac0ced3ac4b48a3ef9ad8f8e7e0ae72bbb438ba 100644 GIT binary patch delta 1155 zcmZ{hUu;uV9LICc{jruYXuGv{U178?V})>oE&`_3MSu6UD`nJnE<=pVnoGINj;??2 zpo>wrpy9=Ym_>gfkxdB?3oi~sauR&eH^qPP%?F6SXnY|ILICw)-rn*jj_kbrPR{wA z-}m$Vo~6?r^Y_|kuP`$vuEy98tk0;IOI0(JD-~;ID1+J%CgRx?zG{`%vUnJihfqBf zr@0vG36}NT34OxIPU%IfRI~a?Jzvm|7L4dvu}A5d|K*=;G<%%2iZ2G4$0Nc=Sob0Y zFR&K+W1M^FuABP<p>;*5?F!pYAKqs#3wXeucewSOnLnwUMy6VtG;-!nTFUWWkzZx2 ztgGBS+fy@jbGjB92!-u#BP@t<A9Fl>BfjK()ERiXyIeJDM$rt@{!RS%r<CR|U-OAb z8*gLnYaw<;sd9qLu4AQB#X?Cx_E3msHuFf=y7`IkH}jj^jzQdT^S3z7X1JGbs@zE* z$UNYEY-Hex75Y}@y}tk5Ji-=oC;xMhP9J6IX29ifzD#?wJQiF(;J7kY4ACnWxnG>k z@^3cMLY~X(Gt-ZGu8Sj+{N9R~ds8~hIu#93izZR4#+4LeN|{j+XH+`-h7{P++()BH zt*%Zc#BXELs*C(n(o0f3et<4tl%5gwDe3+>Rug3hO!G}i#N?w1l`Om{&bLAZTn3_{ zBoMJ7v`?k4-<G;*aW^<9y$f6-<AOWPJ*}b^QI#}e+J>Ur4|oUlZ37SCbty=nctD57 zB>L9_-OLnS?Jy?=PpLRu(4IVNy0F9&$_U~J_5Ui#V9EB=78$nEEg!rWw0YtdPeTZ! z&6UDbRaHh2N2y|fkCy9F3oXgu?ONNO#Q1UB4psiL5Vv2GoU|gtV#{7td*Pr)A7#KV zmOG&v_{>4^^Hzv#lp;fE`n(kav||ShZm=d4RqAhn4qCn>bqvHU<pzpk1&GRo^#v1Z zLm{!&*AU{6GK@IfB)5D;H2SFzI{lAxYX)F9+5xbSCGUpU(THdw7>2(ckkkqXMCe)A zsj}xpvI6BcR;8=&KuoZAVa4gTJ}FVxY=brrjhun~V&M#Y<(1O7kH$ZR_xYef-z`9| KaGr<HdjA7XR%z}4 delta 2634 zcmb_cU2IfE6waMHOSfhFN4rHT=oD&c>$T8Sz_OBb_U@%D?NXtw6$>f1yR+@m-MeLf zC`~0>BJsh52Ldu0O(2m(6I5toxG$QZZ(^b*YV^Sn5)+^Bry6ZECiUF8cj+!<jfw2T z?A)1izVDpxoHOVCSo8Lab@T5_nSduW5E$;)#s-Jz&@fL@X;WDu8Og?3+KdFG?<Di` zZfR#NcQ>J$K#Cp9#!@W7j7-NNgPoX8rZOa)G}0LoOFyHBr}POH(hXQs2W-;_*+phj zv5Y<*XRT2^o@QJckm}4^BhrS850gUfL4^z)2=)f|jSU~@S9tA`RL_sqppATLN!re@ z)}r#pxso(|{vGKt^V*WsTvio>c=UKYB(iAb?~b8n)4eP$OI1a5qx>_9*1HZvgq<dl zkXKq|yO>WSH0&;Eyp><6K)3H<Ik#}rYhGK8JW^#5J^$2$njBpIn+J8TYc8dfsa2vM zQ8BGzDm5sFsw1iFv>qR1nM}->NGn{bM&ABI1|eJ8+pRy+P68~$Qi+(sKqI1)=~VJ4 z3tM%8ElWeiNX#IaNk-zyupTD?fe6KmuyGx#vQUp2_??d>ch2$Lrze;L4fsRgn1?jr z2Ffp3dr~ZuO&MfvJeiC$-8gyIWhj+}P@;k|@3|6;<G;l+k7kW<CYCg8f?PNgOb3!P zMm(uUSfsTeoHjBi;E6-pYJU-unVn|IC@EHnH0|0&HfN0pi-IbV&7`FzpMsT}B}Y*| z*kEnECx#k&3e=1itLc=NMgEVT4@}Ox(UcT42VD?M2kn`7z<TEOFR0OdvOWd6=k1F0 z9xd>KA%tReIwkN~|0nr}Yf!VNFmy4nQXBsrE-H(f#JMp$>d+6n8%fD$!mNHCRY=88 zUhOFA=RLjBTJ!uU`lvhyeGR{oV+zkjM9=7>%{nygaW<rnAMPkM(vV0#b(n;^?fP%% zEoF{cylP2W%P%uTHx$X%F>SxIV+s4AHNRy@Uc@@3I=?+4H{t<G2h5w#$`g{?=L@PQ z{9T$k{hYj9T{GjSbjGjrQrfHRr*uEpZz8XYQuRcDk4?(`a+kJ;H(iwL`Hh%dX?{K_ zFTLhY^hGU?gZ%6lve*0`;e%-PluBvPI-T|N#WvjB7o>DDU>#5ewp8h}mKa!3MJ$@N zn+1C38`!CBo`A!IUs*xqXBXsk{L+{5CNt;4X<Vg4X2RANq-y8&3fzKr!me8+LKSfh zB&uR1Zqcbq5<ruFE0mypU<F~hZ&CS}2hZU!rD1-{gEvSi^KTD6CBx<ZxM~Og-w_?i z#Twkm<<q#HKT&}z_|G+1e^h{ov<0_M{6aKj_?2NwhxuX*%(q^W%lON+xc-rQ&4W}M zw*?ZRF25yv`3rC2P5j7L^8BhN{c7i4jnk|6A^yu=Tw`8bgDWwb={MhNz}@BYw$K2- z_BvkAR}mbj*Qo}q7LEb|X-bIF5I-^s{IhT1%G{)C*JuzlQk-%?%&Ia%>4@cFDW~o5 zi>)OxwHE;hh3>Nrh1kMH>_kEUL+#AP8l(p&wF0s!DAQEVZ<lC=4XUSYa{?~JS5r<* zD+Ewdu*`Eg*A}bQfuVxh!z9pPK2z|g$^?*4Ko3D0y^4s$3FN*u5_lpNpo=>R2#gqD z#GHXDRPJ5~zVNHO&NV_=Tr>Y7_|Gy<uE;KzdUWqm?Rpn<q1n)m%c->8BvW|WBOT{w zXK;Ye-;rJBH#7Jr_v66asoD*}tms8d);v?YEY@tz+L7=ZJ+gPBGwY%Q3kFZ5;Txg7 zhQ`01$J?PfV7lN`RREX40H{0sX2mJ|LA}f88=&3%lUML*w1-{j!d@PH6<6~!9M@fF N$7SZ33;3nxe*pOGGjjj{ diff --git a/sveltejs/src/Project/ActionButton.svelte b/sveltejs/src/Project/ActionButton.svelte index e8387ddc3..07a05da91 100644 --- a/sveltejs/src/Project/ActionButton.svelte +++ b/sveltejs/src/Project/ActionButton.svelte @@ -1,7 +1,6 @@ <script> import { onMount } from 'svelte'; import { - MODULE_STATUS, ORIGIN_URL, ALLOW_UI_INSTALL, PM_VALIDATION_ERROR, @@ -18,40 +17,10 @@ let loading = false; let loadingPhase = 'Adding'; - const { drupalSettings, Drupal } = window; + const { Drupal } = window; - /** - * Determine is a project is present in the local Drupal codebase. - * - * @param {string} projectName - * The project name. - * @return {boolean} - * True if the project is present. - */ - function projectIsDownloaded(projectName) { - return ( - typeof drupalSettings !== 'undefined' && projectName in MODULE_STATUS - ); - } - - /** - * Determine if a project is installed in the local Drupal codebase. - * - * @param {string} projectName - * The project name. - * @return {boolean} - * True if the project is installed. - */ - function projectIsInstalled(projectName) { - return ( - typeof drupalSettings !== 'undefined' && - projectName in MODULE_STATUS && - MODULE_STATUS[projectName] === 1 - ); - } - - let projectInstalled = projectIsInstalled(project.project_machine_name); - let projectDownloaded = projectIsDownloaded(project.project_machine_name); + let projectInstalled = project.status === 'active'; + let projectDownloaded = project.status === 'present'; /** * Checks the download/install status of a project and updates the UI. diff --git a/sveltejs/src/Project/AddInstallButton.svelte b/sveltejs/src/Project/AddInstallButton.svelte index 5e2d5a6f2..add2b0af9 100644 --- a/sveltejs/src/Project/AddInstallButton.svelte +++ b/sveltejs/src/Project/AddInstallButton.svelte @@ -1,8 +1,11 @@ <script> import { openPopup } from '../popup'; - import { MODULE_STATUS, ORIGIN_URL, PM_VALIDATION_ERROR } from '../constants'; + import { + ORIGIN_URL, + PM_VALIDATION_ERROR, + PACKAGE_MANAGER_AVAILABLE, + } from '../constants'; import ProjectButtonBase from './ProjectButtonBase.svelte'; - import { isPackageManagerRequired } from '../stores'; export let project; export let loading; @@ -58,7 +61,7 @@ /** * Installs an already downloaded module. */ - async function installModule() { + async function activateProject() { loading = true; const url = `${ORIGIN_URL}/admin/modules/project_browser/activate/${project.id}`; const installResponse = await fetch(url); @@ -75,7 +78,7 @@ handleError(installResponse); } if (responseContent.status === 0) { - MODULE_STATUS[project.project_machine_name] = 1; + project.status = 'active'; projectInstalled = true; loading = false; } @@ -87,7 +90,7 @@ * @param {boolean} install * If true, the module will be installed after it is downloaded. */ - function downloadModule(install = false) { + function downloadProject(install = false) { showStatus(true); /** @@ -136,14 +139,14 @@ // If this line is reached, then every stage of the download process // was completed without error and we can consider the module // downloaded and the process complete. - MODULE_STATUS[project.project_machine_name] = 0; + project.status = 'present'; projectDownloaded = true; loading = false; // If install is true, install the module before conveying the process // is complete to the UI. if (install === true) { - installModule(); + activateProject(); } } } @@ -156,12 +159,12 @@ <ProjectButtonBase click={() => { if (alreadyAdded) { - installModule(); + activateProject(); } else { - downloadModule(true); + downloadProject(true); } }} - disabled={PM_VALIDATION_ERROR && $isPackageManagerRequired} + disabled={PM_VALIDATION_ERROR && PACKAGE_MANAGER_AVAILABLE} > {alreadyAdded ? Drupal.t('Install') : Drupal.t('Add and Install')}<span class="visually-hidden">{project.title}</span diff --git a/sveltejs/src/ProjectBrowser.svelte b/sveltejs/src/ProjectBrowser.svelte index 5de0db249..4403c2e82 100644 --- a/sveltejs/src/ProjectBrowser.svelte +++ b/sveltejs/src/ProjectBrowser.svelte @@ -20,7 +20,6 @@ sortCriteria, preferredView, pageSize, - isPackageManagerRequired, } from './stores'; import MediaQuery from './MediaQuery.svelte'; import { @@ -32,10 +31,10 @@ ORIGIN_URL, FULL_MODULE_PATH, SORT_OPTIONS, - MODULE_STATUS, ALLOW_UI_INSTALL, PM_VALIDATION_ERROR, ACTIVE_PLUGINS, + PACKAGE_MANAGER_AVAILABLE, } from './constants'; // cspell:ignore tabwise @@ -116,13 +115,11 @@ dataArray = Object.values(data); rows = data[$activeTab].list; $rowsCount = data[$activeTab].totalResults; - $isPackageManagerRequired = data[$activeTab].isPackageManagerRequired; if ( - $isPackageManagerRequired && + PACKAGE_MANAGER_AVAILABLE && PM_VALIDATION_ERROR && typeof PM_VALIDATION_ERROR === 'string' && - MODULE_STATUS.package_manager && ALLOW_UI_INSTALL ) { const messenger = new Drupal.Message(); diff --git a/sveltejs/src/constants.js b/sveltejs/src/constants.js index 7f204cdd6..efc6460c8 100644 --- a/sveltejs/src/constants.js +++ b/sveltejs/src/constants.js @@ -15,7 +15,6 @@ export const DEFAULT_SOURCE_ID = export const CURRENT_SOURCES_KEYS = drupalSettings.project_browser.current_sources_keys; export const ORIGIN_URL = drupalSettings.project_browser.origin_url; -export const MODULE_STATUS = drupalSettings.project_browser.modules; export const FULL_MODULE_PATH = `${ORIGIN_URL}/${drupalSettings.project_browser.module_path}`; export const ALLOW_UI_INSTALL = drupalSettings.project_browser.ui_install; export const DARK_COLOR_SCHEME = @@ -23,3 +22,4 @@ export const DARK_COLOR_SCHEME = matchMedia('(prefers-color-scheme: dark)').matches; export const PM_VALIDATION_ERROR = drupalSettings.project_browser.pm_validation; export const ACTIVE_PLUGINS = drupalSettings.project_browser.active_plugins; +export const PACKAGE_MANAGER_AVAILABLE = drupalSettings.project_browser.package_manager_available; diff --git a/sveltejs/src/stores.js b/sveltejs/src/stores.js index fd76e78e6..46858cd01 100644 --- a/sveltejs/src/stores.js +++ b/sveltejs/src/stores.js @@ -82,8 +82,5 @@ const storedPageSize = JSON.parse(sessionStorage.getItem('pageSize')) || 12; export const pageSize = writable(storedPageSize); pageSize.subscribe((val) => sessionStorage.setItem('pageSize', JSON.stringify(val))); -// Store the Package Manager requirement. -export const isPackageManagerRequired = writable(false); - // Store the value of media queries. export const mediaQueryValues = writable(new Map()); diff --git a/tests/modules/project_browser_test/src/Plugin/ProjectBrowserSource/DrupalDotOrgJsonApi.php b/tests/modules/project_browser_test/src/Plugin/ProjectBrowserSource/DrupalDotOrgJsonApi.php index 465501f2f..a4801e17d 100644 --- a/tests/modules/project_browser_test/src/Plugin/ProjectBrowserSource/DrupalDotOrgJsonApi.php +++ b/tests/modules/project_browser_test/src/Plugin/ProjectBrowserSource/DrupalDotOrgJsonApi.php @@ -390,7 +390,6 @@ class DrupalDotOrgJsonApi extends ProjectBrowserSourceBase { machineName: $machine_name, body: $body, title: $project['attributes']['title'], - status: $project['attributes']['status'], changed: strtotime($project['attributes']['changed']), created: strtotime($project['attributes']['created']), author: [ @@ -404,7 +403,7 @@ class DrupalDotOrgJsonApi extends ProjectBrowserSourceBase { } } - return $this->createResultsPage($returned_list, TRUE, $api_response['total_results'] ?? 0); + return $this->createResultsPage($returned_list, $api_response['total_results'] ?? 0); } /** diff --git a/tests/modules/project_browser_test/src/TestActivator.php b/tests/modules/project_browser_test/src/TestActivator.php index 31c112021..9dae7ded6 100644 --- a/tests/modules/project_browser_test/src/TestActivator.php +++ b/tests/modules/project_browser_test/src/TestActivator.php @@ -6,6 +6,7 @@ namespace Drupal\project_browser_test; use Drupal\Core\State\StateInterface; use Drupal\Core\Url; +use Drupal\project_browser\ActivationStatus; use Drupal\project_browser\ActivatorInterface; use Drupal\project_browser\ProjectBrowser\Project; use Symfony\Component\HttpFoundation\Response; @@ -24,14 +25,17 @@ class TestActivator implements ActivatorInterface { * {@inheritdoc} */ public function supports(Project $project): bool { - return TRUE; + return $this->decorated->supports($project); } /** * {@inheritdoc} */ - public function isActive(Project $project): bool { - return FALSE; + public function getStatus(Project $project): ActivationStatus { + if ($project->machineName === 'pinky_brain') { + return ActivationStatus::Present; + } + return $this->decorated->getStatus($project); } /** diff --git a/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php b/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php index 466f888e4..db60f3449 100644 --- a/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php +++ b/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace Drupal\Tests\project_browser\FunctionalJavascript; +use Behat\Mink\Element\NodeElement; +use Drupal\Core\Recipe\Recipe; use Drupal\Core\State\StateInterface; use Drupal\FunctionalJavascriptTests\WebDriverTestBase; use Drupal\Tests\project_browser\Traits\PackageManagerFixtureUtilityTrait; @@ -99,10 +101,11 @@ class ProjectBrowserInstallerUiTest extends WebDriverTestBase { $popup = $assert_session->waitForElementVisible('css', '.project-browser-popup'); $this->assertNotEmpty($popup); // The Pinky and the Brain module doesn't actually exist in the filesystem, - // but it was registered with JavaScript as if it was to test the presence + // but the test activator pretends it does, in order to test the presence // of the "Install" button as opposed vs. the default "Add and Install" // button. This happens to be a good way to test mid-install exceptions as // well. + // @see \Drupal\project_browser_test\TestActivator::getStatus() $this->assertStringContainsString('MissingDependencyException: Unable to install modules pinky_brain due to missing modules pinky_brain', $popup->getText()); // The action button should have momentarily changed to a progress message, @@ -112,6 +115,39 @@ class ProjectBrowserInstallerUiTest extends WebDriverTestBase { $this->assertSame('Install Pinky and the Brain', $action_button->getText()); } + /** + * Tests applying a recipe from the project browser UI. + */ + public function testApplyRecipe(): void { + if (!class_exists(Recipe::class)) { + $this->markTestSkipped('This test cannot run because this version of Drupal does not support recipes.'); + } + $assert_session = $this->assertSession(); + + $this->config('project_browser.admin_settings') + ->set('enabled_sources', ['recipes']) + ->save(); + + $this->drupalGet('admin/modules/browse'); + $this->svelteInitHelper('css', '.pb-projects-list'); + $this->inputSearchField('image'); + + // Apply a recipe that ships with core. + $card = $assert_session->waitForElementVisible('css', '.pb-project:contains("Image media type")'); + $this->assertNotEmpty($card); + $assert_session->buttonExists('Install', $card)->press(); + $recipe_applied = $card->waitFor(30, function (NodeElement $card): bool { + return $card->has('css', '.project_status-indicator:contains("Installed")'); + }); + $this->assertTrue($recipe_applied); + + // If we reload, the installation status should be remembered. + $this->getSession()->reload(); + $card = $assert_session->waitForElementVisible('css', '.pb-project:contains("Image media type")'); + $this->assertNotEmpty($card); + $assert_session->elementExists('css', '.project_status-indicator:contains("Installed")', $card); + } + /** * Tests install UI not available if not enabled. */ diff --git a/tests/src/FunctionalJavascript/ProjectBrowserUiTest.php b/tests/src/FunctionalJavascript/ProjectBrowserUiTest.php index 23e55c875..4064035b2 100644 --- a/tests/src/FunctionalJavascript/ProjectBrowserUiTest.php +++ b/tests/src/FunctionalJavascript/ProjectBrowserUiTest.php @@ -6,6 +6,7 @@ namespace Drupal\Tests\project_browser\FunctionalJavascript; use Behat\Mink\Element\NodeElement; use Drupal\Core\Extension\MissingDependencyException; +use Drupal\Core\Recipe\Recipe; use Drupal\FunctionalJavascriptTests\WebDriverTestBase; // cspell:ignore coverageall doomer eggman quiznos statusactive statusmaintained @@ -1018,4 +1019,35 @@ class ProjectBrowserUiTest extends WebDriverTestBase { $this->assertNotEquals('clear-text', $has_focus_id); } + /** + * Tests that recipes show instructions for applying them. + */ + public function testRecipeInstructions(): void { + if (!class_exists(Recipe::class)) { + $this->markTestSkipped('This test cannot run because this version of Drupal does not support recipes.'); + } + $assert_session = $this->assertSession(); + + $this->config('project_browser.admin_settings') + ->set('enabled_sources', ['recipes']) + ->save(); + + $this->drupalGet('admin/modules/browse'); + $this->svelteInitHelper('css', '.pb-projects-list'); + $this->inputSearchField('image'); + + // Look for a recipe that ships with core. + $card = $assert_session->waitForElementVisible('css', '.pb-project:contains("Image media type")'); + $this->assertNotEmpty($card); + $assert_session->buttonExists('View Commands', $card)->press(); + $input = $assert_session->waitForElementVisible('css', '.command-box input'); + $this->assertNotEmpty($input); + $command = $input->getValue(); + // A full path to the PHP executable should be in the command. + $this->assertMatchesRegularExpression('/[^\s]+\/php /', $command); + $drupal_root = $this->getDrupalRoot(); + $this->assertStringStartsWith("cd $drupal_root && ", $command); + $this->assertStringEndsWith("php $drupal_root/core/scripts/drupal recipe $drupal_root/core/recipes/image_media_type", $command); + } + } diff --git a/tests/src/Kernel/RecipesSourceTest.php b/tests/src/Kernel/RecipesSourceTest.php new file mode 100644 index 000000000..bc1c723e0 --- /dev/null +++ b/tests/src/Kernel/RecipesSourceTest.php @@ -0,0 +1,108 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\Tests\project_browser\Kernel; + +use Drupal\Core\Extension\ModuleHandlerInterface; +use Drupal\Core\Recipe\Recipe; +use Drupal\KernelTests\KernelTestBase; +use Drupal\project_browser\EnabledSourceHandler; +use Drupal\project_browser\Plugin\ProjectBrowserSourceManager; +use Drupal\project_browser\ProjectType; +use Symfony\Component\Finder\Finder; +use Symfony\Component\Finder\SplFileInfo; + +/** + * Tests the source plugin that exposes locally installed recipes. + * + * @group project_browser + * @covers \Drupal\project_browser\Plugin\ProjectBrowserSource\Recipes + */ +class RecipesSourceTest extends KernelTestBase { + + /** + * {@inheritdoc} + */ + protected static $modules = ['project_browser']; + + /** + * {@inheritdoc} + */ + protected function setUp(): void { + parent::setUp(); + + if (!class_exists(Recipe::class)) { + $this->markTestSkipped('This test cannot be run because the recipe system is not available.'); + } + $this->installSchema('project_browser', [ + 'project_browser_projects', + 'project_browser_categories', + ]); + $this->installConfig('project_browser'); + } + + /** + * @covers \project_browser_install + * @covers \project_browser_project_browser_source_info_alter + */ + public function testRecipeSourceIsEnabledAtInstallTime(): void { + $this->assertNotContains('recipes', $this->config('project_browser.admin_settings')->get('enabled_sources')); + + $this->container->get(ModuleHandlerInterface::class) + ->loadInclude('project_browser', 'install'); + project_browser_install(); + $this->assertContains('recipes', $this->config('project_browser.admin_settings')->get('enabled_sources')); + + $enabled_sources = $this->container->get(EnabledSourceHandler::class) + ->getCurrentSources(); + $this->assertArrayHasKey('recipes', $enabled_sources); + } + + /** + * Tests that recipes are discovered by the plugin. + */ + public function testRecipesAreDiscovered(): void { + $finder = Finder::create() + ->in($this->getDrupalRoot() . '/core/recipes') + ->directories() + ->notName('example') + ->depth(0); + $expected_recipe_names = array_map(fn (SplFileInfo $dir) => $dir->getBasename(), iterator_to_array($finder)); + // This contributed recipe is one of our dev dependencies. + $expected_recipe_names[] = 'imagemagick-configuration'; + + /** @var \Drupal\project_browser\ProjectBrowser\ProjectsResultsPage $projects */ + $projects = $this->container->get(ProjectBrowserSourceManager::class) + ->createInstance('recipes') + ->getProjects(); + $found_recipes = []; + foreach ($projects->list as $project) { + $this->assertNotEmpty($project->title); + $this->assertSame(ProjectType::Recipe, $project->type); + $found_recipes[$project->machineName] = $project; + } + $found_recipe_names = array_keys($found_recipes); + + // The `example` recipe (from core) should always be hidden. + $this->assertNotContains('example', $expected_recipe_names); + + sort($expected_recipe_names); + sort($found_recipe_names); + $this->assertSame($expected_recipe_names, $found_recipe_names); + + // Ensure the package names are properly resolved. + $this->assertSame('drupal/core', $found_recipes['standard']?->packageName); + $this->assertSame('kanopi/imagemagick-configuration', $found_recipes['imagemagick-configuration']?->packageName); + + // The core recipes should have descriptions, which should become the body + // text of the project. + $this->assertArrayHasKey('standard', $found_recipes); + // The need for reflection sucks, but there's no way to introspect the body + // on the backend. + $body = (new \ReflectionProperty($found_recipes['standard'], 'body')) + ->getValue($found_recipes['standard']); + $this->assertNotEmpty($body); + } + +} -- GitLab