annotate modules/update/update.report.inc @ 11:589fb7c02327 6.5

Drupal 6.5
author Franck Deroche <webmaster@defr.org>
date Tue, 23 Dec 2008 14:32:19 +0100
parents c1f4ac30525a
children
rev   line source
webmaster@1 1 <?php
webmaster@11 2 // $Id: update.report.inc,v 1.10.2.2 2008/08/28 08:14:56 dries Exp $
webmaster@1 3
webmaster@1 4 /**
webmaster@1 5 * @file
webmaster@1 6 * Code required only when rendering the available updates report.
webmaster@1 7 */
webmaster@1 8
webmaster@1 9 /**
webmaster@1 10 * Menu callback. Generate a page about the update status of projects.
webmaster@1 11 */
webmaster@1 12 function update_status() {
webmaster@1 13 if ($available = update_get_available(TRUE)) {
webmaster@1 14 module_load_include('inc', 'update', 'update.compare');
webmaster@1 15 $data = update_calculate_project_data($available);
webmaster@1 16 return theme('update_report', $data);
webmaster@1 17 }
webmaster@1 18 else {
webmaster@1 19 return theme('update_report', _update_no_data());
webmaster@1 20 }
webmaster@1 21 }
webmaster@1 22
webmaster@1 23 /**
webmaster@1 24 * Theme project status report.
webmaster@1 25 *
webmaster@1 26 * @ingroup themeable
webmaster@1 27 */
webmaster@1 28 function theme_update_report($data) {
webmaster@1 29 $last = variable_get('update_last_check', 0);
webmaster@1 30 $output = '<div class="update checked">'. ($last ? t('Last checked: @time ago', array('@time' => format_interval(time() - $last))) : t('Last checked: never'));
webmaster@1 31 $output .= ' <span class="check-manually">('. l(t('Check manually'), 'admin/reports/updates/check') .')</span>';
webmaster@1 32 $output .= "</div>\n";
webmaster@1 33
webmaster@1 34 if (!is_array($data)) {
webmaster@1 35 $output .= '<p>'. $data .'</p>';
webmaster@1 36 return $output;
webmaster@1 37 }
webmaster@1 38
webmaster@1 39 $header = array();
webmaster@1 40 $rows = array();
webmaster@1 41
webmaster@1 42 $notification_level = variable_get('update_notification_threshold', 'all');
webmaster@1 43
webmaster@1 44 foreach ($data as $project) {
webmaster@1 45 switch ($project['status']) {
webmaster@1 46 case UPDATE_CURRENT:
webmaster@1 47 $class = 'ok';
webmaster@1 48 $icon = theme('image', 'misc/watchdog-ok.png', t('ok'), t('ok'));
webmaster@1 49 break;
webmaster@1 50 case UPDATE_NOT_SECURE:
webmaster@1 51 case UPDATE_REVOKED:
webmaster@1 52 case UPDATE_NOT_SUPPORTED:
webmaster@1 53 case UPDATE_NOT_CURRENT:
webmaster@1 54 if ($notification_level == 'all'
webmaster@1 55 || $project['status'] != UPDATE_NOT_CURRENT) {
webmaster@1 56 $class = 'error';
webmaster@1 57 $icon = theme('image', 'misc/watchdog-error.png', t('error'), t('error'));
webmaster@1 58 break;
webmaster@1 59 }
webmaster@1 60 // Otherwise, deliberate no break and use the warning class/icon.
webmaster@1 61 default:
webmaster@1 62 $class = 'warning';
webmaster@1 63 $icon = theme('image', 'misc/watchdog-warning.png', t('warning'), t('warning'));
webmaster@1 64 break;
webmaster@1 65 }
webmaster@1 66
webmaster@1 67 $row = '<div class="version-status">';
webmaster@1 68 switch ($project['status']) {
webmaster@1 69 case UPDATE_NOT_SECURE:
webmaster@1 70 $row .= '<span class="security-error">'. t('Security update required!') .'</span>';
webmaster@1 71 break;
webmaster@1 72 case UPDATE_REVOKED:
webmaster@1 73 $row .= '<span class="revoked">'. t('Revoked!') .'</span>';
webmaster@1 74 break;
webmaster@1 75 case UPDATE_NOT_SUPPORTED:
webmaster@1 76 $row .= '<span class="not-supported">'. t('Not supported!') .'</span>';
webmaster@1 77 break;
webmaster@1 78 case UPDATE_NOT_CURRENT:
webmaster@1 79 $row .= '<span class="not-current">'. t('Update available') .'</span>';
webmaster@1 80 break;
webmaster@1 81 case UPDATE_CURRENT:
webmaster@1 82 $row .= '<span class="current">'. t('Up to date') .'</span>';
webmaster@1 83 break;
webmaster@1 84 default:
webmaster@1 85 $row .= check_plain($project['reason']);
webmaster@1 86 break;
webmaster@1 87 }
webmaster@1 88 $row .= '<span class="icon">'. $icon .'</span>';
webmaster@1 89 $row .= "</div>\n";
webmaster@1 90
webmaster@1 91 $row .= '<div class="project">';
webmaster@1 92 if (isset($project['title'])) {
webmaster@1 93 if (isset($project['link'])) {
webmaster@1 94 $row .= l($project['title'], $project['link']);
webmaster@1 95 }
webmaster@1 96 else {
webmaster@1 97 $row .= check_plain($project['title']);
webmaster@1 98 }
webmaster@1 99 }
webmaster@1 100 else {
webmaster@1 101 $row .= check_plain($project['name']);
webmaster@1 102 }
webmaster@1 103 $row .= ' '. check_plain($project['existing_version']);
webmaster@1 104 if ($project['install_type'] == 'dev' && !empty($project['datestamp'])) {
webmaster@1 105 $row .= ' <span class="version-date">('. format_date($project['datestamp'], 'custom', 'Y-M-d') .')</span>';
webmaster@1 106 }
webmaster@1 107 $row .= "</div>\n";
webmaster@1 108
webmaster@1 109 $row .= "<div class=\"versions\">\n";
webmaster@1 110
webmaster@1 111 if (isset($project['recommended'])) {
webmaster@11 112 if ($project['status'] != UPDATE_CURRENT || $project['existing_version'] !== $project['recommended']) {
webmaster@1 113
webmaster@1 114 // First, figure out what to recommend.
webmaster@1 115 // If there's only 1 security update and it has the same version we're
webmaster@1 116 // recommending, give it the same CSS class as if it was recommended,
webmaster@1 117 // but don't print out a separate "Recommended" line for this project.
webmaster@11 118 if (!empty($project['security updates']) && count($project['security updates']) == 1 && $project['security updates'][0]['version'] === $project['recommended']) {
webmaster@1 119 $security_class = ' version-recommended version-recommended-strong';
webmaster@1 120 }
webmaster@1 121 else {
webmaster@1 122 $security_class = '';
webmaster@1 123 $version_class = 'version-recommended';
webmaster@1 124 // Apply an extra class if we're displaying both a recommended
webmaster@1 125 // version and anything else for an extra visual hint.
webmaster@11 126 if ($project['recommended'] !== $project['latest_version']
webmaster@1 127 || !empty($project['also'])
webmaster@1 128 || ($project['install_type'] == 'dev'
webmaster@1 129 && isset($project['dev_version'])
webmaster@11 130 && $project['latest_version'] !== $project['dev_version']
webmaster@11 131 && $project['recommended'] !== $project['dev_version'])
webmaster@1 132 || (isset($project['security updates'][0])
webmaster@11 133 && $project['recommended'] !== $project['security updates'][0])
webmaster@1 134 ) {
webmaster@1 135 $version_class .= ' version-recommended-strong';
webmaster@1 136 }
webmaster@1 137 $row .= theme('update_version', $project['releases'][$project['recommended']], t('Recommended version:'), $version_class);
webmaster@1 138 }
webmaster@1 139
webmaster@1 140 // Now, print any security updates.
webmaster@1 141 if (!empty($project['security updates'])) {
webmaster@1 142 foreach ($project['security updates'] as $security_update) {
webmaster@1 143 $row .= theme('update_version', $security_update, t('Security update:'), 'version-security'. $security_class);
webmaster@1 144 }
webmaster@1 145 }
webmaster@1 146 }
webmaster@1 147
webmaster@11 148 if ($project['recommended'] !== $project['latest_version']) {
webmaster@1 149 $row .= theme('update_version', $project['releases'][$project['latest_version']], t('Latest version:'), 'version-latest');
webmaster@1 150 }
webmaster@1 151 if ($project['install_type'] == 'dev'
webmaster@1 152 && $project['status'] != UPDATE_CURRENT
webmaster@1 153 && isset($project['dev_version'])
webmaster@11 154 && $project['recommended'] !== $project['dev_version']) {
webmaster@1 155 $row .= theme('update_version', $project['releases'][$project['dev_version']], t('Development version:'), 'version-latest');
webmaster@1 156 }
webmaster@1 157 }
webmaster@1 158
webmaster@1 159 if (isset($project['also'])) {
webmaster@1 160 foreach ($project['also'] as $also) {
webmaster@1 161 $row .= theme('update_version', $project['releases'][$also], t('Also available:'), 'version-also-available');
webmaster@1 162 }
webmaster@1 163 }
webmaster@1 164
webmaster@1 165 $row .= "</div>\n"; // versions div.
webmaster@1 166
webmaster@1 167 $row .= "<div class=\"info\">\n";
webmaster@1 168 if (!empty($project['extra'])) {
webmaster@1 169 $row .= '<div class="extra">'."\n";
webmaster@1 170 foreach ($project['extra'] as $key => $value) {
webmaster@1 171 $row .= '<div class="'. $value['class'] .'">';
webmaster@1 172 $row .= check_plain($value['label']) .': ';
webmaster@1 173 $row .= theme('placeholder', $value['data']);
webmaster@1 174 $row .= "</div>\n";
webmaster@1 175 }
webmaster@1 176 $row .= "</div>\n"; // extra div.
webmaster@1 177 }
webmaster@1 178
webmaster@1 179 $row .= '<div class="includes">';
webmaster@1 180 sort($project['includes']);
webmaster@1 181 $row .= t('Includes: %includes', array('%includes' => implode(', ', $project['includes'])));
webmaster@1 182 $row .= "</div>\n";
webmaster@1 183
webmaster@1 184 $row .= "</div>\n"; // info div.
webmaster@1 185
webmaster@1 186 if (!isset($rows[$project['project_type']])) {
webmaster@1 187 $rows[$project['project_type']] = array();
webmaster@1 188 }
webmaster@1 189 $rows[$project['project_type']][] = array(
webmaster@1 190 'class' => $class,
webmaster@1 191 'data' => array($row),
webmaster@1 192 );
webmaster@1 193 }
webmaster@1 194
webmaster@1 195 $project_types = array(
webmaster@1 196 'core' => t('Drupal core'),
webmaster@1 197 'module' => t('Modules'),
webmaster@1 198 'theme' => t('Themes'),
webmaster@1 199 'disabled-module' => t('Disabled modules'),
webmaster@1 200 'disabled-theme' => t('Disabled themes'),
webmaster@1 201 );
webmaster@1 202 foreach ($project_types as $type_name => $type_label) {
webmaster@1 203 if (!empty($rows[$type_name])) {
webmaster@1 204 $output .= "\n<h3>". $type_label ."</h3>\n";
webmaster@1 205 $output .= theme('table', $header, $rows[$type_name], array('class' => 'update'));
webmaster@1 206 }
webmaster@1 207 }
webmaster@1 208 drupal_add_css(drupal_get_path('module', 'update') .'/update.css');
webmaster@1 209 return $output;
webmaster@1 210 }
webmaster@1 211
webmaster@1 212 /**
webmaster@1 213 * Theme the version display of a project.
webmaster@1 214 *
webmaster@1 215 * @ingroup themeable
webmaster@1 216 */
webmaster@1 217 function theme_update_version($version, $tag, $class) {
webmaster@1 218 $output = '';
webmaster@1 219 $output .= '<table class="version '. $class .'">';
webmaster@1 220 $output .= '<tr>';
webmaster@1 221 $output .= '<td class="version-title">'. $tag ."</td>\n";
webmaster@1 222 $output .= '<td class="version-details">';
webmaster@1 223 $output .= l($version['version'], $version['release_link']);
webmaster@1 224 $output .= ' <span class="version-date">('. format_date($version['date'], 'custom', 'Y-M-d') .')</span>';
webmaster@1 225 $output .= "</td>\n";
webmaster@1 226 $output .= '<td class="version-links">';
webmaster@1 227 $links = array();
webmaster@1 228 $links['update-download'] = array(
webmaster@1 229 'title' => t('Download'),
webmaster@1 230 'href' => $version['download_link'],
webmaster@1 231 );
webmaster@1 232 $links['update-release-notes'] = array(
webmaster@1 233 'title' => t('Release notes'),
webmaster@1 234 'href' => $version['release_link'],
webmaster@1 235 );
webmaster@1 236 $output .= theme('links', $links);
webmaster@1 237 $output .= '</td>';
webmaster@1 238 $output .= '</tr>';
webmaster@1 239 $output .= "</table>\n";
webmaster@1 240 return $output;
webmaster@1 241 }