/** * @param Command $command * @return mixed[] */ private static function getCommandIssues(Command $command) { $issueArray = array(); $issues = $command->getIssueSelection()->getIssueList(); foreach ($issues as $id => $issue) { $driftMgr = $issue->getDriftMgr(); $driftMgrColor = $issue->getDriftColor($driftMgr); $drift = $issue->getDrift(); $driftColor = $issue->getDriftColor($drift); $user = UserCache::getInstance()->getUser($issue->getHandlerId()); $issueArray[$id] = array("mantisLink" => Tools::mantisIssueURL($issue->getId(), NULL, TRUE), "bugid" => Tools::issueInfoURL(sprintf("%07d\n", $issue->getId())), "extRef" => $issue->getTcId(), "project" => $issue->getProjectName(), "target" => $issue->getTargetVersion(), "status" => $issue->getCurrentStatusName(), "progress" => round(100 * $issue->getProgress()), "effortEstim" => $issue->getEffortEstim() + $issue->getEffortAdd(), "mgrEffortEstim" => $issue->getMgrEffortEstim(), "elapsed" => $issue->getElapsed(), "driftMgr" => $driftMgr, "driftMgrColor" => $driftMgrColor, "drift" => $drift, "driftColor" => $driftColor, "duration" => $issue->getDuration(), "summary" => $issue->getSummary(), "type" => $issue->getType(), "handlerName" => $user->getName()); } return $issueArray; }
/** * * @param type $relationshipList */ private static function getFormattedRelationshipsInfo($issue) { $relationships = $issue->getRelationships(); $relationshipsInfo = array(); foreach ($relationships as $relType => $bugids) { $typeLabel = Issue::getRelationshipLabel($relType); foreach ($bugids as $bugid) { $relatedIssue = IssueCache::getInstance()->getIssue($bugid); $relationshipsInfo["{$bugid}"] = array('url' => Tools::issueInfoURL($bugid), 'relationship' => $typeLabel, 'status' => $relatedIssue->getCurrentStatusName(), 'progress' => round(100 * $relatedIssue->getProgress())); } } ksort($relationshipsInfo); return $relationshipsInfo; }
/** * * @param type $relationshipList */ private static function getFormattedRelationshipsInfo($issue) { $relationships = $issue->getRelationships(); $relationshipsInfo = array(); foreach ($relationships as $relType => $bugids) { $typeLabel = Issue::getRelationshipLabel($relType); foreach ($bugids as $bugid) { $relatedIssue = IssueCache::getInstance()->getIssue($bugid); $summary = htmlspecialchars(preg_replace('![\\t\\r\\n]+!', ' ', $relatedIssue->getSummary())); $relationshipsInfo["{$bugid}"] = array('url' => Tools::issueInfoURL($bugid), 'relationship' => $typeLabel, 'status' => $relatedIssue->getCurrentStatusName(), 'progress' => round(100 * $relatedIssue->getProgress()), 'summary' => $summary); } } ksort($relationshipsInfo); return $relationshipsInfo; }
/** * * returns an array of [user][activity] * activity in (elapsed, sidetask, other, external, leave) * */ public function execute() { $team = TeamCache::getInstance()->getTeam($this->teamid); $members = $team->getActiveMembers(null, null, true); $issueList = $this->inputIssueSel->getIssueList(); // --- $userList = array(); $formattedTaskListPerUser = array(); $iSelPerUser = array(); $iSelOpenTasks = new IssueSelection('nonResolved'); /* @var $issue Issue */ foreach ($issueList as $issue) { try { // for each issue that is not resolved, add reestimated to handler. if (!$issue->isResolved()) { $userId = $issue->getHandlerId(); if (0 != $userId) { $user = UserCache::getInstance()->getUser($userId); $userList[$userId] = $user->getRealname(); } else { $userList[0] = '(unknown 0)'; } if (!$this->isExtRef) { $displayedTaskId = NULL; } else { $displayedTaskId = NULL != $issue->getTcId() && false != trim($issue->getTcId()) ? $issue->getTcId() : 'm-' . $issue->getId(); } $tooltipAttr = $issue->getTooltipItems($this->teamid, $this->sessionUserid, $this->isManager); // add task summary in front $tooltipAttr = array(T_('Summary') => $issue->getSummary()) + $tooltipAttr; $formattedTaskListPerUser[$userId][] = Tools::issueInfoURL($issue->getId(), $tooltipAttr, FALSE, $displayedTaskId); if (!array_key_exists($userId, $iSelPerUser)) { $iSelPerUser[$userId] = new IssueSelection('user_' . $userId); } $iSelPerUser[$userId]->addIssue($issue->getId()); $iSelOpenTasks->addIssue($issue->getId()); } } catch (Exception $e) { self::$logger->error("BacklogPerUserIndicator: " . $e->getMessage()); } } // sort by name, keep key-val association asort($userList); asort($members); // team members $usersActivity = array(); foreach ($members as $userId => $userName) { if (array_key_exists($userId, $iSelPerUser)) { $isel = $iSelPerUser[$userId]; $progress = round($isel->getProgress() * 100); $backlog = $isel->duration; $taskList = implode(', ', $formattedTaskListPerUser[$userId]); $nbTasks = count($formattedTaskListPerUser[$userId]); } else { $progress = 0; $backlog = ''; $taskList = ''; $nbTasks = ''; } $usersActivity[$userId] = array('handlerName' => $userName, 'backlog' => $backlog, 'nbTasks' => $nbTasks, 'progress' => $progress, 'taskList' => $taskList); } // users not in team foreach ($userList as $userId => $userName) { if (!array_key_exists($userId, $members) && 0 != $userId) { $isel = $iSelPerUser[$userId]; $usersActivity[$userId] = array('handlerName' => '<span class="warn_font">' . $userName . '</span>', 'backlog' => $isel->duration, 'nbTasks' => count($formattedTaskListPerUser[$userId]), 'progress' => round($isel->getProgress() * 100), 'taskList' => implode(', ', $formattedTaskListPerUser[$userId])); } } // unassigned tasks if (array_key_exists(0, $userList)) { $isel = $iSelPerUser[0]; $usersActivity[0] = array('handlerName' => '<span class="error_font">' . T_('(unknown 0)') . '</span>', 'backlog' => $isel->duration, 'nbTasks' => count($formattedTaskListPerUser[0]), 'progress' => round($isel->getProgress() * 100), 'taskList' => implode(', ', $formattedTaskListPerUser[0])); } // Total $totalArray = array('handlerName' => T_('TOTAL'), 'backlog' => $iSelOpenTasks->duration, 'nbTasks' => count($iSelOpenTasks->getIssueList()), 'progress' => round($iSelOpenTasks->getProgress() * 100), 'taskList' => ''); #var_dump($usersActivity); $this->execData = array(); $this->execData['userArray'] = $usersActivity; $this->execData['totalArray'] = $totalArray; }
/** * */ public function execute() { // === get timetracks for each Issue, $team = TeamCache::getInstance()->getTeam($this->teamid); $useridList = array_keys($team->getActiveMembers($this->startTimestamp, $this->endTimestamp)); $timeTracks = $this->inputIssueSel->getTimetracks($useridList, $this->startTimestamp, $this->endTimestamp); // === get project list // TODO $projectidList = array_keys($this->getProjectList()); // === process timetracks $rawInfoPerCat = $this->getRawInfoPerCategory($timeTracks, $projectidList); // === build $infoPerCat $infoPerCat = array(); foreach ($rawInfoPerCat['durationPerCat'] as $catName => $duration) { $catInfo = array('catName' => $catName, 'duration' => $duration); // create formatedBugList (with tooltips) if ($this->isDisplayTasks) { $bugList = $rawInfoPerCat['bugidsPerCat'][$catName]; $formatedBugs = ''; foreach ($bugList as $bugid => $bugDuration) { $issue = IssueCache::getInstance()->getIssue($bugid); $tooltipAttributes = array(T_('Project') => $issue->getProjectName(), T_('Summary') => $issue->getSummary(), T_('Elapsed') => $bugDuration); if (!empty($formatedBugs)) { $formatedBugs .= ', ' . Tools::issueInfoURL($bugid, $tooltipAttributes); } else { $formatedBugs = Tools::issueInfoURL($bugid, $tooltipAttributes); } } $catInfo['formatedBugsPerCategory'] = $formatedBugs; } $infoPerCat[$catName] = $catInfo; } $this->execData = $infoPerCat; return $this->execData; }
/** * Get consistency errors * @param int $teamid * @return mixed[] */ private function getTeamConsistencyErrors($teamid) { if (self::$logger->isDebugEnabled()) { self::$logger->debug("getTeamConsistencyErrors teamid={$teamid}"); } // get team projects $issueList = TeamCache::getInstance()->getTeam($teamid)->getTeamIssueList(true, false); if (self::$logger->isDebugEnabled()) { self::$logger->debug("getTeamConsistencyErrors nbIssues=" . count($issueList)); } #$ccheck = new ConsistencyCheck2($issueList); $ccheck = new ConsistencyCheck2($issueList, $teamid); $cerrList = $ccheck->check(); $cerrs = NULL; if (count($cerrList) > 0) { $i = 0; foreach ($cerrList as $cerr) { $i += 1; if (NULL != $cerr->userId) { $user = UserCache::getInstance()->getUser($cerr->userId); } else { $user = NULL; } if (Issue::exists($cerr->bugId)) { $issue = IssueCache::getInstance()->getIssue($cerr->bugId); $summary = $issue->getSummary(); $projName = $issue->getProjectName(); $refExt = $issue->getTcId(); } else { $summary = ''; $projName = ''; } $cerrs[$i] = array('userName' => isset($user) ? $user->getName() : '', 'issueURL' => NULL == $cerr->bugId ? '' : Tools::issueInfoURL($cerr->bugId, $summary), 'mantisURL' => NULL == $cerr->bugId ? '' : Tools::mantisIssueURL($cerr->bugId, $summary, true), 'extRef' => NULL == $refExt ? '' : $refExt, 'date' => NULL == $cerr->timestamp ? '' : date("Y-m-d", $cerr->timestamp), 'status' => NULL == $cerr->status ? '' : Constants::$statusNames[$cerr->status], 'severity' => $cerr->getLiteralSeverity(), 'project' => $projName, 'desc' => $cerr->desc, 'summary' => $summary); } } return $cerrs; }
/** * @param Issue $issue * @param boolean $isManager * @return mixed[] */ private function getSmartyDirftedIssue(Issue $issue, $isManager) { $driftMgr = $isManager ? $issue->getDriftMgr() : 0; $drift = $issue->getDrift(); $driftMgrColor = NULL; if ($isManager) { if ($driftMgr < -1) { $driftMgrColor = "#61ed66"; } else { if ($driftMgr > 1) { $driftMgrColor = "#fcbdbd"; } } $driftMgr = round($driftMgr, 2); } $driftColor = NULL; if ($drift < -1) { $driftColor = "#61ed66"; } else { if ($drift > 1) { $driftColor = "#fcbdbd"; } } return array('issueURL' => Tools::issueInfoURL($issue->getId()), 'mantisURL' => Tools::mantisIssueURL($issue->getId(), NULL, true), 'projectName' => $issue->getProjectName(), 'targetVersion' => $issue->getTargetVersion(), 'driftMgrColor' => $driftMgrColor, 'driftMgr' => $driftMgr, 'driftColor' => $driftColor, 'drift' => round($drift, 2), 'backlog' => $issue->getBacklog(), 'progress' => round(100 * $issue->getProgress()), 'currentStatusName' => $issue->getCurrentStatusName(), 'summary' => $issue->getSummary()); }
/** * Get the consistency errors * @param int $teamid * @return mixed[][] */ private function getConsistencyErrors($teamid) { $issueList = TeamCache::getInstance()->getTeam($teamid)->getTeamIssueList(TRUE); $ccheck = new ConsistencyCheck2($issueList, $teamid); $cerrList = $ccheck->checkBadBacklog(); #$cerrList2 = $ccheck->checkUnassignedTasks(); $consistencyErrors = NULL; if (count($cerrList) > 0 || count($cerrList2) > 0) { $consistencyErrors = array(); foreach ($cerrList as $cerr) { $user = UserCache::getInstance()->getUser($cerr->userId); $issue = IssueCache::getInstance()->getIssue($cerr->bugId); $titleAttr = array(T_('Project') => $issue->getProjectName(), T_('Summary') => $issue->getSummary()); $consistencyErrors[] = array('issueURL' => Tools::issueInfoURL($cerr->bugId, $titleAttr), 'issueStatus' => Constants::$statusNames[$cerr->status], 'date' => date("Y-m-d", $cerr->timestamp), 'user' => $user->getName(), 'severity' => $cerr->getLiteralSeverity(), 'severityColor' => $cerr->getSeverityColor(), 'desc' => $cerr->desc); } /* if (0 != count($cerrList2)) { $consistencyErrors[] = array( 'issueURL' => '', 'issueStatus' => '-', 'date' => '-', 'user' => '('.T_('unknown').')', 'severity' => T_('Warning'), 'severityColor' => 'color:orange', 'desc' => count($cerrList2).' '.T_('tasks are not assigned to anybody.') ); } */ } return $consistencyErrors; }
/** * @param int $teamid * @param bool $withSupport * @return mixed[] */ private function getIssuesInDrift($teamid, $withSupport = TRUE) { $team = TeamCache::getInstance()->getTeam($teamid); $mList = $team->getMembers(); $projList = $team->getProjects(true, false); // exclude disabled projects $issueArray = NULL; foreach ($mList as $id => $name) { $user = UserCache::getInstance()->getUser($id); // do not take observer's tasks if (!$user->isTeamDeveloper($teamid) && !$user->isTeamCustomer($teamid) && !$user->isTeamManager($teamid)) { if (self::$logger->isDebugEnabled()) { self::$logger->debug("getIssuesInDrift user {$id} ({$name}) excluded."); } continue; } // TODO WARN: unassigned issues will be ommitted !! $issueList = $user->getAssignedIssues($projList); foreach ($issueList as $issue) { $driftMgrEE = $issue->getDriftMgr($withSupport); $driftEE = $issue->getDrift($withSupport); if ($driftMgrEE > 0 || $driftEE > 0) { $tooltipAttr = $issue->getTooltipItems($teamid, $this->session_userid); $issueArray[] = array('bugId' => Tools::issueInfoURL($issue->getId(), $tooltipAttr), 'handlerName' => $user->getName(), 'projectName' => $issue->getProjectName(), 'progress' => round(100 * $issue->getProgress()), 'effortEstimMgr' => $issue->getMgrEffortEstim(), 'effortEstim' => $issue->getEffortEstim() + $issue->getEffortAdd(), 'elapsed' => $issue->getElapsed(), 'reestimated' => $issue->getReestimated(), 'backlog' => $issue->getBacklog(), 'driftPrelEE' => $driftMgrEE, 'driftEE' => $driftEE, 'statusName' => $issue->getCurrentStatusName(), 'summary' => $issue->getSummary()); } } } return $issueArray; }
/** * Drift Stats on a given Issue.class List * * @param Issue[] $issueList * @param bool $withSupport * @return mixed[] driftStats * * TODO move this method to IssueSelection class */ private function getIssuesDriftStats(array $issueList, $withSupport = true) { if (NULL == $issueList) { echo "<div style='color:red'>ERROR getIssuesDriftStats: Issue List is NULL !<br/></div>"; self::$logger->error("getIssuesDriftStats(): Issue List is NULL !"); return 0; } if (0 == count($issueList)) { echo "<div style='color:red'>ERROR getIssuesDriftStats: Issue List is empty !<br/></div>"; self::$logger->error("getIssuesDriftStats(): Issue List is empty !"); return 0; } $derive = 0; $deriveETA = 0; $nbDriftsNeg = 0; $nbDriftsEqual = 0; $nbDriftsPos = 0; $nbDriftsNegETA = 0; $nbDriftsEqualETA = 0; $nbDriftsPosETA = 0; $driftNeg = 0; $driftEqual = 0; $driftPos = 0; $driftNegETA = 0; $driftEqualETA = 0; $driftPosETA = 0; $formatedBugidNegList = ""; $formatedBugidPosList = ""; $formatedBugidEqualList = ""; $bugidEqualList = ""; foreach ($issueList as $issue) { // compute total drift $issueDrift = $issue->getDrift($withSupport); $derive += $issueDrift; $issueDriftMgrEE = $issue->getDriftMgr($withSupport); $deriveETA += $issueDriftMgrEE; if (self::$logger->isDebugEnabled()) { self::$logger->debug("getIssuesDriftStats() Found : bugid=" . $issue->getId() . ", proj=" . $issue->getProjectId() . ", effortEstim=" . $issue->getEffortEstim() . ", BS=" . $issue->getEffortAdd() . ", elapsed = " . $issue->getElapsed() . ", drift={$issueDrift}, DriftMgrEE={$issueDriftMgrEE}"); } // get drift stats. equal is when drif = +-1 if ($issueDrift < -1) { $nbDriftsNeg++; $driftNeg += $issueDrift; if ($formatedBugidNegList != "") { $formatedBugidNegList .= ', '; } $formatedBugidNegList .= Tools::issueInfoURL($issue->getId(), $issue->getSummary()); } elseif ($issueDrift > 1) { $nbDriftsPos++; $driftPos += $issueDrift; if ($formatedBugidPosList != "") { $formatedBugidPosList .= ', '; } $formatedBugidPosList .= Tools::issueInfoURL($issue->getId(), $issue->getSummary()); } else { $nbDriftsEqual++; $driftEqual += $issueDrift; if ($formatedBugidEqualList != "") { $formatedBugidEqualList .= ', '; } $formatedBugidEqualList .= Tools::issueInfoURL($issue->getId(), $issue->getSummary()); if ($bugidEqualList != "") { $bugidEqualList .= ', '; } $bugidEqualList .= $issue->getId(); } if ($issueDriftMgrEE < -1) { $nbDriftsNegETA++; $driftNegETA += $issueDriftMgrEE; } elseif ($issueDriftMgrEE > 1) { $nbDriftsPosETA++; $driftPosETA += $issueDriftMgrEE; } else { $nbDriftsEqualETA++; $driftEqualETA += $issueDriftMgrEE; } } if (self::$logger->isDebugEnabled()) { self::$logger->debug("derive totale (" . Tools::formatDate("%B %Y", $this->startTimestamp) . ") = {$derive}"); self::$logger->debug("derive totale ETA(" . Tools::formatDate("%B %Y", $this->startTimestamp) . ") = {$deriveETA}"); self::$logger->debug("Nbre Bugs en derive : {$nbDriftsPos}"); self::$logger->debug("Nbre Bugs a l'equilibre : {$nbDriftsEqual}"); self::$logger->debug("Nbre Bugs en avance : {$nbDriftsNeg}"); self::$logger->debug("Nbre Bugs en derive ETA: {$nbDriftsPosETA}"); self::$logger->debug("Nbre Bugs a l'equilibre ETA: {$nbDriftsEqualETA}"); self::$logger->debug("Nbre Bugs en avance ETA: {$nbDriftsNegETA}"); } return array("totalDrift" => $derive, "totalDriftETA" => $deriveETA, "driftPos" => $driftPos, "driftEqual" => $driftEqual, "driftNeg" => $driftNeg, "driftPosETA" => $driftPosETA, "driftEqualETA" => $driftEqualETA, "driftNegETA" => $driftNegETA, "nbDriftsPos" => $nbDriftsPos, "nbDriftsEqual" => $nbDriftsEqual, "nbDriftsNeg" => $nbDriftsNeg, "nbDriftsPosETA" => $nbDriftsPosETA, "nbDriftsEqualETA" => $nbDriftsEqualETA, "nbDriftsNegETA" => $nbDriftsNegETA, "formatedBugidPosList" => $formatedBugidPosList, "formatedBugidEqualList" => $formatedBugidEqualList, "formatedBugidNegList" => $formatedBugidNegList, "bugidEqualList" => $bugidEqualList); }
/** * Get consistency errors * @return mixed[] */ private function getConsistencyErrors() { $consistencyErrors = array(); // if null, array_merge fails ! if (0 != $this->teamid) { // only this team's projects #$teamList = $this->teamList; $teamList = array($this->teamid => $this->teamList[$this->teamid]); // except disabled projects $projList = $this->session_user->getProjectList($teamList, true, false); $issueList = $this->session_user->getAssignedIssues($projList, true); $ccheck = new ConsistencyCheck2($issueList, $this->teamid); $cerrList = $ccheck->check(); if (count($cerrList) > 0) { foreach ($cerrList as $cerr) { if ($this->session_user->getId() == $cerr->userId) { $issue = IssueCache::getInstance()->getIssue($cerr->bugId); $titleAttr = array(T_('Project') => $issue->getProjectName(), T_('Summary') => $issue->getSummary()); $consistencyErrors[] = array('issueURL' => Tools::issueInfoURL($cerr->bugId, $titleAttr), 'status' => Constants::$statusNames[$cerr->status], 'desc' => $cerr->desc); } } } } return $consistencyErrors; }
/** * $explodeResults contains a list of filterNames + an IssueSelection on the last column. * This function will replace the IssueSelection with a smarty comprehensible array * containing the info to be displayed. * * @param type $explodeResults * @param type $filterDisplayNames */ private function getIssues($explodeResults, $filterDisplayNames, $smartyVariables) { $iselIdx = count($explodeResults[0]) - 1; $smartyObj = array(); // find out which issues will have a tooltip if (0 != $this->maxTooltipsPerPage) { $bugWithTooltipList = @array_keys($this->inputIssueSel->getLastUpdatedList($this->maxTooltipsPerPage)); #echo "bugWithTooltipList = ".implode(',', $bugWithTooltipList).'<br>'; } foreach ($explodeResults as $line) { $isel = $line[$iselIdx]; // format Issues list $formatedResolvedList = ''; $formatedOpenList = ''; $formatedNewList = ''; foreach ($isel->getIssueList() as $bugid => $issue) { if (0 != $this->maxTooltipsPerPage && !in_array($issue->getId(), $bugWithTooltipList)) { // display default one-line tooltip $tooltipAttr = NULL; } else { if (0 != $this->userid) { $tooltipAttr = $issue->getTooltipItems($this->teamid, $this->userid); } else { $tooltipAttr = $issue->getTooltipItems($this->teamid, 0, $this->isManager); } if (!array_key_exists(T_('Summary'), $tooltipAttr)) { // insert in front $tooltipAttr = array(T_('Summary') => $issue->getSummary()) + $tooltipAttr; } } if (Constants::$status_new == $issue->getCurrentStatus()) { if (!empty($formatedNewList)) { $formatedNewList .= ', '; } $formatedNewList .= Tools::issueInfoURL($bugid, $tooltipAttr); } elseif ($issue->getCurrentStatus() >= $issue->getBugResolvedStatusThreshold()) { if (!empty($formatedResolvedList)) { $formatedResolvedList .= ', '; } $formatedResolvedList .= Tools::issueInfoURL($bugid, $tooltipAttr); } else { if (!empty($formatedOpenList)) { $formatedOpenList .= ', '; } $formatedOpenList .= Tools::issueInfoURL($bugid, $tooltipAttr); } } $smartyElem = array('newList' => $formatedNewList, 'openList' => $formatedOpenList, 'resolvedList' => $formatedResolvedList); // --- $line[$iselIdx] = $smartyElem; $smartyObj[] = $line; } // add TitleLine $titles = $filterDisplayNames; $titles[] = T_("New Tasks"); $titles[] = T_("Current Tasks"); $titles[] = T_("Resolved Tasks"); // set Smarty if (1 == count($explodeResults)) { $totalLine = $smartyObj[0]; // first line is rootElem (TOTAL) } else { $totalLine = array_shift($smartyObj); // first line is rootElem (TOTAL) } $smartyVariables['issuesTitles'] = $titles; $smartyVariables['issuesLines'] = $smartyObj; $smartyVariables['issuesTotal'] = $totalLine; return $smartyVariables; }
/** * return a coma separated list of bugid URLs * @return string */ public function getFormattedIssueList() { $formattedList = ""; // make a copy, the initial issueList may be already sorted on different criteria $sortedList = $this->issueList; ksort($sortedList, SORT_NUMERIC); foreach ($sortedList as $bugid => $issue) { if ("" != $formattedList) { $formattedList .= ', '; } $titleAttr = array(T_('Project') => $issue->getProjectName(), T_('Summary') => $issue->getSummary()); $extRef = $issue->getTcId(); if (!is_null($extRef) && '' != $extRef) { $titleAttr[T_('ExtRef')] = $extRef; } $formattedList .= Tools::issueInfoURL($bugid, $titleAttr); } return $formattedList; }
if ($mgrEffortEstim) { $issue->setMgrEffortEstim($mgrEffortEstim); } if ($effortEstim) { $issue->setEffortEstim($effortEstim); } if ($targetversionid) { $issue->setTargetVersion($targetversionid); } if ($userid) { $issue->setHandler($userid); } if ($type) { $issue->setType($type); } if ($formatedDeadline) { $timestamp = Tools::date2timestamp($formatedDeadline); $issue->setDeadline($timestamp); } if ($commandid) { $command = CommandCache::getInstance()->getCommand($commandid); $command->addIssue($bugid, true); // DBonly } if ($logger->isDebugEnabled()) { $logger->debug("Import bugid={$bugid} {$extRef} - {$summary} - {$mgrEffortEstim} - {$effortEstim} - {$commandid} - {$categoryid} - {$targetversionid} - {$userid}"); } // RETURN VALUE echo Tools::mantisIssueURL($bugid, NULL, TRUE) . " " . Tools::issueInfoURL($bugid, NULL); } }
/** * */ public function execute() { $issueList = $this->inputIssueSel->getIssueList(); $today = time(); $midnightTimestamp = mktime(0, 0, 0, date('m', $today), date('d', $today), date('Y', $today)); $issueArray = NULL; foreach ($issueList as $issue) { $deadline = $issue->getDeadLine(); if ($deadline > 0 && $deadline < $midnightTimestamp && !$issue->isResolved()) { $tooltipAttr = $issue->getTooltipItems($this->teamid, $this->session_userid); $user = UserCache::getInstance()->getUser($issue->getHandlerId()); #$driftMgrEE = $issue->getDriftMgr($withSupport); #$driftEE = $issue->getDrift($withSupport); $issueArray[] = array('bugId' => Tools::issueInfoURL($issue->getId(), $tooltipAttr), 'handlerName' => $user->getName(), 'projectName' => $issue->getProjectName(), 'deadline' => date('Y-m-d', $deadline), 'progress' => round(100 * $issue->getProgress()), 'elapsed' => $issue->getElapsed(), 'reestimated' => $issue->getReestimated(), 'backlog' => $issue->getBacklog(), 'statusName' => $issue->getCurrentStatusName(), 'summary' => $issue->getSummary()); } } $this->execData = $issueArray; return $this->execData; }
/** * returns all issues not already assigned to a command * and which project_id is defined in the team * * @param int $this->teamid * @return mixed[] */ private function getChildIssuesCandidates($teamid) { $issueArray = array(); // team projects except externalTasksProject & NoStats projects $projects = TeamCache::getInstance()->getTeam($this->teamid)->getProjects(); $extProjId = Config::getInstance()->getValue(Config::id_externalTasksProject); unset($projects[$extProjId]); $formattedProjectList = implode(', ', array_keys($projects)); $query = "SELECT * FROM `mantis_bug_table` " . "WHERE project_id IN ({$formattedProjectList}) " . "AND 0 = is_issue_in_team_commands(id, {$teamid}) " . "ORDER BY id DESC"; $result = SqlWrapper::getInstance()->sql_query($query); if (!$result) { echo "<span style='color:red'>ERROR: Query FAILED</span>"; exit; } while ($row = SqlWrapper::getInstance()->sql_fetch_object($result)) { $issue = IssueCache::getInstance()->getIssue($row->id, $row); $issueArray[$row->id] = array("bugid" => Tools::issueInfoURL(sprintf("%07d\n", $issue->getId())), "extRef" => $issue->getTcId(), "project" => $issue->getProjectName(), "target" => $issue->getTargetVersion(), "status" => $issue->getCurrentStatusName(), "summary" => htmlspecialchars($issue->getSummary())); } return $issueArray; }
public static function getIssueDescription($bugid, $extid, $summary, $tooltipAttr = NULL) { $description = Tools::mantisIssueURL($bugid, NULL, TRUE) . ' ' . Tools::issueInfoURL($bugid, $tooltipAttr); if ($extid != NULL && strlen($extid) > 0) { $description .= " / " . $extid; } if ($summary != NULL && strlen($summary) > 0) { $description .= " : " . htmlspecialchars($summary); } return $description; }
/** * Get consistency errors * @param Command $cmd * @return mixed[] */ private function getConsistencyErrors(Command $cmd) { $consistencyErrors = array(); // if null, array_merge fails ! $cerrList = $cmd->getConsistencyErrors(); if (count($cerrList) > 0) { foreach ($cerrList as $cerr) { if (!is_null($cerr->userId)) { $user = UserCache::getInstance()->getUser($cerr->userId); } else { $user = NULL; } if (Issue::exists($cerr->bugId)) { $issue = IssueCache::getInstance()->getIssue($cerr->bugId); $projName = $issue->getProjectName(); $summary = $issue->getSummary(); } else { $projName = ''; $summary = ''; } $titleAttr = array(T_('Project') => $projName, T_('Summary') => $summary); $consistencyErrors[] = array('issueURL' => Tools::issueInfoURL($cerr->bugId, $titleAttr), 'issueStatus' => Constants::$statusNames[$cerr->status], 'user' => isset($user) ? $user->getName() : '', 'severity' => $cerr->getLiteralSeverity(), 'severityColor' => $cerr->getSeverityColor(), 'desc' => $cerr->desc); } } return $consistencyErrors; }
/** * display Timetracking Tuples * @param int $userid * @param TimeTracking $timeTracking * @return mixed[] */ private function getTimetrackingTuples($userid, TimeTracking $timeTracking) { // Display previous entries $query = "SELECT id, bugid, jobid, date, duration" . " FROM `codev_timetracking_table`" . " WHERE userid = {$userid}" . " AND date >= " . $timeTracking->getStartTimestamp() . " ORDER BY date"; $result = SqlWrapper::getInstance()->sql_query($query) or die("Query failed: {$query}"); $jobs = new Jobs(); $timetrackingTuples = array(); while ($row = SqlWrapper::getInstance()->sql_fetch_object($result)) { // get information on this bug try { $issue = IssueCache::getInstance()->getIssue($row->bugid); // get general information $jobName = $jobs->getJobName($row->jobid); $formatedDate = Tools::formatDate("%Y-%m-%d", $row->date); $cosmeticDate = Tools::formatDate("%Y-%m-%d - %A", $row->date); $formatedJobName = str_replace("'", "\\'", $jobName); $formatedSummary = str_replace("'", "\\'", $issue->getSummary()); $formatedSummary = str_replace('"', "\\'", $formatedSummary); $formatedSummary = htmlspecialchars(preg_replace('![\\t\\r\\n]+!', ' ', $formatedSummary)); //$totalEstim = $issue->effortEstim + $issue->effortAdd; $timetrackingTuples[$row->id] = array('timestamp' => $row->date, 'date' => $formatedDate, 'formatedId' => $issue->getFormattedIds(), 'duration' => $row->duration, 'formatedJobName' => $formatedJobName, 'summary' => $formatedSummary, 'cosmeticDate' => $cosmeticDate, 'mantisURL' => Tools::mantisIssueURL($row->bugid, NULL, true), 'issueURL' => Tools::issueInfoURL($row->bugid), 'issueId' => $issue->getTcId(), 'projectName' => $issue->getProjectName(), 'issueSummary' => htmlspecialchars(preg_replace('![\\t\\r\\n]+!', ' ', $issue->getSummary())), 'jobName' => $jobName, 'categoryName' => $issue->getCategoryName(), 'currentStatusName' => $issue->getCurrentStatusName()); } catch (Exception $e) { $summary = T_('Error: Task not found in Mantis DB !'); $timetrackingTuples[$row->id] = array('formatedId' => $row->bugid, 'duration' => $row->duration, 'summary' => $summary, 'mantisURL' => '', 'issueURL' => $row->bugid, 'issueId' => '!', 'projectName' => '!', 'issueSummary' => '<span class="error_font">' . $summary . '</span>', 'categoryName' => '!', 'currentStatusName' => '!'); } } $currentTimeTrackingTuples = array(); $futureTimeTrackingTuples = array(); foreach ($timetrackingTuples as $trackId => $timeTrackingTuple) { if ($timeTrackingTuple['timestamp'] <= $timeTracking->getEndTimestamp()) { $currentTimeTrackingTuples[$trackId] = $timeTrackingTuple; } else { $futureTimeTrackingTuples[$trackId] = $timeTrackingTuple; } unset($timeTrackingTuple['timestamp']); } return array("current" => $currentTimeTrackingTuples, "future" => $futureTimeTrackingTuples); }