Index: mail.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project_issue/mail.inc,v
retrieving revision 1.118
diff -u -F^f -u -F^f -r1.118 mail.inc
--- mail.inc	29 Jan 2009 22:01:31 -0000	1.118
+++ mail.inc	17 Feb 2009 04:49:42 -0000
@@ -347,6 +347,50 @@ function project_issue_mail($key, &$mess
       $message['body'][] = project_mail_generate_followup_mail_body($node, $history, $params['display_files']);
 
       break;
+    case 'project_issue_critical_summary':
+      $project = $params['project'];
+
+      $message['headers'] += array(
+        'Date' => date('r'),
+        'X-Mailer' => 'Drupal Project Issues module (http://drupal.org/project/project_issue)',
+        'List-Id' => "$project->title <". preg_replace('|.+://([a-zA-Z0-9\._-]+).*|', '\1', $base_url) .'-project-issues-digest>',
+        'List-Archive' => '<'. url('project/issues', array('query' => array('priorities' => '1'), 'absolute' => TRUE)) .'>',
+      );
+
+      $category = '';
+      $body = '';
+      $issues = db_query(db_rewrite_sql('SELECT p.nid, n.title, n.created, p.sid, p.category, p.component, p.priority, p.assigned, u.name AS assigned_name FROM {project_issues} p INNER JOIN {node} n ON p.nid = n.nid INNER JOIN {users} u ON u.uid = p.assigned WHERE n.status = 1 AND p.pid = %d AND p.sid = 1 AND p.priority = 1 ORDER BY p.category, n.created DESC', 'p'), $project->nid);
+      while ($node = db_fetch_object($issues)) {
+        if ($category != $node->category) {
+          $category = $node->category;
+          $banner = "$project->title / ". project_issue_category($node->category);
+          $body .= "$banner\n". str_repeat('-', $banner) ."\n";
+        }
+        $body .= "$node->title\n";
+        if ($node->assigned) {
+          $body .= '  assigned: '. $node->assigned_name ."\n";
+        }
+        $body .= '  age: '. format_interval(time() - $node->created) ."\n";
+        $body .= '  url: '. url("node/$node->nid", array('absolute' => TRUE)) ."\n";
+        $body .= "\n";
+      }
+      $message['subject'] = t('Release critical bugs for !date', array('!date' => date('F d, Y', time())));
+      $message['body'][] = $body;
+      break;
+    case 'project_issue_reminder':
+      $sender->name = variable_get('site_name', '');
+      $sender->mail = variable_get('site_mail', '');
+      $message['headers'] += array(
+        'Return-Path' => "<$sender->mail;>",
+        'Date' => date('r'),
+        'From' => "$sender->name <$sender->mail>",
+        'X-Mailer' => 'Drupal Project Issues module (http://drupal.org/project/project_issue)',
+        'List-Id' => "$sender->name <project-reminder-". preg_replace('|.+://([a-zA-Z0-9\._-]+).*|', '\1', $base_url) .'>',
+        'List-Archive' => '<'. url('project', array('absolute' => TRUE)) .'>',
+      );
+      $message['subject'] = t('Your submitted bugs for !date', array('!date' => date('F d, Y', time())));
+      $message['body'][] = $params['body'];
+      break;
   }
 }
 
Index: includes/cron.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project_issue/includes/cron.inc,v
retrieving revision 1.3
diff -u -F^f -u -F^f -r1.3 cron.inc
--- includes/cron.inc	20 Jan 2009 18:38:04 -0000	1.3
+++ includes/cron.inc	17 Feb 2009 04:49:43 -0000
@@ -6,7 +6,7 @@
  * @file
  * Contains the code required during cron runs for periodic functionality.
  *
- * This code is either invoked via hook_cron() or project-issue-cron.php 
+ * This code is either invoked via hook_cron() or project-issue-cron.php
  * depending on the value of the 'project_issue_hook_cron' variable.
  */
 
