protected function display()
 {
     if (Tools::isConnectedUser()) {
         // only teamMembers & observers can access this page
         if (0 == $this->teamid || $this->session_user->isTeamCustomer($this->teamid)) {
             $this->smartyHelper->assign('accessDenied', TRUE);
         } else {
             $isManager = $this->session_user->isTeamManager($this->teamid);
             $isObserver = $this->session_user->isTeamObserver($this->teamid);
             if ($isManager || $isObserver) {
                 // observers have access to the same info
                 $this->smartyHelper->assign('isManager', true);
             }
             // dates
             $month = date('m');
             $year = date('Y');
             $startdate = Tools::getSecurePOSTStringValue("startdate", Tools::formatDate("%Y-%m-%d", mktime(0, 0, 0, $month, 1, $year)));
             $this->smartyHelper->assign('startDate', $startdate);
             $startTimestamp = Tools::date2timestamp($startdate);
             $nbDaysInMonth = date("t", $startTimestamp);
             $enddate = Tools::getSecurePOSTStringValue("enddate", Tools::formatDate("%Y-%m-%d", mktime(0, 0, 0, $month, $nbDaysInMonth, $year)));
             $this->smartyHelper->assign('endDate', $enddate);
             $endTimestamp = Tools::date2timestamp($enddate);
             #$isDetailed = Tools::getSecurePOSTStringValue('cb_detailed','');
             #$this->smartyHelper->assign('isDetailed', $isDetailed);
             if ('computeMonthlyActivityReport' == $_POST['action']) {
                 $timeTracking = new TimeTracking($startTimestamp, $endTimestamp, $this->teamid);
                 $tracks = $timeTracking->getTimeTracks();
                 $this->smartyHelper->assign('monthlyActivityReport', $this->getMonthlyActivityReport($tracks));
                 // ConsistencyCheck
                 $consistencyErrors = $this->getConsistencyErrors($timeTracking);
                 if (count($consistencyErrors) > 0) {
                     $this->smartyHelper->assign('ccheckErrList', $consistencyErrors);
                     $this->smartyHelper->assign('ccheckButtonTitle', count($consistencyErrors) . ' ' . T_("Errors"));
                     $this->smartyHelper->assign('ccheckBoxTitle', count($consistencyErrors) . ' ' . T_("days are incomplete or undefined"));
                 }
             }
         }
     }
 }
Example #2
0
 protected function display()
 {
     if (Tools::isConnectedUser()) {
         // only teamMembers & observers can access this page
         if (0 == $this->teamid || $this->session_user->isTeamCustomer($this->teamid)) {
             $this->smartyHelper->assign('accessDenied', TRUE);
         } else {
             // dates
             $weekDates = Tools::week_dates(date('W'), date('Y'));
             $startdate = Tools::getSecurePOSTStringValue("startdate", Tools::formatDate("%Y-%m-%d", $weekDates[1]));
             $this->smartyHelper->assign('startDate', $startdate);
             $enddate = Tools::getSecurePOSTStringValue("enddate", Tools::formatDate("%Y-%m-%d", $weekDates[5]));
             $this->smartyHelper->assign('endDate', $enddate);
             $isDetailed = Tools::getSecurePOSTIntValue('withJobDetails', 0);
             $this->smartyHelper->assign('isJobDetails', $isDetailed);
             $isExtTasksPrj = Tools::getSecurePOSTIntValue('withExtTasksPrj', 0);
             $this->smartyHelper->assign('isExtTasksPrj', $isExtTasksPrj);
             $isSideTasksPrj = Tools::getSecurePOSTIntValue('withSideTasksPrj', 1);
             $this->smartyHelper->assign('isSideTasksPrj', $isSideTasksPrj);
             if ('computeProjectActivityReport' == $_POST['action']) {
                 $startTimestamp = Tools::date2timestamp($startdate);
                 $endTimestamp = Tools::date2timestamp($enddate);
                 $endTimestamp = mktime(23, 59, 59, date('m', $endTimestamp), date('d', $endTimestamp), date('Y', $endTimestamp));
                 $timeTracking = new TimeTracking($startTimestamp, $endTimestamp, $this->teamid);
                 $this->smartyHelper->assign('projectActivityReport', $this->getProjectActivityReport($timeTracking->getProjectTracks(true), $this->teamid, $isDetailed));
                 // WorkingDaysPerProjectPerUser
                 $data = $timeTracking->getWorkingDaysPerProjectPerUser($isExtTasksPrj, true, $isSideTasksPrj);
                 foreach ($data as $smartyKey => $smartyVariable) {
                     $this->smartyHelper->assign($smartyKey, $smartyVariable);
                 }
                 $data = $this->getWorkingDaysPerProjectPerUser($startTimestamp, $endTimestamp, $isExtTasksPrj, $isSideTasksPrj);
                 foreach ($data as $smartyKey => $smartyVariable) {
                     $this->smartyHelper->assign($smartyKey, $smartyVariable);
                 }
             }
         }
     }
 }
