/** * Get the calendar of an issue * @param Issue $issue The issue * @param TimeTrack[] $trackList * @return mixed[] */ private function getCalendar(Issue $issue, array $trackList) { $months = NULL; if (!empty($trackList)) { $firstTT = $issue->getFirstTimetrack(); $startTimestamp = $firstTT->getDate(); $endTimestamp = $issue->getLatestTimetrack()->getDate(); for ($y = date('Y', $startTimestamp); $y <= date('Y', $endTimestamp); $y++) { for ($m = 1; $m <= 12; $m++) { $monthsValue = $this->getMonth($m, $y, $issue, $trackList); if ($monthsValue != NULL) { $months[] = $monthsValue; } } } } return $months; }
/** * * @param SmartyHelper $smartyHelper * @param Issue $issue * @param int $userid * @param int $teamid */ public static function dashboardSettings(SmartyHelper $smartyHelper, Issue $issue, $userid, $teamid) { $isel = new IssueSelection(); $isel->addIssue($issue->getId()); $pluginDataProvider = PluginDataProvider::getInstance(); $pluginDataProvider->setParam(PluginDataProviderInterface::PARAM_ISSUE_SELECTION, $isel); $pluginDataProvider->setParam(PluginDataProviderInterface::PARAM_TEAM_ID, $teamid); $pluginDataProvider->setParam(PluginDataProviderInterface::PARAM_SESSION_USER_ID, $userid); // start date is min(1st_timetrack, issue_creation_date) $startT = $issue->getDateSubmission(); $firstTT = $issue->getFirstTimetrack(); if (NULL != $firstTT) { $startT = min(array($issue->getDateSubmission(), $firstTT->getDate())); } // end date is last_timetrack or now if none $eTs = NULL == $firstTT ? time() : $issue->getLatestTimetrack()->getDate(); $endT = mktime(23, 59, 59, date('m', $eTs), date('d', $eTs), date('Y', $eTs)); //echo "start $startT end $endT<br>"; // Calculate a nice day interval $nbWeeks = ($endT - $startT) / 60 / 60 / 24; $interval = ceil($nbWeeks / 20); $pluginDataProvider->setParam(PluginDataProviderInterface::PARAM_START_TIMESTAMP, $startT); $pluginDataProvider->setParam(PluginDataProviderInterface::PARAM_END_TIMESTAMP, $endT); $pluginDataProvider->setParam(PluginDataProviderInterface::PARAM_INTERVAL, $interval); $dashboardName = 'Tasks_prj' . $issue->getProjectId(); // save the DataProvider for Ajax calls $_SESSION[PluginDataProviderInterface::SESSION_ID . $dashboardName] = serialize($pluginDataProvider); // create the Dashboard $dashboard = new Dashboard($dashboardName); // settings are common all tasks of a project $dashboard->setDomain(IndicatorPluginInterface::DOMAIN_TASK); $dashboard->setCategories(array(IndicatorPluginInterface::CATEGORY_QUALITY, IndicatorPluginInterface::CATEGORY_ACTIVITY, IndicatorPluginInterface::CATEGORY_ROADMAP, IndicatorPluginInterface::CATEGORY_PLANNING, IndicatorPluginInterface::CATEGORY_RISK)); $dashboard->setTeamid($teamid); $dashboard->setUserid($userid); $data = $dashboard->getSmartyVariables($smartyHelper); foreach ($data as $smartyKey => $smartyVariable) { $smartyHelper->assign($smartyKey, $smartyVariable); } }
/** * use min(first timetrack, first status change) as startDate * * @param Issue $issue * @param type $backlogStartDate * @return type */ private function findStartDate(Issue $issue, $backlogStartDate) { // sometimes people add a timetrack but forget to update the status, // in this case the date of the first timetrack will be used $tt = $issue->getFirstTimetrack(); $ttDate = NULL; if (NULL != $tt) { $ttDate = $tt->getDate(); if (self::$logger->isDebugEnabled()) { self::$logger->debug("findStartDate() issue=" . $issue->getId() . ": first timetrack on " . date("Y-m-d", $tt->getDate())); } } // use status to find startDate $statusDate = $this->findStartDateFromStatus($issue, $backlogStartDate); // startDate is the older one if (NULL == $ttDate) { // statusDate is never NULL $startDate = $statusDate; } else { $startDate = min($ttDate, $statusDate); if (self::$logger->isDebugEnabled()) { self::$logger->debug("findStartDate() issue=" . $issue->getId() . ": startDate=" . date("Y-m-d", $startDate) . ' : min(' . date("Y-m-d", $ttDate) . ',' . date("Y-m-d", $statusDate) . ')'); } } return $startDate; }