Index: modules/field/modules/text/text.module =================================================================== RCS file: /cvs/drupal/drupal/modules/field/modules/text/text.module,v retrieving revision 1.23 diff -u -p -r1.23 text.module --- modules/field/modules/text/text.module 24 Aug 2009 00:37:25 -0000 1.23 +++ modules/field/modules/text/text.module 24 Aug 2009 04:53:35 -0000 @@ -398,7 +398,7 @@ function text_summary($text, $format = N // parse errors. if (isset($format)) { $filters = filter_list_format($format); - if (isset($filters['php/php_code']) && strpos($text, '' => 6, '
' => 4); // Newline only indicates a line break if line break converter // filter is present. - if (isset($filters['filter/filter_autop'])) { + if (isset($filters['filter_autop'])) { $line_breaks["\n"] = 1; } $break_points[] = $line_breaks; @@ -465,7 +465,7 @@ function text_summary($text, $format = N } // If the htmlcorrector filter is present, apply it to the generated summary. - if (isset($filters['filter/filter_htmlcorrector'])) { + if (isset($filters['filter_htmlcorrector'])) { $summary = _filter_htmlcorrector($summary); } Index: modules/filter/filter.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.admin.inc,v retrieving revision 1.37 diff -u -p -r1.37 filter.admin.inc --- modules/filter/filter.admin.inc 24 Aug 2009 00:14:20 -0000 1.37 +++ modules/filter/filter.admin.inc 24 Aug 2009 05:13:12 -0000 @@ -143,7 +143,7 @@ function filter_admin_format_form(&$form } } // Table with filters - $all = filter_list_all(); + $filter_info = filter_get_filters(); $enabled = filter_list_format($format->format); $form['filters'] = array('#type' => 'fieldset', @@ -151,12 +151,12 @@ function filter_admin_format_form(&$form '#description' => t('Choose the filters that will be used in this text format.'), '#tree' => TRUE, ); - foreach ($all as $id => $filter) { - $filter_info = module_invoke($filter->module, 'filter_info'); - $form['filters'][$id] = array('#type' => 'checkbox', - '#title' => $filter->title, - '#default_value' => isset($enabled[$id]), - '#description' => $filter_info[$filter->name]['description'], + foreach ($filter_info as $name => $filter) { + $form['filters'][$name] = array( + '#type' => 'checkbox', + '#title' => $filter['title'], + '#default_value' => isset($enabled[$name]), + '#description' => $filter['description'], ); } if (!empty($format->format)) { @@ -185,8 +185,8 @@ function filter_admin_format_form(&$form */ function filter_admin_format_form_validate($form, &$form_state) { if (!isset($form_state['values']['format'])) { - $name = trim($form_state['values']['name']); - $result = db_query("SELECT format FROM {filter_format} WHERE name = :name", array(':name' => $name))->fetchField(); + $format_name = trim($form_state['values']['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))); } @@ -199,17 +199,17 @@ function filter_admin_format_form_valida function filter_admin_format_form_submit($form, &$form_state) { $format = isset($form_state['values']['format']) ? $form_state['values']['format'] : NULL; $current = filter_list_format($format); - $name = trim($form_state['values']['name']); + $format_name = trim($form_state['values']['name']); $cache = TRUE; // Add a new text format. if (!$format) { $new = TRUE; db_insert('filter_format') - ->fields(array('name' => $name)) + ->fields(array('name' => $format_name)) ->execute(); $format = db_query("SELECT MAX(format) AS format FROM {filter_format}")->fetchField(); - drupal_set_message(t('Added text format %format.', array('%format' => $name))); + drupal_set_message(t('Added text format %format.', array('%format' => $format_name))); } else { drupal_set_message(t('The text format settings have been updated.')); @@ -217,20 +217,16 @@ function filter_admin_format_form_submit db_delete('filter') ->condition('format', $format) ->execute(); - $query = db_insert('filter')->fields(array('format', 'module', 'name', 'weight')); - foreach ($form_state['values']['filters'] as $id => $checked) { + $query = db_insert('filter')->fields(array('format', 'name', 'weight')); + foreach ($form_state['values']['filters'] as $name => $checked) { if ($checked) { - list($module, $filter_name) = explode('/', $id); // Add new filters to the bottom. - $weight = isset($current[$id]->weight) ? $current[$id]->weight : 10; + $weight = isset($current[$name]->weight) ? $current[$name]->weight : 10; $query->values(array( 'format' => $format, - 'module' => $module, - 'name' => $filter_name, + 'name' => $name, 'weight' => $weight, )); - // Check if there are any 'no cache' filters. - $cache &= !module_invoke($module, 'filter', 'no cache', $filter_name); } $query->execute(); } @@ -256,7 +252,7 @@ function filter_admin_format_form_submit db_update('filter_format') ->fields(array( 'cache' => $cache, - 'name' => $name, + 'name' => $format_name, 'roles' => $roles, )) ->condition('format', $format) @@ -349,11 +345,11 @@ function filter_admin_configure_page($fo */ function filter_admin_configure(&$form_state, $format) { $list = filter_list_format($format->format); + $filter_info = filter_get_filters(); $form = array(); - foreach ($list as $filter) { - $filter_info = module_invoke($filter->module, 'filter_info'); - if (isset($filter_info[$filter->name]['settings callback']) && function_exists($filter_info[$filter->name]['settings callback'])) { - $form_module = call_user_func($filter_info[$filter->name]['settings callback'], $format->format); + foreach ($list as $name => $filter) { + if (isset($filter_info[$name]['settings callback']) && function_exists($filter_info[$name]['settings callback'])) { + $form_module = call_user_func($filter_info[$name]['settings callback'], $format->format); } if (isset($form_module) && is_array($form_module)) { $form = array_merge($form, $form_module); @@ -399,7 +395,7 @@ function filter_admin_order(&$form_state $form['weights'] = array('#tree' => TRUE); foreach ($filters as $id => $filter) { - $form['names'][$id] = array('#markup' => $filter->name); + $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); @@ -439,12 +435,10 @@ function theme_filter_admin_order($form) * Process filter order configuration form submission. */ function filter_admin_order_submit($form, &$form_state) { - foreach ($form_state['values']['weights'] as $id => $weight) { - list($module, $name) = explode('/', $id); + foreach ($form_state['values']['weights'] as $name => $weight) { db_update('filter') ->fields(array('weight' => $weight)) ->condition('format', $form_state['values']['format']) - ->condition('module', $module) ->condition('name', $name) ->execute(); } Index: modules/filter/filter.api.php =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.api.php,v retrieving revision 1.9 diff -u -p -r1.9 filter.api.php --- modules/filter/filter.api.php 13 Aug 2009 19:53:19 -0000 1.9 +++ modules/filter/filter.api.php 24 Aug 2009 05:05:45 -0000 @@ -104,5 +104,18 @@ function hook_filter_info() { } /** + * Perform alterations on filter definitions. + * + * @param $info + * Array of information on filters exposed by hook_filter_info() + * implementations. + */ +function hook_filter_info_alter(&$info) { + // Replace the PHP evaluator process callback with an improved + // PHP evaluator provided by a module. + $info['php_code']['process callback'] = 'my_module_php_evaluator'; +} + +/** * @} End of "addtogroup hooks". */ Index: modules/filter/filter.module =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v retrieving revision 1.277 diff -u -p -r1.277 filter.module --- modules/filter/filter.module 24 Aug 2009 00:14:20 -0000 1.277 +++ modules/filter/filter.module 24 Aug 2009 05:16:21 -0000 @@ -332,25 +332,23 @@ function filter_formats($index = NULL) { } /** - * Build a list of all filters. + * Return a list of all filters provided by modules. */ -function filter_list_all() { - $filters = array(); +function filter_get_filters() { + $filters = &drupal_static(__FUNCTION__, array()); - foreach (module_implements('filter_info') as $module) { - $function = $module . '_filter_info'; - $info = $function('list'); - if (isset($info) && is_array($info)) { - foreach ($info as $name => $filter) { - $filters[$module . '/' . $name] = (object)($filter + array( - 'module' => $module, - 'name' => $name, - )); + if (empty($filters)) { + foreach (module_implements('filter_info') as $module) { + $info = module_invoke($module, 'filter_info'); + if (isset($info) && is_array($info)) { + $filters = array_merge($filters, $info); } } - } + // Allow modules to alter filter definitions. + drupal_alter('filter_info', $filters); - uasort($filters, '_filter_list_cmp'); + uasort($filters, '_filter_list_cmp'); + } return $filters; } @@ -359,7 +357,7 @@ function filter_list_all() { * Helper function for sorting the filter list by filter name. */ function _filter_list_cmp($a, $b) { - return strcmp($a->name, $b->name); + return strcmp($a['title'], $b['title']); } /** @@ -385,15 +383,15 @@ function filter_format_allowcache($forma */ function filter_list_format($format) { static $filters = array(); + $filter_info = filter_get_filters(); if (!isset($filters[$format])) { $filters[$format] = array(); $result = db_query("SELECT * FROM {filter} WHERE format = :format ORDER BY weight, module, name", array(':format' => (int) $format)); foreach ($result as $filter) { - $info = module_invoke($filter->module, 'filter_info'); - if (isset($info) && is_array($info) && isset($info[$filter->name])) { - $filter->title = $info[$filter->name]['title']; - $filters[$format][$filter->module . '/' . $filter->name] = $filter; + if (isset($filter_info[$filter->name])) { + $filter->title = $filter_info[$filter->name]['title']; + $filters[$format][$filter->name] = $filter; } } } @@ -449,20 +447,19 @@ function check_markup($text, $format = F // Get a complete list of filters, ordered properly. $filters = filter_list_format($format); + $filter_info = filter_get_filters(); // Give filters the chance to escape HTML-like data such as code or formulas. - foreach ($filters as $filter) { - $filter_info = module_invoke($filter->module, 'filter_info'); - if (isset($filter_info[$filter->name]['prepare callback']) && function_exists($filter_info[$filter->name]['prepare callback'])) { - $text = call_user_func($filter_info[$filter->name]['prepare callback'], $text, $format, $langcode, $cache_id); + foreach ($filters as $name => $filter) { + if (isset($filter_info[$name]['prepare callback']) && function_exists($filter_info[$name]['prepare callback'])) { + $text = call_user_func($filter_info[$name]['prepare callback'], $text, $format, $langcode, $cache_id); } } // Perform filtering. - foreach ($filters as $filter) { - $filter_info = module_invoke($filter->module, 'filter_info'); - if (isset($filter_info[$filter->name]['process callback']) && function_exists($filter_info[$filter->name]['process callback'])) { - $text = call_user_func($filter_info[$filter->name]['process callback'], $text, $format, $langcode, $cache_id); + foreach ($filters as $name => $filter) { + if (isset($filter_info[$name]['process callback']) && function_exists($filter_info[$name]['process callback'])) { + $text = call_user_func($filter_info[$name]['process callback'], $text, $format, $langcode, $cache_id); } } @@ -559,6 +556,7 @@ function filter_access($format) { */ function _filter_tips($format, $long = FALSE) { $formats = filter_formats(); + $filter_info = filter_get_filters(); $tips = array(); @@ -569,13 +567,11 @@ function _filter_tips($format, $long = F foreach ($formats as $format) { $filters = filter_list_format($format->format); - $tips[$format->name] = array(); - foreach ($filters as $id => $filter) { - $filter_info = module_invoke($filter->module, 'filter_info'); - if (isset($filter_info[$filter->name]['tips callback']) && function_exists($filter_info[$filter->name]['tips callback'])) { - $tip = call_user_func($filter_info[$filter->name]['tips callback'],$format->format, $long); - $tips[$format->name][] = array('tip' => $tip, 'id' => $id); + foreach ($filters as $name => $filter) { + if (isset($filter_info[$name]['tips callback']) && function_exists($filter_info[$name]['tips callback'])) { + $tip = call_user_func($filter_info[$name]['tips callback'],$format->format, $long); + $tips[$format->name][] = array('tip' => $tip, 'id' => $name); } } } Index: modules/filter/filter.test =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.test,v retrieving revision 1.32 diff -u -p -r1.32 filter.test --- modules/filter/filter.test 22 Aug 2009 00:58:53 -0000 1.32 +++ modules/filter/filter.test 24 Aug 2009 04:53:35 -0000 @@ -47,8 +47,8 @@ class FilterAdminTestCase extends Drupal // Reorder filters. $edit = array(); - $edit['weights[filter/' . $second_filter . ']'] = 1; - $edit['weights[filter/' . $first_filter . ']'] = 2; + $edit['weights[' . $second_filter . ']'] = 1; + $edit['weights[' . $first_filter . ']'] = 2; $this->drupalPost('admin/settings/formats/' . $filtered . '/order', $edit, t('Save configuration')); $this->assertText(t('The filter ordering has been saved.'), t('Order saved successfully.')); @@ -65,8 +65,8 @@ class FilterAdminTestCase extends Drupal $edit = array(); $edit['name'] = $this->randomName(); $edit['roles[2]'] = TRUE; - $edit['filters[filter/' . $second_filter . ']'] = TRUE; - $edit['filters[filter/' . $first_filter . ']'] = TRUE; + $edit['filters[' . $second_filter . ']'] = TRUE; + $edit['filters[' . $first_filter . ']'] = TRUE; $this->drupalPost('admin/settings/formats/add', $edit, t('Save configuration')); $this->assertRaw(t('Added text format %format.', array('%format' => $edit['name'])), t('New filter created.')); @@ -74,10 +74,9 @@ class FilterAdminTestCase extends Drupal $this->assertNotNull($format, t('Format found in database.')); if ($format !== NULL) { - debug($format); $this->assertFieldByName('roles[2]', '', t('Role found.')); - $this->assertFieldByName('filters[filter/' . $second_filter . ']', '', t('Line break filter found.')); - $this->assertFieldByName('filters[filter/' . $first_filter . ']', '', t('Url filter found.')); + $this->assertFieldByName('filters[' . $second_filter . ']', '', t('Line break filter found.')); + $this->assertFieldByName('filters[' . $first_filter . ']', '', t('Url filter found.')); // Delete new filter. $this->drupalPost('admin/settings/formats/delete/' . $format->format, array(), t('Delete')); @@ -142,8 +141,8 @@ class FilterAdminTestCase extends Drupal // Filter order. $edit = array(); - $edit['weights[filter/' . $second_filter . ']'] = 2; - $edit['weights[filter/' . $first_filter . ']'] = 1; + $edit['weights[' . $second_filter . ']'] = 2; + $edit['weights[' . $first_filter . ']'] = 1; $this->drupalPost('admin/settings/formats/' . $filtered . '/order', $edit, t('Save configuration')); $this->assertText(t('The filter ordering has been saved.'), t('Order successfully reverted.')); } Index: modules/search/search.test =================================================================== RCS file: /cvs/drupal/drupal/modules/search/search.test,v retrieving revision 1.30 diff -u -p -r1.30 search.test --- modules/search/search.test 22 Aug 2009 00:58:54 -0000 1.30 +++ modules/search/search.test 24 Aug 2009 04:53:35 -0000 @@ -461,7 +461,7 @@ class SearchCommentTestCase extends Drup variable_set('comment_preview_article', COMMENT_PREVIEW_OPTIONAL); // Enable check_plain() for 'Filtered HTML' text format. $edit = array( - 'filters[filter/filter_html_escape]' => 1, + 'filters[filter_html_escape]' => 1, ); $this->drupalPost('admin/settings/formats/1', $edit, t('Save configuration')); // Allow anonymous users to search content.