Example #3
0
 /**
  * for all users of the team, return incomplete/missing days in the period
  *
  * @param TimeTracking $timeTracking
  * @return ConsistencyError2[]
  */
 public static function checkIncompleteDays(TimeTracking $timeTracking, $userid = NULL)
 {
     $cerrList = array();
     $now = time();
     if (is_null($userid)) {
         $mList = TeamCache::getInstance()->getTeam($timeTracking->getTeamid())->getActiveMembers();
         $useridList = array_keys($mList);
     } else {
         $useridList = array($userid);
     }
     foreach ($useridList as $userid) {
         $incompleteDays = $timeTracking->checkCompleteDays($userid, TRUE);
         foreach ($incompleteDays as $date => $value) {
             if ($date > $now) {
                 continue;
             }
             // skip dates in the future
             $label = NULL;
             if ($value < 1) {
                 $label = T_("incomplete (missing ") . (1 - $value) . T_(" days") . ")";
             } else {
                 $label = T_("inconsistent") . " (" . $value . " " . T_("days") . ")";
             }
             $cerr = new ConsistencyError2(NULL, $userid, NULL, $date, $label);
             $cerr->severity = ConsistencyError2::severity_error;
             $cerrList[] = $cerr;
         }
         $missingDays = $timeTracking->checkMissingDays($userid);
         foreach ($missingDays as $date) {
             if ($date > $now) {
                 continue;
             }
             // skip dates in the future
             $cerr = new ConsistencyError2(0, $userid, NULL, $date, T_("not defined."));
             $cerr->severity = ConsistencyError2::severity_error;
             $cerrList[] = $cerr;
         }
     }
     return $cerrList;
 }
Example #4
0
/**
 * set smarty variables needed to display the WeekTaskDetails table
 *
 * @param type $smartyHelper
 * @param type $weekid
 * @param type $year
 * @param type $managed_userid
 * @param type $teamid
 */
