? 290781_comment_notify_cleanup.patch
? comment_notify_cleanup.patch
Index: comment_notify.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/comment_notify/comment_notify.module,v
retrieving revision 1.8
diff -u -p -r1.8 comment_notify.module
--- comment_notify.module 29 Jul 2008 20:41:21 -0000 1.8
+++ comment_notify.module 4 Aug 2008 01:56:00 -0000
@@ -46,8 +46,7 @@ function comment_notify_help($section) {
}
/**
- * Insert our checkbox, and populate fields.
- * set validation hook.
+ * Insert our checkbox, add a submit button, and populate fields.
*/
function comment_notify_form_alter($form_id, &$form) {
global $user;
@@ -64,6 +63,7 @@ function comment_notify_form_alter($form
return;
}
+ // If this is a POST then it is a preview and we remind people that there post isn't done yet.
$op = isset($_POST['op']) ? $_POST['op'] : '';
if ($op == t('Preview comment')) {
@@ -86,6 +86,7 @@ function comment_notify_form_alter($form
}
}
+ // Add the checkbox for anonymous users and set the default based on admin settings.
if ($user->uid == 0) {
$form['notify'] = array(
'#type' => 'checkbox',
@@ -93,6 +94,7 @@ function comment_notify_form_alter($form
'#default_value' => ($user->uid != 0) ? $user->comment_notify_mailalert : variable_get('comment_notify_default_anon_mailalert', TRUE),
);
}
+ // For registered users and the admin wants them to see the checkbox.
elseif (variable_get('comment_notify_regged_checkbox', TRUE)) {
$form['notify'] = array(
'#type' => 'checkbox',
@@ -101,6 +103,7 @@ function comment_notify_form_alter($form
'#description' => t('You can change the default for this field in "Comment follow-up notification settings" on your account edit page', array('!uri' => url('user/'. $user->uid .'/edit'))),
);
}
+ // For the registered users where the admin wants the checkbox hidden.
else {
$form['notify'] = array(
'#type' => 'hidden',
@@ -108,7 +111,7 @@ function comment_notify_form_alter($form
'#default_value' => $user->comment_notify_mailalert,
);
}
-
+ // If this is an existing comment we set the default value based on their selection last time.
if ($form['cid']['#value'] != '') {
$notify = db_result(db_query("SELECT notify FROM {comment_notify} WHERE cid = %d", $form['cid']['#value']));
$form['notify']['#default_value'] = $notify;
@@ -116,7 +119,7 @@ function comment_notify_form_alter($form
}
/**
- * Implementation of hook_perm
+ * Implementation of hook_perm().
*/
function comment_notify_perm() {
return array('Administer comment notify', 'Subscribe to comments');
@@ -170,10 +173,12 @@ function comment_notify_menu($may_cache)
return $items;
}
+/**
+ * Page callback to allow users to unsubscribe simply by visiting the page.
+ */
function comment_notify_page() {
global $user;
- $breadcrumb = NULL;
$op = $_POST['op'];
$edit = $_POST['edit'];
@@ -197,53 +202,38 @@ function comment_notify_page() {
}
drupal_set_title($title);
- drupal_set_breadcrumb($breadcrumb);
print theme('page', $page_content);
}
/**
- * save our data.
- */
-function comment_notify_validate($form_id, $form_values) {
-
- if ($form_values['optin']) {
- foreach (array('optin') as $field) {
- $_SESSION['comment_notify'][$field] = $form_values[$field];
- }
- }
- else {
- foreach (array('optin') as $field) {
- unset($_SESSION['comment_notify'][$field]);
- }
- }
-}
-
-/**
- * implement hook_comment and check the publish status
+ * Implementation of hook_comment().
*/
function comment_notify_comment($comment, $op) {
global $user;
switch ($op) {
case 'validate':
- // We assume that if they are non-anonymous then they have a valid mail
+ // We assume that if they are non-anonymous then they have a valid mail.
+ // For anonymous users, though, we verify that they entered a mail and let comment.module validate it is real.
if (!$user->uid && $comment['notify'] && empty($comment['mail'])) {
form_set_error('mail', t('If you want to subscribe to comments you must supply a valid e-mail address.'));
}
break;
case 'publish':
+ // The real meat of the module.
_comment_notify_mailalert($comment);
break;
case 'update':
+ // In case they have changed their status, save it in the database.
$sql = 'UPDATE {comment_notify} SET notify = %d WHERE cid = %d';
db_query($sql, $comment['notify'], $comment['cid']);
break;
-
case 'insert':
+ // For new comments, we first build up a string to be used as the md5 identifier for the alert
$mail = empty($comment['mail']) ? $user->mail : $comment['mail'];
$md5_string = $mail . $user->uid . $comment['name'] . $comment['nid'];
- $sql = "INSERT INTO {comment_notify} (cid, notify, notify_hash) values (%d, %d, '%s')";
- db_query($sql, $comment['cid'], $comment['notify'], md5($md5_string));
+ // And then save the data.
+ db_query("INSERT INTO {comment_notify} (cid, notify, notify_hash) values (%d, %d, '%s')", $comment['cid'], $comment['notify'], md5($md5_string));
break;
}
}
@@ -267,9 +257,8 @@ function comment_notify_user($type, &$ed
'#type' => 'checkbox',
'#title' => t('Receive comment follow-up notification e-mails'),
'#default_value' => isset($edit['comment_notify_mailalert']) ? $edit['comment_notify_mailalert'] : 0,
- '#description' => t('Check this box to receive e-mail notification for follow-up comments to comments you posted. You can later disable this on a post-by-post basis... so if you leave this to YES, you can still disable follow-up notifications for comments you don\'t want follow-up mails anymore - i.e. for very popular posts.')
+ '#description' => t("Check this box to receive e-mail notification for follow-up comments to comments you posted. You can later disable this on a post-by-post basis... so if you leave this to YES, you can still disable follow-up notifications for comments you don't want follow-up mails anymore - i.e. for very popular posts.")
);
-
return $form;
}
@@ -277,6 +266,12 @@ function comment_notify_user($type, &$ed
}
}
+/**
+ * Private function to send the notifications.
+ *
+ * @param $comment
+ * The comment array as found in hook_comment $op = publish.
+ */
function _comment_notify_mailalert($comment) {
$comment = (object) $comment;
global $locale;
@@ -291,12 +286,9 @@ function _comment_notify_mailalert($comm
$nid = $comment->nid;
$cid = $comment->cid;
- $commname = $comment->name;
- $commtext = $comment->comment;
- $commsubj = $comment->subject;
$node = node_load($nid);
if (!isset($comment->mail)) {
- $comment_account = user_load(array('name' => $commname));
+ $comment_account = user_load(array('name' => $comment->name));
$comment_mail = $comment_account->mail;
}
else {
@@ -327,9 +319,9 @@ function _comment_notify_mailalert($comm
$message = t(
variable_get('comment_notify_default_mailtext', DEFAULT_MAILTEXT),
array(
- '!commname' => $commname,
- '!commtext' => $commtext,
- '!commsubj' => $commsubj,
+ '!commname' => $comment->name,
+ '!commtext' => $comment->comment,
+ '!commsubj' => $comment->subject,
'!comment_url' => url('node/'. $nid, NULL, NULL, 1) .'#comment-'. $cid,
'!node_title' => $node->title,
'!node_teaser' => $node->teaser,
@@ -353,7 +345,6 @@ function _comment_notify_mailalert($comm
if ($alert->uid != 0) {
$watchdog_message = t('Notified: @user_mail',
array('!url' => url('user/'. $alert->uid .'/edit'), '@user_mail' => $mail)) ;
-
}
else {
$watchdog_message = t('Notified @user_mail', array('@user_mail' => $mail));
@@ -370,7 +361,7 @@ function _comment_notify_mailalert($comm
}
/**
- * Callback for a form to unsubscribe users.
+ * Callback for an administrative form to unsubscribe users by e-mail address.
*/
function comment_notify_unsubscribe() {
$form['comment_notify_unsubscribe'] = array();
@@ -386,7 +377,7 @@ function comment_notify_unsubscribe() {
}
/**
- * Actual unsubscribe of users.
+ * Based on admin submit, do the actual unsubscribe from notifications.
*/
function comment_notify_unsubscribe_submit($form_id, $form_values) {
$email = trim($form_values['email_to_unsubscribe']);