source: sipes/cord/modules/filter/filter.admin.inc @ 8a8efa8

stableversion-3.0
Last change on this file since 8a8efa8 was b354002, checked in by José Gregorio Puentes <jpuentes@…>, 8 años ago

se agrego el directorio del cord

  • Propiedad mode establecida a 100755
File size: 13.7 KB
Línea 
1<?php
2
3/**
4 * @file
5 * Admin page callbacks for the filter module.
6 */
7
8/**
9 * Menu callback; Displays a list of all input formats and which
10 * one is the default.
11 *
12 * @ingroup forms
13 * @see filter_admin_overview_submit()
14 */
15function filter_admin_overview() {
16
17  // Overview of all formats.
18  $formats = filter_formats();
19  $error = FALSE;
20
21  foreach ($formats as $id => $format) {
22    $roles = array();
23    foreach (user_roles() as $rid => $name) {
24      // Prepare a roles array with roles that may access the filter.
25      if (strstr($format->roles, ",$rid,")) {
26        $roles[] = $name;
27      }
28    }
29    $default = ($id == variable_get('filter_default_format', 1));
30    $options[$id] = '';
31    $form[$format->name]['id'] = array('#value' => $id);
32    $form[$format->name]['roles'] = array('#value' => $default ? t('All roles may use default format') : ($roles ? implode(', ', $roles) : t('No roles may use this format')));
33    $form[$format->name]['configure'] = array('#value' => l(t('configure'), 'admin/settings/filters/'. $id));
34    $form[$format->name]['delete'] = array('#value' => $default ? '' : l(t('delete'), 'admin/settings/filters/delete/'. $id));
35  }
36  $form['default'] = array('#type' => 'radios', '#options' => $options, '#default_value' => variable_get('filter_default_format', 1));
37  $form['submit'] = array('#type' => 'submit', '#value' => t('Set default format'));
38  return $form;
39}
40
41function filter_admin_overview_submit($form, &$form_state) {
42  // Process form submission to set the default format.
43  if (is_numeric($form_state['values']['default'])) {
44    drupal_set_message(t('Default format updated.'));
45    variable_set('filter_default_format', $form_state['values']['default']);
46  }
47}
48
49/**
50 * Theme the admin overview form.
51 *
52 * @ingroup themeable
53 */
54function theme_filter_admin_overview($form) {
55  $rows = array();
56  foreach ($form as $name => $element) {
57    if (isset($element['roles']) && is_array($element['roles'])) {
58      $rows[] = array(
59        drupal_render($form['default'][$element['id']['#value']]),
60        check_plain($name),
61        drupal_render($element['roles']),
62        drupal_render($element['configure']),
63        drupal_render($element['delete'])
64      );
65      unset($form[$name]);
66    }
67  }
68  $header = array(t('Default'), t('Name'), t('Roles'), array('data' => t('Operations'), 'colspan' => 2));
69  $output = theme('table', $header, $rows);
70  $output .= drupal_render($form);
71
72  return $output;
73}
74
75/**
76 * Menu callback; Display a filter format form.
77 */
78function filter_admin_format_page($format = NULL) {
79  if (!isset($format->name)) {
80    drupal_set_title(t("Add input format"));
81    $format = (object)array('name' => '', 'roles' => '', 'format' => '');
82  }
83  return drupal_get_form('filter_admin_format_form', $format);
84}
85
86/**
87 * Generate a filter format form.
88 *
89 * @ingroup forms
90 * @see filter_admin_format_form_validate()
91 * @see filter_admin_format_form_submit()
92 */
93function filter_admin_format_form(&$form_state, $format) {
94  $default = ($format->format == variable_get('filter_default_format', 1));
95  if ($default) {
96    $help = t('All roles for the default format must be enabled and cannot be changed.');
97    $form['default_format'] = array('#type' => 'hidden', '#value' => 1);
98  }
99
100  $form['name'] = array('#type' => 'textfield',
101    '#title' => t('Name'),
102    '#default_value' => $format->name,
103    '#description' => t('Specify a unique name for this filter format.'),
104    '#required' => TRUE,
105  );
106
107  // Add a row of checkboxes for form group.
108  $form['roles'] = array('#type' => 'fieldset',
109    '#title' => t('Roles'),
110    '#description' => $default ? $help : t('Choose which roles may use this filter format. Note that roles with the "administer filters" permission can always use all the filter formats.'),
111    '#tree' => TRUE,
112  );
113
114  foreach (user_roles() as $rid => $name) {
115    $checked = strstr($format->roles, ",$rid,");
116    $form['roles'][$rid] = array('#type' => 'checkbox',
117      '#title' => $name,
118      '#default_value' => ($default || $checked),
119    );
120    if ($default) {
121      $form['roles'][$rid]['#disabled'] = TRUE;
122    }
123  }
124  // Table with filters
125  $all = filter_list_all();
126  $enabled = filter_list_format($format->format);
127
128  $form['filters'] = array('#type' => 'fieldset',
129    '#title' => t('Filters'),
130    '#description' => t('Choose the filters that will be used in this filter format.'),
131    '#tree' => TRUE,
132  );
133  foreach ($all as $id => $filter) {
134    $form['filters'][$id] = array('#type' => 'checkbox',
135      '#title' => $filter->name,
136      '#default_value' => isset($enabled[$id]),
137      '#description' => module_invoke($filter->module, 'filter', 'description', $filter->delta),
138    );
139  }
140  if (!empty($format->format)) {
141    $form['format'] = array('#type' => 'hidden', '#value' => $format->format);
142
143    // Composition tips (guidelines)
144    $tips = _filter_tips($format->format, FALSE);
145    $extra = '<p>'. l(t('More information about formatting options'), 'filter/tips') .'</p>';
146    $tiplist = theme('filter_tips', $tips, FALSE, $extra);
147    if (!$tiplist) {
148      $tiplist = '<p>'. t('No guidelines available.') .'</p>';
149    }
150    $group = '<p>'. t('These are the guidelines that users will see for posting in this input format. They are automatically generated from the filter settings.') .'</p>';
151    $group .= $tiplist;
152    $form['tips'] = array('#value' => '<h2>'. t('Formatting guidelines') .'</h2>'. $group);
153  }
154  $form['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
155
156  return $form;
157}
158
159/**
160 * Validate filter format form submissions.
161 */
162function filter_admin_format_form_validate($form, &$form_state) {
163  if (!isset($form_state['values']['format'])) {
164    $name = trim($form_state['values']['name']);
165    $result = db_fetch_object(db_query("SELECT format FROM {filter_formats} WHERE name='%s'", $name));
166    if ($result) {
167      form_set_error('name', t('Filter format names need to be unique. A format named %name already exists.', array('%name' => $name)));
168    }
169  }
170}
171
172/**
173 * Process filter format form submissions.
174 */
175function filter_admin_format_form_submit($form, &$form_state) {
176  $format = isset($form_state['values']['format']) ? $form_state['values']['format'] : NULL;
177  $current = filter_list_format($format);
178  $name = trim($form_state['values']['name']);
179  $cache = TRUE;
180
181  // Add a new filter format.
182  if (!$format) {
183    $new = TRUE;
184    db_query("INSERT INTO {filter_formats} (name) VALUES ('%s')", $name);
185    $format = db_result(db_query("SELECT MAX(format) AS format FROM {filter_formats}"));
186    drupal_set_message(t('Added input format %format.', array('%format' => $name)));
187  }
188  else {
189    drupal_set_message(t('The input format settings have been updated.'));
190  }
191
192  db_query("DELETE FROM {filters} WHERE format = %d", $format);
193  foreach ($form_state['values']['filters'] as $id => $checked) {
194    if ($checked) {
195      list($module, $delta) = explode('/', $id);
196      // Add new filters to the bottom.
197      $weight = isset($current[$id]->weight) ? $current[$id]->weight : 10;
198      db_query("INSERT INTO {filters} (format, module, delta, weight) VALUES (%d, '%s', %d, %d)", $format, $module, $delta, $weight);
199
200      // Check if there are any 'no cache' filters.
201      $cache &= !module_invoke($module, 'filter', 'no cache', $delta);
202    }
203  }
204
205  // We store the roles as a string for ease of use.
206  // We should always set all roles to TRUE when saving a default role.
207  // We use leading and trailing comma's to allow easy substring matching.
208  $roles = array();
209  if (isset($form_state['values']['roles'])) {
210    foreach ($form_state['values']['roles'] as $id => $checked) {
211      if ($checked) {
212        $roles[] = $id;
213      }
214    }
215  }
216  if (!empty($form_state['values']['default_format'])) {
217    $roles = ','. implode(',', array_keys(user_roles())) .',';
218  }
219  else {
220    $roles = ','. implode(',', $roles) .',';
221  }
222
223  db_query("UPDATE {filter_formats} SET cache = %d, name='%s', roles = '%s' WHERE format = %d", $cache, $name, $roles, $format);
224
225  cache_clear_all($format .':', 'cache_filter', TRUE);
226
227  // If a new filter was added, return to the main list of filters. Otherwise, stay on edit filter page to show new changes.
228  $return = 'admin/settings/filters';
229  if (!empty($new)) {
230    $return .= '/'. $format;
231  }
232  $form_state['redirect'] = $return;
233  return;
234}
235
236/**
237 * Menu callback; confirm deletion of a format.
238 *
239 * @ingroup forms
240 * @see filter_admin_delete_submit()
241 */
242function filter_admin_delete() {
243  $format = arg(4);
244  $format = db_fetch_object(db_query('SELECT * FROM {filter_formats} WHERE format = %d', $format));
245
246  if ($format) {
247    if ($format->format != variable_get('filter_default_format', 1)) {
248      $form['format'] = array('#type' => 'hidden', '#value' => $format->format);
249      $form['name'] = array('#type' => 'hidden', '#value' => $format->name);
250
251      return confirm_form($form, t('Are you sure you want to delete the input format %format?', array('%format' => $format->name)), 'admin/settings/filters', t('If you have any content left in this input format, it will be switched to the default input format. This action cannot be undone.'), t('Delete'), t('Cancel'));
252    }
253    else {
254      drupal_set_message(t('The default format cannot be deleted.'));
255      drupal_goto('admin/settings/filters');
256    }
257  }
258  else {
259    drupal_not_found();
260  }
261}
262
263/**
264 * Process filter delete form submission.
265 */
266function filter_admin_delete_submit($form, &$form_state) {
267  db_query("DELETE FROM {filter_formats} WHERE format = %d", $form_state['values']['format']);
268  db_query("DELETE FROM {filters} WHERE format = %d", $form_state['values']['format']);
269
270  $default = variable_get('filter_default_format', 1);
271  // Replace existing instances of the deleted format with the default format.
272  db_query("UPDATE {node_revisions} SET format = %d WHERE format = %d", $default, $form_state['values']['format']);
273  db_query("UPDATE {comments} SET format = %d WHERE format = %d", $default, $form_state['values']['format']);
274  db_query("UPDATE {boxes} SET format = %d WHERE format = %d", $default, $form_state['values']['format']);
275
276  cache_clear_all($form_state['values']['format'] .':', 'cache_filter', TRUE);
277  drupal_set_message(t('Deleted input format %format.', array('%format' => $form_state['values']['name'])));
278
279  $form_state['redirect'] = 'admin/settings/filters';
280  return;
281}
282
283
284/**
285 * Menu callback; display settings defined by a format's filters.
286 */
287function filter_admin_configure_page($format) {
288  drupal_set_title(t("Configure %format", array('%format' => $format->name)));
289  return drupal_get_form('filter_admin_configure', $format);
290}
291
292/**
293 * Build a form to change the settings for a format's filters.
294 *
295 * @ingroup forms
296 */
297function filter_admin_configure(&$form_state, $format) {
298  $list = filter_list_format($format->format);
299  $form = array();
300  foreach ($list as $filter) {
301    $form_module = module_invoke($filter->module, 'filter', 'settings', $filter->delta, $format->format);
302    if (isset($form_module) && is_array($form_module)) {
303      $form = array_merge($form, $form_module);
304    }
305  }
306
307  if (!empty($form)) {
308    $form = system_settings_form($form);
309  }
310  else {
311    $form['error'] = array('#value' => t('No settings are available.'));
312  }
313  $form['format'] = array('#type' => 'hidden', '#value' => $format->format);
314  $form['#submit'][] = 'filter_admin_configure_submit';
315  return $form;
316}
317
318/**
319 * Clear the filter's cache when configuration settings are saved.
320 */
321function filter_admin_configure_submit($form, &$form_state) {
322  cache_clear_all($form_state['values']['format'] .':', 'cache_filter', TRUE);
323}
324
325/**
326 * Menu callback; display form for ordering filters for a format.
327 */
328function filter_admin_order_page($format) {
329  drupal_set_title(t("Rearrange %format", array('%format' => $format->name)));
330  return drupal_get_form('filter_admin_order', $format);
331}
332
333/**
334 * Build the form for ordering filters for a format.
335 *
336 * @ingroup forms
337 * @see theme_filter_admin_order()
338 * @see filter_admin_order_submit()
339 */
340function filter_admin_order(&$form_state, $format = NULL) {
341  // Get list (with forced refresh).
342  $filters = filter_list_format($format->format);
343
344  $form['weights'] = array('#tree' => TRUE);
345  foreach ($filters as $id => $filter) {
346    $form['names'][$id] = array('#value' => $filter->name);
347    $form['weights'][$id] = array('#type' => 'weight', '#default_value' => $filter->weight);
348  }
349  $form['format'] = array('#type' => 'hidden', '#value' => $format->format);
350  $form['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
351
352  return $form;
353}
354
355/**
356 * Theme filter order configuration form.
357 *
358 * @ingroup themeable
359 */
360function theme_filter_admin_order($form) {
361  $header = array(t('Name'), t('Weight'));
362  $rows = array();
363  foreach (element_children($form['names']) as $id) {
364    // Don't take form control structures.
365    if (is_array($form['names'][$id])) {
366      $form['weights'][$id]['#attributes']['class'] = 'filter-order-weight';
367      $rows[] = array(
368        'data' => array(drupal_render($form['names'][$id]), drupal_render($form['weights'][$id])),
369        'class' => 'draggable',
370      );
371    }
372  }
373
374  $output = theme('table', $header, $rows, array('id' => 'filter-order'));
375  $output .= drupal_render($form);
376
377  drupal_add_tabledrag('filter-order', 'order', 'sibling', 'filter-order-weight', NULL, NULL, FALSE);
378
379  return $output;
380}
381
382/**
383 * Process filter order configuration form submission.
384 */
385function filter_admin_order_submit($form, &$form_state) {
386  foreach ($form_state['values']['weights'] as $id => $weight) {
387    list($module, $delta) = explode('/', $id);
388    db_query("UPDATE {filters} SET weight = %d WHERE format = %d AND module = '%s' AND delta = %d", $weight, $form_state['values']['format'], $module, $delta);
389  }
390  drupal_set_message(t('The filter ordering has been saved.'));
391
392  cache_clear_all($form_state['values']['format'] .':', 'cache_filter', TRUE);
393}
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.