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; } }
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; }