diff options
author | Dries Buytaert <dries@buytaert.net> | 2007-03-26 00:35:59 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2007-03-26 00:35:59 +0000 |
commit | eb6b848de609469d313a1d48b6b7f8a559c9e289 (patch) | |
tree | 034aa0a102aeb6f4c4f4eaf78d5c2062257350cb | |
parent | 2e0bb6e939e54c5cc8fe03e583d07b358cffb0c4 (diff) | |
download | brdo-eb6b848de609469d313a1d48b6b7f8a559c9e289.tar.gz brdo-eb6b848de609469d313a1d48b6b7f8a559c9e289.tar.bz2 |
- Patch #110888 by Eaton: unify hook _alter()
-rw-r--r-- | includes/common.inc | 44 | ||||
-rw-r--r-- | includes/form.inc | 5 | ||||
-rw-r--r-- | includes/menu.inc | 5 | ||||
-rw-r--r-- | modules/color/color.module | 2 | ||||
-rw-r--r-- | modules/comment/comment.module | 9 | ||||
-rw-r--r-- | modules/forum/forum.module | 4 | ||||
-rw-r--r-- | modules/menu/menu.module | 2 | ||||
-rw-r--r-- | modules/node/node.module | 8 | ||||
-rw-r--r-- | modules/path/path.module | 2 | ||||
-rw-r--r-- | modules/taxonomy/taxonomy.module | 7 | ||||
-rw-r--r-- | modules/upload/upload.module | 7 | ||||
-rw-r--r-- | modules/user/user.module | 8 |
12 files changed, 56 insertions, 47 deletions
diff --git a/includes/common.inc b/includes/common.inc index 63973c499..efa7d4728 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -1993,11 +1993,12 @@ function drupal_mail($mailkey, $to, $subject, $body, $from = NULL, $headers = ar $defaults['From'] = $defaults['Reply-To'] = $defaults['Return-Path'] = $defaults['Errors-To'] = $from; } $headers = array_merge($defaults, $headers); - // Custom hook traversal to allow pass by reference - foreach (module_implements('mail_alter') AS $module) { - $function = $module .'_mail_alter'; - $function($mailkey, $to, $subject, $body, $from, $headers); - } + + // Bundle up the variables into a structured array for altering. + $message = array('#mail_id' => $mailkey, '#to' => $to, '#subject' => $subject, '#body' => $body, '#from' => $from, '#headers' => $headers); + drupal_alter('mail', $message); + list($mailkey, $to, $subject, $body, $from, $headers) = $message; + // Allow for custom mail backend if (variable_get('smtp_library', '') && file_exists(variable_get('smtp_library', ''))) { include_once './' . variable_get('smtp_library', ''); @@ -2163,6 +2164,39 @@ function drupal_system_listing($mask, $directory, $key = 'name', $min_depth = 1) return $files; } + +/** + * This dispatch function hands off structured Drupal arrays to + * type-specific *_alter implementations. It ensures a consistent + * interface for all altering operations. + * + * @param $type + * The data type of the structured array. 'form', 'links', + * 'node_content', and so on are several examples. + * @param $data + * The structured array to be altered. + * @param ... + * Any additional params will be passed on to the called + * hook_$type_alter functions. + */ +function drupal_alter($type, &$data = array()) { + // Hang onto a reference to the data array so that it isn't blown away later. + $args = array(&$data); + + // Now, use func_get_args() to pull in any aditional paramaters passed into + // the drupal_alter() call. + $aditional_args = func_get_args(); + array_shift($aditional_args); + array_shift($aditional_args); + $args = array_merge($args, $aditional_args); + + foreach (module_implements($type .'_alter') as $module) { + $function = $module .'_'. $type .'_alter'; + call_user_func_array($function, $args); + } +} + + /** * Renders HTML given a structured array tree. Recursively iterates over each * of the array elements, generating HTML code. This function is usually diff --git a/includes/form.inc b/includes/form.inc index 49dc8e47a..f7d166f11 100644 --- a/includes/form.inc +++ b/includes/form.inc @@ -351,10 +351,7 @@ function drupal_prepare_form($form_id, &$form) { } } - foreach (module_implements('form_alter') as $module) { - $function = $module .'_form_alter'; - $function($form_id, $form); - } + drupal_alter('form', $form, $form_id); $form = form_builder($form_id, $form); } diff --git a/includes/menu.inc b/includes/menu.inc index 1a2337ba9..435f694d4 100644 --- a/includes/menu.inc +++ b/includes/menu.inc @@ -552,10 +552,7 @@ function menu_rebuild() { // TODO: split menu and menu links storage. db_query('DELETE FROM {menu}'); $menu = module_invoke_all('menu'); - foreach (module_implements('menu_alter') as $module) { - $function = $module .'_menu_alter'; - $function($menu); - } + drupal_alter('menu', $menu); $mid = 1; // First pass: separate callbacks from pathes, making pathes ready for // matching. Calculate fitness, and fill some default values. diff --git a/modules/color/color.module b/modules/color/color.module index bb94bf0c1..32f618f7e 100644 --- a/modules/color/color.module +++ b/modules/color/color.module @@ -4,7 +4,7 @@ /** * Implementation of hook_form_alter(). */ -function color_form_alter($form_id, &$form) { +function color_form_alter(&$form, $form_id) { // Insert the color changer into the theme settings page. // TODO: Last condition in the following if disables color changer when private files are used this should be solved in a different way. See issue #92059. if ($form_id == 'system_theme_settings' && color_get_info(arg(4)) && function_exists('gd_info') && variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC) == FILE_DOWNLOADS_PUBLIC) { diff --git a/modules/comment/comment.module b/modules/comment/comment.module index 499db5a0e..8f060c300 100644 --- a/modules/comment/comment.module +++ b/modules/comment/comment.module @@ -374,7 +374,7 @@ function comment_link($type, $node = NULL, $teaser = FALSE) { return $links; } -function comment_form_alter($form_id, &$form) { +function comment_form_alter($form, $form_id) { if ($form_id == 'node_type_form' && isset($form['identity']['type'])) { $form['workflow']['comment'] = array( '#type' => 'radios', @@ -403,6 +403,7 @@ function comment_form_alter($form_id, &$form) { ); } } + return $form; } /** @@ -963,11 +964,7 @@ function comment_render($node, $cid = 0) { if ($comment = db_fetch_object($result)) { $comment->name = $comment->uid ? $comment->registered_name : $comment->name; $links = module_invoke_all('link', 'comment', $comment, 1); - - foreach (module_implements('link_alter') as $module) { - $function = $module .'_link_alter'; - $function($node, $links); - } + drupal_alter('link', $links, $node); $output .= theme('comment_view', $comment, $links); } diff --git a/modules/forum/forum.module b/modules/forum/forum.module index 4ff56a177..a7dd2b79b 100644 --- a/modules/forum/forum.module +++ b/modules/forum/forum.module @@ -207,7 +207,7 @@ function forum_admin_settings() { /** * Implementation of hook_form_alter(). */ -function forum_form_alter($form_id, &$form) { +function forum_form_alter(&$form, $form_id) { // hide critical options from forum vocabulary if ($form_id == 'taxonomy_form_vocabulary') { if ($form['vid']['#value'] == _forum_get_vid()) { @@ -657,7 +657,7 @@ function _forum_parent_select($tid, $title, $child_type) { return array('#type' => 'select', '#title' => $title, '#default_value' => $parent, '#options' => $options, '#description' => $description, '#required' => TRUE); } -function forum_link_alter(&$node, &$links) { +function forum_link_alter(&$links, $node) { foreach ($links as $module => $link) { if (strstr($module, 'taxonomy_term')) { // Link back to the forum and not the taxonomy term page. We'll only diff --git a/modules/menu/menu.module b/modules/menu/menu.module index 9c14c6571..3a4eae773 100644 --- a/modules/menu/menu.module +++ b/modules/menu/menu.module @@ -172,7 +172,7 @@ function menu_perm() { * Implementation of hook_form_alter(). * Add menu item fields to the node form. */ -function menu_form_alter($form_id, &$form) { +function menu_form_alter(&$form, $form_id) { if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) { $item = array(); if ($form['nid']['#value'] > 0) { diff --git a/modules/node/node.module b/modules/node/node.module index 3d57ed162..5e9bce1a6 100644 --- a/modules/node/node.module +++ b/modules/node/node.module @@ -673,11 +673,7 @@ function node_view($node, $teaser = FALSE, $page = FALSE, $links = TRUE) { if ($links) { $node->links = module_invoke_all('link', 'node', $node, !$page); - - foreach (module_implements('link_alter') AS $module) { - $function = $module .'_link_alter'; - $function($node, $node->links); - } + drupal_alter('link', $node->links, $node); } // Set the proper node part, then unset unused $node part so that a bad @@ -2456,7 +2452,7 @@ function node_update_index() { /** * Implementation of hook_form_alter(). */ -function node_form_alter($form_id, &$form) { +function node_form_alter(&$form, $form_id) { // Advanced node search form if ($form_id == 'search_form' && $form['module']['#value'] == 'node' && user_access('use advanced search')) { // Keyword boxes: diff --git a/modules/path/path.module b/modules/path/path.module index ba70970e5..c245fb63b 100644 --- a/modules/path/path.module +++ b/modules/path/path.module @@ -267,7 +267,7 @@ function path_nodeapi(&$node, $op, $arg) { /** * Implementation of hook_form_alter(). */ -function path_form_alter($form_id, &$form) { +function path_form_alter(&$form, $form_id) { if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) { $path = isset($form['#node']->path) ? $form['#node']->path : NULL; $form['path'] = array( diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module index c05c866f0..bbde8d8d1 100644 --- a/modules/taxonomy/taxonomy.module +++ b/modules/taxonomy/taxonomy.module @@ -39,10 +39,7 @@ function taxonomy_link($type, $node = NULL) { } // We call this hook again because some modules and themes call taxonomy_link('taxonomy terms') directly - foreach (module_implements('link_alter') as $module) { - $function = $module .'_link_alter'; - $function($node, $links); - } + drupal_alter('link', $links, $node); return $links; } @@ -654,7 +651,7 @@ function taxonomy_get_vocabularies($type = NULL) { * Implementation of hook_form_alter(). * Generate a form for selecting terms to associate with a node. */ -function taxonomy_form_alter($form_id, &$form) { +function taxonomy_form_alter(&$form, $form_id) { if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) { $node = $form['#node']; diff --git a/modules/upload/upload.module b/modules/upload/upload.module index bd0d5568b..e2a729489 100644 --- a/modules/upload/upload.module +++ b/modules/upload/upload.module @@ -333,7 +333,7 @@ function _upload_prepare(&$node) { } } -function upload_form_alter($form_id, &$form) { +function upload_form_alter(&$form, $form_id) { if ($form_id == 'node_type_form' && isset($form['identity']['type'])) { $form['workflow']['upload'] = array( '#type' => 'radios', @@ -883,10 +883,7 @@ function upload_js() { _upload_validate($node); $form = _upload_form($node); - foreach (module_implements('form_alter') as $module) { - $function = $module .'_form_alter'; - $function('upload_js', $form); - } + drupal_alter('form', $form, 'upload_js'); $form = form_builder('upload_js', $form); $output = theme('status_messages') . drupal_render($form); // We send the updated file attachments form. diff --git a/modules/user/user.module b/modules/user/user.module index d3bad45d9..173b1656a 100644 --- a/modules/user/user.module +++ b/modules/user/user.module @@ -1605,13 +1605,7 @@ function user_view($account) { } } - // Let modules change the returned fields - useful for personal privacy - // controls. Since modules communicate changes by reference, we cannot use - // module_invoke_all(). - foreach (module_implements('profile_alter') as $module) { - $function = $module .'_profile_alter'; - $function($account, $fields); - } + drupal_alter('profile', $fields, $account); drupal_set_title(check_plain($account->name)); return theme('user_profile', $account, $fields); |