예제 #1
0
 static function resultGrouping(TBGIssue $issue, $groupby, $cc, $prevgroup_id)
 {
     $i18n = TBGContext::getI18n();
     $showtablestart = false;
     $showheader = false;
     $groupby_id = 0;
     $groupby_description = '';
     if ($cc == 1) {
         $showtablestart = true;
     }
     if ($groupby != '') {
         switch ($groupby) {
             case 'category':
                 if ($issue->getCategory() instanceof TBGCategory) {
                     $groupby_id = $issue->getCategory()->getID();
                     $groupby_description = $issue->getCategory()->getName();
                 } else {
                     $groupby_id = 0;
                     $groupby_description = $i18n->__('Unknown');
                 }
                 break;
             case 'status':
                 if ($issue->getStatus() instanceof TBGStatus) {
                     $groupby_id = $issue->getStatus()->getID();
                     $groupby_description = $issue->getStatus()->getName();
                 } else {
                     $groupby_id = 0;
                     $groupby_description = $i18n->__('Unknown');
                 }
                 break;
             case 'severity':
                 if ($issue->getSeverity() instanceof TBGSeverity) {
                     $groupby_id = $issue->getSeverity()->getID();
                     $groupby_description = $issue->getSeverity()->getName();
                 } else {
                     $groupby_id = 0;
                     $groupby_description = $i18n->__('Unknown');
                 }
                 break;
             case 'resolution':
                 if ($issue->getResolution() instanceof TBGResolution) {
                     $groupby_id = $issue->getResolution()->getID();
                     $groupby_description = $issue->getResolution()->getName();
                 } else {
                     $groupby_id = 0;
                     $groupby_description = $i18n->__('Unknown');
                 }
                 break;
             case 'edition':
                 if ($issue->getEditions()) {
                     $groupby_id = $issue->getFirstAffectedEdition()->getID();
                     $groupby_description = $issue->getFirstAffectedEdition()->getName();
                 } else {
                     $groupby_id = 0;
                     $groupby_description = $i18n->__('None');
                 }
                 break;
             case 'build':
                 if ($issue->getBuilds()) {
                     $groupby_id = $issue->getFirstAffectedBuild()->getID();
                     $groupby_description = $issue->getFirstAffectedBuild()->getName();
                 } else {
                     $groupby_id = 0;
                     $groupby_description = $i18n->__('None');
                 }
                 break;
             case 'component':
                 if ($issue->getComponents()) {
                     $groupby_id = $issue->getFirstAffectedComponent()->getID();
                     $groupby_description = $issue->getFirstAffectedComponent()->getName();
                 } else {
                     $groupby_id = 0;
                     $groupby_description = $i18n->__('None');
                 }
                 break;
             case 'priority':
                 if ($issue->getPriority() instanceof TBGPriority) {
                     $groupby_id = $issue->getPriority()->getID();
                     $groupby_description = $issue->getPriority()->getName();
                 } else {
                     $groupby_id = 0;
                     $groupby_description = $i18n->__('Unknown');
                 }
                 break;
             case 'issuetype':
                 if ($issue->getIssueType() instanceof TBGIssuetype) {
                     $groupby_id = $issue->getIssueType()->getID();
                     $groupby_description = $issue->getIssueType()->getName();
                 } else {
                     $groupby_id = 0;
                     $groupby_description = $i18n->__('Unknown');
                 }
                 break;
             case 'milestone':
                 if ($issue->getMilestone() instanceof TBGMilestone) {
                     $groupby_id = $issue->getMilestone()->getID();
                     $groupby_description = $issue->getMilestone()->getName();
                 } else {
                     $groupby_id = 0;
                     $groupby_description = $i18n->__('Not targetted');
                 }
                 break;
             case 'assignee':
                 if ($issue->getAssignee() instanceof TBGIdentifiableClass) {
                     $groupby_id = $issue->getAssignee()->getID();
                     $groupby_description = $issue->getAssignee()->getName();
                 } else {
                     $groupby_id = 0;
                     $groupby_description = $i18n->__('Not assigned');
                 }
                 break;
             case 'state':
                 if ($issue->isClosed()) {
                     $groupby_id = TBGIssue::STATE_CLOSED;
                     $groupby_description = $i18n->__('Closed');
                 } else {
                     $groupby_id = TBGIssue::STATE_OPEN;
                     $groupby_description = $i18n->__('Open');
                 }
                 break;
         }
         if ($groupby_id !== $prevgroup_id) {
             $showtablestart = true;
             $showheader = true;
         }
         $prevgroup_id = $groupby_id;
     }
     return array($showtablestart, $showheader, $prevgroup_id, $groupby_description);
 }
 public function perform(TBGIssue $issue, $request = null)
 {
     switch ($this->_action_type) {
         case self::ACTION_ASSIGN_ISSUE_SELF:
             $issue->setAssignee(TBGContext::getUser());
             break;
         case self::ACTION_SET_STATUS:
             if ($this->getTargetValue()) {
                 $issue->setStatus(TBGContext::factory()->TBGStatus((int) $this->getTargetValue()));
             } else {
                 $issue->setStatus($request->getParameter('status_id'));
             }
             break;
         case self::ACTION_SET_MILESTONE:
             if ($this->getTargetValue()) {
                 $issue->setMilestone(TBGContext::factory()->TBGMilestone((int) $this->getTargetValue()));
             } else {
                 $issue->setMilestone($request->getParameter('milestone_id'));
             }
             break;
         case self::ACTION_CLEAR_PRIORITY:
             $issue->setPriority(null);
             break;
         case self::ACTION_SET_PRIORITY:
             if ($this->getTargetValue()) {
                 $issue->setPriority(TBGContext::factory()->TBGPriority((int) $this->getTargetValue()));
             } else {
                 $issue->setPriority($request->getParameter('priority_id'));
             }
             break;
         case self::ACTION_CLEAR_PERCENT:
             $issue->setPercentCompleted(0);
             break;
         case self::ACTION_SET_PERCENT:
             if ($this->getTargetValue()) {
                 $issue->setPercentCompleted((int) $this->getTargetValue());
             } else {
                 $issue->setPercentCompleted((int) $request->getParameter('percent_complete_id'));
             }
             break;
         case self::ACTION_CLEAR_RESOLUTION:
             $issue->setResolution(null);
             break;
         case self::ACTION_SET_RESOLUTION:
             if ($this->getTargetValue()) {
                 $issue->setResolution(TBGContext::factory()->TBGResolution((int) $this->getTargetValue()));
             } else {
                 $issue->setResolution($request->getParameter('resolution_id'));
             }
             break;
         case self::ACTION_CLEAR_REPRODUCABILITY:
             $issue->setReproducability(null);
             break;
         case self::ACTION_SET_REPRODUCABILITY:
             if ($this->getTargetValue()) {
                 $issue->setReproducability(TBGContext::factory()->TBGReproducability((int) $this->getTargetValue()));
             } else {
                 $issue->setReproducability($request->getParameter('reproducability_id'));
             }
             break;
         case self::ACTION_CLEAR_ASSIGNEE:
             $issue->unsetAssignee();
             break;
         case self::ACTION_ASSIGN_ISSUE:
             if ($this->getTargetValue()) {
                 $issue->setAssignee(TBGContext::factory()->TBGUser((int) $this->getTargetValue()));
             } else {
                 $assignee = null;
                 switch ($request->getParameter('assignee_type')) {
                     case TBGIdentifiableClass::TYPE_USER:
                         $assignee = TBGContext::factory()->TBGUser($request->getParameter('assignee_id'));
                         break;
                     case TBGIdentifiableClass::TYPE_TEAM:
                         $assignee = TBGContext::factory()->TBGTeam($request->getParameter('assignee_id'));
                         break;
                 }
                 if ((bool) $request->getParameter('assignee_teamup', false)) {
                     $team = new TBGTeam();
                     $team->setName($assignee->getBuddyname() . ' & ' . TBGContext::getUser()->getBuddyname());
                     $team->setOndemand(true);
                     $team->save();
                     $team->addMember($assignee);
                     $team->addMember(TBGContext::getUser());
                     $assignee = $team;
                 }
                 $issue->setAssignee($assignee);
             }
             break;
         case self::ACTION_USER_START_WORKING:
             $issue->clearUserWorkingOnIssue();
             if ($issue->getAssignee() instanceof TBGTeam && $issue->getAssignee()->isOndemand()) {
                 $members = $issue->getAssignee()->getMembers();
                 $issue->startWorkingOnIssue(array_shift($members));
             } else {
                 $issue->startWorkingOnIssue($issue->getAssignee());
             }
             break;
         case self::ACTION_USER_STOP_WORKING:
             if ($request->getParameter('did', 'nothing') == 'nothing') {
                 $issue->clearUserWorkingOnIssue();
             } else {
                 $issue->stopWorkingOnIssue();
             }
             break;
     }
 }
 public function perform(TBGIssue $issue, $request = null)
 {
     switch ($this->_action_type) {
         case self::ACTION_ASSIGN_ISSUE_SELF:
             $issue->setAssignee(TBGContext::getUser());
             break;
         case self::ACTION_SET_STATUS:
             if ($this->getTargetValue()) {
                 $issue->setStatus(TBGContext::factory()->TBGStatus((int) $this->getTargetValue()));
             } else {
                 $issue->setStatus($request['status_id']);
             }
             break;
         case self::ACTION_SET_MILESTONE:
             if ($this->getTargetValue()) {
                 $issue->setMilestone(TBGContext::factory()->TBGMilestone((int) $this->getTargetValue()));
             } else {
                 $issue->setMilestone($request['milestone_id']);
             }
             break;
         case self::ACTION_CLEAR_PRIORITY:
             $issue->setPriority(null);
             break;
         case self::ACTION_SET_PRIORITY:
             if ($this->getTargetValue()) {
                 $issue->setPriority(TBGContext::factory()->TBGPriority((int) $this->getTargetValue()));
             } else {
                 $issue->setPriority($request['priority_id']);
             }
             break;
         case self::ACTION_CLEAR_PERCENT:
             $issue->setPercentCompleted(0);
             break;
         case self::ACTION_SET_PERCENT:
             if ($this->getTargetValue()) {
                 $issue->setPercentCompleted((int) $this->getTargetValue());
             } else {
                 $issue->setPercentCompleted((int) $request['percent_complete_id']);
             }
             break;
         case self::ACTION_CLEAR_DUPLICATE:
             $issue->setDuplicateOf(null);
             break;
         case self::ACTION_SET_DUPLICATE:
             $issue->setDuplicateOf($request['duplicate_issue_id']);
             break;
         case self::ACTION_CLEAR_RESOLUTION:
             $issue->setResolution(null);
             break;
         case self::ACTION_SET_RESOLUTION:
             if ($this->getTargetValue()) {
                 $issue->setResolution(TBGContext::factory()->TBGResolution((int) $this->getTargetValue()));
             } else {
                 $issue->setResolution($request['resolution_id']);
             }
             break;
         case self::ACTION_CLEAR_REPRODUCABILITY:
             $issue->setReproducability(null);
             break;
         case self::ACTION_SET_REPRODUCABILITY:
             if ($this->getTargetValue()) {
                 $issue->setReproducability(TBGContext::factory()->TBGReproducability((int) $this->getTargetValue()));
             } else {
                 $issue->setReproducability($request['reproducability_id']);
             }
             break;
         case self::ACTION_CLEAR_ASSIGNEE:
             $issue->clearAssignee();
             break;
         case self::ACTION_ASSIGN_ISSUE:
             if ($this->getTargetValue()) {
                 $target_details = explode('_', $this->_target_value);
                 if ($target_details[0] == 'user') {
                     $assignee = TBGUser::getB2DBTable()->selectById((int) $target_details[1]);
                 } else {
                     $assignee = TBGTeam::getB2DBTable()->selectById((int) $target_details[1]);
                 }
                 $issue->setAssignee($assignee);
             } else {
                 $assignee = null;
                 switch ($request['assignee_type']) {
                     case 'user':
                         $assignee = TBGUser::getB2DBTable()->selectById((int) $request['assignee_id']);
                         break;
                     case 'team':
                         $assignee = TBGTeam::getB2DBTable()->selectById((int) $request['assignee_id']);
                         break;
                 }
                 if ((bool) $request->getParameter('assignee_teamup', false) && $assignee instanceof TBGUser && $assignee->getID() != TBGContext::getUser()->getID()) {
                     $team = new TBGTeam();
                     $team->setName($assignee->getBuddyname() . ' & ' . TBGContext::getUser()->getBuddyname());
                     $team->setOndemand(true);
                     $team->save();
                     $team->addMember($assignee);
                     $team->addMember(TBGContext::getUser());
                     $assignee = $team;
                 }
                 $issue->setAssignee($assignee);
             }
             break;
         case self::ACTION_USER_START_WORKING:
             $issue->clearUserWorkingOnIssue();
             if ($issue->getAssignee() instanceof TBGTeam && $issue->getAssignee()->isOndemand()) {
                 $members = $issue->getAssignee()->getMembers();
                 $issue->startWorkingOnIssue(array_shift($members));
             } elseif ($issue->getAssignee() instanceof TBGUser) {
                 $issue->startWorkingOnIssue($issue->getAssignee());
             }
             break;
         case self::ACTION_USER_STOP_WORKING:
             if ($request->getParameter('did', 'nothing') == 'nothing') {
                 $issue->clearUserWorkingOnIssue();
             } elseif ($request->getParameter('did', 'nothing') == 'this') {
                 $times = array();
                 if ($request['timespent_manual']) {
                     $times = TBGIssue::convertFancyStringToTime($request['timespent_manual']);
                 } elseif ($request['timespent_specified_type']) {
                     $times = array('points' => 0, 'hours' => 0, 'days' => 0, 'weeks' => 0, 'months' => 0);
                     $times[$request['timespent_specified_type']] = $request['timespent_specified_value'];
                 }
                 if (array_sum($times) > 0) {
                     $times['hours'] *= 100;
                     $spenttime = new TBGIssueSpentTime();
                     $spenttime->setIssue($issue);
                     $spenttime->setUser(TBGContext::getUser());
                     $spenttime->setSpentPoints($times['points']);
                     $spenttime->setSpentHours($times['hours']);
                     $spenttime->setSpentDays($times['days']);
                     $spenttime->setSpentWeeks($times['weeks']);
                     $spenttime->setSpentMonths($times['months']);
                     $spenttime->setActivityType($request['timespent_activitytype']);
                     $spenttime->setComment($request['timespent_comment']);
                     $spenttime->save();
                 }
                 $issue->clearUserWorkingOnIssue();
             } else {
                 $issue->stopWorkingOnIssue();
             }
             break;
     }
 }
