| 1 |
<?php
|
| 2 |
/**
|
| 3 |
* $Id: used_modules.module,v 1.6 2008/04/24 03:37:58 narno Exp $
|
| 4 |
* @author Arnaud 'Narno' Ligny <arnaud.ligny@narno.com>
|
| 5 |
* @copyright Narno.com
|
| 6 |
*/
|
| 7 |
|
| 8 |
define('DRUPAL_PROJET_PATH', 'http://drupal.org/project/%s');
|
| 9 |
|
| 10 |
/**
|
| 11 |
* Implementation of hook_perm().
|
| 12 |
*/
|
| 13 |
function used_modules_perm() {
|
| 14 |
return array('view used modules');
|
| 15 |
}
|
| 16 |
|
| 17 |
/**
|
| 18 |
* Implementation of hook_help().
|
| 19 |
*/
|
| 20 |
function used_modules_help($section) {
|
| 21 |
switch ($section) {
|
| 22 |
case 'admin/settings/used_modules':
|
| 23 |
case 'admin/help#used_modules':
|
| 24 |
$output = '<p>';
|
| 25 |
$output .= t("<em>Used modules</em> is a simple module that display a table of modules are used on your Drupal website.");
|
| 26 |
$output .= '</p>';
|
| 27 |
$output .= '<p>';
|
| 28 |
$output .= t('<a href="@user-access">Allowed users</a> are able to view used modules on this <a href="@used-modules">page</a> or in a <a href="@build-block">block</a>.', array('@user-access' => url('admin/user/access', NULL, 'module-used_modules'), '@used-modules' => url('modules/used'), '@build-block' => url('admin/build/block')));
|
| 29 |
$output .= '</p>';
|
| 30 |
break;
|
| 31 |
}
|
| 32 |
return $output;
|
| 33 |
}
|
| 34 |
|
| 35 |
/**
|
| 36 |
* Implementation of hook_menu().
|
| 37 |
*/
|
| 38 |
function used_modules_menu($may_cache) {
|
| 39 |
$items = array();
|
| 40 |
if ($may_cache) {
|
| 41 |
// admin
|
| 42 |
$items[] = array(
|
| 43 |
'path' => 'admin/settings/used_modules',
|
| 44 |
'title' => t('Used modules page'),
|
| 45 |
'description' => t('Settings for the used modules page.'),
|
| 46 |
'callback' => 'drupal_get_form',
|
| 47 |
'callback arguments' => array('used_modules_admin_settings'),
|
| 48 |
'access' => user_access('administer site configuration'),
|
| 49 |
'type' => MENU_NORMAL_ITEM
|
| 50 |
);
|
| 51 |
// page
|
| 52 |
$items[] = array(
|
| 53 |
'path' => 'modules/used',
|
| 54 |
'title' => t('Used modules'),
|
| 55 |
'description' => t('Used modules on this site.'),
|
| 56 |
'callback' => 'used_modules_page',
|
| 57 |
'access' => user_access('view used modules'),
|
| 58 |
'type' => MENU_NORMAL_ITEM
|
| 59 |
);
|
| 60 |
}
|
| 61 |
return $items;
|
| 62 |
}
|
| 63 |
|
| 64 |
/**
|
| 65 |
* admin settings
|
| 66 |
*/
|
| 67 |
function used_modules_admin_settings() {
|
| 68 |
$form = array();
|
| 69 |
$form['used_modules_page_title'] = array(
|
| 70 |
'#type' => 'textfield',
|
| 71 |
'#title' => t('Title'),
|
| 72 |
'#default_value' => variable_get('used_modules_page_title', 'Used modules'),
|
| 73 |
'#size' => 60,
|
| 74 |
'#maxlength' => 128,
|
| 75 |
'#required' => TRUE,
|
| 76 |
);
|
| 77 |
$form['used_modules_page_description'] = array(
|
| 78 |
'#type' => 'textarea',
|
| 79 |
'#title' => t('Page description'),
|
| 80 |
'#default_value' => variable_get('used_modules_page_description', 'List of modules are used on my website.'),
|
| 81 |
'#cols' => 72,
|
| 82 |
'#rows' => 3
|
| 83 |
);
|
| 84 |
$form['used_modules_page_display_description'] = array(
|
| 85 |
'#type' => 'checkbox',
|
| 86 |
'#title' => t('Display modules description'),
|
| 87 |
'#default_value' => variable_get('used_modules_page_display_description', TRUE)
|
| 88 |
);
|
| 89 |
$form['used_modules_page_display_version'] = array(
|
| 90 |
'#type' => 'checkbox',
|
| 91 |
'#title' => t('Display modules version'),
|
| 92 |
'#default_value' => variable_get('used_modules_page_display_version', FALSE)
|
| 93 |
);
|
| 94 |
return system_settings_form($form);
|
| 95 |
}
|
| 96 |
|
| 97 |
/**
|
| 98 |
* Used modules page
|
| 99 |
*/
|
| 100 |
function used_modules_page() {
|
| 101 |
// title
|
| 102 |
drupal_set_title(variable_get('used_modules_page_title', 'Used modules'));
|
| 103 |
// description
|
| 104 |
$output = variable_get('used_modules_page_description', 'List of modules are used on my website.');
|
| 105 |
// result table
|
| 106 |
$display_description = variable_get('used_modules_page_display_description', TRUE);
|
| 107 |
$display_version = variable_get('used_modules_page_display_version', FALSE);
|
| 108 |
$table = _used_modules($display_description, $display_version);
|
| 109 |
$output .= theme('table', $table['header'], $table['rows']);
|
| 110 |
return $output;
|
| 111 |
}
|
| 112 |
|
| 113 |
/**
|
| 114 |
* Implementation of hook_block().
|
| 115 |
*/
|
| 116 |
function used_modules_block($op = 'list', $delta = 0, $edit = array()) {
|
| 117 |
switch ($op) {
|
| 118 |
case 'list':
|
| 119 |
$blocks[0]['info'] = t('Used modules');
|
| 120 |
return $blocks;
|
| 121 |
case 'configure':
|
| 122 |
switch($delta) {
|
| 123 |
case 0:
|
| 124 |
$form['description'] = array(
|
| 125 |
'#type' => 'textarea',
|
| 126 |
'#title' => t('Page description'),
|
| 127 |
'#default_value' => variable_get('used_modules_block_' . $delta . '_description', 'List of modules are used on my website.'),
|
| 128 |
'#cols' => 72,
|
| 129 |
'#rows' => 3
|
| 130 |
);
|
| 131 |
$form['display_description'] = array(
|
| 132 |
'#type' => 'checkbox',
|
| 133 |
'#title' => t('Display modules description'),
|
| 134 |
'#default_value' => variable_get('used_modules_block_' . $delta . '_display_description', TRUE)
|
| 135 |
);
|
| 136 |
$form['display_version'] = array(
|
| 137 |
'#type' => 'checkbox',
|
| 138 |
'#title' => t('Display modules version'),
|
| 139 |
'#default_value' => variable_get('used_modules_block_' . $delta . '_display_version', FALSE)
|
| 140 |
);
|
| 141 |
return $form;
|
| 142 |
break;
|
| 143 |
}
|
| 144 |
case 'save':
|
| 145 |
variable_set('used_modules_block_' . $delta . '_description', $edit['description']);
|
| 146 |
variable_set('used_modules_block_' . $delta . '_display_description', $edit['display_description']);
|
| 147 |
variable_set('used_modules_block_' . $delta . '_display_version', $edit['display_version']);
|
| 148 |
break;
|
| 149 |
case 'view':
|
| 150 |
if (user_access('view used modules')) {
|
| 151 |
switch($delta) {
|
| 152 |
case 0:
|
| 153 |
$block['subject'] = t('Used modules');
|
| 154 |
$block['content'] = theme('used_modules_block', $delta);
|
| 155 |
break;
|
| 156 |
}
|
| 157 |
}
|
| 158 |
return $block;
|
| 159 |
}
|
| 160 |
}
|
| 161 |
|
| 162 |
/**
|
| 163 |
* theme function for the used_modules block contents
|
| 164 |
*/
|
| 165 |
function theme_used_modules_block($block) {
|
| 166 |
drupal_add_css(drupal_get_path('module', 'used_modules') . '/used_modules.css');
|
| 167 |
switch ($block) {
|
| 168 |
case 0:
|
| 169 |
// description
|
| 170 |
$output = variable_get('used_modules_block_' . $block . '_description', '');
|
| 171 |
// result table
|
| 172 |
$display_description = variable_get('used_modules_block_' . $block . '_display_description', TRUE);
|
| 173 |
$display_version = variable_get('used_modules_block_' . $block . '_display_version', FALSE);
|
| 174 |
$table = _used_modules($display_description, $display_version);
|
| 175 |
$output .= '<div id="block-used_modules-list">' . theme('table', $table['header'], $table['rows']) . '</div>';
|
| 176 |
return $output;
|
| 177 |
}
|
| 178 |
}
|
| 179 |
|
| 180 |
/**
|
| 181 |
* main fonction
|
| 182 |
*/
|
| 183 |
function _used_modules($display_description = TRUE, $display_version = FALSE) {
|
| 184 |
// header
|
| 185 |
$header[] = t('Name');
|
| 186 |
if ($display_description == TRUE) {
|
| 187 |
$header[] = t('Description');
|
| 188 |
}
|
| 189 |
if ($display_version == TRUE) {
|
| 190 |
$header[] = t('Version');
|
| 191 |
}
|
| 192 |
// rows
|
| 193 |
$rows = array();
|
| 194 |
$module_list = module_list();
|
| 195 |
sort($module_list);
|
| 196 |
foreach ($module_list as $module) {
|
| 197 |
$module_info = _module_parse_info_file(drupal_get_path('module', $module) . '/' . $module . '.info');
|
| 198 |
if (!empty($module_info) && $module_info['project'] != 'drupal' && !empty($module_info['project'])) {
|
| 199 |
$rows_tmp = array(l($module_info['name'], sprintf(DRUPAL_PROJET_PATH, $module_info['project'])));
|
| 200 |
if ($display_description == TRUE) {
|
| 201 |
$rows_description = array($module_info['description']);
|
| 202 |
$rows_tmp = array_merge($rows_tmp, $rows_description);
|
| 203 |
}
|
| 204 |
if ($display_version == TRUE) {
|
| 205 |
$rows_version = array($module_info['version']);
|
| 206 |
$rows_tmp = array_merge($rows_tmp, $rows_version);
|
| 207 |
}
|
| 208 |
$rows[] = $rows_tmp;
|
| 209 |
}
|
| 210 |
}
|
| 211 |
return array('header' => $header, 'rows' => $rows);
|
| 212 |
}
|
| 213 |
?>
|