comparison modules/update/update.report.inc @ 1:c1f4ac30525a 6.0

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