? privatemsg.php
Index: privatemsg.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/privatemsg/privatemsg.module,v
retrieving revision 1.37
diff -u -r1.37 privatemsg.module
--- privatemsg.module	25 Nov 2004 06:24:59 -0000	1.37
+++ privatemsg.module	28 Nov 2004 15:11:10 -0000
@@ -16,7 +16,7 @@
  */
 function privatemsg_link($type, $arg) {
   if (user_access('access private messages') && ($type == 'node' || $type == 'comment') && variable_get("privatemsg_link_$type", 0)) {
-    if (user_access('access private messages', $arg)) {
+    if (user_access('access private messages', $arg) && $arg->privatemsg_allow) {
       return array(l(t('write to author'), "privatemsg/msgto/$arg->uid"));
     }
   }
@@ -44,18 +44,18 @@
 function privatemsg_user($type, $edit, &$user, $category) {
   switch ($type) {
     case 'view':
-      if (user_access('access private messages')) {
+      if (user_access('access private messages') && $user->privatemsg_allow) {
         return array(t('History') => form_item(t('Private messages'), l(t('send private message'), "privatemsg/msgto/$user->uid")));
       }
       else if ($GLOBALS['user']->uid) {
         return;
       }
       else {
-        if (variable_get('user_register', 1)) {
-          return array(t('History') => form_item(t('Private messages'), t('<a href="%login">login</a> or <a href="%register">register</a> to send private messages', array('%login' => url('user/login'), '%register' => url('user/register')))));
+        if (variable_get('user_register', 1) && $user->privatemsg_allow) {
+          return array(t('History') => form_item(t('Private messages'), t('<a href="%login">login</a> or <a href="%register">register</a> to send private messages to this user', array('%login' => url('user/login'), '%register' => url('user/register')))));
         }
         else {
-          return array(t('History') => form_item(t('Private messages'), t('<a href="%login">login</a> to send private messages', array('%login' => url('user/login')))));
+          return array(t('History') => form_item(t('Private messages'), t('<a href="%login">login</a> to send private messages to this user', array('%login' => url('user/login')))));
         }
       }
     case 'validate':
@@ -67,7 +67,9 @@
       }
     case 'form':
       if (user_access('access private messages') && $category == 'account') {
-        return array(array('title' => t('Private message settings'), 'data' => form_checkbox(t('Receive daily e-mail for unread messages'), 'privatemsg_mailalert', 1, $user->privatemsg_mailalert, t('Check this box to receive e-mail notification for unread messages. Only one e-mail will be sent per day.'))));
+        $output = form_checkbox(t('Allow private messages'), 'privatemsg_allow', 1, $edit->privatemsg_allow ? $edit->privatemsg_allow : $user->privatemsg_allow, t('Check this box to allow users to send you private messages.'));
+        $output .= form_checkbox(t('Receive daily e-mail for unread messages'), 'privatemsg_mailalert', 1, $edit->privatemsg_mailalert ? $edit->privatemsg_mailalert : $user->privatemsg_mailalert, t('Check this box to receive e-mail notification for unread messages. Only one e-mail will be sent per day.'));
+        return array(array('title' => t('Private message settings'), 'data' => $output));
       }
   }
 }
@@ -136,7 +138,7 @@
   while ($alert = db_fetch_object($result)) {
     $user = user_load(array('uid' => $alert->recipient));
 
-    if ($user->privatemsg_mailalert) {
+    if ($user->privatemsg_mailalert && $user->privatemsg_allow) {
       // use each user's individual locale
       if (function_exists('locale') && $languages[$user->language]) {
         $locale = $user->language;
@@ -371,18 +373,19 @@
     drupal_set_message(t('Warning: every field required'), 'error');
     return _privatemsg_form(array2object($edit));
   }
-  elseif ($recipient == $user->uid) {
-    drupal_set_message(t('A message to yourself?'), 'error');
-    return _privatemsg_form(array2object($edit));
-  }
   else {
     if ($recipient) {
+      $account = user_load(array('uid' => $recipient));
+      if (!$account->privatemsg_allow) {
+        form_set_error('recipient', t('%name does not accept private messages.', array('%name' => $account->name)));
+        return _privatemsg_form(array2object($edit));
+      }
       $result = db_query("INSERT INTO {privatemsg} (author, recipient, subject, message, timestamp, new, hostname) VALUES ('%d', '%d', '%s', '%s', '%d', '%d', '%s')", $user->uid, $recipient, strip_tags($edit['subject']), strip_tags($edit['message']), time(), 1, getenv("REMOTE_ADDR"));
       drupal_set_message(t('Message sent.'));
       return _privatemsg_list();
     }
     else {
-      drupal_set_message(t('Warning: user does not exist'), 'error');
+      form_set_error('recipient', t('Recipient does not exist'), 'error');
       return _privatemsg_form(array2object($edit));
     }
   }
