? .privatemsg.css.swp
? .privatemsg.install.swp
? .privatemsg.module.swp
? privatemsg.css
? privatemsg_system_messages.patch
Index: privatemsg.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/privatemsg/privatemsg.install,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 privatemsg.install
--- privatemsg.install	11 Aug 2006 17:59:26 -0000	1.1.2.2
+++ privatemsg.install	16 Oct 2006 08:53:14 -0000
@@ -18,6 +18,7 @@
           author_del    tinyint unsigned NOT NULL,
           recipient_del tinyint unsigned NOT NULL,
           format        int(4) NOT NULL DEFAULT '0',
+          system_msg    int(4) NOT NULL DEFAULT '0',
           key (recipient),
           key (folder)
         ) /*!40100 DEFAULT CHARACTER SET utf8 */;");
@@ -55,6 +56,7 @@
           folder        integer NOT NULL DEFAULT '0',
           author_del    smallint NOT NULL DEFAULT '0',
           recipient_del smallint NOT NULL DEFAULT '0',
+          system_msg    smallint NOT NULL DEFAULT '0',
           PRIMARY KEY (id)
         )");
       db_query("CREATE INDEX {privatemsg_folder_index} ON {privatemsg}(folder)");
@@ -134,4 +136,16 @@
 function privatemsg_update_1() {
   return _system_update_utf8(array('privatemsg', 'privatemsg_archive', 'privatemsg_folder'));
 }
+
+function privatemsg_update_2() {
+  $ret = array();
+  if (in_array($GLOBALS['db_type'], array('mysqli', 'mysql'))) {
+    $ret[] = update_sql('ALTER {privatemsg} ADD COLUMN system_msg int(4) NOT NULL DEFAULT 0');
+  }
+  elseif ($GLOBALS['db_type'] == 'pgsql') {
+    db_add_column($ret, 'privatemsg', 'system_msg', 'smallint', array('default' => 0, 'not null' => TRUE));
+  }
+  return $ret;
+
+}
 ?>
