/** * Store the form's values for this job. * @param JOB $obj * @access private */ public function commit($obj) { parent::commit($obj); // after the object has been stored with (possible) new assignee and reporter // fix up the subscriptions, maintaining at most one per unique user $creator = $obj->creator(); $reporter = $obj->reporter(); $assignee = $obj->assignee(); $creator_equal_reporter = $creator->equals($reporter); if ($assignee) { $creator_equal_assignee = $creator->equals($assignee); $assignee_equal_reporter = $assignee->equals($reporter); } else { $creator_equal_assignee = false; $assignee_equal_reporter = false; } $subscribe_creator_explicit = $this->value_for('subscribe_creator'); $subscribe_reporter_explicit = $this->value_for('subscribe_reporter'); $subscribe_assignee_explicit = $this->value_for('subscribe_assignee'); $subscribe_creator = $subscribe_creator_explicit || $creator_equal_reporter && $subscribe_reporter_explicit || $creator_equal_assignee && $subscribe_assignee_explicit; $subscribe_reporter = $subscribe_reporter_explicit || $creator_equal_reporter && $subscribe_creator_explicit || $assignee_equal_reporter && $subscribe_assignee_explicit; $subscribe_assignee = $subscribe_assignee_explicit || $creator_equal_assignee && $subscribe_creator_explicit || $assignee_equal_reporter && $subscribe_reporter_explicit; if ($creator) { $subscriber = $creator->subscriber(); if ($subscriber->email) { $subscriber->set_subscribed($obj, Subscribe_entry, $subscribe_creator); } } if ($reporter && !$creator_equal_reporter) { $subscriber = $reporter->subscriber(); if ($subscriber->email) { $subscriber->set_subscribed($obj, Subscribe_entry, $subscribe_reporter); } } if ($assignee && !$creator_equal_assignee && !$assignee_equal_reporter) { $subscriber = $assignee->subscriber(); if ($subscriber->email) { $subscriber->set_subscribed($obj, Subscribe_entry, $subscribe_assignee); } } }