You are here

function purr_messages_status_messages in Purr Messages 6

Same name and namespace in other branches
  1. 8.2 purr_messages.module \purr_messages_status_messages()
  2. 6.2 purr_messages.module \purr_messages_status_messages()
  3. 7.2 purr_messages.module \purr_messages_status_messages()
  4. 7 purr_messages.module \purr_messages_status_messages()

Build the message status html inside a jquery object.

Adds jQuery and purr code around the object and then returns it back to the theme layer ($messages).

1 string reference to 'purr_messages_status_messages'
purr_messages_theme_registry_alter in ./purr_messages.module
Implementation of hook_theme_registry_alter(). Allows the module to override the core status_messages function with purr_messages_status_messages.

File

./purr_messages.module, line 147
Purr Messages A jQuery based override of Drupal's core message system

Code

function purr_messages_status_messages($display = NULL) {
  if (user_access('view purr messages') && variable_get('purr_enabled', TRUE) == TRUE) {
    $dgm = drupal_get_messages($display, FALSE);

    // Try to catch dpm (devel) calls
    if (isset($dgm['status'])) {
      foreach ($dgm['status'] as $msg) {
        if (variable_get('purr_messages_admin_path', FALSE) || strstr($msg, '<pre>') || strstr($msg, '<textarea') || strstr($msg, 'krumo')) {

          // Return the message using the original theme function.
          return theme('original_status_messages');
        }
      }
    }
    $module_path = drupal_get_path('module', 'purr_messages');
    if (!module_exists('libraries')) {

      // Check that Libraries API is installed.
      drupal_set_message(t('Please install the !libraries to use purr messages.', array(
        '!libraries' => l('Libraries API', 'http://drupal.org/project/libraries'),
      )), 'error');
      return theme('original_status_messages');

      // Return a warning.
    }
    if (file_exists(libraries_get_path('jquery_purr/jquery.purr.js'))) {
      drupal_add_js(libraries_get_path('jquery_purr/jquery.purr.js'));
      $custom_css = purr_messages_status($themelayer = TRUE);
      $custom_css ? drupal_add_css($custom_css) : drupal_add_css($module_path . '/purrcss/purr.css');
      $output = '';
      foreach (drupal_get_messages($display) as $type => $messages) {

        // This javascript will be printed instead of the standard message content.
        $output .= "<script type=\"text/javascript\">";
        $output .= "Drupal.behaviors.purr_messages = function(context) {\n var notice = ";
        $output .= "'<div class=\"notice {$type}\">'\n + '<div class=\"notice-body\">'";
        if (count($messages) > 1) {
          $output .= "+ '<ul>'\n";
          foreach ($messages as $message) {
            $output .= "+  '<li>" . addslashes($message) . "</li>'\n";
          }
          $output .= "+ '</ul>'\n";
        }
        else {
          $output .= "\n+ '" . $messages[0] . "'\n";
        }
        $output .= "+ '</div>'\n + '<div class=\"notice-bottom\">'\n + '</div>' + '</div>'\n";

        // Gets the settings if they've been set, otherwise use some defaults.
        $output .= variable_get('purr_messages_code', purr_messages_defaults());

        // Finish off the script.
        $output .= "};</script>\n";

        // Next we add the old style output if javascript is turned off.
        $output .= "<noscript>\n";
        $output .= "<div class=\"messages {$type}\">\n";
        if (count($messages) > 1) {
          $output .= " <ul>\n";
          foreach ($messages as $message) {
            $output .= '  <li>' . $message . "</li>\n";
          }
          $output .= " </ul>\n";
        }
        else {
          $output .= $messages[0];
        }
        $output .= "</div></noscript>\n";
      }
      return $output;
    }
    else {
      drupal_set_message('You need to install jquery.purr.js in jquery_purr
      in your libraries directory. See README.txt for details.', 'warning');
      return theme('original_status_messages', $variables);
    }
  }
  else {

    // Return the message using the original theme function.
    return theme('original_status_messages');
  }
}