Index: privatemsg.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/privatemsg/privatemsg.module,v
retrieving revision 1.52.2.7
diff -u -r1.52.2.7 privatemsg.module
--- privatemsg.module	11 Aug 2006 22:52:44 -0000	1.52.2.7
+++ privatemsg.module	16 Oct 2006 08:53:16 -0000
@@ -61,6 +61,20 @@
 }
 
 /**
+ * Send a system message to the user.
+ */
+function privatemsg_system_message($uid, $subject, $message) {
+  global $user;
+  
+  $recipient = user_load(array('uid' => $uid));
+  if ($recipient->uid == $uid) {
+    $result = db_query("INSERT INTO {privatemsg} (author, recipient, subject, message, timestamp, newmsg, hostname, format, system_msg) VALUES ('%d', '%d', '%s', '%s', '%d', '%d', '%s', '%d', %d)", $user->uid, $uid, $subject, $message, time(), 1, getenv("REMOTE_ADDR"), 0, 1);
+  }
+
+}
+
+
+/**
  * Implementation of hook_user().
  */
 function privatemsg_user($type, &$edit, &$user, $category = NULL) {
@@ -371,7 +385,7 @@
   global $user;
 
   if ($current_folder != 1) {
-    $result = pager_query("SELECT id, subject, p.timestamp, u.uid, u.name, newmsg FROM {privatemsg} p, {users} u WHERE p.author = u.uid AND p.recipient = %d AND folder = '%s' AND p.recipient_del = 0 ORDER BY p.timestamp DESC", variable_get("privatemsg_per_page", 10), 0, NULL, $user->uid, $current_folder);
+    $result = pager_query("SELECT id, subject, p.timestamp, u.uid, u.name, newmsg, system_msg FROM {privatemsg} p, {users} u WHERE p.author = u.uid AND p.recipient = %d AND folder = '%s' AND p.recipient_del = 0 ORDER BY p.timestamp DESC", variable_get("privatemsg_per_page", 10), 0, NULL, $user->uid, $current_folder);
 
     if ($current_folder > 0) {
       $folder_name = db_result(db_query("SELECT name FROM {privatemsg_folder} WHERE fid = %d AND uid = %d", $current_folder, $user->uid));
@@ -516,14 +530,14 @@
 function _privatemsg_view($message_id) {
   global $user;
 
-  $result = db_query("SELECT p.id, u.uid, u.name, p.author, p.timestamp, p.subject, p.message, p.newmsg, p.recipient, p.format FROM {privatemsg} p, {users} u WHERE (recipient = '%d' OR author = '%d') AND author = u.uid AND id = '%d'", $user->uid, $user->uid, $message_id);
+  $result = db_query("SELECT p.id, u.uid, u.name, p.author, p.timestamp, p.subject, p.message, p.newmsg, p.recipient, p.format, p.system_msg FROM {privatemsg} p, {users} u WHERE (recipient = '%d' OR author = '%d') AND author = u.uid AND id = '%d'", $user->uid, $user->uid, $message_id);
 
   $message = db_fetch_object($result);
   if (($message->newmsg) && ($user->uid == $message->recipient)) {
     $result = db_query("UPDATE {privatemsg} SET newmsg = 0 WHERE id = %d", $message_id);
   }
-
-  return theme("privatemsg_view", $message);
+  $theme = ($message->system_msg) ?  'privatemsg_system_message_view' : 'privatemsg_view';
+  return theme($theme, $message);
 }
 
 function _privatemsg_delete($id) {
@@ -631,6 +645,37 @@
 }
 
 /**
+ Returns content to view a system message
+ 
+ @param message
+**/
+function theme_privatemsg_system_message_view($message) {
+  global $user;
+
+  if ($message) {
+    $body = '
+      <p><strong>'.t('Subject').':</strong> '.check_plain($message->subject) .'<br />
+      <strong>'.t('Date').':</strong> '. format_date($message->timestamp) .'</p>
+       <div class="privatemsgbody">
+      '. check_markup($message->message, $message->format, FALSE).
+      '</div>';
+    $links = array();
+    if (($message->recipient == $user->uid) || (variable_get("privatemsg_sent_status", 1))) {
+      $links[] = l(t('Delete this message'), "privatemsg/delete/$message->id", array('onClick' => "return confirm('".t('Are you sure to delete this message?')."')"));
+    }
+
+    $links[] = l(t('List messages'), 'privatemsg');
+    $body .= '<div class="links">'. theme('links', $links) .'</div>';
+  } 
+  else {
+    drupal_set_message(t('Error: you can\'t read this message'), 'error');
+    $body = '';
+  }
+
+  return $body;
+}
+
+/**
  Returns content to view a list of private messages
 
  @param current_folder
@@ -671,6 +716,7 @@
     }
 
     $form['messages'][$message->id] = array();
+
     $form['messages'][$message->id]['selected'] = array(
         '#type' => 'checkbox',
         );
@@ -678,10 +724,19 @@
         '#type' => 'value',
         '#value' => format_date($message->timestamp, 'small')
         );
-    $form['messages'][$message->id]['user'] = array(
-        '#type' => 'value',
-        '#value' => theme('username', $message)
-        );
+    if ($message->system_msg) {
+      $form['messages'][$message->id]['#attributes'] = array('class' => 'privatemsg-system-msg');
+      $form['messages'][$message->id]['user'] = array(
+          '#type' => 'value',
+          '#value' => t('system') 
+          );
+    }
+    else {
+      $form['messages'][$message->id]['user'] = array(
+          '#type' => 'value',
+          '#value' => theme('username', $message) 
+          );
+    }
     $form['messages'][$message->id]['subject'] = array(
         '#type' => 'value',
         '#value' => l($message->subject, 'privatemsg/view/'. $message->id) . ($new ? (' '. theme('mark')) : '')
