Projet

Général

Profil

Paste
Télécharger (8,97 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / module_filter / module_filter.module @ 87dbc3bf

1
<?php
2

    
3
/**
4
 * @file
5
 * This is the file description for Module Filter module.
6
 *
7
 * In this more verbose, multi-line description, you can specify what this
8
 * file does exactly. Make sure to wrap your documentation in column 78 so
9
 * that the file can be displayed nicely in default-sized consoles.
10
 *
11
 * @author greenSkin
12
 */
13

    
14
/**
15
 * Implements hook_perm().
16
 */
17
function module_filter_permission() {
18
  return array(
19
    'administer module filter' => array(
20
      'title' => t('Administer Module Filter'),
21
      'description' => t('Configure how Module Filter performs.')
22
    )
23
  );
24
}
25

    
26
/**
27
 * Implements hook_menu().
28
 */
29
function module_filter_menu() {
30
  $items['admin/config/user-interface/modulefilter'] = array(
31
    'title' => 'Module filter',
32
    'description' => 'Configure how the modules page looks and acts.',
33
    'access arguments' => array('administer module filter'),
34
    'page callback' => 'drupal_get_form',
35
    'page arguments' => array('module_filter_settings'),
36
    'file' => 'module_filter.admin.inc'
37
  );
38
  return $items;
39
}
40

    
41
/**
42
 * Implements hook_menu_alter().
43
 */
44
function module_filter_menu_alter(&$items) {
45
  if (isset($items['admin/reports/updates'])) {
46
    // We route the updates report page through us.
47
    $items['admin/reports/updates']['page callback'] = 'module_filter_update_status';
48
    $items['admin/reports/updates']['file'] = 'module_filter.pages.inc';
49
    $items['admin/reports/updates']['module'] = 'module_filter';
50
  }
51
}
52

    
53
/**
54
 * Implements hook_form_FORM_ID_alter().
55
 */
56
function module_filter_form_system_modules_alter(&$form, &$form_state, $form_id) {
57
  // Don't alter the form when confirming.
58
  if (isset($form['confirm'])) {
59
    return;
60
  }
61

    
62
  $form['module_filter'] = array(
63
    '#type' => 'module_filter',
64
    '#attached' => array(
65
      'js' => array(
66
        drupal_get_path('module', 'module_filter') . '/js/modules.js'
67
      )
68
    )
69
  );
70
  $checkbox_defaults = array(
71
    ((isset($_GET['enabled'])) ? $_GET['enabled'] : 1) ? 'enabled' : '',
72
    ((isset($_GET['disabled'])) ? $_GET['disabled'] : 1) ? 'disabled' : '',
73
    ((isset($_GET['required'])) ? $_GET['required'] : 1) ? 'required' : '',
74
    ((isset($_GET['unavailable'])) ? $_GET['unavailable'] : 1) ? 'unavailable' : ''
75
  );
76
  $form['module_filter']['show'] = array(
77
    '#type' => 'checkboxes',
78
    '#default_value' => array_filter($checkbox_defaults),
79
    '#options' => array('enabled' => t('Enabled'), 'disabled' => t('Disabled'), 'required' => t('Required'), 'unavailable' => t('Unavailable')),
80
    '#prefix' => '<div id="module-filter-show-wrapper">',
81
    '#suffix' => '</div>'
82
  );
83

    
84
  if (variable_get('module_filter_tabs', 1)) {
85
    $form['module_filter']['#attached']['css'][] = drupal_get_path('module', 'module_filter') .'/css/module_filter_tab.css';
86
    $form['module_filter']['#attached']['js'][] = 'misc/jquery.ba-bbq.js';
87
    $form['module_filter']['#attached']['js'][] = drupal_get_path('module', 'module_filter') .'/js/module_filter_tab.js';
88

    
89
    if (!module_exists('page_actions') && variable_get('module_filter_dynamic_save_position', 1)) {
90
      $form['module_filter']['#attached']['css'][] = drupal_get_path('module', 'module_filter') .'/css/dynamic_position.css';
91
      $form['module_filter']['#attached']['js'][] = drupal_get_path('module', 'module_filter') .'/js/dynamic_position.js';
92
    }
93

    
94
    $form['#theme'] = 'module_filter_system_modules_tabs';
95
  }
96

    
97
  $form['#submit'][] = 'module_filter_system_modules_submit_redirect';
98

    
99
  if (variable_get('module_filter_track_recent_modules', 1)) {
100
    $form['#submit'][] = 'module_filter_system_modules_submit_recent';
101
  }
102
}
103

    
104
/**
105
 * Implements hook_form_FORM_ID_alter().
106
 */
107
function module_filter_form_user_admin_permissions_alter(&$form, &$form_state) {
108
  $form['module_filter'] = array(
109
    '#type' => 'module_filter',
110
    '#description' => t('Filter list by module. Use the query operator "perm" to filter by permission, e.g., perm:access.'),
111
    '#attached' => array(
112
      'js' => array(
113
        drupal_get_path('module', 'module_filter') . '/js/permissions.js',
114
      ),
115
    ),
116
    '#weight' => -100,
117
  );
118
}
119

    
120
/**
121
 * Implements hook_element_info().
122
 */
123
function module_filter_element_info() {
124
  $types['module_filter'] = array(
125
    '#input' => TRUE,
126
    '#process' => array('form_process_module_filter', 'ajax_process_form'),
127
    '#weight' => -1,
128
    '#tree' => TRUE,
129
    '#theme' => 'module_filter'
130
  );
131
  return $types;
132
}
133

    
134
/**
135
 * Implements hook_theme().
136
 */
137
function module_filter_theme() {
138
  return array(
139
    'module_filter' => array(
140
      'render element' => 'element',
141
      'file' => 'module_filter.theme.inc',
142
    ),
143
    'module_filter_system_modules_tabs' => array(
144
      'render element' => 'form',
145
      'file' => 'module_filter.theme.inc',
146
    ),
147
    'module_filter_operations' => array(
148
      'variables' => array('links' => array(), 'dropbutton' => FALSE),
149
      'file' => 'module_filter.theme.inc',
150
    ),
151
  );
152
}
153

    
154
function form_process_module_filter($element, &$form_state) {
155
  $element['name'] = array(
156
    '#type' => 'textfield',
157
    '#title' => (isset($element['#title'])) ? $element['#title'] : t('Filter list'),
158
    '#default_value' => (isset($element['#default_value'])) ? $element['#default_value'] : ((isset($_GET['filter'])) ? $_GET['filter'] : ''),
159
    '#size' => (isset($element['#size'])) ? $element['#size'] : 45,
160
    '#weight' => (isset($element['#weight'])) ? $element['#weight'] : -10,
161
    '#attributes' => ((isset($element['#attributes'])) ? $element['#attributes'] : array()) + array('autocomplete' => 'off'),
162
    '#attached' => array(
163
      'css' => array(
164
        drupal_get_path('module', 'module_filter') . '/css/module_filter.css'
165
      ),
166
      'js' => array(
167
        'misc/jquery.cookie.js',
168
        drupal_get_path('module', 'module_filter') . '/js/module_filter.js',
169
        array(
170
          'data' => array(
171
            'moduleFilter' => array(
172
              'setFocus' => variable_get('module_filter_set_focus', 1),
173
              'tabs' => variable_get('module_filter_tabs', 1),
174
              'countEnabled' => variable_get('module_filter_count_enabled', 1),
175
              'visualAid' => variable_get('module_filter_visual_aid', 1),
176
              'hideEmptyTabs' => variable_get('module_filter_hide_empty_tabs', 0),
177
              'dynamicPosition' => (!module_exists('page_actions')) ? variable_get('module_filter_dynamic_save_position', 1) : FALSE,
178
              'useURLFragment' => variable_get('module_filter_use_url_fragment', 1),
179
              'useSwitch' => variable_get('module_filter_use_switch', 1),
180
              'trackRecent' => variable_get('module_filter_track_recent_modules', 1),
181
              'rememberActiveTab' => variable_get('module_filter_remember_active_tab', 1),
182
              'rememberUpdateState' => variable_get('module_filter_remember_update_state', 0),
183
            )
184
          ),
185
          'type' => 'setting'
186
        )
187
      )
188
    )
189
  );
190
  if (isset($element['#description'])) {
191
    $element['name']['#description'] = $element['#description'];
192
  }
193
  return $element;
194
}
195

    
196
function module_filter_system_modules_submit_redirect($form, &$form_state) {
197
  $query = array();
198
  if (!empty($form_state['values']['module_filter']['name'])) {
199
    $query['filter'] = $form_state['values']['module_filter']['name'];
200
  }
201
  $query['enabled'] = (int)(!empty($form_state['values']['module_filter']['show']['enabled']));
202
  $query['disabled'] = (int)(!empty($form_state['values']['module_filter']['show']['disabled']));
203
  $query['required'] = (int)(!empty($form_state['values']['module_filter']['show']['required']));
204
  $query['unavailable'] = (int)(!empty($form_state['values']['module_filter']['show']['unavailable']));
205

    
206
  $form_state['redirect'] = array(
207
    'admin/modules',
208
    array('query' => $query),
209
  );
210
}
211

    
212
function module_filter_system_modules_submit_recent($form, &$form_state) {
213
  $recent_modules = variable_get('module_filter_recent_modules', array());
214

    
215
  foreach ($form_state['values']['modules'] as $package => $modules) {
216
    foreach ($modules as $key => $module) {
217
      if ($form['modules'][$package][$key]['enable']['#default_value'] != $module['enable']) {
218
        $recent_modules[$key] = REQUEST_TIME;
219
      }
220
    }
221
  }
222

    
223
  variable_set('module_filter_recent_modules', $recent_modules);
224
}
225

    
226
function module_filter_new_modules() {
227
  // Get current list of modules.
228
  $files = system_rebuild_module_data();
229

    
230
  // Remove hidden modules from display list.
231
  $visible_files = $files;
232
  foreach ($visible_files as $filename => $file) {
233
    if (!empty($file->info['hidden'])) {
234
      unset($visible_files[$filename]);
235
    }
236
  }
237

    
238
  uasort($visible_files, 'system_sort_modules_by_info_name');
239

    
240
  $new_modules = array();
241
  foreach ($visible_files as $filename => $module) {
242
    $ctime = filectime(dirname($module->uri) . '/' . $module->name . '.info');
243
    if (($ctime - strtotime('-1 week')) > 0) {
244
      $new_modules[$filename] = module_filter_get_id($filename);
245
    }
246
  }
247
  return $new_modules;
248
}
249

    
250
function module_filter_get_id($text) {
251
  $id = strtolower($text);
252
  $id = preg_replace('/([^a-z0-9]+)/', '-', $id);
253
  return trim($id, '-');
254
}
255

    
256
function module_filter_recent_filter($var) {
257
  return (!($var < REQUEST_TIME - 60*60*24*7));
258
}