function setWeekTaskDetails($smartyHelper, $weekid, $year, $managed_userid, $teamid)
{
    $weekDates = Tools::week_dates($weekid, $year);
    $startTimestamp = $weekDates[1];
    $endTimestamp = mktime(23, 59, 59, date('m', $weekDates[7]), date('d', $weekDates[7]), date('Y', $weekDates[7]));
    $timeTracking = new TimeTracking($startTimestamp, $endTimestamp, $teamid);
    $incompleteDays = array_keys($timeTracking->checkCompleteDays($managed_userid, TRUE));
    $missingDays = $timeTracking->checkMissingDays($managed_userid);
    $errorDays = array_merge($incompleteDays, $missingDays);
    $smartyWeekDates = TimeTrackingTools::getSmartyWeekDates($weekDates, $errorDays);
    // UTF8 problems in smarty, date encoding needs to be done in PHP
    $smartyHelper->assign('weekDates', array($smartyWeekDates[1], $smartyWeekDates[2], $smartyWeekDates[3], $smartyWeekDates[4], $smartyWeekDates[5]));
    $smartyHelper->assign('weekEndDates', array($smartyWeekDates[6], $smartyWeekDates[7]));
    $weekTasks = TimeTrackingTools::getWeekTask($weekDates, $teamid, $managed_userid, $timeTracking, $errorDays);
    $smartyHelper->assign('weekTasks', $weekTasks["weekTasks"]);
    $smartyHelper->assign('dayTotalElapsed', $weekTasks["totalElapsed"]);
    // weekTaskDetails.html includes edit_issueNote.html & update_issueBacklog.html
    // these files need userid,weekid,year to be set.
    $smartyHelper->assign('userid', $managed_userid);
    $smartyHelper->assign('weekid', $weekid);
    $smartyHelper->assign('year', $year);
}
Example #5
0
 /**
  * @param int $userid
  * @param TimeTracking $timeTracking
  * @param string $realname
  * @param resource $fh
  */
 private function exportWeekDetailsToCSV($userid, TimeTracking $timeTracking, $realname, $fh)
 {
     $sepChar = ';';
     $weekTracks = $timeTracking->getWeekDetails($userid);
     foreach ($weekTracks as $bugid => $jobList) {
         try {
             $issue = IssueCache::getInstance()->getIssue($bugid);
             // remove sepChar from summary text
             $formatedSummary = str_replace($sepChar, " ", $issue->getSummary());
             foreach ($jobList as $jobid => $dayList) {
                 $query = "SELECT name FROM `codev_job_table` WHERE id={$jobid}";
                 $result = SqlWrapper::getInstance()->sql_query($query);
                 if (!$result) {
                     echo "<span style='color:red'>ERROR: Query FAILED</span>";
                     exit;
                 }
                 $jobName = SqlWrapper::getInstance()->sql_result($result, 0);
                 $stringData = $bugid . $sepChar . $jobName . $sepChar . $formatedSummary . $sepChar . $realname . $sepChar;
                 for ($i = 1; $i <= 4; $i++) {
                     if (array_key_exists($i, $dayList)) {
                         $stringData .= $dayList[$i];
                     }
                     $stringData .= $sepChar;
                 }
                 if (array_key_exists(5, $dayList)) {
                     $stringData .= $dayList[5];
                 }
                 $stringData .= "\n";
                 fwrite($fh, $stringData);
             }
         } catch (Exception $e) {
             self::$logger->error('exportWeekDetailsToCSV(): issue $bugid not found in mantis DB !');
         }
     }
 }
Example #6
0
 /**
  * Initialize complex static variables
  * @static
  */
 public static function staticInit()
 {
     self::$logger = Logger::getLogger(__CLASS__);
 }
Example #7
0
 /**
  * get tasks resolved in the period
  * @return Issue[]
  */
 private function getResolvedIssues()
 {
     $tt = new TimeTracking($this->startTimestamp, $this->endTimestamp, $this->teamid);
     $resolvedIssuesList = $tt->getResolvedIssues();
     Tools::usort($resolvedIssuesList);
     return $resolvedIssuesList;
 }
