'Outgoing Mail log entries', 'description' => 'View Mails that have been sent from this site.', 'page callback' => 'mail_logger_overview', 'access arguments' => array('access mail logger'), 'type' => MENU_NORMAL_ITEM, ); $items['admin/reports/mail-logger/mail/%'] = array( 'title' => 'Outgoing Mail log entries', 'description' => 'View information about a single logged mail entry', 'page callback' => 'mail_logger_read_mail', 'page arguments' => array(4), 'access arguments' => array('access mail logger'), 'type' => MENU_CALLBACK, ); return $items; } function mail_logger_theme() { return array( 'mail_logger_read_mail' => array( 'arguments' => array('mlid' => NULL), ), ); } function mail_logger_read_mail($id) { if (!isset($id) || !is_numeric($id)) { return 'Invalid Mail Logger ID parameter'; } elseif ($result = db_query_range('SELECT * FROM {mail_logger} WHERE mlid = %d', $id, 0, 1)) { drupal_add_css(drupal_get_path('module', 'mail_logger') .'/mail_logger.css'); return theme('mail_logger_read_mail', db_fetch_object($result)); } else { return 'No Mail Logger record found with id '. $id; } } function theme_mail_logger_read_mail($mail) { $output = ''; $output .= '
'; $output .= '
Mail Type:
'. $mail->mailkey .'
'; $output .= '
Date Sent:
'. format_date($mail->date_sent, 'small') .'
'; $output .= '
From:
'. $mail->from .'
'; $output .= '
To:
'. $mail->to .'
'; $output .= '
Subject:
'. $mail->subject .'
'; $output .= '
Body:
'. nl2br($mail->body) .'
'; $output .= '
'; return $output; } /** * Implementation of hook_mail_alter(). * * Purpose of this function is to log all outgoing mail */ function mail_logger_mail_alter(&$message) { //this line taken from mail.inc:drupal_mail() $message['body'] = is_array($message['body']) ? drupal_wrap_mail(implode("\n\n", $message['body'])) : drupal_wrap_mail($message['body']); $args = array( $message['id'], $message['to'], $message['subject'], $message['body'], $message['from'], serialize($message['headers']), time(), $message['language']->language, ); db_query("INSERT INTO {mail_logger} ( `mlid` , `mailkey` , `to` , `subject` , `body` , `from` , `headers`, `date_sent`, `language` ) VALUES ( NULL, '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s' )", $args); } /** * Returns types of mailkeys in mail_logger table * */ function _mail_logger_get_mailkey_types() { $types = array(); $result = db_query('SELECT DISTINCT(mailkey) FROM {mail_logger} ORDER BY mailkey'); while ($object = db_fetch_object($result)) { $types[] = $object->mailkey; } return $types; } function mail_logger_form_overview() { $names['all'] = t('all mail types'); foreach (_mail_logger_get_mailkey_types() as $type) { $names[$type] = t('!type', array('!type' => t($type))); } if (empty($_SESSION['mail_logger_overview_filter'])) { $_SESSION['mail_logger_overview_filter'] = 'all'; } $form['filter'] = array( '#type' => 'select', '#title' => t('Filter by Mailkey'), '#options' => $names, '#default_value' => $_SESSION['mail_logger_overview_filter'] ); $form['submit'] = array('#type' => 'submit', '#value' => t('Filter')); $form['#redirect'] = FALSE; return $form; } /** * hook_submit for mail_logger_form_overview * */ function mail_logger_form_overview_submit($form, &$form_state) { $_SESSION['mail_logger_overview_filter'] = $form_state['values']['filter']; } /** * theme function for mail_logger_form_overview * */ function theme_mail_logger_form_overview($form) { return '
'. drupal_render($form) .'
'; } function theme_mail_logger_clear_form($form) { return '
'; } /** * Menu callback; displays a listing of log mails. */ function mail_logger_overview() { $output = drupal_get_form('mail_logger_form_overview'); $output .= drupal_get_form('mail_logger_clear_form'); $header = array( array('data' => t('Date Sent'), 'field' => 'ml.date_sent', 'sort' => 'desc'), array('data' => t('Mailkey'), 'field' => 'ml.mailkey'), array('data' => t('Language'), 'field' => 'ml.language'), array('data' => t('To'), 'field' => 'ml.to'), array('data' => t('From'), 'field' => 'ml.from'), array('data' => t('Subject'), 'field' => 'ml.subject'), ); $tablesort = tablesort_sql($header); $sql = "SELECT ml.mlid, ml.mailkey, ml.language, ml.to, ml.from, ml.subject, ml.date_sent FROM {mail_logger} ml"; $type = $_SESSION['mail_logger_overview_filter']; if ($type != 'all') { $result = pager_query($sql ." WHERE ml.mailkey = '%s'". $tablesort, 50, 0, NULL, $type); } else { $result = pager_query($sql . $tablesort, 50); } $rows = array(); while ($mail_logger = db_fetch_object($result)) { $rows[] = array('data' => array( // Cells format_date($mail_logger->date_sent, 'small'), $mail_logger->mailkey, $mail_logger->language, $mail_logger->to, $mail_logger->from, l(truncate_utf8($mail_logger->subject, 56, TRUE, TRUE), 'admin/reports/mail-logger/mail/'. $mail_logger->mlid ), ), ); } if (!$rows) { $rows[] = array(array('data' => t('No log messages available.'), 'colspan' => 6)); } $output .= theme('table', $header, $rows); $output .= theme('pager', NULL, 50, 0); return $output; } /* * clear log * */ function mail_logger_clear_form($form_state) { $form['submit'] = array( '#type' => 'submit', '#value' => t('Clear log')); $form['#redirect'] = FALSE; return $form; } function mail_logger_clear_form_submit($form, &$form_state) { db_query('TRUNCATE TABLE {mail_logger}'); drupal_set_message(t('Mail log cleared.')); }