| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 | <?php/*Implementation of hook_init*/function better_messages_init() {  drupal_add_css(drupal_get_path('module', 'better_messages') . '/better_messages_admin.css');  drupal_add_css(drupal_get_path('module', 'better_messages') . '/skins/default/better_messages.css');}/*Implementation of hook_menu*/function better_messages_menu() {  $items = array();  $items['admin/config/user-interface/better-messages'] = array(    'title' => t('Better Messages settings'),    'description' => t('Better handling of Drupal messages UI'),    'page callback' => 'drupal_get_form',    'page arguments' => array('better_messages_admin'),    'access arguments' => array('administer better messages'),    'file' => 'better_messages.inc',  );  return $items;}/** * Implementation of hook_perm(). */function better_messages_permission() {	return array(    'access better messages' => array(      'title' => t('access better messages'),      'description' => t('access better messages.'),    ),		'administer better messages' => array(      'title' => t('administer better messages'),      'description' => t('administer better messages.'),    ),  );}/*Implementation of hook_theme*/function better_messages_theme($existing, $type, $theme, $path) {  return array(    'better_messages_content' => array(    	'variables' => array('messages_drupal' => array()),    ),    'better_messages' => array(    	'template'	=> 'better_messages',    	'variables' => array('content' => NULL),    ),  );}/*Implementation of hook_theme_registry_alter to add better_messages theme function*/function better_messages_theme_registry_alter(&$theme_registry) {	$theme_registry['status_messages']['function'] = "theme_better_messages";}function theme_better_messages($display = NULL) {	$output = '';	$better_messages = better_messages_process_visibility(); 	$access = user_access('access better messages');	$message = drupal_get_messages($display['display']);	if ($better_messages && $access && !empty($message)) {		$disable_autoclose = better_messages_process_autoclose($message);		better_messages_add_files($disable_autoclose);		$message = theme('better_messages_content', array('messages_drupal' => $message));		// We save the initial output to SESSION so we can put it in <noscript> on page_preprocess		$_SESSION['original_messages'] = $message;		$message_skin = theme('better_messages', array('content' => $message));		// We add a special ID so that JavaScript knows what to handle. Changing the ID will break JavaScript handling code.		$output = "<div id=\"better-messages-wrapper\" style=\"display:none;overflow:visible;position:absolute;z-index:9999;\">\n".					$message_skin ."\n</div>\n";	}	else {  	$output = theme('better_messages_content', array('messages_drupal' => $message));  }	return $output;}function theme_better_messages_content($variables) {  $messages_drupal = $variables['messages_drupal'];	$output = '';	$first = TRUE;	foreach ($messages_drupal as $type => $messages) {		$class = $first ? 'first' : '';		$first = FALSE;		$output .= "<h2 class=\"messages-label $type\">" . t(drupal_ucfirst($type)) . "</h2>\n";		$output .= "<div class=\"messages $type\">\n";		if (count($messages) > 1) {			$output .= " <ul>\n";			foreach ($messages as $k => $message) {		      if ($k == 0) {  		      $output .= "<li class='message-item first'>$message</li>";  		    }		      elseif ($k == count($messages) - 1) {  		      $output .= "<li class='message-item last'>$message</li>";  		    }		      else {  		      $output .= "<li class='message-item'>$message</li>";  		    }		    }			$output .= " </ul>\n";		}		else {  		$output .= $messages[0];    }		$output .= "</div>\n";	}	return $output;}/*Preprocess the default status_messages so we add our template file here*/function better_messages_preprocess_page(&$vars) {	if (isset($vars['messages'])) {		// Check if path Better Messages is enabled for this path		$better_messages = better_messages_process_visibility();		$access = user_access('access better messages');		if ($better_messages && $access) {			$message = $vars['messages'];			// Here comes the graceful degrade for browsers with JS disabled			$vars['messages'] = "<noscript>\n" . $_SESSION['original_messages'] . "\n</noscript>\n";			unset($_SESSION['original_messages']);			$vars['closure'] .= $message;		}	}}/*Helper function to get the settings*/function better_messages_get_settings() {	$settings = array(		'position' => 'center', 'vertical' => 0, 'horizontal' => 10, 'fixed'	=> 1,  	'width' => '400px', 'autoclose'	=> 0,	'opendelay' => 0.3,	'disable_autoclose' => 0,	  'show_countdown' => 1, 'hover_autoclose' => 1,		'popin' => array('effect' => 'fadeIn', 'duration' => 'slow'),		'popout' => array('effect' => 'fadeOut', 'duration' => 'slow'),	  'jquery_ui' => array('draggable' => 0, 'resizable' => 0),		'extra' => array(			'pages' => '',			'visibility' => 0,      'admin' => TRUE,		)	);	return variable_get('better_messages', $settings);}/*Helper function to check where to popup Better Messages relative to path*/function better_messages_process_visibility() {	$settings = better_messages_get_settings();  global $user;  if (!$settings['extra']['admin'] && $user->uid == 1) {    return FALSE;  }	if ($settings['extra']['pages']) {		$path = drupal_get_path_alias($_GET['q']);		$page_match = drupal_match_path($path, $settings['extra']['pages']);		if ($path != $_GET['q']) {			$page_match = $page_match || drupal_match_path($_GET['q'], $settings['extra']['pages']);		}		$page_match = !($settings['extra']['visibility'] xor $page_match);	}	else {  	$page_match = TRUE;  }	return $page_match;}/** * Helper function to process auto close * @return bool */function better_messages_process_autoclose($message){  $settings = better_messages_get_settings();  if (array_key_exists('error', $message) ){    if ($settings['disable_autoclose']) {      return true;    }    else {      return false;    }  }  else {    return false;  }}/** * Helper function to add required JS and CSS only when required*/function better_messages_add_files($disable_autoclose){	$settings = better_messages_get_settings();	drupal_add_js(drupal_get_path('module', 'better_messages') . '/better_messages.js');	// Remove extra info from JS	if (!module_exists('jquery_ui')) {		unset($settings['jquery_ui']);	}	else {		foreach ($settings['jquery_ui'] as $jquery_ui_setting => $value) {			if ($value == 1) {				jquery_ui_add(array('ui.' . $jquery_ui_setting));			}		}	}	unset($settings['extra']);	if ($disable_autoclose) {	  $settings['autoclose'] = 0;	}	drupal_add_js(array('betterMessages' => $settings), 'setting');}
 |