Index: modules/filter/filter.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.admin.inc,v
retrieving revision 1.41
diff -u -p -r1.41 filter.admin.inc
--- modules/filter/filter.admin.inc 27 Aug 2009 21:18:19 -0000 1.41
+++ modules/filter/filter.admin.inc 28 Aug 2009 02:20:49 -0000
@@ -32,7 +32,7 @@ function filter_admin_overview() {
$options[$id] = '';
$form[$id]['name'] = array('#markup' => $format->name);
$form[$id]['roles'] = array('#markup' => $default ? t('All roles may use the default format') : ($roles ? implode(', ', $roles) : t('No roles may use this format')));
- $form[$id]['configure'] = array('#markup' => l(t('configure'), 'admin/settings/formats/' . $id));
+ $form[$id]['edit'] = array('#markup' => l(t('edit'), 'admin/settings/formats/' . $id));
$form[$id]['delete'] = array('#markup' => $default ? '' : l(t('delete'), 'admin/settings/formats/delete/' . $id));
$form[$id]['weight'] = array('#type' => 'weight', '#default_value' => $format->weight);
}
@@ -76,7 +76,7 @@ function theme_filter_admin_overview($fo
drupal_render($element['roles']),
drupal_render($form['default'][$id]),
drupal_render($element['weight']),
- drupal_render($element['configure']),
+ drupal_render($element['edit']),
drupal_render($element['delete']),
),
'class' => array('draggable'),
@@ -118,7 +118,11 @@ function filter_admin_format_form(&$form
$form['default_format'] = array('#type' => 'hidden', '#value' => 1);
}
- $form['name'] = array('#type' => 'textfield',
+ $form['format'] = array(
+ '#tree' => TRUE,
+ );
+ $form['format']['name'] = array(
+ '#type' => 'textfield',
'#title' => t('Name'),
'#default_value' => $format->name,
'#description' => t('Specify a unique name for this text format.'),
@@ -126,41 +130,62 @@ function filter_admin_format_form(&$form
);
// Add a row of checkboxes for form group.
- $form['roles'] = array('#type' => 'fieldset',
+ $form['format']['roles'] = array(
+ '#type' => 'fieldset',
'#title' => t('Roles'),
'#description' => $default ? $help : t('Choose which roles may use this text format. Note that roles with the "administer filters" permission can always use all text formats.'),
- '#tree' => TRUE,
);
-
foreach (user_roles() as $rid => $name) {
$checked = strpos($format->roles, ",$rid,") !== FALSE;
- $form['roles'][$rid] = array('#type' => 'checkbox',
+ $form['format']['roles'][$rid] = array(
+ '#type' => 'checkbox',
'#title' => $name,
'#default_value' => ($default || $checked),
);
if ($default) {
- $form['roles'][$rid]['#disabled'] = TRUE;
+ $form['format']['roles'][$rid]['#disabled'] = TRUE;
}
}
- // Table with filters
+
+ // Build a form to change the settings for filters in a text format.
+ // The form is built by merging the results of 'settings callback' for each
+ // enabled filter in the given format.
$filter_info = filter_get_filters();
$filters = filter_list_format($format->format);
- $form['filters'] = array('#type' => 'fieldset',
- '#title' => t('Filters'),
- '#description' => t('Choose the filters that will be used in this text format.'),
- '#tree' => TRUE,
+ $form['filter_settings'] = array(
+ '#type' => 'vertical_tabs',
);
+
foreach ($filter_info as $name => $filter) {
- $form['filters'][$name] = array(
+ $form['format']['filters'][$name]['status'] = array(
'#type' => 'checkbox',
'#title' => $filter['title'],
- '#default_value' => isset($filters[$name]),
'#description' => $filter['description'],
+ '#default_value' => !empty($filters[$name]->status),
);
+ $form['format']['filters'][$name]['weight'] = array(
+ '#type' => 'weight',
+ '#delta' => 50,
+ '#default_value' => 0
+ );
+ if (isset($filter_info[$name]['settings callback']) && function_exists($filter_info[$name]['settings callback'])) {
+ // Pass along stored filter settings and default settings, but also the
+ // format object and all filters to allow for complex implementations.
+ $defaults = (isset($filter_info[$name]['default settings']) ? $filter_info[$name]['default settings'] : array());
+ $settings_form = $filter_info[$name]['settings callback']($form_state, $filters[$name], $defaults, $format, $filters);
+ if (isset($settings_form) && is_array($settings_form)) {
+ $form['format']['filters'][$name]['settings'] = array(
+ '#type' => 'fieldset',
+ '#title' => $filter['title'],
+ '#group' => 'filter_settings',
+ );
+ $form['format']['filters'][$name]['settings'] += $settings_form;
+ }
+ }
}
if (!empty($format->format)) {
- $form['format'] = array('#type' => 'hidden', '#value' => $format->format);
+ $form['format']['format'] = array('#type' => 'value', '#value' => $format->format);
// Composition tips (guidelines)
$tips = _filter_tips($format->format, FALSE);
@@ -176,16 +201,52 @@ function filter_admin_format_form(&$form
$form['tips'] = array('#markup' => '
' . t('Formatting guidelines') . '
' . $group);
}
$form['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
+
+ $form['#attached_css'][] = drupal_get_path('module', 'filter') . '/filter.css';
return $form;
}
/**
+ * Theme filter order configuration form.
+ *
+ * @ingroup themeable
+ */
+function theme_filter_admin_format_form($form) {
+ $header = array(
+ array('data' => t('Filter'), 'class' => array('checkbox')),
+ t('Weight'),
+ );
+
+ $rows = array();
+ foreach (element_children($form['format']['filters']) as $name) {
+ $form['format']['filters'][$name]['weight']['#attributes']['class'] = array('filter-order-weight');
+ $rows[] = array(
+ 'data' => array(
+ drupal_render($form['format']['filters'][$name]['status']),
+ drupal_render($form['format']['filters'][$name]['weight']),
+ ),
+ 'class' => array('draggable'),
+ );
+ }
+
+ $output = drupal_render($form['format']['name']);
+ $output .= drupal_render($form['format']['roles']);
+ $output .= theme('table', $header, $rows, array('id' => 'filter-order'), t('Choose the filters that will be used in this text format.'));
+ $output .= drupal_render($form['filter_settings']);
+ $output .= drupal_render_children($form);
+
+ drupal_add_tabledrag('filter-order', 'order', 'sibling', 'filter-order-weight', NULL, NULL, TRUE);
+
+ return $output;
+}
+
+/**
* Validate text format form submissions.
*/
function filter_admin_format_form_validate($form, &$form_state) {
- if (!isset($form_state['values']['format'])) {
- $format_name = trim($form_state['values']['name']);
+ if (!isset($form_state['values']['format']['format'])) {
+ $format_name = trim($form_state['values']['format']['name']);
$result = db_query("SELECT format FROM {filter_format} WHERE name = :name", array(':name' => $format_name))->fetchField();
if ($result) {
form_set_error('name', t('Text format names must be unique. A format named %name already exists.', array('%name' => $format_name)));
@@ -197,8 +258,8 @@ function filter_admin_format_form_valida
* Process text format form submissions.
*/
function filter_admin_format_form_submit($form, &$form_state) {
- $format = (object) $form_state['values'];
- $format->format = isset($form_state['values']['format']) ? $form_state['values']['format'] : NULL;
+ $format = (object) $form_state['values']['format'];
+ $format->format = isset($form_state['values']['format']['format']) ? $form_state['values']['format']['format'] : NULL;
$status = filter_format_save($format);
switch ($status) {
@@ -252,150 +313,3 @@ function filter_admin_delete_submit($for
$form_state['redirect'] = 'admin/settings/formats';
}
-/**
- * Menu callback; display settings defined by a format's filters.
- */
-function filter_admin_configure_page($format) {
- drupal_set_title(t("Configure %format", array('%format' => $format->name)), PASS_THROUGH);
- return drupal_get_form('filter_admin_configure', $format);
-}
-
-/**
- * Build a form to change the settings for filters in a text format.
- *
- * The form is built by merging the results of 'settings callback' for each
- * enabled filter in the given format.
- *
- * @ingroup forms
- */
-function filter_admin_configure(&$form_state, $format) {
- $filters = filter_list_format($format->format);
- $filter_info = filter_get_filters();
-
- $form['#format'] = $format;
- foreach ($filters as $name => $filter) {
- if (isset($filter_info[$name]['settings callback']) && function_exists($filter_info[$name]['settings callback'])) {
- // Pass along stored filter settings and default settings, but also the
- // format object and all filters to allow for complex implementations.
- $defaults = (isset($filter_info[$name]['default settings']) ? $filter_info[$name]['default settings'] : array());
- $settings_form = $filter_info[$name]['settings callback']($form_state, $filters[$name], $defaults, $format, $filters);
- if (isset($settings_form) && is_array($settings_form)) {
- $form['settings'][$name] = array(
- '#type' => 'fieldset',
- '#title' => check_plain($filter->title),
- );
- $form['settings'][$name] += $settings_form;
- }
- }
- }
-
- if (empty($form['settings'])) {
- $form['error'] = array('#markup' => t('No settings are available.'));
- return $form;
- }
- $form['settings']['#tree'] = TRUE;
- $form['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
-
- return $form;
-}
-
-/**
- * Form submit handler for text format filter configuration form.
- *
- * @see filter_admin_configure()
- */
-function filter_admin_configure_submit($form, &$form_state) {
- $format = $form['#format'];
-
- foreach ($form_state['values']['settings'] as $name => $settings) {
- db_update('filter')
- ->fields(array(
- 'settings' => serialize($settings),
- ))
- ->condition('format', $format->format)
- ->condition('name', $name)
- ->execute();
- }
-
- // Clear the filter's cache when configuration settings are saved.
- cache_clear_all($format->format . ':', 'cache_filter', TRUE);
-
- drupal_set_message(t('The configuration options have been saved.'));
-}
-
-/**
- * Menu callback; display form for ordering filters for a format.
- */
-function filter_admin_order_page($format) {
- drupal_set_title(t("Rearrange %format", array('%format' => $format->name)), PASS_THROUGH);
- return drupal_get_form('filter_admin_order', $format);
-}
-
-/**
- * Build the form for ordering filters for a format.
- *
- * @ingroup forms
- * @see theme_filter_admin_order()
- * @see filter_admin_order_submit()
- */
-function filter_admin_order(&$form_state, $format = NULL) {
- // Get list (with forced refresh).
- $filters = filter_list_format($format->format);
-
- $form['weights'] = array('#tree' => TRUE);
- foreach ($filters as $id => $filter) {
- $form['names'][$id] = array('#markup' => $filter->title);
- $form['weights'][$id] = array('#type' => 'weight', '#default_value' => $filter->weight);
- }
- $form['format'] = array('#type' => 'hidden', '#value' => $format->format);
- $form['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
-
- return $form;
-}
-
-/**
- * Theme filter order configuration form.
- *
- * @ingroup themeable
- */
-function theme_filter_admin_order($form) {
- $header = array(t('Name'), t('Weight'));
- $rows = array();
- foreach (element_children($form['names']) as $id) {
- // Don't take form control structures.
- if (is_array($form['names'][$id])) {
- $form['weights'][$id]['#attributes']['class'] = array('filter-order-weight');
- $rows[] = array(
- 'data' => array(drupal_render($form['names'][$id]), drupal_render($form['weights'][$id])),
- 'class' => array('draggable'),
- );
- }
- }
-
- $output = theme('table', $header, $rows, array('id' => 'filter-order'));
- $output .= drupal_render_children($form);
-
- drupal_add_tabledrag('filter-order', 'order', 'sibling', 'filter-order-weight', NULL, NULL, FALSE);
-
- return $output;
-}
-
-/**
- * Process filter order configuration form submission.
- */
-function filter_admin_order_submit($form, &$form_state) {
- foreach ($form_state['values']['weights'] as $name => $weight) {
- db_merge('filter')
- ->key(array(
- 'format' => $form_state['values']['format'],
- 'name' => $name,
- ))
- ->fields(array(
- 'weight' => $weight,
- ))
- ->execute();
- }
- drupal_set_message(t('The filter ordering has been saved.'));
-
- cache_clear_all($form_state['values']['format'] . ':', 'cache_filter', TRUE);
-}
Index: modules/filter/filter.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.css,v
retrieving revision 1.1
diff -u -p -r1.1 filter.css
--- modules/filter/filter.css 30 Mar 2009 03:15:40 -0000 1.1
+++ modules/filter/filter.css 28 Aug 2009 01:54:17 -0000
@@ -35,3 +35,11 @@
.text-format-wrapper .description {
margin-top: 0.5em;
}
+
+#filter-order tr .form-item {
+ padding: 0.5em 0 0 3em;
+ white-space: normal;
+}
+#filter-order tr .form-type-checkbox .description {
+ padding: 0 0 0 2.5em;
+}
Index: modules/filter/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v
retrieving revision 1.284
diff -u -p -r1.284 filter.module
--- modules/filter/filter.module 27 Aug 2009 21:18:19 -0000 1.284
+++ modules/filter/filter.module 28 Aug 2009 02:22:56 -0000
@@ -53,6 +53,10 @@ function filter_theme() {
'arguments' => array('form' => NULL),
'file' => 'filter.admin.inc',
),
+ 'filter_admin_format_form' => array(
+ 'arguments' => array('form' => NULL),
+ 'file' => 'filter.admin.inc',
+ ),
'filter_tips' => array(
'arguments' => array('tips' => NULL, 'long' => FALSE),
'file' => 'filter.pages.inc',
@@ -70,6 +74,13 @@ function filter_theme() {
* Implement hook_menu().
*/
function filter_menu() {
+ $items['filter/tips'] = array(
+ 'title' => 'Compose tips',
+ 'page callback' => 'filter_tips_long',
+ 'access callback' => TRUE,
+ 'type' => MENU_SUGGESTED_ITEM,
+ 'file' => 'filter.pages.inc',
+ );
$items['admin/settings/formats'] = array(
'title' => 'Text formats',
'description' => 'Configure how content input by users is filtered, including allowed HTML tags. Also allows enabling of module-provided filters.',
@@ -90,13 +101,6 @@ function filter_menu() {
'weight' => 1,
'file' => 'filter.admin.inc',
);
- $items['filter/tips'] = array(
- 'title' => 'Compose tips',
- 'page callback' => 'filter_tips_long',
- 'access callback' => TRUE,
- 'type' => MENU_SUGGESTED_ITEM,
- 'file' => 'filter.pages.inc',
- );
$items['admin/settings/formats/%filter_format'] = array(
'type' => MENU_CALLBACK,
'title callback' => 'filter_admin_format_title',
@@ -106,29 +110,6 @@ function filter_menu() {
'access arguments' => array('administer filters'),
'file' => 'filter.admin.inc',
);
- $items['admin/settings/formats/%filter_format/edit'] = array(
- 'title' => 'Edit',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => 0,
- );
- $items['admin/settings/formats/%filter_format/configure'] = array(
- 'title' => 'Configure',
- 'page callback' => 'filter_admin_configure_page',
- 'page arguments' => array(3),
- 'access arguments' => array('administer filters'),
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 1,
- 'file' => 'filter.admin.inc',
- );
- $items['admin/settings/formats/%filter_format/order'] = array(
- 'title' => 'Rearrange',
- 'page callback' => 'filter_admin_order_page',
- 'page arguments' => array(3),
- 'access arguments' => array('administer filters'),
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 2,
- 'file' => 'filter.admin.inc',
- );
$items['admin/settings/formats/%filter_format/delete'] = array(
'title' => 'Delete text format',
'page callback' => 'drupal_get_form',
@@ -186,6 +167,7 @@ function filter_format_save($format) {
$current = filter_list_format($format->format);
$filters = $format->filters;
+ echo ""; var_dump($filters); echo "
\n";
foreach ($filters as $name => $status) {
$fields = array();
// Add new filters to the bottom.
@@ -211,6 +193,7 @@ function filter_format_save($format) {
module_invoke_all('filter_format_update', $format);
}
+ // Clear the filter cache whenever a text format is saved.
cache_clear_all($format->format . ':', 'cache_filter', TRUE);
return $return;