Example #8
0
 /**
  * @param TimeTracking $timeTracking
  * @param bool $isDetailed
  * @param int[] $weekDates
  * @return mixed[]
  */
 private function getWeekDetails(TimeTracking $timeTracking, $isDetailed, $weekDates, $session_userid)
 {
     $team = TeamCache::getInstance()->getTeam($timeTracking->getTeamid());
     $weekDetails = array();
     $session_users = $team->getUsers();
     foreach ($session_users as $session_user) {
         // if user was working on the project during the timestamp
         if ($session_user->isTeamDeveloper($timeTracking->getTeamid(), $timeTracking->getStartTimestamp(), $timeTracking->getEndTimestamp()) || $session_user->isTeamManager($timeTracking->getTeamid(), $timeTracking->getStartTimestamp(), $timeTracking->getEndTimestamp())) {
             // PERIOD week
             //$thisWeekId=date("W");
             $weekTracks = $timeTracking->getWeekDetails($session_user->getId(), !$isDetailed);
             $holidays = Holidays::getInstance();
             $weekJobDetails = array();
             foreach ($weekTracks as $bugid => $jobList) {
                 try {
                     $issue = IssueCache::getInstance()->getIssue($bugid);
                 } catch (Exception $e) {
                     self::$logger->error("getWeekDetails() skip issue {$bugid} : " . $e->getMessage());
                     $weekJobDetails[] = array("description" => '<span class="error_font">' . $bugid . ' : ' . T_('Error: Task not found in Mantis DB !') . '</span>', "duration" => "!", "progress" => "!", "projectName" => "!", "targetVersion" => "!", "jobName" => "!", "daysDetails" => "!", "totalDuration" => "!");
                     continue;
                 }
                 $project = ProjectCache::getInstance()->getProject($issue->getProjectId());
                 if ($isDetailed) {
                     $formatedJobList = implode(', ', array_keys($jobList));
                     $query = 'SELECT id, name FROM `codev_job_table` WHERE id IN (' . $formatedJobList . ');';
                     $result2 = SqlWrapper::getInstance()->sql_query($query);
                     if (!$result2) {
                         continue;
                     }
                     while ($row2 = SqlWrapper::getInstance()->sql_fetch_object($result2)) {
                         $jobName = $row2->name;
                         $dayList = $jobList[$row2->id];
                         $daysDetails = array();
                         $weekDuration = 0;
                         for ($i = 1; $i <= 7; $i++) {
                             $dayDetails = $this->getDaysDetails($i, $holidays, $weekDates, $dayList[$i]);
                             $weekDuration += $dayDetails['duration'];
                             $daysDetails[] = $dayDetails;
                         }
                         if (!$project->isSideTasksProject(array($team->getId())) && !$project->isExternalTasksProject()) {
                             $tooltipAttr = $issue->getTooltipItems($team->getId(), $session_userid);
                             // force some fields
                             #$tooltipAttr[T_('Elapsed')] = $issue->getElapsed();
                             #$tooltipAttr[T_('Backlog')] = $issue->getDuration();
                             #$tooltipAttr[T_('Drift')] = $issue->getDrift();
                             #$tooltipAttr[T_('DriftColor')] = $issue->getDriftColor();
                             $infoTooltip = Tools::imgWithTooltip('images/b_info.png', $tooltipAttr);
                         } else {
                             $infoTooltip = NULL;
                         }
                         // prepare json data for the IssueNoteDialogbox
                         $issueNoteData = $this->getIssueNoteTooltip($project, $team, $issue);
                         $weekJobDetails[] = array('description' => SmartyTools::getIssueDescription($bugid, $issue->getTcId(), $issue->getSummary()), 'duration' => $issue->getDuration(), 'progress' => round(100 * $issue->getProgress()), 'projectName' => $issue->getProjectName(), 'targetVersion' => $issue->getTargetVersion(), 'jobName' => $jobName, 'daysDetails' => $daysDetails, 'totalDuration' => $weekDuration, 'infoTooltip' => $infoTooltip, 'issueNoteId' => $issueNoteData['id'], 'noteTooltip' => $issueNoteData['tooltip']);
                     }
                 } else {
                     // for each day, concat jobs duration
                     $daysDetails = array();
                     $weekDuration = 0;
                     for ($i = 1; $i <= 7; $i++) {
                         $duration = 0;
                         foreach ($jobList as $dayList) {
                             if (array_key_exists($i, $dayList)) {
                                 $duration += $dayList[$i];
                             }
                         }
                         if ($duration == 0) {
                             $duration = "";
                         }
                         $dayDetails = $this->getDaysDetails($i, $holidays, $weekDates, $duration);
                         $weekDuration += $dayDetails['duration'];
                         $daysDetails[] = $dayDetails;
                     }
                     if (!$project->isSideTasksProject(array($team->getId())) && !$project->isExternalTasksProject()) {
                         $tooltipAttr = $issue->getTooltipItems($team->getId(), $session_userid);
                         // force some fields
                         #$tooltipAttr[T_('Elapsed')] = $issue->getElapsed();
                         #$tooltipAttr[T_('Backlog')] = $issue->getDuration();
                         #$tooltipAttr[T_('Drift')] = $issue->getDrift();
                         #$tooltipAttr[T_('DriftColor')] = $issue->getDriftColor();
                         $infoTooltip = Tools::imgWithTooltip('images/b_info.png', $tooltipAttr);
                     } else {
                         $infoTooltip = NULL;
                     }
                     // prepare json data for the IssueNoteDialogbox
                     $issueNoteData = $this->getIssueNoteTooltip($project, $team, $issue);
                     $weekJobDetails[] = array('description' => SmartyTools::getIssueDescription($bugid, $issue->getTcId(), $issue->getSummary()), 'duration' => $issue->getDuration(), 'progress' => round(100 * $issue->getProgress()), 'projectName' => $issue->getProjectName(), 'daysDetails' => $daysDetails, 'totalDuration' => $weekDuration, 'infoTooltip' => $infoTooltip, 'issueNoteId' => $issueNoteData['id'], 'noteTooltip' => $issueNoteData['tooltip']);
                 }
             }
             if (!empty($weekJobDetails)) {
                 $weekDetails[] = array('name' => $session_user->getName(), 'realname' => $session_user->getRealname(), 'forecastWorkload' => $session_user->getForecastWorkload(), 'weekDates' => array(Tools::formatDate("%A\n%d %b", $weekDates[1]), Tools::formatDate("%A\n%d %b", $weekDates[2]), Tools::formatDate("%A\n%d %b", $weekDates[3]), Tools::formatDate("%A\n%d %b", $weekDates[4]), Tools::formatDate("%A\n%d %b", $weekDates[5])), 'weekEndDates' => array(Tools::formatDate("%A\n%d %b", $weekDates[6]), Tools::formatDate("%A\n%d %b", $weekDates[7])), 'weekJobDetails' => $weekJobDetails);
             }
         }
     }
     return $weekDetails;
 }
