Comment supprimer manuellement un module Drupal 8

Il arrive que certains modules posent des problèmes pour être désinstallés via le gestionnaire d'extensions et également avec drush.

Il faut alors désinstaller le module manuellement.

Pour cela, il faut se rendre dans les tables "config" et "cache_config" de la base de données rattachée au site pour récupérer la valeur renseignée dans le champ blob des enregistrements "code.extension" (qui est censée être la même pour les deux tables).

Il faut ensuite supprimer la référence du module dans la valeur sérialisée comme dans l'exemple ci-dessous et remplacer la valeur obtenue dans les deux tables.

Exemple de code php pour effectuer cette opération sur le module "filebrowser" : 

<?php
 
$data = unserialize('a:5:{s:6:"module";a:126:{s:6:"action";i:0;s:8:"addtoany";i:0;s:13:"admin_toolbar";i:0;s:19:"admin_toolbar_tools";i:0;s:23:"advanced_text_formatter";i:0;s:16:"auto_entitylabel";i:0;s:14:"automated_cron";i:0;s:22:"better_exposed_filters";i:0;s:5:"blazy";i:0;s:5:"block";i:0;s:11:"block_class";i:0;s:13:"block_content";i:0;s:11:"block_place";i:0;s:17:"bootstrap_library";i:0;s:10:"breakpoint";i:0;s:8:"ckeditor";i:0;s:20:"ckeditor_fontawesome";i:0;s:16:"ckeditor_widgets";i:0;s:5:"color";i:0;s:8:"slick_ui";i:0;s:11:"slick_views";i:0;s:6:"system";i:0;s:8:"taxonomy";i:0;s:9:"telephone";i:0;s:4:"text";i:0;s:5:"token";i:0;s:7:"toolbar";i:0;s:4:"tour";i:0;s:6:"update";i:0;s:4:"user";i:0;s:17:"video_embed_field";i:0;s:17:"video_embed_media";i:0;s:8:"views_ui";i:0;s:7:"webform";i:0;s:17:"webform_templates";i:0;s:10:"webform_ui";i:0;s:11:"webprofiler";i:0;s:10:"xmlsitemap";i:0;s:17:"xmlsitemap_custom";i:0;s:18:"xmlsitemap_engines";i:0;s:2:"ds";i:1;s:17:"menu_link_content";i:1;s:8:"pathauto";i:1;s:5:"views";i:10;s:8:"standard";i:1000;}s:5:"theme";a:5:{s:6:"stable";i:0;s:6:"classy";i:0;s:5:"seven";i:0;s:3:"blah";i:0;s:7:"blahblah";i:0;}s:7:"profile";s:8:"standard";s:5:"_core";a:1:{s:19:"default_config_hash";s:43:"BLAH-blahblahblahblah";}s:8:"langcode";s:2:"fr";}');
 
unset($data['module']['filebrowser']);  
echo (serialize($data));

Le dossier du module peut maintenant être supprimé (exemple : rm -rf module/filebrowser) et il faut vider le cache en utilisant "drush cr".

 

Certains modules créent des types de contenu qu'il est également impossible de supprimer depuis l'administration de Drupal ou à l'aide de "drush".

Dans ce cas, il faut exécuter le code php suivant à adapter selon votre cas :

<?php
use Drupal\node\Entity\NodeType;
$node_type = NodeType::load('dir_listing');
$node_type->delete();