If you've ever wished you had control over Drupal status messages generated by contributed modules and/or ever longed for hook_message_alter, you may be interested in this little Drupal web developer trick for changing these messages. First, add this theming function to your template.php file (the function name "phptemplate_" may be replaced with your theme name):
function phptemplate_status_messages($display = NULL) {
$output = '';
foreach (drupal_get_messages($display) as $type => $messages) {
if (count($messages) > 1) {
$list = '';
$items = '';
foreach ($messages as $message) {
modify_message($message);
if (!empty($message)) {
$items .= '
'. $message ."
\n";
}
}
if (!empty($items)) {
$list = "
- \n";
- $list .= $items;
- $list .= "
\n";
}
}
else {
$message = $messages[0];
modify_message($message);
$list = $message;
}
if (!empty($list)) {
$output .= "
\n";
Now, all you have to do is to create another function which will be hiding/modifying your status messages. Here is a function with examples of these changes:
}
}
return $output;
}
/**
* Modify/hide a message from user:
*
* @param string $message
*/
function modify_message(&$message) {
//Add here whatever you need to recognize and modify this message:
global $user;
// Hide these messages:
$message = preg_replace('/No posts in this group\./', '', $message);
$message = preg_replace('/Fetching data from GeoNames failed.*/', '', $message);
//If the administrator has removed _himself_, the message should instead of
//"Username_ABC is no longer a group administrator." say:
//"You are no longer an administrator for this group. To regain administrator privileges, please contact an administrator for this group."
$current_name = $user->name;
preg_match('/(.*) is no longer a\.*/', $message, $matches_A);
//check if the current user is the same as the user in the message:
if ($matches_A[1]) preg_match("/$current_name/", $matches_A[1], $matches_B);
if ($matches_B[0]) $message = "You are no longer an administrator for this group. To regain administrator privileges, please contact an administrator for this group.";
}
Et, voila.