Example #9
0
 /**
  * creates for each project a table with the following fields:
  * id | TC | startDate | endDate | status | total elapsed | elapsed + Backlog | elapsed in period | Backlog
  * TOTAL
  * @param TimeTracking $timeTracking
  * @param string $myFile
  * @return string
  */
 public static function exportProjectMonthlyActivityToCSV(TimeTracking $timeTracking, $myFile)
 {
     $sepChar = ';';
     $fh = fopen($myFile, 'w');
     // returns : $projectTracks[projectid][bugid][jobid] = duration
     $projectTracks = $timeTracking->getProjectTracks();
     foreach ($projectTracks as $projectId => $bugList) {
         $totalEffortEstim = 0;
         $totalElapsed = 0;
         $totalBacklog = 0;
         $totalElapsedPeriod = 0;
         // write table header
         $project = ProjectCache::getInstance()->getProject($projectId);
         $stringData = $project->getName() . "\n";
         // WARNING i18n: HTML translation like french accents (eacute;) add an unwanted column sepChar (;)
         $stringData .= "ID" . $sepChar;
         $stringData .= "Task" . $sepChar;
         $stringData .= "Ext.ID" . $sepChar;
         $stringData .= "Start date" . $sepChar;
         $stringData .= "End date" . $sepChar;
         $stringData .= "Status" . $sepChar;
         $stringData .= "Total EffortEstim" . $sepChar;
         $stringData .= "Total elapsed" . $sepChar;
         $stringData .= "elapsed + Backlog" . $sepChar;
         $stringData .= "elapsed in period" . $sepChar;
         $stringData .= "BL" . $sepChar;
         $stringData .= "\n";
         // write table content (by bugid)
         foreach ($bugList as $bugid => $jobs) {
             $issue = IssueCache::getInstance()->getIssue($bugid);
             // remove sepChar from summary text
             $formatedSummary = str_replace($sepChar, " ", $issue->getSummary());
             $stringData .= $bugid . $sepChar;
             $stringData .= $formatedSummary . $sepChar;
             $stringData .= $issue->getTcId() . $sepChar;
             $stringData .= date("d/m/Y", $issue->startDate()) . $sepChar;
             $stringData .= date("d/m/Y", $issue->endDate()) . $sepChar;
             $stringData .= $issue->getCurrentStatusName() . $sepChar;
             $stringData .= $issue->getEffortEstim() + $issue->getEffortAdd() . $sepChar;
             $stringData .= $issue->getElapsed() . $sepChar;
             $stringData .= $issue->getElapsed() + $issue->getBacklog() . $sepChar;
             // sum all job durations
             $elapsedInPeriod = 0;
             foreach ($jobs as $jobId => $duration) {
                 $elapsedInPeriod += $duration;
             }
             $stringData .= $elapsedInPeriod . $sepChar;
             $stringData .= $issue->getBacklog() . $sepChar;
             $stringData .= "\n";
             $totalEffortEstim += $issue->getEffortEstim() + $issue->getEffortAdd();
             $totalElapsed += $issue->getElapsed();
             $totalBacklog += $issue->getBacklog();
             $totalElapsedPeriod += $elapsedInPeriod;
         }
         // total per project
         $stringData .= "TOTAL" . $sepChar . $sepChar . $sepChar . $sepChar . $sepChar . $sepChar;
         $stringData .= $totalEffortEstim . $sepChar;
         $stringData .= $totalElapsed . $sepChar;
         $stringData .= $totalElapsed + $totalBacklog . $sepChar;
         $stringData .= $totalElapsedPeriod . $sepChar;
         $stringData .= $totalBacklog . $sepChar;
         $stringData .= "\n";
         $stringData .= "\n";
         fwrite($fh, $stringData);
     }
     fclose($fh);
     return $myFile;
 }
