function privatemsg_operation_execute in Privatemsg 7
Same name and namespace in other branches
- 6.2 privatemsg.module \privatemsg_operation_execute()
- 6 privatemsg.module \privatemsg_operation_execute()
- 7.2 privatemsg.module \privatemsg_operation_execute()
Execute an operation on a number of threads.
Parameters
$operation: The operation that should be executed. @see hook_privatemsg_thread_operations()
$threads: An array of thread ids. The array is filtered before used, a checkboxes array can be directly passed to it.
3 calls to privatemsg_operation_execute()
- privatemsg_filter_add_tag_submit in privatemsg_filter/
privatemsg_filter.module - Form callback for adding a tag to threads.
- privatemsg_filter_remove_tag_submit in privatemsg_filter/
privatemsg_filter.module - Form callback for removing a tag to threads.
- privatemsg_list_submit in ./
privatemsg.pages.inc - Process privatemsg_list form submissions.
File
- ./
privatemsg.module, line 2200 - Allows users to send private messages to other users.
Code
function privatemsg_operation_execute($operation, $threads, $account = NULL) {
// Filter out unchecked threads, this gives us an array of "checked" threads.
$threads = array_filter($threads);
if (empty($threads)) {
// Do not execute anything if there are no checked threads.
drupal_set_message(t('You must first select one (or more) messages before you can take that action.'), 'warning');
return FALSE;
}
// Add in callback arguments if present.
if (isset($operation['callback arguments'])) {
$args = array_merge(array(
$threads,
), $operation['callback arguments']);
}
else {
$args = array(
$threads,
);
}
// Add the user object to the arguments.
if ($account) {
$args[] = $account;
}
// Execute the chosen action and pass the defined arguments.
call_user_func_array($operation['callback'], $args);
if (!empty($operation['success message'])) {
drupal_set_message($operation['success message']);
}
// Check if that operation has defined an undo callback.
if (isset($operation['undo callback']) && ($undo_function = $operation['undo callback'])) {
// Add in callback arguments if present.
if (isset($operation['undo callback arguments'])) {
$undo_args = array_merge(array(
$threads,
), $operation['undo callback arguments']);
}
else {
$undo_args = array(
$threads,
);
}
// Avoid saving the complete user object in the session.
if ($account) {
$undo_args['account'] = $account->uid;
}
// Store the undo callback in the session and display a "Undo" link.
// @todo: Provide a more flexible solution for such an undo action, operation defined string for example.
$_SESSION['privatemsg']['undo callback'] = array(
'function' => $undo_function,
'args' => $undo_args,
);
$undo = url('messages/undo/action', array(
'query' => drupal_get_destination(),
));
drupal_set_message(t('The previous action can be <a href="!undo">undone</a>.', array(
'!undo' => $undo,
)));
}
// Allow modules to respond to the operation.
module_invoke_all('privatemsg_operation_executed', $operation, $threads, $account);
return TRUE;
}