diff --git a/config/install/project_browser.admin_settings.yml b/config/install/project_browser.admin_settings.yml index 538ff6e5a201febaada945d80280bb46924638e1..bdbc46ac513140fe6c98f6377e6fd2749bc36c35 100644 --- a/config/install/project_browser.admin_settings.yml +++ b/config/install/project_browser.admin_settings.yml @@ -1,5 +1,4 @@ enabled_sources: - drupalorg_jsonapi allow_ui_install: false -disable_add_new_module: true allowed_projects: {} diff --git a/config/schema/project_browser.schema.yml b/config/schema/project_browser.schema.yml index 9411444430859cf3dc57147afc34bebc946487d3..9b93c030c8736973d8ba84e6f889382b70005a5f 100644 --- a/config/schema/project_browser.schema.yml +++ b/config/schema/project_browser.schema.yml @@ -11,9 +11,6 @@ project_browser.admin_settings: allow_ui_install: type: boolean label: 'Allow installing packages from within the UI' - disable_add_new_module: - type: boolean - label: 'Disable Add new module menu item' allowed_projects: type: sequence label: 'Allow-lists of projects, keyed by source plugin ID' diff --git a/project_browser.install b/project_browser.install index cb07f6e646078202ccb7612e8267cfcec537831f..bd56c71f1c30f58b04c60293ba890c2db1156171 100644 --- a/project_browser.install +++ b/project_browser.install @@ -330,3 +330,15 @@ function project_browser_update_9016() { function project_browser_update_9017() { _project_browser_populate_from_fixture(); } + +/** + * Implements hook_update_N(). + * + * Remove disable_add_new_module setting. + */ +function project_browser_update_9018() { + $config_factory = \Drupal::configFactory(); + $config_factory->getEditable('project_browser.admin_settings') + ->clear('disable_add_new_module') + ->save(TRUE); +} diff --git a/project_browser.module b/project_browser.module index f47f581b7cfea4d0bb85f4e34f7533a37544529e..ac6bfb0edf93a3c82f070fef2470d81f70251cd6 100644 --- a/project_browser.module +++ b/project_browser.module @@ -53,16 +53,6 @@ function _project_browser_populate_from_fixture($truncate_first = TRUE) { ->populateFromFixture($module_path . '/fixtures/project_data.json', $module_path . '/fixtures/categories.json', $truncate_first); } -/** - * Implements hook_menu_links_discovered_alter(). - */ -function project_browser_menu_links_discovered_alter(&$links) { - if (\Drupal::config('project_browser.admin_settings')->get('disable_add_new_module')) { - // Remove link from Admin toolbar module. - unset($links['admin_toolbar_tools.extra_links:update.module_install']); - } -} - /** * Implements hook_project_browser_source_info_alter(). */ diff --git a/project_browser.post_update.php b/project_browser.post_update.php deleted file mode 100644 index 39f354b262fef39561b3c9f9348b334f91849cb2..0000000000000000000000000000000000000000 --- a/project_browser.post_update.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php - -/** - * @file - * Post update functions for Project Browser. - */ - -/** - * Set a default value for disable_add_new_module setting. - */ -function project_browser_post_update_default_for_disable_add_new_module(&$sandbox) { - \Drupal::configFactory() - ->getEditable('project_browser.admin_settings') - ->set('disable_add_new_module', TRUE) - ->save(TRUE); -} diff --git a/project_browser.services.yml b/project_browser.services.yml index 7152710c468b868fb270f7761651b40fcc05d81d..8bfede4c2555154ae45bdbf29b424430ae251061 100644 --- a/project_browser.services.yml +++ b/project_browser.services.yml @@ -24,9 +24,6 @@ services: - { name: cache.bin } factory: cache_factory:get arguments: [project_browser] - Drupal\project_browser\EventSubscriber\DisableAddNewModuleRouteSubscriber: - tags: - - { name: event_subscriber } Drupal\project_browser\Activator: tags: - { name: service_collector, tag: project_browser.activator, call: addActivator } diff --git a/src/EventSubscriber/DisableAddNewModuleRouteSubscriber.php b/src/EventSubscriber/DisableAddNewModuleRouteSubscriber.php deleted file mode 100644 index ebc8459e11f7145046bf3e25cfe701d6a26006f0..0000000000000000000000000000000000000000 --- a/src/EventSubscriber/DisableAddNewModuleRouteSubscriber.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - -namespace Drupal\project_browser\EventSubscriber; - -use Drupal\Core\Config\ConfigFactoryInterface; -use Drupal\Core\Routing\RouteSubscriberBase; -use Symfony\Component\Routing\RouteCollection; - -/** - * Route subscriber to disable "Add new module" page. - */ -class DisableAddNewModuleRouteSubscriber extends RouteSubscriberBase { - - /** - * DisableAddNewModuleRouteSubscriber constructor. - * - * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory - * The config factory. - */ - public function __construct( - protected ConfigFactoryInterface $configFactory, - ) { - } - - /** - * {@inheritdoc} - */ - protected function alterRoutes(RouteCollection $collection) { - $config = $this->configFactory->get('project_browser.admin_settings'); - if ($config->get('disable_add_new_module') && $route = $collection->get('update.module_install')) { - $route->setRequirement('_access', 'FALSE'); - } - } - -} diff --git a/src/Form/SettingsForm.php b/src/Form/SettingsForm.php index 08d106c94e0f737a7b164183848a719d53162b30..b4393728eb8cdde571cdf8f51e9bf325c3cb6447 100644 --- a/src/Form/SettingsForm.php +++ b/src/Form/SettingsForm.php @@ -2,14 +2,12 @@ namespace Drupal\project_browser\Form; -use Drupal\Component\Plugin\Discovery\CachedDiscoveryInterface; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Config\TypedConfigManagerInterface; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Routing\RouteBuilderInterface; use Drupal\project_browser\Plugin\ProjectBrowserSourceManager; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -31,12 +29,6 @@ class SettingsForm extends ConfigFormBase { * The back end cache. * @param \Drupal\Core\Extension\ModuleHandlerInterface $moduleHandler * The module handler. - * @param \Drupal\Core\Routing\RouteBuilderInterface $routeBuilder - * The route builder. - * @param \Drupal\project_browser\Plugin\CachedDiscoveryInterface $contextualLinkManager - * The Project Browser source manager. - * @param \Drupal\Core\Cache\CacheBackendInterface $renderCache - * The render cache. */ public function __construct( ConfigFactoryInterface $config_factory, @@ -44,9 +36,6 @@ class SettingsForm extends ConfigFormBase { private readonly ProjectBrowserSourceManager $manager, private readonly CacheBackendInterface $cacheBin, private readonly ModuleHandlerInterface $moduleHandler, - private readonly RouteBuilderInterface $routeBuilder, - private readonly CachedDiscoveryInterface $contextualLinkManager, - private readonly CacheBackendInterface $renderCache, ) { parent::__construct($config_factory, $typed_config_manager); } @@ -61,9 +50,6 @@ class SettingsForm extends ConfigFormBase { $container->get(ProjectBrowserSourceManager::class), $container->get('cache.project_browser'), $container->get(ModuleHandlerInterface::class), - $container->get('router.builder'), - $container->get('plugin.manager.menu.contextual_link'), - $container->get('cache.render') ); } @@ -111,13 +97,6 @@ class SettingsForm extends ConfigFormBase { '#disabled' => $package_manager_not_ready, ]; - $form['disable_add_new_module'] = [ - '#type' => 'checkbox', - '#title' => $this->t('Disable "Add new module" page'), - '#default_value' => $config->get('disable_add_new_module'), - '#description' => $this->t('Removes access to the Drupal page that allows .tar modules to be installed, which does not use composer, so is strongly discouraged when using Project Browser.'), - ]; - if ($package_manager_not_ready) { $form['allow_ui_install_compatibility'] = [ '#type' => 'container', @@ -240,22 +219,13 @@ class SettingsForm extends ConfigFormBase { */ public function submitForm(array &$form, FormStateInterface $form_state) { $settings = $this->config('project_browser.admin_settings'); - $disable_old = $settings->get('disable_add_new_module'); - $disable_new = $form_state->getValue('disable_add_new_module'); $all_plugins = $form_state->getValue('enabled_sources'); $enabled_plugins = array_filter($all_plugins, fn($source) => $source['status'] === 'enabled'); $settings ->set('enabled_sources', array_keys($enabled_plugins)) ->set('allow_ui_install', $form_state->getValue('allow_ui_install')) - ->set('disable_add_new_module', $disable_new) ->save(); $this->cacheBin->deleteAll(); - if ($disable_old != $disable_new) { - // If disable add new module changed, clear route and menu caches. - $this->routeBuilder->rebuild(); - $this->contextualLinkManager->clearCachedDefinitions(); - $this->renderCache->invalidateAll(); - } parent::submitForm($form, $form_state); } diff --git a/tests/src/Functional/DisableAddNewModuleTest.php b/tests/src/Functional/DisableAddNewModuleTest.php deleted file mode 100644 index f696ab85d0a426e5f3032868d8f908a6c8b7a5cd..0000000000000000000000000000000000000000 --- a/tests/src/Functional/DisableAddNewModuleTest.php +++ /dev/null @@ -1,108 +0,0 @@ -<?php - -namespace Drupal\Tests\project_browser\Functional; - -use Drupal\Core\Session\AccountInterface; -use Drupal\Tests\BrowserTestBase; - -/** - * Test disabling Add new module page. - * - * @group disable_add_new_module - */ -class DisableAddNewModuleTest extends BrowserTestBase { - - /** - * {@inheritdoc} - */ - protected $defaultTheme = 'stark'; - - /** - * {@inheritdoc} - */ - protected static $modules = ['update', 'project_browser']; - - /** - * A user with admin permissions. - * - * @var \Drupal\Core\Session\AccountInterface - */ - protected AccountInterface $adminUser; - - /** - * {@inheritdoc} - */ - protected function setUp(): void { - parent::setUp(); - // Create user with access to install and update modules. - $this->adminUser = $this->drupalCreateUser([ - 'administer modules', - 'administer software updates', - 'administer site configuration', - ]); - $this->drupalLogin($this->adminUser); - } - - /** - * Test admin user denied access to Add new module page. - */ - public function testAddNewModuleDisabled(): void { - $session = $this->assertSession(); - $this->drupalGet('admin/modules/install'); - $session->statusCodeEquals(403); - } - - /** - * Test uninstalling restores access to Add new module. - */ - public function testUninstall(): void { - $session = $this->assertSession(); - $page = $this->getSession()->getPage(); - // Go to module uninstall page. - $this->drupalGet('/admin/modules/uninstall'); - $session->statusCodeEquals(200); - $page->checkField('edit-uninstall-project-browser'); - $page->pressButton('edit-submit'); - $session->statusCodeEquals(200); - // Confirm uninstall. - $page->pressButton('edit-submit'); - $session->statusCodeEquals(200); - $session->pageTextContains('The selected modules have been uninstalled.'); - // Should now be able to access Add new module page. - $this->drupalGet('admin/modules/install'); - $session->statusCodeEquals(200); - } - - /** - * Test setting the "disable add new module" setting. - * - * Test to check that "Add new module" page can be enabled through Project - * Browser admin page. - */ - public function testDisableSetting(): void { - $session = $this->assertSession(); - $page = $this->getSession()->getPage(); - // Go to Project browser settings and uncheck the "disable add new module" - // checkbox. - $this->drupalGet('/admin/config/development/project_browser'); - $session->statusCodeEquals(200); - $page->uncheckField('disable_add_new_module'); - $page->pressButton('edit-submit'); - $session->statusCodeEquals(200); - $session->pageTextContains('The configuration options have been saved.'); - // Should now be able to access Add new module page. - $this->drupalGet('admin/modules/install'); - $session->statusCodeEquals(200); - // Go to Project browser settings, check "disable add new module" checkbox. - $this->drupalGet('/admin/config/development/project_browser'); - $session->statusCodeEquals(200); - $page->checkField('disable_add_new_module'); - $page->pressButton('edit-submit'); - $session->statusCodeEquals(200); - $session->pageTextContains('The configuration options have been saved.'); - // Should no longer be able to access Add new module page. - $this->drupalGet('admin/modules/install'); - $session->statusCodeEquals(403); - } - -}