예제 #4
0
 protected function _getIssueRelatedUsers(TBGIssue $issue)
 {
     $uids = array();
     $cu = TBGContext::getUser()->getID();
     $ns = $this->getSetting(self::NOTIFY_ISSUE_UPDATED_SELF, $cu);
     // Add all users who's marked this issue as interesting
     $uids = TBGUserIssuesTable::getTable()->getUserIDsByIssueID($issue->getID());
     // Add all users from the team owning the issue if valid
     // or add the owning user if a user owns the issue
     if ($issue->getOwnerType() == TBGIdentifiableClass::TYPE_TEAM) {
         foreach ($issue->getOwner()->getMembers() as $member) {
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     } elseif ($issue->getOwnerType() == TBGIdentifiableClass::TYPE_USER) {
         if (!($issue->getOwnerID() == $cu && !$ns)) {
             $uids[$issue->getOwnerID()] = $issue->getOwnerID();
         }
     }
     // Add the poster
     if ($this->getSetting(self::NOTIFY_ISSUE_POSTED_UPDATED, $issue->getPostedByID())) {
         if (!($issue->getPostedByID() == $cu && !$ns)) {
             $uids[$issue->getPostedByID()] = $issue->getPostedByID();
         }
     }
     // Add all users from the team assigned to the issue if valid
     // or add the assigned user if a user is assigned to the issue
     if ($issue->getAssigneeType() == TBGIdentifiableClass::TYPE_TEAM) {
         // Get team member IDs
         foreach ($issue->getAssignee()->getMembers() as $member) {
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             if (!$this->getSetting(self::NOTIFY_ISSUE_TEAMASSIGNED_UPDATED, $member->getID())) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     } elseif ($issue->getAssigneeType() == TBGIdentifiableClass::TYPE_USER) {
         if (!($issue->getAssigneeID() == $cu && !$ns) && !!$this->getSetting(self::NOTIFY_ISSUE_ASSIGNED_UPDATED, $issue->getAssigneeID())) {
             $uids[$issue->getAssigneeID()] = $issue->getAssigneeID();
         }
     }
     // Add all users in the team who leads the project, if valid
     // or add the user who leads the project, if valid
     if ($issue->getProject()->getLeaderType() == TBGIdentifiableClass::TYPE_TEAM) {
         foreach ($issue->getProject()->getLeader()->getMembers() as $member) {
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     } elseif ($issue->getProject()->getLeaderType() == TBGIdentifiableClass::TYPE_USER) {
         if (!($issue->getProject()->getLeaderID() == $cu && !$ns) && !!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $issue->getProject()->getLeaderID())) {
             $uids[$issue->getProject()->getLeaderID()] = $issue->getProject()->getLeaderID();
         }
     }
     // Same for QA
     if ($issue->getProject()->getQaResponsibleType() == TBGIdentifiableClass::TYPE_TEAM) {
         foreach ($issue->getProject()->getQaResponsible()->getMembers() as $member) {
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     } elseif ($issue->getProject()->getQaResponsibleType() == TBGIdentifiableClass::TYPE_USER) {
         if (!($issue->getProject()->getQaResponsibleID() == $cu && !$ns) && !!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $issue->getProject()->getQaResponsibleID())) {
             $uids[$issue->getProject()->getQaResponsibleID()] = $issue->getProject()->getQaResponsibleID();
         }
     }
     foreach ($issue->getProject()->getAssignedTeams() as $team_id => $assignments) {
         foreach (TBGContext::factory()->TBGTeam($team_id)->getMembers() as $member) {
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     }
     foreach ($issue->getProject()->getAssignedUsers() as $user_id => $assignments) {
         $member = TBGContext::factory()->TBGUser($user_id);
         if (!($member->getID() == $cu && !$ns) && !!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $member->getID())) {
             $uids[$member->getID()] = $member->getID();
         }
     }
     // Add all users relevant for all affected editions
     foreach ($issue->getEditions() as $edition_list) {
         if ($edition_list['edition']->getLeaderType() == TBGIdentifiableClass::TYPE_TEAM) {
             foreach ($edition_list['edition']->getLeader()->getMembers() as $member) {
                 if ($member->getID() == $cu && !$ns) {
                     continue;
                 }
                 if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                     continue;
                 }
                 $uids[$member->getID()] = $member->getID();
             }
         } elseif ($edition_list['edition']->getLeaderType() == TBGIdentifiableClass::TYPE_USER) {
             if (!($edition_list['edition']->getLeaderID() == $cu && !$ns) && !!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $edition_list['edition']->getLeaderID())) {
                 $uids[$edition_list['edition']->getLeaderID()] = $edition_list['edition']->getLeaderID();
             }
         }
         if ($edition_list['edition']->getQaResponsibleType() == TBGIdentifiableClass::TYPE_TEAM) {
             foreach ($edition_list['edition']->getQaResponsible()->getMembers() as $member) {
                 if ($member->getID() == $cu && !$ns) {
                     continue;
                 }
                 if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                     continue;
                 }
                 $uids[$member->getID()] = $member->getID();
             }
         } elseif ($edition_list['edition']->getQaResponsibleType() == TBGIdentifiableClass::TYPE_USER) {
             if (!($edition_list['edition']->getQaResponsibleID() == $cu && !$ns) && !!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $edition_list['edition']->getQaResponsibleID())) {
                 $uids[$edition_list['edition']->getQaResponsibleID()] = $edition_list['edition']->getQaResponsibleID();
             }
         }
         foreach ($edition_list['edition']->getAssignedTeams() as $team_id => $assignments) {
             foreach (TBGContext::factory()->TBGTeam($team_id)->getMembers() as $member) {
                 if ($member->getID() == $cu && !$ns) {
                     continue;
                 }
                 if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                     continue;
                 }
                 $uids[$member->getID()] = $member->getID();
             }
         }
         foreach ($edition_list['edition']->getAssignedUsers() as $user_id => $assignments) {
             $member = TBGContext::factory()->TBGUser($user_id);
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             if (!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $member->getID())) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     }
     // Add all users relevant for all affected components
     foreach ($issue->getComponents() as $component_list) {
         foreach ($component_list['component']->getAssignedTeams() as $team_id => $assignments) {
             foreach (TBGContext::factory()->TBGTeam($team_id)->getMembers() as $member) {
                 if ($member->getID() == $cu && !$ns) {
                     continue;
                 }
                 if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                     continue;
                 }
                 $uids[$member->getID()] = $member->getID();
             }
         }
         foreach ($component_list['component']->getAssignedUsers() as $user_id => $assignments) {
             $member = TBGContext::factory()->TBGUser($user_id);
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             if (!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $member->getID())) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     }
     foreach ($uids as $uid => $val) {
         if ($this->getSetting(self::NOTIFY_ISSUE_ONCE, $uid)) {
             if ($this->getSetting(self::NOTIFY_ISSUE_ONCE . '_' . $issue->getID(), $uid)) {
                 unset($uids[$uid]);
                 continue;
             } else {
                 $this->saveSetting(self::NOTIFY_ISSUE_ONCE . '_' . $issue->getID(), 1, $uid);
             }
         }
         $uids[$uid] = TBGContext::factory()->TBGUser($uid);
     }
     return $uids;
 }