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";
      $output .= $list;
      $output .= "

\n";
    }
  }
  return $output;
}

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:
/**
* 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.

Read Next
Appnovation Blog Default Header

Drupal Theming RSS Feed Views

05 June, 2009|2 min