コード例 #1
0
 /**
  *
  */
 public function execute()
 {
     $extProjId = Config::getInstance()->getValue(Config::id_externalTasksProject);
     $issueList = $this->inputIssueSel->getIssueList();
     $team = TeamCache::getInstance()->getTeam($this->teamid);
     $teamMembers = $team->getMembers();
     $jobs = new Jobs();
     $realStartTimestamp = $this->endTimestamp;
     // note: inverted intentionnaly
     $realEndTimestamp = $this->startTimestamp;
     // note: inverted intentionnaly
     $loadPerJobs = array();
     foreach ($issueList as $issue) {
         if ($extProjId == $issue->getProjectId()) {
             continue;
         }
         $issueTimetracks = $issue->getTimeTracks(NULL, $this->startTimestamp, $this->endTimestamp);
         foreach ($issueTimetracks as $tt) {
             // check if user in team
             if (!array_key_exists($tt->getUserId(), $teamMembers)) {
                 continue;
             }
             // find real date range
             if (NULL == $realStartTimestamp || $tt->getDate() < $realStartTimestamp) {
                 $realStartTimestamp = $tt->getDate();
             }
             if (NULL == $realEndTimestamp || $tt->getDate() > $realEndTimestamp) {
                 $realEndTimestamp = $tt->getDate();
             }
             if ($issue->isProjManagement(array($this->teamid))) {
                 $jobid = '999_Management';
                 if (!array_key_exists($jobid, $loadPerJobs)) {
                     // create job if not exist in jobList
                     $loadPerJobs[$jobid] = array('name' => T_('Management'), 'color' => 'A3A3A3', 'nbDays' => floatval($tt->getDuration()));
                 } else {
                     $loadPerJobs[$jobid]['nbDays'] += floatval($tt->getDuration());
                 }
             } else {
                 if ($team->isSideTasksProject($issue->getProjectId())) {
                     // TODO check category (detail all sidetasks categories)
                     $jobid = '999_SideTasks';
                     if (!array_key_exists($jobid, $loadPerJobs)) {
                         // create job if not exist in jobList
                         $loadPerJobs[$jobid] = array('name' => T_('SideTasks'), 'color' => 'C2C2C2', 'nbDays' => floatval($tt->getDuration()));
                     } else {
                         $loadPerJobs[$jobid]['nbDays'] += floatval($tt->getDuration());
                     }
                 } else {
                     $jobid = $tt->getJobId();
                     if (!array_key_exists($jobid, $loadPerJobs)) {
                         // create job if not exist in jobList
                         $loadPerJobs[$jobid] = array('name' => htmlentities($jobs->getJobName($jobid), ENT_QUOTES | ENT_HTML401, "UTF-8"), 'color' => $jobs->getJobColor($jobid), 'nbDays' => floatval($tt->getDuration()));
                     } else {
                         $loadPerJobs[$jobid]['nbDays'] += floatval($tt->getDuration());
                     }
                 }
             }
         }
     }
     //self::$logger->error("date range: ".date('Y-m-d', $this->startTimestamp).'-'.date('Y-m-d', $this->endTimestamp));
     //self::$logger->error("real date range: ".date('Y-m-d', $realStartTimestamp).'-'.date('Y-m-d', $realEndTimestamp));
     // array sort to put sideTasks categories at the bottom
     ksort($loadPerJobs);
     $this->execData = array('loadPerJobs' => $loadPerJobs, 'realStartTimestamp' => $realStartTimestamp, 'realEndTimestamp' => $realEndTimestamp);
     return $this->execData;
 }
コード例 #2
0
ファイル: issue_info.php プロジェクト: dfuzeau/codev
 /**
  * @param int $month
  * @param int $year
  * @param Issue $issue The issue
  * @param TimeTrack[] $trackList
  * @return mixed[]
  */
 private function getMonth($month, $year, Issue $issue, array $trackList)
 {
     $totalDuration = 0;
     // if no work done this month, do not display month
     $found = 0;
     foreach ($trackList as $tt) {
         if ($month == date('m', $tt->getDate()) && $year == date('Y', $tt->getDate())) {
             $found += 1;
             $totalDuration += $tt->getDuration();
         }
     }
     if (0 == $found) {
         return NULL;
     }
     $monthTimestamp = mktime(0, 0, 0, $month, 1, $year);
     $monthFormated = Tools::formatDate("%B %Y", $monthTimestamp);
     $nbDaysInMonth = date("t", $monthTimestamp);
     $months = array();
     for ($i = 1; $i <= $nbDaysInMonth; $i++) {
         if ($i < 10) {
             $months[] = "0" . $i;
         } else {
             $months[] = $i;
         }
     }
     $jobs = new Jobs();
     $userList = $issue->getInvolvedUsers();
     $users = NULL;
     $timeTracks = $issue->getTimeTracks();
     foreach ($userList as $uid => $username) {
         $userTotalDuration = 0;
         // build $durationByDate[] for this user
         $durationByDate = array();
         $jobColorByDate = array();
         foreach ($timeTracks as $tt) {
             if ($tt->getUserId() == $uid) {
                 $date = $tt->getDate();
                 if (array_key_exists($date, $durationByDate)) {
                     $durationByDate[$date] += $tt->getDuration();
                 } else {
                     $durationByDate[$date] = $tt->getDuration();
                 }
                 $jobColorByDate[$date] = $jobs->getJobColor($tt->getJobId());
             }
         }
         $usersDetails = NULL;
         for ($i = 1; $i <= $nbDaysInMonth; $i++) {
             $todayTimestamp = mktime(0, 0, 0, $month, $i, $year);
             if (array_key_exists($todayTimestamp, $durationByDate)) {
                 $userTotalDuration += $durationByDate[$todayTimestamp];
                 $usersDetails[] = array("jobColor" => $jobColorByDate[$todayTimestamp], "jobDuration" => $durationByDate[$todayTimestamp]);
             } else {
                 // if weekend or holiday, display gray
                 $holidays = Holidays::getInstance();
                 $h = $holidays->isHoliday($todayTimestamp);
                 if (NULL != $h) {
                     $usersDetails[] = array("jobColor" => Holidays::$defaultColor, "jobDescription" => $h->description);
                 } else {
                     $usersDetails[] = array();
                 }
             }
         }
         $users[] = array("username" => $username, "jobs" => $usersDetails, 'totalDuration' => 0 == $userTotalDuration ? '' : $userTotalDuration);
     }
     return array("monthFormated" => $monthFormated, "totalDuration" => $totalDuration, "months" => $months, "users" => $users);
 }