@@ -56,7 +56,6 @@ function project_issue_auto_close() {
 }
 
 function project_mail_reminder() {
-  global $base_url;
 
   if (defined('PROJECT_NOMAIL')) {
     return;
@@ -68,26 +67,19 @@ function project_mail_reminder() {
     $projects[$project->nid] = $project->title;
     $pids[] = "p.pid = $project->nid";
   }
-  if (count($projects)) {
 
-    $sender->name = variable_get('site_name', '');
-    $sender->mail = variable_get('site_mail', '');
+  if (count($projects)) {
 
-    $result = db_query(db_rewrite_sql('SELECT p.nid, n.*, p.*, u.name, u.mail FROM {project_issues} p INNER JOIN {node} n ON p.nid = n.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.status = 1 AND u.status = 1 AND ('. implode(' OR ', $pids) .") AND u.mail <> '' AND (p.sid = 1 OR p.sid = 2) ORDER BY u.uid, p.pid, p.component, p.sid, n.changed DESC", 'p'));
+    $result = db_query(db_rewrite_sql('SELECT p.nid, n.*, p.*, u.name, u.mail, u.language FROM {project_issues} p INNER JOIN {node} n ON p.nid = n.nid INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {users} u2 ON u2.uid = p.assigned AS assigned_name WHERE n.status = 1 AND u.status = 1 AND ('. implode(' OR ', $pids) .") AND u.mail <> '' AND (p.sid = 1 OR p.sid = 2) ORDER BY u.uid, p.pid, p.component, p.sid, n.changed DESC", 'p'));
 
     while (($node = db_fetch_object($result)) || !empty($body)) {
       if ($body && $mail && ((!$node) || ($mail != $node->mail))) {
-        $header = array(
-          'Return-Path' => "<$sender->mail;>",
-          'Date' => date('r'),
-          'From' => "$sender->name <$sender->mail>",
-          'X-Mailer' => 'Drupal Project Issues module (http://drupal.org/project/project_issue)',
-          'List-Id' => "$sender->name <project-reminder-". preg_replace('|.+://([a-zA-Z0-9\._-]+).*|', '\1', $base_url) .'>',
-          'List-Archive' => '<'. url('project', array('absolute' => TRUE)) .'>',
-        );
-
-        drupal_mail('project_issue_reminder', $mail, t('Your submitted bugs for !date', array('!date' => date('F d, Y', time()))), $body, NULL, $header);
-
+        // We can pass $project here because user_preferred_language()
+        // only needs $account->language to function, and we have that
+        // loaded into the $node object.
+        $language = user_preferred_language($node);
+        $params['body'] = $body;
+        drupal_mail('project_issue', 'project_issue_reminder', $mail, $language, $params);
         $body = '';
       }
       $mail = $node->mail;
@@ -100,8 +92,8 @@ function project_mail_reminder() {
           $body .= "[ $banner ]". str_repeat('=', 72 - 4 - strlen($banner)) ."\n";
         }
         $body .= "$node->title\n";
-        if ($node->assigned && $assigned = user_load(array('uid' => $node->assigned))) {
-          $body .= "  assigned: $assigned->name\n";
+        if ($node->assigned) {
+          $body .= "  assigned: $node->assigned_name\n";
         }
         $body .= '  state: '. project_issue_state($node->sid) ."\n";
         $body .= '  age: '. format_interval(time() - $node->created) ."\n";
@@ -113,45 +105,18 @@ function project_mail_reminder() {
 }
 
 function project_mail_digest() {
-  global $base_url;
-
   if (defined('PROJECT_NOMAIL')) {
     return;
   }
 
-  $body = array();
-  $header = array(
-    'Date' => date('r'),
-    'X-Mailer' => 'Drupal Project Issues module (http://drupal.org/project/project_issue)',
-    'List-Id' => "$project->title <". preg_replace('|.+://([a-zA-Z0-9\._-]+).*|', '\1', $base_url) .'-project-issues-digest>',
-    'List-Archive' => '<'. url('project/issues?priorities=1', array('absolute' => TRUE)) .'>',
-  );
+  $projects = db_query(db_rewrite_sql("SELECT n.nid, n.title, p.*, u.language FROM {node} n INNER JOIN {project_issue_projects} p ON n.nid = p.nid INNER JOIN {users} u ON u.uid = n.uid WHERE n.status = 1 AND p.mail_digest <> '' ORDER BY n.title, p.mail_digest"));
+  while ($project = db_fetch_object($projects)) {
 
-  $result = db_query(db_rewrite_sql("SELECT n.nid, n.title, p.* FROM {node} n INNER JOIN {project_issue_projects} p ON n.nid = p.nid WHERE n.status = 1 AND p.mail_digest <> '' ORDER BY n.title, p.mail_digest"));
-  while ($project = db_fetch_object($result)) {
-    $category = '';
-    $result2 = db_query(db_rewrite_sql('SELECT p.nid, n.title, n.created, p.sid, p.category, p.component, p.priority, p.assigned FROM {project_issues} p INNER JOIN {node} n ON p.nid = n.nid WHERE n.status = 1 AND p.pid = %d AND p.sid = 1 AND p.priority = 1 ORDER BY p.category, n.created DESC', 'p'), $project->nid);
-    while ($node = db_fetch_object($result2)) {
-      if ($category != $node->category) {
-        $category = $node->category;
-        $banner = "$project->title / ". project_issue_category($node->category);
-        $body[$project->mail_digest] .= "$banner\n". str_repeat('-', $banner) ."\n";
-      }
-      $body[$project->mail_digest] .= "$node->title\n";
-      if ($node->assigned && $assigned = user_load(array('uid' => $node->assigned))) {
-        $body[$project->mail_digest] .= '  assigned: '. $assigned->name ."\n";
-      }
-      $body[$project->mail_digest] .= '  age: '. format_interval(time() - $node->created) ."\n";
-      $body[$project->mail_digest] .= '  url: '. url("node/$node->nid", array('absolute' => TRUE)) ."\n";
-      $body[$project->mail_digest] .= "\n";
-    }
-  }
-
-  foreach ($body as $mailto => $text) {
-    $header['From'] = $mailto;
-    $header['Return-Path'] = "<$mailto>";
-
-    drupal_mail('project_issue_critical_summary', $mailto, t('Release critical bugs for !date', array('!date' => date('F d, Y', time()))), $text, NULL, $header);
+    // We can pass $project here because user_preferred_language()
+    // only needs $account->language to function, and we have that
+    // loaded into the $project object.
+    $language = user_preferred_language($project);
+    $params['project'] = $project;
+    drupal_mail('project_issue', 'project_issue_critical_summary', $mailto, $language, $params, $mailto);
   }
 }
-
