diff --git a/modules/update/update.compare.inc b/modules/update/update.compare.inc index 354bd37bc8842cf51a52051bc626bc9771246f7c..b89a40816c765507bb66676c0ca4948299b940c2 100644 --- a/modules/update/update.compare.inc +++ b/modules/update/update.compare.inc @@ -52,7 +52,22 @@ function update_get_projects() { */ function _update_process_info_list(&$projects, $list, $project_type) { foreach ($list as $file) { - if (empty($file->status)) { + // A disabled base theme of an enabled sub-theme still has all of its code + // run by the sub-theme, so we include it in our "enabled" projects list. + if (!$file->status && !empty($file->sub_themes)) { + foreach ($file->sub_themes as $key => $name) { + // Build a list of enabled sub-themes. + if ($list[$key]->status) { + $file->enabled_sub_themes[$key] = $name; + } + } + // If there are no enabled subthemes, we should ingore this theme and go + // on to the next one. + if (empty($file->enabled_sub_themes)) { + continue; + } + } + elseif (empty($file->status)) { // Skip disabled modules or themes. continue; } @@ -89,6 +104,21 @@ function _update_process_info_list(&$projects, $list, $project_type) { } $project_name = $file->info['project']; + + // Add a list of sub-themes that "depend on" the project and a list of base + // themes that are "required by" the project. + if ($project_name == 'drupal') { + // Drupal core is always required, so this extra info would be noise. + $sub_themes = array(); + $base_themes = array(); + } + else { + // Add list of enabled sub-themes. + $sub_themes = !empty($file->enabled_sub_themes) ? $file->enabled_sub_themes : array(); + // Add list of base themes. + $base_themes = !empty($file->base_themes) ? $file->base_themes : array(); + } + if (!isset($projects[$project_name])) { // Only process this if we haven't done this project, since a single // project can have multiple modules or themes. @@ -98,12 +128,16 @@ function _update_process_info_list(&$projects, $list, $project_type) { 'datestamp' => $file->info['datestamp'], 'includes' => array($file->name => $file->info['name']), 'project_type' => $project_name == 'drupal' ? 'core' : $project_type, + 'sub_themes' => $sub_themes, + 'base_themes' => $base_themes, ); } else { $projects[$project_name]['includes'][$file->name] = $file->info['name']; $projects[$project_name]['info']['_info_file_ctime'] = max($projects[$project_name]['info']['_info_file_ctime'], $file->info['_info_file_ctime']); $projects[$project_name]['datestamp'] = max($projects[$project_name]['datestamp'], $file->info['datestamp']); + $projects[$project_name]['sub_themes'] = array_merge($projects[$project_name]['sub_themes'], $sub_themes); + $projects[$project_name]['base_themes'] = array_merge($projects[$project_name]['base_themes'], $base_themes); } } } diff --git a/modules/update/update.report.inc b/modules/update/update.report.inc index 6ced2cee2b48f496aefbd5d8d345073476774eda..94ba82eaa20bd85ad8351e6f485839cd06882155 100644 --- a/modules/update/update.report.inc +++ b/modules/update/update.report.inc @@ -183,6 +183,26 @@ function theme_update_report($data) { $row .= t('Includes: %includes', array('%includes' => implode(', ', $project['includes']))); $row .= "</div>\n"; + if (!empty($project['base_themes'])) { + $row .= '<div class="basethemes">'; + sort($project['base_themes']); + // We use !dependencies and manually call theme('placeholder') here to + // avoid breakding the D6 string freeze. This identical string is + // already in modules/system/system.admin.inc. + $row .= t('Depends on: !dependencies', array('!dependencies' => theme('placeholder', implode(', ', $project['base_themes'])))); + $row .= "</div>\n"; + } + + if (!empty($project['sub_themes'])) { + $row .= '<div class="subthemes">'; + sort($project['sub_themes']); + // We use !required and manually call theme('placeholder') here to avoid + // breakding the D6 string freeze. This identical string is already in + // modules/system/system.admin.inc. + $row .= t('Required by: !required', array('!required' => theme('placeholder', implode(', ', $project['sub_themes'])))); + $row .= "</div>\n"; + } + $row .= "</div>\n"; // info div. if (!isset($rows[$project['project_type']])) {