From bdd3823701fba587b06424276e37b6dbe5e34630 Mon Sep 17 00:00:00 2001 From: Romanos Dodopoulos <romanos.dodopoulos@cern.ch> Date: Fri, 28 Apr 2017 11:56:32 +0200 Subject: [PATCH] Remove centrally managed module/theme from update Implement hook_update_projects_alter() to remove all centrally managed modules and themes from the Update manager. Those which are located under ^sites/all/. The hook doesn't work for modules whose module name does not match the project name. A workaround would be far more extended than these few lines of code. Another workaround would be to remove them individually which wouldn't be extensible. So the best option is to follow a policy to always match the module and project names (see https://www.drupal.org/node/2821041 and DRUPAL-76) The list_themes() function makes the unset operation easier for themes because it returns a list of objects with all the related information (i.e. path and project name). Still there was an error dues to a single theme (cern_default) that isn't related to a project but this was fixed with an if condition. Related to DRUPAL-65. --- cern_integration.info | 4 ++-- cern_integration.module | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/cern_integration.info b/cern_integration.info index 1103c61..3abc8f6 100644 --- a/cern_integration.info +++ b/cern_integration.info @@ -1,7 +1,7 @@ name = CERN Integration package = CERN description = Provides CERN site integration for Drupal. -version = "7.X-1.8" +version = "7.X-1.9" core = 7.x dependencies[] = shib_auth @@ -9,6 +9,6 @@ files[] = cern_integration.module files[] = cern_integration.install project = "cern_integration" -datestamp = "1455099515" +datestamp = "1493373769" required = TRUE diff --git a/cern_integration.module b/cern_integration.module index 179b6bc..7cee31a 100644 --- a/cern_integration.module +++ b/cern_integration.module @@ -555,3 +555,26 @@ function cern_integration_form_domain_301_redirect_admin_form_alter (&$form, &$ } +/** + * Implements hook_update_projects_alter(). + * Remove all centrally managed modules and themes from the Update manager. + */ +function cern_integration_update_projects_alter(&$projects) { + // Remove all centrally managed modules. + foreach (module_list() as $module) { + if (preg_match('/^sites\/all\/modules\//', drupal_get_path('module', $module))) { + // This works only if the module name matches the project name. + unset($projects[$module]); + } + } + // Remove all centrally managed themes. + foreach (list_themes() as $theme_obj){ + // Check if there is a project for that theme. + // This is normally true but not always. + if (isset($theme_obj->info['project'])) { + if (preg_match('/^sites\/all\/themes\//', $theme_obj->filename)) { + unset($projects[$theme_obj->info['project']]); + } + } + } +} -- GitLab