Example #10
0
 /**
  * @param int[] $weekDates
  * @param int $userid
  * @param TimeTracking $timeTracking
  * @param array $incompleteDays
  * @return mixed[]
  */
 public static function getWeekTask(array $weekDates, $teamid, $userid, TimeTracking $timeTracking, array $incompleteDays)
 {
     $totalElapsed = array();
     $todayAtMidnight = mktime(0, 0, 0);
     for ($i = 1; $i <= 7; $i++) {
         $weekDate = $weekDates[$i];
         $totalElapsed[$weekDate] = array("elapsed" => 0, "class" => in_array($weekDate, $incompleteDays) && $weekDate < $todayAtMidnight ? "incompleteDay" : "");
     }
     $jobs = new Jobs();
     $weekTasks = NULL;
     $holidays = Holidays::getInstance();
     $weekTracks = $timeTracking->getWeekDetails($userid);
     foreach ($weekTracks as $bugid => $jobList) {
         try {
             $issue = IssueCache::getInstance()->getIssue($bugid);
             $backlog = $issue->getBacklog();
             $extRef = $issue->getTcId();
             $summary = $issue->getSummary();
             $description = SmartyTools::getIssueDescription($bugid, $extRef, $summary);
             $projectId = $issue->getProjectId();
         } catch (Exception $e) {
             $backlog = '!';
             $extRef = '';
             $summary = '<span class="error_font">' . T_('Error: Task not found in Mantis DB !') . '</span>';
             //$description = SmartyTools::getIssueDescription($bugid,$extRef,$summary);
             $description = Tools::mantisIssueURL($bugid, NULL, TRUE) . ' ' . $bugid . ' : ' . $summary;
             $projectId = -1;
         }
         foreach ($jobList as $jobid => $dayList) {
             // if no backlog set, display a '?' to allow Backlog edition
             if (is_numeric($backlog)) {
                 $formattedBacklog = $backlog;
                 // prepare json data for the BacklogDialogbox
                 $jsonIssueInfo = self::getUpdateBacklogJsonData($bugid, $jobid, $teamid, $userid);
             } else {
                 #if (($team->isSideTasksProject($issue->projectId)) ||
                 #    ($team->isNoStatsProject($issue->projectId))) {
                 // do not allow to edit sideTasks Backlog
                 $formattedBacklog = '';
                 $jsonIssueInfo = '';
                 #} else {
                 #   $formattedBacklog = '?';
                 #}
                 //
             }
             $dayTasks = "";
             for ($i = 1; $i <= 7; $i++) {
                 $title = NULL;
                 $bgColor = NULL;
                 if ($i <= 5) {
                     $h = $holidays->isHoliday($weekDates[$i]);
                     if ($h) {
                         $bgColor = $h->color;
                         #$bgColor = Holidays::$defaultColor;
                         $title = $h->description;
                     }
                 } else {
                     $bgColor = Holidays::$defaultColor;
                 }
                 $day = 0;
                 if (array_key_exists($i, $dayList)) {
                     $day = $dayList[$i];
                 }
                 $dayTasks[] = array('bgColor' => $bgColor, 'title' => $title, 'day' => $day);
                 $totalElapsed[$weekDates[$i]]['elapsed'] += $day;
             }
             /*          
                         $deadline = $issue->getDeadLine();
             
                         if (!is_null($deadline) || (0 != $deadline)) {
                            $formatedDate = Tools::formatDate(T_("%Y-%m-%d"), $deadline);
                         }
             */
             try {
                 $project = ProjectCache::getInstance()->getProject($projectId);
             } catch (Exception $e) {
                 $project = null;
             }
             if ($project != null) {
                 if (!$project->isSideTasksProject(array($teamid)) && !$project->isExternalTasksProject()) {
                     // TODO does $issue belong to current team's project ? what if not ?
                     $tooltipAttr = $issue->getTooltipItems($teamid, $userid);
                     $infoTooltip = Tools::imgWithTooltip('images/b_info.png', $tooltipAttr);
                 } else {
                     $infoTooltip = '';
                 }
             } else {
                 $infoTooltip = '';
             }
             // prepare json data for the IssueNoteDialogbox
             if ($project != null) {
                 if (!$project->isSideTasksProject(array($teamid)) && !$project->isExternalTasksProject()) {
                     $issueNote = IssueNote::getTimesheetNote($issue->getId());
                     if (!is_null($issueNote)) {
                         $issueNoteId = $issueNote->getId();
                         $user = UserCache::getInstance()->getUser($issueNote->getReporterId());
                         $rawNote = $issueNote->getText();
                         $note = trim(IssueNote::removeAllReadByTags($rawNote));
                         // used for the tooltip NOT the dialoBox
                         $tooltipAttr = array('reporter' => $user->getRealname(), 'date' => date('Y-m-d H:i:s', $issueNote->getLastModified()), 'Note' => $note);
                         $readByList = $issueNote->getReadByList(TRUE);
                         if (0 != count($readByList)) {
                             $tooltipAttr['Read by'] = implode(', ', array_keys($readByList));
                         }
                         $noteTooltip = Tools::imgWithTooltip('images/b_note.png', $tooltipAttr, NULL, 'js-add-note-link', ' style="cursor: pointer;" data-bugId="' . $issueNote->getBugId() . '"');
                     } else {
                         $issueNoteId = 0;
                         $noteTooltip = Tools::imgWithTooltip('images/b_note_grey.png', T_('Click to add a note'), NULL, 'js-add-note-link', ' style="cursor: pointer;" data-bugId="' . $issue->getId() . '"');
                     }
                 } else {
                     $noteTooltip = '';
                 }
             } else {
                 $noteTooltip = '';
             }
             // if project not declared in current team, then
             // user cannot add a timetrack by clicking in the weekTasks table
             // Note: (this would generate an error on addTimetrack)
             $team = TeamCache::getInstance()->getTeam($teamid);
             $isTeamProject = !is_null($team->getProjectType($projectId));
             $weekTasks[$bugid . "_" . $jobid] = array('bugid' => $bugid, 'description' => $description, 'formattedBacklog' => $formattedBacklog, 'jobid' => $jobid, 'jobName' => $jobs->getJobName($jobid), 'dayTasks' => $dayTasks, 'infoTooltip' => $infoTooltip, 'summary' => addslashes(htmlspecialchars($summary)), 'updateBacklogJsonData' => $jsonIssueInfo, 'issueNoteId' => $issueNoteId, 'noteTooltip' => $noteTooltip, 'isTeamProject' => $isTeamProject);
         }
     }
     return array("weekTasks" => $weekTasks, "totalElapsed" => $totalElapsed);
 }
Example #11
0
 /**
  * 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);
 }