Mercurial > defr > drupal > core
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 } |
