Пример #1
0
 /**
  * Generates a message depending on the $type and using $data
  * @param integer $type
  * @param array $data usually contains task_id => $id ... using by-ref to add headers
  * @return array array($subject, $body)
  * @access public
  */
 function generate_message($type, &$data)
 {
     global $db, $fs, $user;
     // Get the string of modification
     $notify_type_msg = array(0 => L('none'), NOTIFY_TASK_OPENED => L('taskopened'), NOTIFY_TASK_CHANGED => L('pm.taskchanged'), NOTIFY_TASK_CLOSED => L('taskclosed'), NOTIFY_TASK_REOPENED => L('pm.taskreopened'), NOTIFY_DEP_ADDED => L('pm.depadded'), NOTIFY_DEP_REMOVED => L('pm.depremoved'), NOTIFY_COMMENT_ADDED => L('commentadded'), NOTIFY_REL_ADDED => L('relatedadded'), NOTIFY_OWNERSHIP => L('ownershiptaken'), NOTIFY_PM_REQUEST => L('pmrequest'), NOTIFY_PM_DENY_REQUEST => L('pmrequestdenied'), NOTIFY_NEW_ASSIGNEE => L('newassignee'), NOTIFY_REV_DEP => L('revdepadded'), NOTIFY_REV_DEP_REMOVED => L('revdepaddedremoved'), NOTIFY_ADDED_ASSIGNEES => L('assigneeadded'));
     // Generate the nofication message
     if (isset($data['project']->prefs['notify_subject']) && !$data['project']->prefs['notify_subject']) {
         $data['project']->prefs['notify_subject'] = '[%p][#%t] %s';
     }
     if (!isset($data['project']->prefs['notify_subject']) || !isset($notify_type_msg[$type])) {
         $subject = L('notifyfromfs');
     } else {
         $replacement = array('%p' => $data['project']->prefs['project_title'], '%s' => $data['task']['item_summary'], '%t' => $data['task_id'], '%a' => $notify_type_msg[$type], '%u' => $user->infos['user_name'], '%n' => $type);
         $subject = strtr($data['project']->prefs['notify_subject'], $replacement);
         $data['headers'] = strtr($data['project']->prefs['mail_headers'], $replacement);
     }
     $subject = strtr($subject, "\n", ' ');
     /* -------------------------------
        | List of notification types: |
        | 1. Task opened              |
        | 2. Task details changed     |
        | 3. Task closed              |
        | 4. Task re-opened           |
        | 5. Dependency added         |
        | 6. Dependency removed       |
        | 7. Comment added            |
        | 9. Related task added       |
        |10. Taken ownership          |
        |11. Confirmation code        |
        |12. PM request               |
        |13. PM denied request        |
        |14. New assignee             |
        |15. Reversed dep             |
        |16. Reversed dep removed     |
        |17. Added to assignees list  |
        |18. Anon-task opened         |
        |19. Password change          |
        |20. New user                 |
        -------------------------------
        */
     $body = L('donotreply') . "\n\n";
     switch ($type) {
         case NOTIFY_TASK_OPENED:
             $body .= L('newtaskopened') . "\n\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
             $body .= L('attachedtoproject') . ' - ' . $data['project']->prefs['project_title'] . "\n";
             $body .= L('summary') . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('assignedto') . ' - ' . implode(', ', $data['task']['assigned_to_name']) . "\n";
             foreach ($data['project']->fields as $field) {
                 $body .= $field->prefs['field_name'] . ' - ' . $field->view($data['task'], array(), PLAINTEXT) . "\n";
             }
             $body .= L('details') . " - \n" . $data['task']['detailed_desc'] . "\n\n";
             if (isset($data['files'])) {
                 $body .= L('fileaddedtoo') . "\n\n";
                 $subject .= ' (' . L('attachmentadded') . ')';
             }
             $body .= L('moreinfo') . "\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n";
             break;
         case NOTIFY_TASK_CHANGED:
             $body .= L('taskchanged') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ': ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
             foreach ($data['changes'] as $change) {
                 if ($change[0] == 'assigned_to_name') {
                     $change[1] = implode(', ', $change[1]);
                     $change[2] = implode(', ', $change[2]);
                 }
                 if ($change[0] == 'detailed_desc') {
                     $body .= $change[3] . ":\n-------\n" . $change[2] . "\n-------\n";
                 } else {
                     $body .= $change[3] . ': ' . ($change[1] ? $change[1] : '[-]') . ' -> ' . ($change[2] ? $change[2] : '[-]') . "\n";
                 }
             }
             $body .= "\n" . L('moreinfo') . "\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n";
             break;
         case NOTIFY_TASK_CLOSED:
             $body .= L('notify.taskclosed') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
             $body .= L('reasonforclosing') . ' ' . $data['task']['resolution_name'] . "\n";
             if (!empty($data['task']['closure_comment'])) {
                 $body .= L('closurecomment') . ' ' . $data['task']['closure_comment'] . "\n\n";
             }
             $body .= L('moreinfo') . "\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n";
             break;
         case NOTIFY_TASK_REOPENED:
             $body .= L('notify.taskreopened') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
             $body .= L('moreinfo') . "\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n";
             break;
         case NOTIFY_DEP_ADDED:
             $depend_task = Flyspray::getTaskDetails($data['dep_task']);
             $body .= L('newdep') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n\n";
             $body .= L('newdepis') . ':' . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $depend_task['prefix_id'] . ' - ' . $depend_task['item_summary'] . "\n";
             $body .= CreateURL(array('details', 'task' . $depend_task['task_id'])) . "\n\n";
             break;
         case NOTIFY_DEP_REMOVED:
             $depend_task = Flyspray::getTaskDetails($data['dep_task']);
             $body .= L('notify.depremoved') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n\n";
             $body .= L('removeddepis') . ':' . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $depend_task['prefix_id'] . ' - ' . $depend_task['item_summary'] . "\n";
             $body .= CreateURL(array('details', 'task' . $depend_task['task_id'])) . "\n\n";
             break;
         case NOTIFY_COMMENT_ADDED:
             // Get the comment information
             $comment = $db->x->getRow('SELECT comment_text FROM {comments} WHERE comment_id = ?', null, $data['cid']);
             $body .= L('notify.commentadded') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
             $body .= "----------\n";
             $body .= $comment['comment_text'] . "\n";
             $body .= "----------\n\n";
             if (isset($data['files'])) {
                 $body .= L('fileaddedtoo') . "\n\n";
                 $subject .= ' (' . L('attachmentadded') . ')';
             }
             $body .= L('moreinfo') . "\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . '#comment' . $data['cid'] . "\n\n";
             break;
         case NOTIFY_REL_ADDED:
             $related_task = Flyspray::getTaskDetails($data['rel_task']);
             $body .= L('notify.relatedadded') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n\n";
             $body .= L('relatedis') . ':' . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $related_task['prefix_id'] . ' - ' . $related_task['item_summary'] . "\n";
             $body .= CreateURL(array('details', 'task' . $related_task['task_id'])) . "\n\n";
             break;
         case NOTIFY_OWNERSHIP:
             $body .= implode(', ', $data['task']['assigned_to_name']) . ' ' . L('takenownership') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n\n";
             $body .= L('moreinfo') . "\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n";
             break;
         case NOTIFY_CONFIRMATION:
             $body .= L('noticefrom') . " {$data['project']->prefs['project_title']}\n\n";
             $body .= L('addressused') . "\n\n";
             $body .= "{$data[0]}index.php?do=register&magic_url={$data[1]}\n\n";
             // In case that spaces in the username have been removed
             $body .= L('username') . ": {$data['2']} \n\n";
             break;
         case NOTIFY_PM_REQUEST:
             $body .= L('requiresaction') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
             $body .= L('moreinfo') . "\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n";
             break;
         case NOTIFY_PM_DENY_REQUEST:
             $body .= L('pmdeny') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
             $body .= L('denialreason') . ':' . "\n";
             $body .= $data['deny_reason'] . "\n\n";
             $body .= L('moreinfo') . "\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n";
             break;
         case NOTIFY_NEW_ASSIGNEE:
             $body .= L('assignedtoyou') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
             $body .= L('moreinfo') . "\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n";
             break;
         case NOTIFY_REV_DEP:
             $depend_task = Flyspray::getTaskDetails($data['dep_task']);
             $body .= L('taskwatching') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n\n";
             $body .= L('isdepfor') . ':' . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $depend_task['prefix_id'] . ' - ' . $depend_task['item_summary'] . "\n";
             $body .= CreateURL(array('details', 'task' . $depend_task['task_id'])) . "\n\n";
             break;
         case NOTIFY_REV_DEP_REMOVED:
             $depend_task = Flyspray::getTaskDetails($data['dep_task']);
             $body .= L('taskwatching') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n\n";
             $body .= L('isnodepfor') . ':' . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $depend_task['prefix_id'] . ' - ' . $depend_task['item_summary'] . "\n";
             $body .= CreateURL(array('details', 'task' . $depend_task['task_id'])) . "\n\n";
             break;
         case NOTIFY_ADDED_ASSIGNEES:
             $body .= L('useraddedtoassignees') . "\n\n";
             $body .= $data['task']['project_prefix'] . '#' . $data['task']['prefix_id'] . ' - ' . $data['task']['item_summary'] . "\n";
             $body .= L('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id'])) . "\n\n\n";
             break;
         case NOTIFY_ANON_TASK:
             $body .= L('thankyouforbug') . "\n\n";
             $body .= CreateURL(array('details', 'task' . $data['task_id']), array('task_token' => $data['token'])) . "\n\n";
             break;
         case NOTIFY_PW_CHANGE:
             $body = L('messagefrom') . $data[0] . "\n\n";
             $body .= L('magicurlmessage') . " \n";
             $body .= "{$data[0]}index.php?do=lostpw&magic_url={$data['1']}\n";
             break;
         case NOTIFY_NEW_USER:
             $body = L('messagefrom') . $data[0] . "\n\n";
             $body .= L('newuserregistered') . " \n\n";
             $body .= L('username') . ': ' . $data[1] . "\n";
             $body .= L('realname') . ': ' . $data[2] . "\n";
             if ($data[6]) {
                 $body .= L('password') . ': ' . $data[5] . "\n";
             }
             $body .= L('emailaddress') . ': ' . $data[3] . "\n";
             if ($data[4]) {
                 $body .= L('jabberid') . ':' . $data[4] . "\n\n";
             }
             break;
         case NOTIFY_REMINDER:
         case NOTIFY_DIGEST:
             $body = $data['message'] . "\n\n";
             break;
     }
     $body .= L('disclaimer');
     return array($subject, $body);
 }
