Index: notices.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/notices/notices.info,v
retrieving revision 1.7
diff -u -r1.7 notices.info
--- notices.info 21 Jul 2008 00:20:23 -0000 1.7
+++ notices.info 8 Oct 2008 19:42:27 -0000
@@ -1,8 +1,4 @@
; $Id: notices.info,v 1.7 2008/07/21 00:20:23 ptalindstrom Exp $
name = Notices
-description = Provides a web based notice system for all emails sent to a user.
+description = Provides a web-based duplicate for all emails sent to a user.
package = Mail
-version = 5.x-1.0
-#dependencies =
-project = drupal
-
Index: notices.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/notices/notices.install,v
retrieving revision 1.7
diff -u -r1.7 notices.install
--- notices.install 21 Jul 2008 00:20:23 -0000 1.7
+++ notices.install 8 Oct 2008 19:42:27 -0000
@@ -1,5 +1,5 @@
Index: notices.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/notices/notices.module,v
retrieving revision 1.8
diff -u -r1.8 notices.module
--- notices.module 2 Oct 2008 19:04:46 -0000 1.8
+++ notices.module 8 Oct 2008 19:42:28 -0000
@@ -1,51 +1,45 @@
uid) && !count(drupal_get_messages('notices'))) {
- drupal_add_css(drupal_get_path('module', 'notices') . "/notices.css");
- drupal_set_message("You have notices. You can check them out ". l("here", "user/". $user->uid . "/notices"), 'notices');
+ drupal_add_css(drupal_get_path('module', 'notices') ."/notices.css");
+ drupal_set_message(l(t('You have notices.'), "user/". $user->uid ."/notices"), 'status');
}
-
+
// if admin set to show notice indication on EVERY page - do it here
- elseif (variable_get('notices_message_type', false) === '2'
+ elseif (variable_get('notices_message_type', FALSE) === '2'
&& _notices_user_has_notices($user->uid) && !count(drupal_get_messages('notices'))) {
- drupal_add_css(drupal_get_path('module', 'notices') . "/notices.css");
- drupal_set_message("You have notices. You can check them out ". l("here", "user/". $user->uid . "/notices"), 'notices');
+ drupal_add_css(drupal_get_path('module', 'notices') ."/notices.css");
+ drupal_set_message(l(t('You have notices.'), "user/". $user->uid ."/notices"), 'status');
}
}
-
+
// if admin set to show notice indication on LOGIN page - do it in _user hook
-
+
$items = array();
if ($may_cache) {
$items[] = array(
@@ -55,28 +49,28 @@
'callback' => 'drupal_get_form',
'callback arguments' => array('notices_admin_settings'),
'access' => user_access('administer site configuration'),
- 'type' => MENU_NORMAL_ITEM,
+ 'type' => MENU_NORMAL_ITEM
);
- }
+ }
else {
//user tab to show notices
$items[] = array(
- 'path' => 'user/' .arg(1). '/notices',
- 'title' => t('Notices'),
- 'callback' => '_notices_user_show_page',
- 'callback arguments' => array(arg(1)),
- 'access' => user_access('receive notices') && ($user->uid == arg(1) || user_access('administer site configuration')) ? 1 : 0,
- 'type' => MENU_LOCAL_TASK,
- );
-
+ 'path' => 'user/'. arg(1) .'/notices',
+ 'title' => t('Notices'),
+ 'callback' => '_notices_user_show_page',
+ 'callback arguments' => array(arg(1)),
+ 'access' => user_access('receive notices') && ($user->uid == arg(1) || user_access('administer site configuration')) ? 1 : 0,
+ 'type' => MENU_LOCAL_TASK
+ );
+
// and a page to show the actual message
$items[] = array(
- 'path' => 'user/' .arg(1). '/notices/' . arg(3),
- 'title' => t('Notices'),
- 'callback' => '_notices_user_show_notice',
- 'callback arguments' => array(arg(3)),
- 'access' => user_access('receive notices') && ($user->uid == arg(1) || user_access('administer site configuration')) ? 1 : 0,
- 'type' => MENU_LOCAL_TASK,
+ 'path' => 'user/'. arg(1) .'/notices/'. arg(3),
+ 'title' => t('Notices'),
+ 'callback' => '_notices_user_show_notice',
+ 'callback arguments' => array(arg(3)),
+ 'access' => user_access('receive notices') && ($user->uid == arg(1) || user_access('administer site configuration')) ? 1 : 0,
+ 'type' => MENU_LOCAL_TASK
);
}
@@ -85,7 +79,7 @@
// System Admin Form - callback for menu item listed above
function notices_admin_settings() {
- // system settings
+ // system settings
$options = array(
0 => "Home page only",
1 => "Only when logging in",
@@ -97,14 +91,14 @@
'#title' => t('Message indictation type'),
'#default_value' => variable_get('notices_message_type', 0),
'#description' => t("Set how it is indicated to users that they have notices."),
- );
+ );
$form['notices_expiry'] = array(
'#type' => 'select',
'#options' => range(0, 52),
'#title' => t('Expiry time'),
'#default_value' => variable_get('notices_expiry', 0),
'#description' => t("Enter the number of weeks until notices auto-expire. Enter 0 for no expiry."),
- );
+ );
$form['notices_block_display'] = array(
'#type' => 'radios',
'#options' => array(0 => "Show empty block", 1 => "Hide empty block"),
@@ -117,32 +111,34 @@
}
/**
- * Implementation of hook_user()
- *
+ * Implementation of hook_user().
+ *
* - if our admin setting is set to show notice indication only on login: do it here.
*/
function notices_user($op, &$edit, &$account, $category = NULL) {
- if ($account->uid && !user_access('receive notices', $account)) return;
-
- switch ($op) {
+ if ($account->uid && !user_access('receive notices', $account)) {
+ return;
+ }
+
+ switch ($op) {
case 'categories':
return array(array('name' => 'notices', 'title' => 'Notices'));
break;
-
+
case 'login':
- if (_notices_user_has_notices($account->uid) && variable_get('notices_message_type', false) === '1'
+ if (_notices_user_has_notices($account->uid) && variable_get('notices_message_type', FALSE) === '1'
&& !count(drupal_get_messages('notices'))) {
- drupal_add_css(drupal_get_path('module', 'notices') . "/notices.css");
- drupal_set_message("You have notices. You can check them out ". l("here", "user/". $account->uid . "/notices"), 'notices');
+ drupal_add_css(drupal_get_path('module', 'notices') ."/notices.css");
+ drupal_set_message(l(t('You have notices.'), "user/". $account->uid ."/notices"), 'status');
}
break;
-
+
case 'form':
if ($category != "notices") return;
$form['notices_preferences'] = array(
'#type' => 'fieldset',
- '#title' => t('Notices - User preferences for the Notices module'),
- '#collapsible' => false,
+ '#title' => t('Notices - User preferences for the Notices module'),
+ '#collapsible' => FALSE,
'#weight' => 10
);
$form['notices_preferences']['notices_delete_on_read'] = array(
@@ -152,18 +148,18 @@
);
break;
}
-
+
return $form;
}
/**
- * Implementation of hook_block.
+ * Implementation of hook_block().
*
* provide list of user's most recent notices
*/
function notices_block($op = 'list', $delta = 0) {
global $user;
-
+
switch ($op) {
case 'list':
$block[0]['info'] = t('Latest Notices');
@@ -181,11 +177,11 @@
* Page view of users messages.
*/
function _notices_user_show_page($uid) {
- $account = user_load(array('uid'=>arg(1)));
- drupal_set_title($account->name);
-
- $output = "
The following email have been previously sent to ". $account->mail .".";
-
+ $account = user_load(array('uid' => arg(1)));
+ drupal_set_title($account->name);
+
+ $output = "
The following emails have been previously sent to {$account->mail}.";
+
// Call the form first, to allow for the form_values array to be populated.
$output .= drupal_get_form('_notices_page_form', $uid);
@@ -193,18 +189,18 @@
}
function _notices_page_form($uid) {
- $result = pager_query("SELECT * FROM {notices} WHERE uid = $uid ORDER BY created DESC", 50);
-
+ $result = pager_query("SELECT * FROM {notices} WHERE uid = %d ORDER BY created DESC", 50, NULL, NULL, $uid);
+
$form['submit'] = array('#type' => 'submit', '#value' => t('Mark as Read'));
-
+
$destination = drupal_get_destination();
while ($notice = db_fetch_object($result)) {
$notices[$notice->nid] = '';
- $form['title'][$notice->nid] = array('#value' => l($notice->subject, "user/$uid/notices/". $notice->nid, array(), $destination));
- $form['message'][$notice->nid] = array('#value' => wordwrap(substr(strip_tags($notice->message), 0, 160), 80, "
"));
+ $form['title'][$notice->nid] = array('#value' => l($notice->subject, "user/$uid/notices/". $notice->nid, array(), $destination));
+ $form['message'][$notice->nid] = array('#value' => wordwrap(substr(strip_tags($notice->message), 0, 160), 80, "
"));
$form['date'][$notice->nid] = array('#value' => date("m-d-Y", $notice->created));
}
- $form['nodes'] = array('#type' => 'checkboxes', '#options' => $notices);
+ $form['notices'] = array('#type' => 'checkboxes', '#options' => $notices);
$form['pager'] = array('#value' => theme('pager', NULL, 50, 0));
return $form;
}
@@ -214,20 +210,20 @@
*/
function theme__notices_page_form($form) {
// Overview table:
- $header = array(theme('table_select_header_cell'), t('Subject'), t('Message'),t('Date'));
-
+ $header = array(theme('table_select_header_cell'), t('Subject'), t('Message'), t('Date'));
+
$output = drupal_render($form['submit']);
if (isset($form['title']) && is_array($form['title'])) {
foreach (element_children($form['title']) as $key) {
$row = array();
- $row[] = drupal_render($form['nodes'][$key]);
+ $row[] = drupal_render($form['notices'][$key]);
$row[] = drupal_render($form['title'][$key]);
- $row[] = drupal_render($form['message'][$key]);
+ $row[] = drupal_render($form['message'][$key]);
$row[] = drupal_render($form['date'][$key]);
$rows[] = $row;
}
}
- else {
+ else {
$rows[] = array(array('data' => t('You have no unread messages.'), 'colspan' => '3'));
}
@@ -239,105 +235,128 @@
$output .= drupal_render($form);
return $output;
-}
+}
+
+/**
+ * Make sure some notice IDs are being passed to the remover.
+ */
+function _notices_page_form_validate($form_id, $form_values) {
+ // Filter out unchecked nodes
+ $notices = array_filter($form_values['notices']);
+
+ if (!$notices) {
+ form_set_error('notices', t('You need to mark 1 or more messages.'));
+ }
+}
/**
* Submit the node administration update form.
*/
function _notices_page_form_submit($form_id, $form_values) {
// Filter out unchecked nodes
- $notices = array_filter($form_values['nodes']);
-
- if ($notices) {
- foreach ($notices as $notice) $where[] = " nid = $notice ";
- $where_str = join(" OR ", $where);
- db_query("DELETE FROM {notices} WHERE $where_str");
-
- drupal_set_message(t('Messages have been marked as read.'));
+ $notices = array_filter($form_values['notices']);
+
+ foreach ($notices as $notice) {
+ $where[] = " nid = $notice ";
}
- else drupal_set_message(t('You need to mark 1 or more messages.'));
-}
+ $where_str = join(" OR ", $where);
+ db_query("DELETE FROM {notices} WHERE $where_str");
+
+ drupal_set_message(t('Messages have been marked as read.'));
+}
function _notices_user_show_block() {
global $user;
- $results = db_query("SELECT * FROM {notices} WHERE uid = %d ORDER BY created DESC LIMIT 5", $user->uid);
+ $results = db_query_range("SELECT * FROM {notices} WHERE uid = %d ORDER BY created DESC", $user->uid, 0, 5);
- while ($result = db_fetch_object($results)) $list[] = l($result->subject, "user/$user->uid/notices/". $result->nid);
-
- if (count($list)) return theme('item_list', $list) .'
You have no notices.
"); + if (variable_get('notices_block_display', 1)) { + return FALSE; + } + else { + return t("You have no notices.
"); + } } - + } -/* -* Display a single notice -* - if this is users msg then mark it as read -*/ +/** + * Display a single notice + * - if this is users msg then mark it as read + */ function _notices_user_show_notice($nid) { global $user; - - $account = user_load(array('uid'=>arg(1))); + + $account = user_load(array('uid' => arg(1))); drupal_set_title($account->name); - + $notice = db_fetch_object(db_query("SELECT * FROM {notices} WHERE nid = %d", $nid)); - - $output = "';
- $output .= "Subject: ". $notice->subject ."
";
- $output .= "From: ". $notice->sender ."
";
- $output .= "Date: ". date("M d, Y", $notice->created) ."
";
- $output .= "Message: ". _filter_autop($notice->message) ."
";
-
+
+ $output = "
The following email has been previously sent to {$account->mail}.
";
+
+ $output .= '
';
+ $output .= "Subject: ". $notice->subject ."
";
+ $output .= "From: ". $notice->sender ."
";
+ $output .= "Date: ". date("M d, Y", $notice->created) ."
";
+ $output .= "Message: ". _filter_autop($notice->message) ."
";
+
// if we are reading our own msg (i.e. not admin doing it) then lets mark it as read by deleting from db
// - unless our user pref is set not to "delete on read"
if (arg(1) == $user->uid && (!isset($account->notices_delete_on_read) || $account->notices_delete_on_read)) {
- db_query("DELETE FROM {notices} WHERE nid = ". arg(3));
- drupal_set_message("This message has now been marked as read.");
+ db_query("DELETE FROM {notices} WHERE nid = %d", arg(3));
+ drupal_set_message("This message has now been marked as read.");
}
-
+
return $output;
}
-/*
-* Capture any mail that is being sent and log it as a Notice for that user
-*/
+/**
+ * Capture any mail that is being sent and log it as a Notice for that user
+ */
function notices_mail_alter($mailkey, $to, $subject, $body, $from, $headers) {
// load the user that is getting this email
$user = user_load(array('mail' => $to));
-
+
// if this email address does not match with a user in our system; do nothing
- if (!$user->uid || !user_access('receive notices', $user)) return;
-
+ if (!$user->uid || !user_access('receive notices', $user)) return;
+
$subject = htmlentities($subject);
$from = htmlentities($from);
$message = stristr($body, "") ? $body : htmlentities($body);
-
+
db_query("INSERT INTO {notices} (uid, subject, sender, message, created) VALUES (%d, '%s', '%s', '%s', %d)", $user->uid, $subject, $from, $message, time());
}
// helper function to check if a user has notices
function _notices_user_has_notices($uid) {
- $result = db_query("SELECT * FROM {notices} WHERE uid = $uid");
-
- if (db_num_rows($result)) return true;
- else return false;
+ $result = db_query("SELECT * FROM {notices} WHERE uid = %d", $uid);
+
+ if (db_num_rows($result)) {
+ return TRUE;
+ }
+ else {
+ return FALSE;
+ }
}
// cron hook to auto-expire notices
function notices_cron() {
$expire = variable_get('notices_expiry', 0);
-
+
if (!$expire) return;
-
+
db_query("DELETE FROM {notices} WHERE %d > created", time() - ($expire * 60*60*24*7));
- return;
+ return;
}
-
+