class DevelReinstall

Same name and namespace in other branches
  1. 5.x src/Form/DevelReinstall.php \Drupal\devel\Form\DevelReinstall

Display a dropdown of installed modules with the option to reinstall them.

Hierarchy

Expanded class hierarchy of DevelReinstall

1 string reference to 'DevelReinstall'
devel.routing.yml in ./devel.routing.yml
devel.routing.yml

File

src/Form/DevelReinstall.php, line 14

Namespace

Drupal\devel\Form
View source
class DevelReinstall extends FormBase {
    
    /**
     * The module installer.
     *
     * @var \Drupal\Core\Extension\ModuleInstallerInterface
     */
    protected $moduleInstaller;
    
    /**
     * The module extension list.
     *
     * @var \Drupal\Core\Extension\ModuleExtensionList
     */
    protected $moduleExtensionList;
    
    /**
     * Constructs a new DevelReinstall form.
     *
     * @param \Drupal\Core\Extension\ModuleInstallerInterface $module_installer
     *   The module installer.
     * @param \Drupal\Core\Extension\ModuleExtensionList $extension_list_module
     *   The module extension list.
     */
    public function __construct(ModuleInstallerInterface $module_installer, ModuleExtensionList $extension_list_module) {
        $this->moduleInstaller = $module_installer;
        $this->moduleExtensionList = $extension_list_module;
    }
    
    /**
     * {@inheritdoc}
     */
    public static function create(ContainerInterface $container) {
        return new static($container->get('module_installer'), $container->get('extension.list.module'));
    }
    
    /**
     * {@inheritdoc}
     */
    public function getFormId() {
        return 'devel_reinstall_form';
    }
    
    /**
     * {@inheritdoc}
     */
    public function buildForm(array $form, FormStateInterface $form_state) {
        // Get a list of all available modules.
        $modules = $this->moduleExtensionList
            ->reset()
            ->getList();
        $uninstallable = array_filter($modules, function ($module) use ($modules) {
            return empty($modules[$module->getName()]->info['required']) && drupal_get_installed_schema_version($module->getName()) > SCHEMA_UNINSTALLED && $module->getName() !== 'devel';
        });
        $form['filters'] = [
            '#type' => 'container',
            '#attributes' => [
                'class' => [
                    'table-filter',
                    'js-show',
                ],
            ],
        ];
        $form['filters']['text'] = [
            '#type' => 'search',
            '#title' => $this->t('Search'),
            '#size' => 30,
            '#placeholder' => $this->t('Enter module name'),
            '#attributes' => [
                'class' => [
                    'table-filter-text',
                ],
                'data-table' => '#devel-reinstall-form',
                'autocomplete' => 'off',
                'title' => $this->t('Enter a part of the module name or description to filter by.'),
            ],
        ];
        // Only build the rest of the form if there are any modules available to
        // uninstall.
        if (empty($uninstallable)) {
            return $form;
        }
        $header = [
            'name' => $this->t('Name'),
            'description' => $this->t('Description'),
        ];
        $rows = [];
        foreach ($uninstallable as $module) {
            $name = $module->info['name'] ?: $module->getName();
            $rows[$module->getName()] = [
                'name' => [
                    'data' => [
                        '#type' => 'inline_template',
                        '#template' => '<label class="module-name table-filter-text-source">{{ module_name }}</label>',
                        '#context' => [
                            'module_name' => $name,
                        ],
                    ],
                ],
                'description' => [
                    'data' => $module->info['description'],
                    'class' => [
                        'description',
                    ],
                ],
            ];
        }
        $form['reinstall'] = [
            '#type' => 'tableselect',
            '#header' => $header,
            '#options' => $rows,
            '#js_select' => FALSE,
            '#empty' => $this->t('No modules are available to uninstall.'),
        ];
        $form['#attached']['library'][] = 'system/drupal.system.modules';
        $form['actions'] = [
            '#type' => 'actions',
        ];
        $form['actions']['submit'] = [
            '#type' => 'submit',
            '#value' => $this->t('Reinstall'),
        ];
        return $form;
    }
    
    /**
     * {@inheritdoc}
     */
    public function validateForm(array &$form, FormStateInterface $form_state) {
        // Form submitted, but no modules selected.
        if (!array_filter($form_state->getValue('reinstall'))) {
            $form_state->setErrorByName('reinstall', $this->t('No modules selected.'));
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function submitForm(array &$form, FormStateInterface $form_state) {
        try {
            $modules = $form_state->getValue('reinstall');
            $reinstall = array_keys(array_filter($modules));
            $this->moduleInstaller
                ->uninstall($reinstall, FALSE);
            $this->moduleInstaller
                ->install($reinstall, FALSE);
            $this->messenger()
                ->addMessage($this->t('Uninstalled and installed: %names.', [
                '%names' => implode(', ', $reinstall),
            ]));
        } catch (\Exception $e) {
            $this->messenger()
                ->addError($this->t('Unable to reinstall modules. Error: %error.', [
                '%error' => $e->getMessage(),
            ]));
        }
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
DevelReinstall::$moduleExtensionList protected property The module extension list.
DevelReinstall::$moduleInstaller protected property The module installer.
DevelReinstall::buildForm public function Form constructor. Overrides FormInterface::buildForm
DevelReinstall::create public static function Instantiates a new instance of this class. Overrides FormBase::create
DevelReinstall::getFormId public function Returns a unique string identifying the form. Overrides FormInterface::getFormId
DevelReinstall::submitForm public function Form submission handler. Overrides FormInterface::submitForm
DevelReinstall::validateForm public function Form validation handler. Overrides FormBase::validateForm
DevelReinstall::__construct public function Constructs a new DevelReinstall form.
FormBase::$configFactory protected property The config factory. 3
FormBase::$requestStack protected property The request stack. 1
FormBase::$routeMatch protected property The route match.
FormBase::config protected function Retrieves a configuration object.
FormBase::configFactory protected function Gets the config factory for this form. 3
FormBase::container private function Returns the service container.
FormBase::currentUser protected function Gets the current user.
FormBase::getRequest protected function Gets the request object.
FormBase::getRouteMatch protected function Gets the route match.
FormBase::logger protected function Gets the logger for a specific channel.
FormBase::redirect protected function Returns a redirect response object for the specified route.
FormBase::resetConfigFactory public function Resets the configuration factory.
FormBase::setConfigFactory public function Sets the config factory for this form.
FormBase::setRequestStack public function Sets the request stack object to use.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 17
MessengerTrait::messenger public function Gets the messenger. 17
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a &#039;destination&#039; URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 3
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.