Пример #2
0
 function GenerateMsg($type, $task_id, $arg1 = '0', $lang)
 {
     global $db, $fs, $user, $proj;
     // Get the task details
     $task_details = Flyspray::getTaskDetails($task_id);
     if ($task_id) {
         $proj = new Project($task_details['project_id']);
     }
     // Set the due date correctly
     if ($task_details['due_date'] == '0') {
         $due_date = tL('undecided', $lang);
     } else {
         $due_date = formatDate($task_details['due_date']);
     }
     // Set the due version correctly
     if ($task_details['closedby_version'] == '0') {
         $task_details['due_in_version_name'] = tL('undecided', $lang);
     }
     // Get the string of modification
     $notify_type_msg = array(0 => tL('none'), NOTIFY_TASK_OPENED => tL('taskopened', $lang), NOTIFY_TASK_CHANGED => tL('pm.taskchanged', $lang), NOTIFY_TASK_CLOSED => tL('taskclosed', $lang), NOTIFY_TASK_REOPENED => tL('pm.taskreopened', $lang), NOTIFY_DEP_ADDED => tL('pm.depadded', $lang), NOTIFY_DEP_REMOVED => tL('pm.depremoved', $lang), NOTIFY_COMMENT_ADDED => tL('commentadded', $lang), NOTIFY_ATT_ADDED => tL('attachmentadded', $lang), NOTIFY_REL_ADDED => tL('relatedadded', $lang), NOTIFY_OWNERSHIP => tL('ownershiptaken', $lang), NOTIFY_PM_REQUEST => tL('pmrequest', $lang), NOTIFY_PM_DENY_REQUEST => tL('pmrequestdenied', $lang), NOTIFY_NEW_ASSIGNEE => tL('newassignee', $lang), NOTIFY_REV_DEP => tL('revdepadded', $lang), NOTIFY_REV_DEP_REMOVED => tL('revdepaddedremoved', $lang), NOTIFY_ADDED_ASSIGNEES => tL('assigneeadded', $lang));
     // Generate the nofication message
     if (isset($proj->prefs['notify_subject']) && !$proj->prefs['notify_subject']) {
         $proj->prefs['notify_subject'] = '[%p][#%t] %s';
     }
     if (!isset($proj->prefs['notify_subject']) || $type == NOTIFY_CONFIRMATION || $type == NOTIFY_ANON_TASK || $type == NOTIFY_PW_CHANGE || $type == NOTIFY_NEW_USER || $type == NOTIFY_OWN_REGISTRATION) {
         $subject = tL('notifyfromfs', $lang);
     } else {
         $subject = strtr($proj->prefs['notify_subject'], array('%p' => $proj->prefs['project_title'], '%s' => $task_details['item_summary'], '%t' => $task_id, '%a' => $notify_type_msg[$type], '%u' => $user->infos['user_name']));
     }
     $subject = strtr($subject, "\n", '');
     /* -------------------------------
         | List of notification types: |
         | 1. Task opened              |
         | 2. Task details changed     |
         | 3. Task closed              |
         | 4. Task re-opened           |
         | 5. Dependency added         |
         | 6. Dependency removed       |
         | 7. Comment added            |
         | 8. Attachment added         |
         | 9. Related task added       |
         |10. Taken ownership          |
         |11. Confirmation code        |
         |12. PM request               |
         |13. PM denied request        |
         |14. New assignee             |
         |15. Reversed dep             |
         |16. Reversed dep removed     |
         |17. Added to assignees list  |
         |18. Anon-task opened         |
         |19. Password change          |
         |20. New user                 |
         |21. User registration        |
         -------------------------------
        */
     $body = tL('donotreply', $lang) . "\n\n";
     $online = '';
     // {{{ New task opened
     if ($type == NOTIFY_TASK_OPENED) {
         $body .= tL('newtaskopened', $lang) . " \n\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ") \n\n";
         $body .= tL('attachedtoproject', $lang) . ' - ' . $task_details['project_title'] . "\n";
         $body .= tL('summary', $lang) . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('tasktype', $lang) . ' - ' . $task_details['tasktype_name'] . "\n";
         $body .= tL('category', $lang) . ' - ' . $task_details['category_name'] . "\n";
         $body .= tL('status', $lang) . ' - ' . $task_details['status_name'] . "\n";
         $body .= tL('assignedto', $lang) . ' - ' . implode(', ', $task_details['assigned_to_name']) . "\n";
         $body .= tL('operatingsystem', $lang) . ' - ' . $task_details['os_name'] . "\n";
         $body .= tL('severity', $lang) . ' - ' . $task_details['severity_name'] . "\n";
         $body .= tL('priority', $lang) . ' - ' . $task_details['priority_name'] . "\n";
         $body .= tL('reportedversion', $lang) . ' - ' . $task_details['reported_version_name'] . "\n";
         $body .= tL('dueinversion', $lang) . ' - ' . $task_details['due_in_version_name'] . "\n";
         $body .= tL('duedate', $lang) . ' - ' . $due_date . "\n";
         $body .= tL('details', $lang) . ' - ' . $task_details['detailed_desc'] . "\n\n";
         if ($arg1 == 'files') {
             $body .= tL('fileaddedtoo', $lang) . "\n\n";
             $subject .= ' (' . tL('attachmentadded', $lang) . ')';
         }
         $body .= tL('moreinfo', $lang) . "\n";
         $body .= CreateURL('details', $task_id);
         $online .= tL('newtaskopened', $lang) . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
         $online .= tL('attachedtoproject', $lang) . ' - ' . $task_details['project_title'] . ". ";
         $online .= tL('summary', $lang) . ' - ' . $task_details['item_summary'];
     }
     // }}}
     // {{{ Task details changed
     if ($type == NOTIFY_TASK_CHANGED) {
         $translation = array('priority_name' => tL('priority', $lang), 'severity_name' => tL('severity', $lang), 'status_name' => tL('status', $lang), 'assigned_to_name' => tL('assignedto', $lang), 'due_in_version_name' => tL('dueinversion', $lang), 'reported_version_name' => tL('reportedversion', $lang), 'tasktype_name' => tL('tasktype', $lang), 'os_name' => tL('operatingsystem', $lang), 'category_name' => tL('category', $lang), 'due_date' => tL('duedate', $lang), 'percent_complete' => tL('percentcomplete', $lang), 'mark_private' => tL('visibility', $lang), 'item_summary' => tL('summary', $lang), 'detailed_desc' => tL('taskedited', $lang), 'project_title' => tL('attachedtoproject', $lang), 'estimated_effort' => tL('estimatedeffort', $lang));
         $body .= tL('taskchanged', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ': ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
         $online .= tL('taskchanged', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'];
         foreach ($arg1 as $change) {
             if ($change[0] == 'assigned_to_name') {
                 $change[1] = implode(', ', $change[1]);
                 $change[2] = implode(', ', $change[2]);
             }
             if ($change[0] == 'detailed_desc') {
                 $body .= $translation[$change[0]] . ":\n-------\n" . $change[2] . "\n-------\n";
             } else {
                 $body .= $translation[$change[0]] . ': ' . ($change[1] ? $change[1] : '[-]') . ' -> ' . ($change[2] ? $change[2] : '[-]') . "\n";
             }
         }
         $body .= "\n" . tL('moreinfo', $lang) . "\n";
         $body .= CreateURL('details', $task_id);
     }
     // }}}
     // {{{ Task closed
     if ($type == NOTIFY_TASK_CLOSED) {
         $body .= tL('notify.taskclosed', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
         $body .= tL('reasonforclosing', $lang) . ' ' . $task_details['resolution_name'] . "\n";
         if (!empty($task_details['closure_comment'])) {
             $body .= tL('closurecomment', $lang) . ' ' . $task_details['closure_comment'] . "\n\n";
         }
         $body .= tL('moreinfo', $lang) . "\n";
         $body .= CreateURL('details', $task_id);
         $online .= tL('notify.taskclosed', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ Task re-opened
     if ($type == NOTIFY_TASK_REOPENED) {
         $body .= tL('notify.taskreopened', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
         $body .= tL('moreinfo', $lang) . "\n";
         $body .= CreateURL('details', $task_id);
         $online .= tL('notify.taskreopened', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ Dependency added
     if ($type == NOTIFY_DEP_ADDED) {
         $depend_task = Flyspray::getTaskDetails($arg1);
         $body .= tL('newdep', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
         $body .= CreateURL('details', $task_id) . "\n\n\n";
         $body .= tL('newdepis', $lang) . ':' . "\n\n";
         $body .= 'FS#' . $depend_task['task_id'] . ' - ' . $depend_task['item_summary'] . "\n";
         $body .= CreateURL('details', $depend_task['task_id']);
         $online .= tL('newdep', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ Dependency removed
     if ($type == NOTIFY_DEP_REMOVED) {
         $depend_task = Flyspray::getTaskDetails($arg1);
         $body .= tL('notify.depremoved', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
         $body .= CreateURL('details', $task_id) . "\n\n\n";
         $body .= tL('removeddepis', $lang) . ':' . "\n\n";
         $body .= 'FS#' . $depend_task['task_id'] . ' - ' . $depend_task['item_summary'] . "\n";
         $body .= CreateURL('details', $depend_task['task_id']);
         $online .= tL('notify.depremoved', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ Comment added
     if ($type == NOTIFY_COMMENT_ADDED) {
         // Get the comment information
         $result = $db->Query("SELECT comment_id, comment_text\n                               FROM {comments}\n                               WHERE user_id = ?\n                               AND task_id = ?\n                               ORDER BY comment_id DESC", array($user->id, $task_id), '1');
         $comment = $db->FetchRow($result);
         $body .= tL('notify.commentadded', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
         $body .= "----------\n";
         $body .= $comment['comment_text'] . "\n";
         $body .= "----------\n\n";
         if ($arg1 == 'files') {
             $body .= tL('fileaddedtoo', $lang) . "\n\n";
             $subject .= ' (' . tL('attachmentadded', $lang) . ')';
         }
         $body .= tL('moreinfo', $lang) . "\n";
         $body .= CreateURL('details', $task_id) . '#comment' . $comment['comment_id'];
         $online .= tL('notify.commentadded', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ Attachment added
     if ($type == NOTIFY_ATT_ADDED) {
         $body .= tL('newattachment', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
         $body .= tL('moreinfo', $lang) . "\n";
         $body .= CreateURL('details', $task_id);
         $online .= tL('newattachment', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ Related task added
     if ($type == NOTIFY_REL_ADDED) {
         $related_task = Flyspray::getTaskDetails($arg1);
         $body .= tL('notify.relatedadded', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
         $body .= CreateURL('details', $task_id) . "\n\n\n";
         $body .= tL('relatedis', $lang) . ':' . "\n\n";
         $body .= 'FS#' . $related_task['task_id'] . ' - ' . $related_task['item_summary'] . "\n";
         $body .= CreateURL('details', $related_task['task_id']);
         $online .= tL('notify.relatedadded', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ Ownership taken
     if ($type == NOTIFY_OWNERSHIP) {
         $body .= implode(', ', $task_details['assigned_to_name']) . ' ' . tL('takenownership', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n\n";
         $body .= tL('moreinfo', $lang) . "\n";
         $body .= CreateURL('details', $task_id);
         $online .= implode(', ', $task_details['assigned_to_name']) . ' ' . tL('takenownership', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ".";
     }
     // }}}
     // {{{ Confirmation code
     if ($type == NOTIFY_CONFIRMATION) {
         $body .= tL('noticefrom', $lang) . " {$proj->prefs['project_title']}\n\n" . tL('addressused', $lang) . "\n\n" . " {$arg1[0]}index.php?do=register&magic_url={$arg1[1]} \n\n" . tL('username', $lang) . ': ' . $arg1[2] . "\n" . tL('confirmcodeis', $lang) . " {$arg1['3']} \n\n";
         $online = $body;
     }
     // }}}
     // {{{ Pending PM request
     if ($type == NOTIFY_PM_REQUEST) {
         $body .= tL('requiresaction', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho') . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
         $body .= tL('moreinfo', $lang) . "\n";
         $body .= CreateURL('details', $task_id);
         $online .= tL('requiresaction', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ PM request denied
     if ($type == NOTIFY_PM_DENY_REQUEST) {
         $body .= tL('pmdeny', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
         $body .= tL('denialreason', $lang) . ':' . "\n";
         $body .= $arg1 . "\n\n";
         $body .= tL('moreinfo', $lang) . "\n";
         $body .= CreateURL('details', $task_id);
         $online .= tL('pmdeny', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ New assignee
     if ($type == NOTIFY_NEW_ASSIGNEE) {
         $body .= tL('assignedtoyou', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n\n";
         $body .= tL('moreinfo', $lang) . "\n";
         $body .= CreateURL('details', $task_id);
         $online .= tL('assignedtoyou', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ Reversed dep
     if ($type == NOTIFY_REV_DEP) {
         $depend_task = Flyspray::getTaskDetails($arg1);
         $body .= tL('taskwatching', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
         $body .= CreateURL('details', $task_id) . "\n\n\n";
         $body .= tL('isdepfor', $lang) . ':' . "\n\n";
         $body .= 'FS#' . $depend_task['task_id'] . ' - ' . $depend_task['item_summary'] . "\n";
         $body .= CreateURL('details', $depend_task['task_id']);
         $online .= tL('taskwatching', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ Reversed dep - removed
     if ($type == NOTIFY_REV_DEP_REMOVED) {
         $depend_task = Flyspray::getTaskDetails($arg1);
         $body .= tL('taskwatching', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
         $body .= CreateURL('details', $task_id) . "\n\n\n";
         $body .= tL('isnodepfor', $lang) . ':' . "\n\n";
         $body .= 'FS#' . $depend_task['task_id'] . ' - ' . $depend_task['item_summary'] . "\n";
         $body .= CreateURL('details', $depend_task['task_id']);
         $online .= tL('taskwatching', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ User added to assignees list
     if ($type == NOTIFY_ADDED_ASSIGNEES) {
         $body .= tL('useraddedtoassignees', $lang) . "\n\n";
         $body .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . "\n";
         $body .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . ")\n";
         $body .= CreateURL('details', $task_id);
         $online .= tL('useraddedtoassignees', $lang) . ". ";
         $online .= 'FS#' . $task_id . ' - ' . $task_details['item_summary'] . ". ";
         $online .= tL('userwho', $lang) . ' - ' . $user->infos['real_name'] . ' (' . $user->infos['user_name'] . "). ";
     }
     // }}}
     // {{{ Anon-task has been opened
     if ($type == NOTIFY_ANON_TASK) {
         $body .= tL('thankyouforbug', $lang) . "\n\n";
         $body .= CreateURL('details', $task_id, null, array('task_token' => $arg1)) . "\n\n";
         $online .= tL('thankyouforbug') . "";
     }
     // }}}
     // {{{ Password change
     if ($type == NOTIFY_PW_CHANGE) {
         $body = tL('magicurlmessage', $lang) . " \n" . "{$arg1[0]}index.php?do=lostpw&magic_url={$arg1['1']}\n\n" . tL('messagefrom', $lang) . $arg1[0];
         $online = $body;
     }
     // } }}
     // {{{ New user
     if ($type == NOTIFY_NEW_USER) {
         $body = tL('newuserregistered', $lang) . " \n\n" . tL('username', $lang) . ': ' . $arg1[1] . "\n" . tL('realname', $lang) . ': ' . $arg1[2] . "\n";
         $online = $body;
         if ($arg1[6]) {
             $body .= tL('password', $lang) . ': ' . $arg1[5] . "\n";
         }
         $body .= tL('emailaddress', $lang) . ': ' . $arg1[3] . "\n";
         $body .= tL('jabberid', $lang) . ':' . $arg1[4] . "\n\n";
         $body .= tL('messagefrom', $lang) . $arg1[0];
     }
     // }}}
     // {{{ New user him/herself
     if ($type == NOTIFY_OWN_REGISTRATION) {
         $body = tL('youhaveregistered', $lang) . " \n\n" . tL('username', $lang) . ': ' . $arg1[1] . "\n" . tL('realname', $lang) . ': ' . $arg1[2] . "\n";
         $online = $body;
         if ($arg1[6]) {
             $body .= tL('password', $lang) . ': ' . $arg1[5] . "\n";
         }
         $body .= tL('emailaddress', $lang) . ': ' . $arg1[3] . "\n";
         $body .= tL('jabberid', $lang) . ':' . $arg1[4] . "\n\n";
         // Add something here to tell the user whether the registration must
         // first be accepted by Administrators or not. And if it had and was
         // rejected, the reason. Check first what happening when requests are
         // either denied or accepted.
         $body .= tL('messagefrom', $lang) . $arg1[0];
     }
     // }}}
     $body .= "\n\n" . tL('disclaimer', $lang);
     return array(Notifications::fixMsgData($subject), Notifications::fixMsgData($body), $online);
 }