From 1336f0b41a271f21a00799b3a7231ec61d752e5f Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Sat, 3 Jun 2006 19:05:08 +0000 Subject: [PATCH] r862: In order to get everything to work properly, we need to have BugAPI->values set earlier so it can be pased to NotificationCenter::set_bug_data() --- editreport.php | 62 ++++++++++----------- includes/class_notification.php | 96 ++++++++++++++++++++++++--------- 2 files changed, 104 insertions(+), 54 deletions(-) diff --git a/editreport.php b/editreport.php index 8642691..9fe2fe1 100644 --- a/editreport.php +++ b/editreport.php @@ -106,6 +106,37 @@ if ($_POST['do'] == 'update') } } + // ------------------------------------------------------------------- + // do update stuff + $pcv = parse_pcv_select($bugsys->in['pcv_select'], true); + + process_custom_fields($bug['bugid']); + + $dependencies = preg_split('#([^0-9].*?)#', $bugsys->in['dependency'], -1, PREG_SPLIT_NO_EMPTY); + $dependencies = ((count($dependencies) < 1) ? '' : implode(', ', $dependencies)); + + $bugapi->set('summary', $bugsys->in['summary']); + $bugapi->set('severity', $bugsys->in['severity']); + $bugapi->set('duplicateof', $bugsys->in['duplicateof']); + $bugapi->set('dependency', $dependencies); + $bugapi->set('productid', $pcv['product']); + $bugapi->set('componentid', $pcv['component']); + $bugapi->set('versionid', $pcv['version']); + $bugapi->set('hidden', $bugsys->in['hidden']); + + if (can_perform('canchangestatus', $bug['productid'])) + { + $bugapi->set('priority', $bugsys->in['priority']); + $bugapi->set('status', $bugsys->in['status']); + $bugapi->set('resolution', $bugsys->in['resolution']); + } + if (can_perform('canassign', $bug['productid'])) + { + $bugapi->set('assignedto', $bugsys->in['assignedto']); + } + + $notif->set_bug_data($bugapi->objdata, $bugapi->values); + // ------------------------------------------------------------------- // process comment stuff if ($bugsys->in['comment']) @@ -146,42 +177,13 @@ if ($_POST['do'] == 'update') } // ------------------------------------------------------------------- - // do update stuff - $pcv = parse_pcv_select($bugsys->in['pcv_select'], true); + // handle logging and perform updates if ($fields = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "bugvaluefill WHERE bugid = $bug[bugid]")) { $log->add_data(true, $fields, array('bugid'), true, 'custom'); } - // ------------------------------------------------------------------- - // start updates - - process_custom_fields($bug['bugid']); - - $dependencies = preg_split('#([^0-9].*?)#', $bugsys->in['dependency'], -1, PREG_SPLIT_NO_EMPTY); - $dependencies = ((count($dependencies) < 1) ? '' : implode(', ', $dependencies)); - - $bugapi->set('summary', $bugsys->in['summary']); - $bugapi->set('severity', $bugsys->in['severity']); - $bugapi->set('duplicateof', $bugsys->in['duplicateof']); - $bugapi->set('dependency', $dependencies); - $bugapi->set('productid', $pcv['product']); - $bugapi->set('componentid', $pcv['component']); - $bugapi->set('versionid', $pcv['version']); - $bugapi->set('hidden', $bugsys->in['hidden']); - - if (can_perform('canchangestatus', $bug['productid'])) - { - $bugapi->set('priority', $bugsys->in['priority']); - $bugapi->set('status', $bugsys->in['status']); - $bugapi->set('resolution', $bugsys->in['resolution']); - } - if (can_perform('canassign', $bug['productid'])) - { - $bugapi->set('assignedto', $bugsys->in['assignedto']); - } - $log->add_data(false, $bugapi->values, $bugfields); $bugapi->update(); diff --git a/includes/class_notification.php b/includes/class_notification.php index 1e4f2e3..32bd7e5 100644 --- a/includes/class_notification.php +++ b/includes/class_notification.php @@ -40,6 +40,20 @@ class NotificationCenter */ var $bug = array(); + /** + * Original bug data + * @var array + * @access private + */ + var $original = array(); + + /** + * Modified bug data + * @var array + * @access private + */ + var $modified = array(); + /** * Global bugsys registry * @var object @@ -99,6 +113,33 @@ class NotificationCenter $this->__construct(); } + // ################################################################### + /** + * Sets the bug data so that all methods in this class have access to + * it when sending emails. + * + * @access public + * + * @param array Original bug data + * @param array Modified bug data + */ + function set_bug_data($original, $modified = array()) + { + if (sizeof($modified) > 0) + { + $this->bug = $modified; + } + + $this->original = $original; + $this->modified = $modified; + + $this->roles['-notapplicable-'] = (sizeof($modified) > 0 ? array($original['assignedto'], $modified['assignedto']) : array($original['assignedto'])); + $this->roles['reporter'] = array($original['userid']); + $this->roles['assignee'] = (sizeof($modified) > 0 ? array($modified['assignedto']) : array($original['assignedto'])); + + $this->fetch_user_cache(); + } + // ################################################################### /** * Fetches all the users who could be related to the bug and sticks @@ -115,7 +156,7 @@ class NotificationCenter } $voters = $this->registry->db->query_first("SELECT userids FROM " . TABLE_PREFIX . "vote WHERE bugid = " . $this->registry->clean($this->bug['bugid'], TYPE_UINT)); - $this->roles['voter'] = explode(',', $voters['userids']); + $this->roles['voter'] = preg_split('#,#', $voters['userids'], 0, PREG_SPLIT_NO_EMPTY); $commenters = $this->registry->db->query("SELECT userid FROM " . TABLE_PREFIX . "comment WHERE bugid = " . $this->registry->clean($this->bug['bugid'], TYPE_UINT)); while ($comment = $this->registry->db->fetch_array($commenters)) @@ -152,44 +193,38 @@ class NotificationCenter * with the differences. * * @access public - * - * @param array Original data (BugAPI->objdata) - * @param array Modified data (BugAPI->values) */ - function send_bug_changes_notice($original, $modified) + function send_bug_changes_notice() { - $this->bug = $modified; - - $this->roles['-notapplicable-'] = array($original['assignedto'], $modified['assignedto']); - $this->roles['reporter'] = array($original['userid']); - $this->roles['assignee'] = array($modified['assignedto']); - - $this->fetch_user_cache(); + if (!isset($this->modified['bugid'])) + { + return; + } - if ($original['assignedto'] != $modified['assignedto']) + if ($this->original['assignedto'] != $this->modified['assignedto']) { - if ($original['assignedto'] != '') + if ($this->original['assignedto'] != '') { - $this->notice_no_longer_assigned($original['assignedto']); + $this->notice_no_longer_assigned($this->original['assignedto']); } - if ($modified['assignedto'] != '') + if ($this->modified['assignedto'] != '') { - $this->notice_now_assigned($modified['assignedto']); + $this->notice_now_assigned($this->modified['assignedto']); } } - if ($original['status'] != $modified['status']) + if ($this->original['status'] != $this->modified['status']) { - $this->notice_status_change($original['status'], $modified['status']); + $this->notice_status_change($this->original['status'], $this->modified['status']); } - if ($original['resolution'] != $modified['resoultion']) + if ($this->original['resolution'] != $this->modified['resoultion']) { - $this->notice_resolution_change($original['resolution'], $modified['resolution']); + $this->notice_resolution_change($this->original['resolution'], $this->modified['resolution']); } - if ($original['duplicates'] != $modified['duplicates']) + if ($this->original['duplicates'] != $this->modified['duplicates']) { - $this->notice_duplicates_change($original['duplicates'], $modified['duplicates']); + $this->notice_duplicates_change($this->original['duplicates'], $this->modified['duplicates']); } } @@ -305,7 +340,20 @@ $this->registry->lang->string('The resolution field has changed from "%1$s" to " */ function send_new_comment_notice($comment) { - + $userlist = $this->fetch_users_with_on_bit('newcomment'); + foreach ($userlist AS $userid => $user) + { + $this->notices["$user[userid]"][] = sprintf( +$this->registry->lang->string('The following comment was added by %1$s on %2$s: +============================================ +%3$s +============================================'), + + construct_user_display($this->registry->userinfo, false), + $this->registry->modules['date']->format($this->registry->options['dateformat'], $comment['dateline']), + $comment['comment'] + ); + } } // ################################################################### -- 2.22.5