View source
<?php
drupal_set_message('hello');
function better_messages_help($path, $arg) {
switch ($path) {
case 'admin/config/user-interface/better-messages':
return '';
}
}
function better_messages_menu() {
$items = array();
$items['admin/config/user-interface/better-messages'] = array(
'title' => 'Better Messages settings',
'description' => 'Better handling of Drupal messages UI.',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'better_messages_admin_overview_form',
),
'access arguments' => array(
'administer better messages',
),
'file' => 'better_messages.admin.inc',
);
$items['admin/config/user-interface/better-messages/add'] = array(
'title' => 'Add skin',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'better_messages_admin_skin_form',
4,
),
'access arguments' => array(
'administer better messages',
),
'file' => 'better_messages.admin.inc',
'weight' => 1,
'type' => MENU_LOCAL_ACTION,
);
$items['admin/config/user-interface/better-messages/edit/%'] = array(
'title' => 'Edit Better Messages skin settings',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'better_messages_admin_skin_form',
4,
5,
),
'access arguments' => array(
'administer better messages',
),
'file' => 'better_messages.admin.inc',
);
$items['admin/config/user-interface/better-messages/clone/%'] = array(
'title' => 'Edit Better Messages skin settings',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'better_messages_admin_skin_form',
4,
5,
),
'access arguments' => array(
'administer better messages',
),
'file' => 'better_messages.admin.inc',
);
$items['admin/config/user-interface/better-messages/delete/%'] = array(
'title' => 'Delete skin',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'better_messages_admin_skin_delete_form',
5,
),
'access arguments' => array(
'administer better messages',
),
'file' => 'better_messages.admin.inc',
'type' => MENU_CALLBACK,
);
return $items;
}
function better_messages_permission() {
return array(
'administer better messages' => array(
'title' => t('Administer Better Messages configuration'),
'description' => t('Allows users to <a href="@href">administer Better Messages</a> site-wide configuration.', array(
'@href' => url('admin/config/user-interface/better-messages'),
)),
'restrict access' => TRUE,
),
'access better messages' => array(
'title' => t('Allow users to see Better Messages messages'),
'description' => t('If not granted, default Drupal messages will appear instead.'),
),
);
}
function better_messages_theme() {
return array(
'better_messages' => array(
'variables' => array(
'display' => null,
),
),
'better_messages_skin' => array(
'template' => 'better_messages_skin',
'variables' => array(
'messages' => null,
),
),
'better_messages_content' => array(
'variables' => array(
'display' => null,
),
),
'better_messages_admin_overview_list' => array(
'render element' => 'form',
),
);
}
function better_messages_theme_registry_alter(&$theme_registry) {
$theme_registry['status_messages']['function'] = 'theme_better_messages';
}
function _better_messages_is_visible() {
$settings = _better_messages_get_settings();
$visibility = $settings['visibility'];
if ($visibility['pages']) {
$pages = drupal_strtolower($visibility['pages']);
if ($visibility['visibility'] < 2) {
$path = drupal_strtolower(drupal_get_path_alias($_GET['q']));
$page_match = drupal_match_path($path, $pages);
if ($path != $_GET['q']) {
$page_match = $page_match || drupal_match_path($_GET['q'], $pages);
}
$page_match = !($visibility['visibility'] xor $page_match);
}
elseif (module_exists('php')) {
$page_match = php_eval($visibility['pages']);
}
else {
$page_match = FALSE;
}
}
else {
$page_match = TRUE;
}
return $page_match && user_access('access better messages');
}
function _better_messages_get_settings($skin = NULL, $all = FALSE) {
$return = array();
if ($skin) {
$results = db_select('better_messages', 'bm')
->fields('bm')
->condition('name', $skin, '=')
->execute();
}
else {
if ($all) {
$results = db_select('better_messages', 'bm')
->fields('bm')
->execute();
}
else {
return FALSE;
}
}
while ($result = $results
->fetchAssoc()) {
$return[$result['name']] = unserialize($result['data']);
}
return $return;
}
function _better_messages_add_files() {
$default_skin = variable_get('better_messages_default');
$settings = _better_messages_get_settings($default_skin);
drupal_add_css(drupal_get_path('module', 'better_messages') . '/skins/' . $settings['skin'] . '/skin.css');
drupal_add_js(drupal_get_path('module', 'better_messages') . '/better_messages.js', array(
'scope' => 'footer',
'weight' => 10,
));
if ($settings['jquery_ui']['draggable']) {
drupal_add_library('system', 'ui.draggable');
}
if (!empty($settings['animation']['popin']['easing']) || !empty($settings['animation']['popout']['easing'])) {
drupal_add_library('system', 'effects');
}
unset($settings['admin']);
drupal_add_js(array(
'betterMessages' => $settings,
), array(
'type' => 'setting',
));
}
function theme_better_messages($variables) {
$default_messages = theme('better_messages_content');
if (_better_messages_is_visible() && FALSE) {
_better_messages_add_files();
$better_messages = theme('better_messages_skin', array(
'messages' => $default_messages,
));
$default_messages = "<noscript>\n" . $default_messages . "\n</noscript>\n";
$default_messages .= "<div id=\"better-messages-wrapper\" style=\"display:none;z-index:9999;\">\n" . $better_messages . "</div>";
}
return $default_messages;
}
function theme_better_messages_content($variables) {
$display = $variables['display'];
$output = '';
$status_heading = array(
'status' => t('Status message'),
'error' => t('Error message'),
'warning' => t('Warning message'),
);
foreach (drupal_get_messages($display) as $type => $messages) {
$output .= "<div class=\"messages {$type}\">\n";
if (!empty($status_heading[$type])) {
$output .= '<h2 class="element-invisible">' . $status_heading[$type] . "</h2>\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>\n";
}
return $output;
}