diff --git a/modules/node/node.module b/modules/node/node.module index b0db7f1029b51cd75a2cc540243cb2323d06d6c4..8cd0c694e1a55fe162ee480af0064e24937793bb 100644 --- a/modules/node/node.module +++ b/modules/node/node.module @@ -1154,12 +1154,29 @@ function node_last_changed($nid) { */ function node_node_operations() { $operations = array( - 'approve' => array(t('Approve the selected posts'), 'node_operations_approve'), - 'promote' => array(t('Promote the selected posts'), 'node_operations_promote'), - 'sticky' => array(t('Make the selected posts sticky'), 'node_operations_sticky'), - 'demote' => array(t('Demote the selected posts'), 'node_operations_demote'), - 'unpublish' => array(t('Unpublish the selected posts'), 'node_operations_unpublish'), - 'delete' => array(t('Delete the selected posts'), ''), + 'approve' => array( + 'label' => t('Approve the selected posts'), + 'callback' => 'node_operations_approve', + ), + 'promote' => array( + 'label' => t('Promote the selected posts'), + 'callback' => 'node_operations_promote', + ), + 'sticky' => array( + 'label' => t('Make the selected posts sticky'), + 'callback' => 'node_operations_sticky', + ), + 'demote' => array( + 'label' => t('Demote the selected posts'), + 'callback' => 'node_operations_demote', + ), + 'unpublish' => array( + 'label' => t('Unpublish the selected posts'), + 'callback' => 'node_operations_unpublish', + ), + 'delete' => array( + 'label' => t('Delete the selected posts'), + ), ); return $operations; } @@ -1370,23 +1387,26 @@ function node_admin_nodes_submit($form_id, $edit) { $operations = module_invoke_all('node_operations'); $operation = $operations[$edit['operation']]; // Filter out unchecked nodes - $nodes = array_diff($edit['nodes'], array(0)); - if ($function = $operation[1]) { - call_user_func($function, $nodes); + $nodes = array_filter($edit['nodes']); + if ($function = $operation['callback']) { + // Add in callback arguments if present. + if (isset($operation['callback arguments'])) { + $args = array_merge(array($nodes), $operation['callback arguments']); + } + else { + $args = array($nodes); + } + call_user_func_array($function, $args); + cache_clear_all(); drupal_set_message(t('The update has been performed.')); } } function node_admin_nodes_validate($form_id, $edit) { - $edit['nodes'] = array_diff($edit['nodes'], array(0)); - if (count($edit['nodes']) == 0) { - if ($edit['operation'] == 'delete') { - form_set_error('', t('Please select some items to perform the delete operation.')); - } - else { - form_set_error('', t('Please select some items to perform the update on.')); - } + $nodes = array_filter($edit['nodes']); + if (count($nodes) == 0) { + form_set_error('', t('No items selected.')); } } @@ -1411,8 +1431,8 @@ function node_admin_nodes() { '#suffix' => '</div>', ); $options = array(); - foreach (module_invoke_all('node_operations') as $key => $value) { - $options[$key] = $value[0]; + foreach (module_invoke_all('node_operations') as $operation => $array) { + $options[$operation] = $array['label']; } $form['options']['operation'] = array('#type' => 'select', '#options' => $options, '#default_value' => 'approve'); $form['options']['submit'] = array('#type' => 'submit', '#value' => t('Update')); diff --git a/modules/user/user.module b/modules/user/user.module index 2adbe0588985339291aec524660304b489305c48..96b6db3cec939a8c7f0eb74a86c42eb14404c606 100644 --- a/modules/user/user.module +++ b/modules/user/user.module @@ -1935,8 +1935,8 @@ function user_admin_account() { '#suffix' => '</div>', ); $options = array(); - foreach (module_invoke_all('user_operations') as $key => $value) { - $options[$key] = $value[0]; + foreach (module_invoke_all('user_operations') as $operation => $array) { + $options[$operation] = $array['label']; } $form['options']['operation'] = array( '#type' => 'select', @@ -2031,8 +2031,16 @@ function user_admin_account_submit($form_id, $edit) { $operation = $operations[$edit['operation']]; // Filter out unchecked accounts. $accounts = array_filter($edit['accounts']); - if ($function = $operation[1]) { - call_user_func($function, $accounts); + if ($function = $operation['callback']) { + // Add in callback arguments if present. + if (isset($operation['callback arguments'])) { + $args = array_merge(array($accounts), $operation['callback arguments']); + } + else { + $args = array($accounts); + } + call_user_func_array($function, $args); + cache_clear_all(); drupal_set_message(t('The update has been performed.')); } @@ -2052,7 +2060,7 @@ function user_user_operations() { global $form_values; $roles = user_roles(1); - unset($roles[2]); // Can't edit authenticated role. + unset($roles[DRUPAL_AUTHENTICATED_RID]); // Can't edit authenticated role. $add_roles = array(); foreach ($roles as $key => $value) { @@ -2065,18 +2073,35 @@ function user_user_operations() { } $operations = array( - 'unblock' => array(t('Unblock the selected users'), 'user_user_operations_unblock'), - 'block' => array(t('Block the selected users'), 'user_user_operations_block'), - t('Add a role to the selected users') => array($add_roles), - t('Remove a role from the selected users') => array($remove_roles), - 'delete' => array(t('Delete the selected users'), ''), + 'unblock' => array( + 'label' => t('Unblock the selected users'), + 'callback' => 'user_user_operations_unblock', + ), + 'block' => array( + 'label' => t('Block the selected users'), + 'callback' => 'user_user_operations_block', + ), + t('Add a role to the selected users') => array( + 'label' => $add_roles, + ), + t('Remove a role from the selected users') => array( + 'label' => $remove_roles, + ), + 'delete' => array( + 'label' => t('Delete the selected users'), + ), ); // If the form has been posted, we need to insert the proper data for role editing if necessary. if ($form_values) { - $operation = explode('-', $form_values['operation']); - if ($operation[0] == 'add_role' || $operation[0] == 'remove_role') { - $operations[$form_values['operation']] = array(NULL, 'user_multiple_role_edit'); + $operation_rid = explode('-', $form_values['operation']); + $operation = $operation_rid[0]; + $rid = $operation_rid[1]; + if ($operation == 'add_role' || $operation == 'remove_role') { + $operations[$form_values['operation']] = array( + 'callback' => 'user_multiple_role_edit', + 'callback arguments' => array($operation, $rid), + ); } } @@ -2100,14 +2125,7 @@ function user_user_operations_block($accounts) { /** * Callback function for admin mass adding/deleting a user role. */ -function user_multiple_role_edit($accounts) { - global $form_values; - - // Get the operation and role from the posted form. - $operation_rid = explode('-', $form_values['operation']); - $operation = $operation_rid[0]; - $rid = $operation_rid[1]; - +function user_multiple_role_edit($accounts, $operation, $rid) { switch ($operation) { case 'add_role': foreach ($accounts as $uid) {