/** * Get general info of an issue * @param Issue $issue The issue * @param bool $isManager if true: show MgrEffortEstim column * @param bool $displaySupport If true, display support * @return mixed[] */ public static function getIssueGeneralInfo(Issue $issue, $isManager = false, $displaySupport = false) { $withSupport = true; // include support in elapsed & Drift $drift = $issue->getDrift($withSupport); $issueGeneralInfo = array("issueId" => $issue->getId(), "issueSummary" => htmlspecialchars(preg_replace('![\\t\\r\\n]+!', ' ', $issue->getSummary())), "issueType" => $issue->getType(), "issueDescription" => htmlspecialchars($issue->getDescription()), "projectName" => $issue->getProjectName(), "categoryName" => $issue->getCategoryName(), "issueExtRef" => $issue->getTcId(), 'mantisURL' => Tools::mantisIssueURL($issue->getId(), NULL, true), 'issueURL' => Tools::mantisIssueURL($issue->getId()), 'statusName' => $issue->getCurrentStatusName(), 'priorityName' => $issue->getPriorityName(), 'severityName' => $issue->getSeverityName(), 'handlerName' => UserCache::getInstance()->getUser($issue->getHandlerId())->getName(), "issueEffortTitle" => $issue->getEffortEstim() . ' + ' . $issue->getEffortAdd(), "issueEffort" => $issue->getEffortEstim() + $issue->getEffortAdd(), "issueReestimated" => $issue->getReestimated(), "issueBacklog" => $issue->getBacklog(), "issueDriftColor" => $issue->getDriftColor($drift), "issueDrift" => round($drift, 2), "progress" => round(100 * $issue->getProgress()), 'relationships' => self::getFormattedRelationshipsInfo($issue)); if ($isManager) { $issueGeneralInfo['issueMgrEffortEstim'] = $issue->getMgrEffortEstim(); $driftMgr = $issue->getDriftMgr($withSupport); $issueGeneralInfo['issueDriftMgrColor'] = $issue->getDriftColor($driftMgr); $issueGeneralInfo['issueDriftMgr'] = round($driftMgr, 2); } if ($withSupport) { $issueGeneralInfo['issueElapsed'] = $issue->getElapsed(); } else { $issueGeneralInfo['issueElapsed'] = $issue->getElapsed() - $issue->getElapsed(Jobs::JOB_SUPPORT); } if ($displaySupport) { if ($isManager) { $driftMgr = $issue->getDriftMgr(!$withSupport); $issueGeneralInfo['issueDriftMgrSupportColor'] = $issue->getDriftColor($driftMgr); $issueGeneralInfo['issueDriftMgrSupport'] = round($driftMgr, 2); } $drift = $issue->getDrift(!$withSupport); $issueGeneralInfo['issueDriftSupportColor'] = $issue->getDriftColor($drift); $issueGeneralInfo['issueDriftSupport'] = round($drift, 2); } return $issueGeneralInfo; }
protected function display() { if (Tools::isConnectedUser()) { // Admins only $session_user = UserCache::getInstance()->getUser($_SESSION['userid']); if ($session_user->isTeamMember(Config::getInstance()->getValue(Config::id_adminTeamId))) { if (NULL != Constants::$codevtt_logfile && file_exists(Constants::$codevtt_logfile)) { $nbLinesToDisplay = 1500; $lines = file(Constants::$codevtt_logfile); if (count($lines) > $nbLinesToDisplay) { $offset = count($lines) - $nbLinesToDisplay; } else { $offset = 0; } $logs = array(); for ($i = $offset; $i <= $offset + $nbLinesToDisplay, $i < count($lines); $i++) { $logs[$i + 1] = htmlspecialchars($lines[$i], ENT_QUOTES, "UTF-8"); #echo "DEBUG $line_num - ".$logs[$line_num]."<br>"; } $this->smartyHelper->assign('logs', $logs); } else { $this->smartyHelper->assign('error', T_('Sorry, logfile not found:') . ' [' . Constants::$codevtt_logfile . ']'); } } else { $this->smartyHelper->assign('error', T_('Sorry, you need to be in the admin-team to access this page.')); } } else { $this->smartyHelper->assign('error', T_('Sorry, you need to be in the admin-team to access this page.')); } }
protected function display() { // Admins only if (Tools::isConnectedUser()) { $session_user = UserCache::getInstance()->getUser($_SESSION['userid']); if ($session_user->isTeamMember(Config::getInstance()->getValue(Config::id_adminTeamId))) { $this->smartyHelper->assign('defaultColor', Holidays::$defaultColor); if (isset($_POST['hol_color'])) { $formatedDate = Tools::getSecurePOSTStringValue('date'); $timestamp = Tools::date2timestamp($formatedDate); $hol_desc = Tools::getSecurePOSTStringValue('hol_desc'); $hol_color = Tools::getSecurePOSTStringValue('hol_color'); if (!Holidays::save($timestamp, $hol_desc, $hol_color)) { $this->smartyHelper->assign('error', T_("Couldn't add the holiday")); } } elseif (isset($_POST['hol_id'])) { $hol_id = Tools::getSecurePOSTIntValue('hol_id'); if (!Holidays::delete($hol_id)) { $this->smartyHelper->assign('error', T_("Couldn't remove the holiday")); } } $this->smartyHelper->assign('holidays', Holidays::getHolidays()); } } }
function login($user, $password) { $logger = Logger::getLogger('login'); // WARN: if logger is LoggerAppenderEcho, then logs will break the login Ajax call ! try { $appenders = $logger->getParent()->getAllAppenders(); $isLog = true; foreach ($appenders as $appender) { if ('LoggerAppenderEcho' === get_class($appender)) { $isLog = false; break; } } } catch (Exception $e) { // logs should never break application $isLog = false; } $password = md5($password); $formattedUser = SqlWrapper::sql_real_escape_string($user); $formattedPass = SqlWrapper::sql_real_escape_string($password); $query = "SELECT id, username, realname FROM `mantis_user_table` WHERE username = '******' AND password = '******' AND enabled = 1;"; $result = SqlWrapper::getInstance()->sql_query($query); if ($result && SqlWrapper::getInstance()->sql_num_rows($result) == 1 && ($row_login = SqlWrapper::getInstance()->sql_fetch_object($result))) { $_SESSION['userid'] = $row_login->id; $_SESSION['username'] = $row_login->username; $_SESSION['realname'] = $row_login->realname; try { $user = UserCache::getInstance()->getUser($row_login->id); $locale = $user->getDefaultLanguage(); if (NULL != $locale) { $_SESSION['locale'] = $locale; } $teamid = $user->getDefaultTeam(); if (0 != $teamid) { $_SESSION['teamid'] = $teamid; } $projid = $user->getDefaultProject(); if (0 != $projid) { $_SESSION['projectid'] = $projid; } } catch (Exception $e) { if ($isLog && self::$logger->isDebugEnabled()) { $logger->debug("could not load preferences for user {$row_login->id}"); } } if ($isLog) { $ua = Tools::getBrowser(); $browserStr = $ua['name'] . ' ' . $ua['version'] . ' (' . $ua['platform'] . ')'; $logger->info('user ' . $row_login->id . ' ' . $row_login->username . ' (' . $row_login->realname . '), Team ' . $user->getDefaultTeam() . ', ' . $browserStr); } return TRUE; } else { #$error = 'login failed !'; return FALSE; } }
protected function display() { if (Tools::isConnectedUser()) { $session_user = UserCache::getInstance()->getUser($_SESSION['userid']); // Admins only if ($session_user->isTeamMember(Config::getInstance()->getValue(Config::id_adminTeamId))) { $this->smartyHelper->assign('access', true); $is_modified = Tools::getSecurePOSTStringValue('is_modified', 'false'); // init // 'is_modified' is used because it's not possible to make a difference // between an unchecked checkBox and an unset checkbox variable if ("false" == $is_modified) { $isBackup = true; } else { $isBackup = $_POST['cb_backup']; } $filename = Tools::getSecurePOSTStringValue('backup_filename', "codevtt_backup_" . date("Ymd") . ".sql"); $this->smartyHelper->assign('isBackup', $isBackup); $this->smartyHelper->assign('filename', $filename); if (isset($_POST['cb_backup'])) { $result = true; if ($isBackup) { $result = SqlWrapper::getInstance()->sql_dump($filename) && $this->saveConfigFiles(); $this->smartyHelper->assign('backupResult', $result); } $this->smartyHelper->assign('stepOneResult', $result); if ($result) { $prjList = $this->displayProjectsToRemove(); $this->smartyHelper->assign('projects', $prjList); } $this->smartyHelper->assign('stepTwoResult', $result); if ($result) { $result = $this->removeCustomFields(); } $this->smartyHelper->assign('stepThreeResult', $result); if ($result) { $result = Tools::execSQLscript2("uninstall.sql"); } $this->smartyHelper->assign('stepFourResult', $result); if ($result) { $result = $this->deleteConfigFiles(); } $this->smartyHelper->assign('stepFiveResult', $result); if ($result) { $result = $this->removeCustomMenuItem('CodevTT'); } $this->smartyHelper->assign('stepSixResult', $result); } else { Config::setQuiet(true); $this->smartyHelper->assign('codevReportsDir', Constants::$codevOutputDir . DIRECTORY_SEPARATOR . 'reports'); Config::setQuiet(false); $this->smartyHelper->assign('is_modified', $is_modified); } } } }
protected function display() { if (Tools::isConnectedUser()) { // Admins only $session_user = UserCache::getInstance()->getUser($_SESSION['userid']); if ($session_user->isTeamMember(Config::getInstance()->getValue(Config::id_adminTeamId))) { $projectList = $this->getProjectList(false); if (isset($_POST['projectid']) && array_key_exists($_POST['projectid'], $projectList)) { $projectid = Tools::getSecurePOSTIntValue('projectid'); $_SESSION['projectid'] = $projectid; } elseif (isset($_SESSION['projectid']) && array_key_exists($_SESSION['projectid'], $projectList)) { $projectid = $_SESSION['projectid']; } else { $projectIds = array_keys($projectList); if (count($projectIds) > 0) { $projectid = $projectIds[0]; } else { $projectid = 0; } } $this->smartyHelper->assign('projects', SmartyTools::getSmartyArray($projectList, $projectid)); // display current workflow if (0 != $projectid) { $clone_projectid = Tools::getSecurePOSTIntValue('clone_projectid', 0); if ($clone_projectid == $projectid || !array_key_exists($clone_projectid, $projectList)) { $clone_projectid = 0; } $action = Tools::getSecurePOSTStringValue('action', ''); if ("cloneToProject" == $action) { #echo "Clone $projectid ---> $clone_projectid<br>"; $errMsg = Project::cloneAllProjectConfig($projectid, $clone_projectid); $this->smartyHelper->assign('msg', 'Clone to project : ' . $errMsg); } elseif ("cloneFromProject" == $action) { #echo "Clone $clone_projectid ---> $projectid<br>"; $errMsg = Project::cloneAllProjectConfig($clone_projectid, $projectid); $this->smartyHelper->assign('msg', 'Clone from project : ' . $errMsg); } unset($projectList[$projectid]); $this->smartyHelper->assign('cloneProjects', SmartyTools::getSmartyArray($projectList, $clone_projectid)); $proj = ProjectCache::getInstance()->getProject($projectid); $this->smartyHelper->assign('currentProjectId', $projectid); $this->smartyHelper->assign('defaultProjectId', $clone_projectid); $this->smartyHelper->assign('currentProjectName', $proj->getName()); $this->smartyHelper->assign('disabled', 0 == $clone_projectid); $projectsInfo = array(); $projectsInfo[] = $this->getProjectInfo($proj, "tabsProject"); if (0 != $clone_projectid) { $cproj = ProjectCache::getInstance()->getProject($clone_projectid); $this->smartyHelper->assign('defaultProjectName', $cproj->getName()); $projectsInfo[] = $this->getProjectInfo($cproj, "tabsCloneProject"); } $this->smartyHelper->assign('projectsInfo', $projectsInfo); } } } }
/** * @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; }
protected function getUserData() { $userId = $this->userId; $cache = UserCache::getInstance(); $data = $cache->read($userId); if ((ENVIRONMENT & PRODUCTION) > 0 && !$data) { list($fp) = $cache->lock($userId); $data = $this->_getUserData($userId); $cache->write($fp, $data); } if (!$data) { $data = $this->_getUserData($userId); } return Sabel_ValueObject::fromArray(array("userId" => $userId, "friends" => Follower::getFriends($userId, FRIENDS_ICON_LIMIT + 1), "friendsCount" => $data["friends"], "followersCount" => $data["followers"], "statusesCount" => $data["statuses"], "latestComment" => $data["comment"])); }
protected function logicsFollowRemove($userId, $targetId, $result) { if ($result->isFailure() || $result->removeType !== "follow") { return; } $cache = UserCache::getInstance(); list($fp, $data) = $cache->lock($userId); if ($data) { $data["friends"]--; $cache->write($fp, $data); } list($fp, $data) = $cache->lock($targetId); if ($data) { $data["followers"]--; $cache->write($fp, $data); } }
/** * fiches analyzed dont BI non renseignes * fiches analyzed dont RAE non renseignes * @return ConsistencyError[] */ public function checkAnalyzed() { // CoDev FDJ custom, defined in Mantis $status_analyzed = Config::getVariableKeyFromValue(Config::id_statusNames, 'analyzed'); $status_accepted = Config::getVariableKeyFromValue(Config::id_statusNames, 'accepted'); $status_deferred = Config::getVariableKeyFromValue(Config::id_statusNames, 'deferred'); $FDJ_teamid = Config::getInstance()->getValue(Config::id_ClientTeamid); $cerrList = array(); // select all issues which current status is 'analyzed' $query = "SELECT * " . "FROM `mantis_bug_table` " . "WHERE status in ({$status_analyzed}, {$status_accepted}, " . Constants::$status_open . ", {$status_deferred}) "; if (0 != count($this->projectList)) { $formatedProjects = implode(', ', array_keys($this->projectList)); $query .= "AND project_id IN ({$formatedProjects}) "; } $query .= "ORDER BY last_updated DESC, bug_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); if (NULL == $issue->getEffortEstim()) { $cerr = new ConsistencyError($row->id, $row->handler_id, $row->status, $row->last_updated, T_("BI not specified: BI = Time(Analysis + Dev + Tests)")); $cerr->severity = T_("Error"); $cerrList[] = $cerr; } if (is_null($issue->getBacklog())) { $cerr = new ConsistencyError($row->bug_id, $row->handler_id, $row->status, $row->last_updated, T_("Backlog not specified: Backlog = Time(BI - Analysis)")); $cerr->severity = T_("Error"); $cerrList[] = $cerr; } if ($status_analyzed == $row->status) { $user = UserCache::getInstance()->getUser($row->handler_id); if (!$user->isTeamMember($FDJ_teamid)) { $cerr = new ConsistencyError($row->bug_id, $row->handler_id, $row->status, $row->last_updated, T_("Once analysed, a Task must be assigned to 'FDJ' for validation")); $cerr->severity = T_("Error"); $cerrList[] = $cerr; } } } // check if fields correctly set return $cerrList; }
protected function display() { if (Tools::isConnectedUser()) { // Admins only $session_user = UserCache::getInstance()->getUser($_SESSION['userid']); if ($session_user->isTeamMember(Config::getInstance()->getValue(Config::id_adminTeamId))) { if (isset($_POST['projects']) && !empty($_POST['projects'])) { $selectedProjects = $_POST['projects']; $result = array(); foreach ($selectedProjects as $projectid) { $project = ProjectCache::getInstance()->getProject($projectid); $result[$projectid] = $project->getName(); Project::prepareProjectToCodev($projectid); } $this->smartyHelper->assign('result', $result); } $this->smartyHelper->assign('projects', $this->getProjectList()); } } }
/** * @param BlogPost[] $postList * @return mixed[] */ private function getBlogPosts(array $postList) { $blogPosts = array(); foreach ($postList as $id => $bpost) { $srcUser = UserCache::getInstance()->getUser($bpost->src_user_id); $item = array(); // TODO $item['category'] = Config::getVariableValueFromKey(Config::id_blogCategories, $bpost->category); $item['severity'] = BlogPost::getSeverityName($bpost->severity); $item['summary'] = $bpost->summary; $item['content'] = $bpost->content; $item['date_submitted'] = date('Y-m-d G:i', $bpost->date_submitted); $item['from'] = $srcUser->getRealname(); // find receiver if (0 != $bpost->dest_user_id) { $destUser = UserCache::getInstance()->getUser($bpost->dest_user_id); $item['to'] = $destUser->getRealname(); } else { if (0 != $bpost->dest_team_id) { $team = TeamCache::getInstance()->getTeam($bpost->dest_team_id); $item['to'] = $team->getName(); } else { if (0 != $bpost->dest_project_id) { $destProj = ProjectCache::getInstance()->getProject($bpost->dest_project_id); $item['to'] = $destProj->getName(); } else { $item['to'] = '?'; } } } $item['activity'] = 'activities...'; $item['buttons'] = "<input type='button' value='" . T_('Ack') . "' onclick='javascript: ackPost(" . $bpost->id . ")' />"; $item['buttons'] .= "<input type='button' value='" . T_('Hide') . "' onclick='javascript: hidePost(" . $bpost->id . ")' />"; // TODO only if i'm the owner $item['buttons'] .= "<input type='button' value='" . T_('Delete') . "' onclick='javascript: deletePost(" . $bpost->id . ")' />"; $item['isHidden'] = '0'; $blogPosts[$id] = $item; } return $blogPosts; }
/** * 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; }
protected function display() { if (Tools::isConnectedUser()) { $session_user = UserCache::getInstance()->getUser($_SESSION['userid']); $mTeamList = $session_user->getDevTeamList(); $lTeamList = $session_user->getLeadedTeamList(); $oTeamList = $session_user->getObservedTeamList(); $managedTeamList = $session_user->getManagedTeamList(); $teamList = $mTeamList + $lTeamList + $oTeamList + $managedTeamList; $defaultTeam = isset($_SESSION['teamid']) ? $_SESSION['teamid'] : 0; $teamid = Tools::getSecureGETIntValue('teamid', $defaultTeam); $_SESSION['teamid'] = $teamid; $this->smartyHelper->assign('teams', SmartyTools::getSmartyArray($teamList, $teamid)); // if current team is not in allowed list, do not display if (array_key_exists($teamid, $teamList)) { $team = TeamCache::getInstance()->getTeam($teamid); $start_year = date("Y", $team->getDate()); $start_month = date("m", $team->getDate()); $start_day = date("d", $team->getDate()); $statusNames = Config::getInstance()->getValue("statusNames"); ksort($statusNames); $this->smartyHelper->assign('statusNames', $statusNames); $periodStatsReport = new PeriodStatsReport($start_year, $start_month, $start_day, $teamid); $periodStatsList = $periodStatsReport->computeReport(); $periods = array(); foreach ($periodStatsList as $date => $ps) { $status = array(); foreach ($statusNames as $s => $sname) { $status[$s] = $ps->getStatusCount($s); } $periods[Tools::formatDate("%B %Y", $date)] = $status; } $this->smartyHelper->assign('periods', $periods); } } }
protected function updateTeamSelector() { if (Tools::isConnectedUser()) { // use the teamid set in the form, if not defined (first page call) use session teamid if (isset($_GET['teamid'])) { $this->teamid = Tools::getSecureGETIntValue('teamid'); $_SESSION['teamid'] = $this->teamid; } else { $this->teamid = isset($_SESSION['teamid']) ? $_SESSION['teamid'] : 0; } $this->smartyHelper->assign('teamid', $this->teamid); $this->session_userid = $_SESSION['userid']; $this->session_user = UserCache::getInstance()->getUser($_SESSION['userid']); $this->teamList = $this->session_user->getTeamList(); if (count($this->teamList) > 0) { $this->smartyHelper->assign('teams', SmartyTools::getSmartyArray($this->teamList, $_SESSION['teamid'])); } $this->session_user->setDefaultTeam($this->teamid); // used to disable some menu items if ($this->session_user->isTeamMember(Config::getInstance()->getValue(Config::id_adminTeamId))) { $this->smartyHelper->assign('isAdmin', true); } } }
/** * * @param IssueSelection $iSel * @param type $projectid * @param type $odtTemplate * @return string filepath complete path to generated ODT file */ private function generateODT(IssueSelection $iSel, $projectid, $odtTemplate) { self::$logger->debug("genProjectODT(): project {$projectid} template {$odtTemplate}"); $project = ProjectCache::getInstance()->getProject($projectid); $odf = new odf($odtTemplate); try { $odf->setVars('today', date('Y-m-d')); } catch (Exception $e) { } try { $odf->setVars('selectionName', $project->getName()); } catch (Exception $e) { } try { $session_user = UserCache::getInstance()->getUser($this->session_userid); $odf->setVars('sessionUser', $session_user->getRealname()); } catch (Exception $e) { } $issueList = $iSel->getIssueList(); if (self::$logger->isDebugEnabled()) { self::$logger->debug("nb issues = " . count($issueList)); } $q_id = 0; try { $issueSegment = $odf->setSegment('issueSelection'); } catch (Exception $e) { self::$logger->error("generateODT: TAG 'issueSelection'"); self::$logger->error("generateODT: " + $e->getMessage()); return "FAILED: error on segment 'issueSelection'."; } if (self::$logger->isDebugEnabled()) { self::$logger->debug('XML=' . $issueSegment->getXml()); } foreach ($issueList as $issue) { $q_id += 1; if (0 == $issue->getHandlerId()) { $userName = T_('unknown'); } else { $user = UserCache::getInstance()->getUser($issue->getHandlerId()); $userName = utf8_decode($user->getRealname()); if (empty($userName)) { $userName = "******" . $issue->getHandlerId(); } } if (self::$logger->isDebugEnabled()) { self::$logger->debug("issue " . $issue->getId() . ": handlerName = " . $userName); } if (0 == $issue->getReporterId()) { $reporterName = T_('unknown'); } else { $reporter = UserCache::getInstance()->getUser($issue->getReporterId()); $reporterName = utf8_decode($reporter->getRealname()); if (empty($reporterName)) { $reporterName = "user_" . $issue->getReporterId(); } } if (self::$logger->isDebugEnabled()) { self::$logger->debug("issue " . $issue->getId() . ": reporterName = " . $reporterName); } // add issue try { $issueSegment->setVars('q_id', $q_id); } catch (Exception $e) { } try { $issueSegment->setVars('bugId', $issue->getId()); } catch (Exception $e) { $this->logException($e); } try { $issueSegment->setVars('summary', utf8_decode($issue->getSummary())); } catch (Exception $e) { $this->logException($e); } try { $issueSegment->setVars('dateSubmission', date('d/m/Y', $issue->getDateSubmission())); } catch (Exception $e) { } try { $timestamp = $issue->getLatestStatusOccurrence($issue->getBugResolvedStatusThreshold()); if (is_null($timestamp)) { $issueSegment->setVars('dateResolved', ''); } else { $issueSegment->setVars('dateResolved', date('d/m/Y', $timestamp)); } } catch (Exception $e) { } try { $timestamp = $issue->getDeadLine(); $deadline = 0 == $timestamp ? '' : date('d/m/Y', $issue->getDeadLine()); $issueSegment->setVars('deadline', $deadline); } catch (Exception $e) { $this->logException($e); } try { $issueSegment->setVars('currentStatus', Constants::$statusNames[$issue->getCurrentStatus()]); } catch (Exception $e) { } try { $issueSegment->setVars('handlerId', $userName); } catch (Exception $e) { } try { $issueSegment->setVars('reporterId', $reporterName); } catch (Exception $e) { } try { $issueSegment->setVars('reporterName', $reporterName); } catch (Exception $e) { } try { $issueSegment->setVars('description', utf8_decode($issue->getDescription())); } catch (Exception $e) { } #try { $issueSegment->setVars('description', utf8_decode(Tools::convertToUTF8($issue->getDescription()))); } catch (Exception $e) { }; try { $issueSegment->setVars('category', $issue->getCategoryName()); } catch (Exception $e) { } try { $issueSegment->setVars('severity', $issue->getSeverityName()); } catch (Exception $e) { } try { $issueSegment->setVars('status', Constants::$statusNames[$issue->getStatus()]); } catch (Exception $e) { } try { $issueSegment->setVars('extId', $issue->getTcId()); } catch (Exception $e) { } // add issueNotes $issueNotes = $issue->getIssueNoteList(); $noteId = 0; foreach ($issueNotes as $id => $issueNote) { $noteId += 1; if (self::$logger->isDebugEnabled()) { self::$logger->debug("issue " . $issue->getId() . ": note {$id} = " . $issueNote->getNote()); } $noteReporter = UserCache::getInstance()->getUser($issueNote->getReporterId()); try { $noteReporterName = utf8_decode($noteReporter->getRealname()); } catch (Exception $e) { } try { $issueSegment->bugnotes->noteId($noteId); } catch (Exception $e) { } try { $issueSegment->bugnotes->noteReporter($noteReporterName); } catch (Exception $e) { } try { $issueSegment->bugnotes->noteDateSubmission(date('d/m/Y', $issueNote->getDateSubmitted())); } catch (Exception $e) { } try { $issueSegment->bugnotes->note(utf8_decode($issueNote->getNote())); } catch (Exception $e) { } try { $issueSegment->bugnotes->merge(); } catch (Exception $e) { } } $issueSegment->merge(); } $odf->mergeSegment($issueSegment); // INFO: the following line is MANDATORY and fixes the following error: // "wrong .odt file encoding" #ob_end_clean(); #$odf->exportAsAttachedFile(); // 2nd solution : show link in page $odtFilename = basename($odtTemplate, ".odt") . '_' . $project->getName() . '_' . date('Ymd') . '.odt'; $filepath = Constants::$codevOutputDir . '/reports/' . $odtFilename; if (self::$logger->isDebugEnabled()) { self::$logger->debug("save odt file " . $filepath); } $odf->saveToDisk($filepath); return $filepath; }
protected function display() { if (Tools::isConnectedUser()) { // Admins only $session_user = UserCache::getInstance()->getUser($_SESSION['userid']); if ($session_user->isTeamMember(Config::getInstance()->getValue(Config::id_adminTeamId))) { $this->smartyHelper->assign('jobType', Job::$typeNames); $action = Tools::getSecurePOSTStringValue('action', 'none'); if ('addJob' == $action) { $job_name = Tools::getSecurePOSTStringValue('job_name'); $job_type = Tools::getSecurePOSTStringValue('job_type'); $job_color = Tools::getSecurePOSTStringValue('job_color'); // TODO check if not already in table ! // save to DB Jobs::create($job_name, $job_type, $job_color); } elseif ('addAssociationProject' == $action) { // Add Job to selected projects $job_id = Tools::getSecurePOSTIntValue('job_id'); $proj = explode(",", Tools::getSecurePOSTStringValue('formattedProjects')); foreach ($proj as $project_id) { // TODO check if not already in table ! // save to DB $query = "INSERT INTO `codev_project_job_table` (`project_id`, `job_id`) VALUES ('" . $project_id . "','" . $job_id . "');"; $result = SqlWrapper::getInstance()->sql_query($query); if (!$result) { $this->smartyHelper->assign('error', T_("Couldn't add the job association")); } } } elseif ('deleteJob' == $action) { $job_id = Tools::getSecurePOSTIntValue('job_id'); if (Jobs::JOB_NA == $job_id || Jobs::JOB_SUPPORT == $job_id) { $this->smartyHelper->assign('error', T_("This job must not be deleted.")); } else { $query = "DELETE FROM `codev_project_job_table` WHERE job_id = " . $job_id . ';'; $result = SqlWrapper::getInstance()->sql_query($query); if (!$result) { $this->smartyHelper->assign('error', T_("Couldn't remove the job association")); } $query = "DELETE FROM `codev_job_table` WHERE id = {$job_id};"; $result = SqlWrapper::getInstance()->sql_query($query); if (!$result) { $this->smartyHelper->assign('error', T_("Couldn't delete the job")); } } } elseif ('deleteJobProjectAssociation' == $action) { $asso_id = Tools::getSecurePOSTIntValue('asso_id'); $query = "DELETE FROM `codev_project_job_table` WHERE id = " . $asso_id . ';'; $result = SqlWrapper::getInstance()->sql_query($query); if (!$result) { $this->smartyHelper->assign('error', T_("Couldn't remove the job association")); } } $jobs = $this->getJobs(); $this->smartyHelper->assign('jobs', $jobs); //$this->smartyHelper->assign('assignedJobs', $this->getAssignedJobs($jobs)); $this->smartyHelper->assign('assignedJobs', $jobs); $projects = Project::getProjects(); $this->smartyHelper->assign('projects', $projects); $this->smartyHelper->assign('tuples', $this->getAssignedJobTuples($projects)); } } }
if ('createExtID' == $groupExtID) { $isCreateExtIdField = TRUE; } else { if ('0' != $extIdCustomField) { // add existing to codev_config_table Config::getInstance()->setValue("customField_ExtId", $extIdCustomField, Config::configType_int); $isCreateExtIdField = FALSE; } else { // if none selected, create one... $isCreateExtIdField = TRUE; } } createCustomFields($isCreateExtIdField); echo "DEBUG 6/16 create ExternalTasks Project<br/>"; $extproj_id = createExternalTasksProject(T_("CodevTT_ExternalTasks"), T_("CodevTT ExternalTasks Project")); $adminLeader = UserCache::getInstance()->getUser($adminTeamLeaderId); echo "DEBUG 7/16 createAdminTeam with leader: " . $adminLeader->getName() . "<br/>"; createAdminTeam($adminTeamName, $adminTeamLeaderId); echo "DEBUG 8/16 update status list<br/>"; Constants::$status_new = $status_new; Constants::$status_feedback = $status_feedback; Constants::$status_open = $status_open; Constants::$status_closed = $status_closed; // Set path for .CSV reports (Excel) echo "DEBUG 9/16 add CodevTT output directory<br/>"; Constants::$codevOutputDir = $codevOutputDir; Constants::$codevtt_logfile = $codevOutputDir . '/logs/codevtt.log'; $retCode = Constants::writeConfigFile(); if (FALSE == $retCode) { echo "<span class='error_font'>ERROR: could not update config file: " . Constants::$config_file . "</span><br/>"; $installStepFailed = TRUE;
private function getWorkingDaysPerProjectPerUser($startTimestamp, $endTimestamp, $isExtTasksPrj, $isSideTasksPrj) { $team = TeamCache::getInstance()->getTeam($this->teamid); $activeMembers = $team->getActiveMembers($startTimestamp, $endTimestamp, TRUE); $activeMembersIds = array_keys($activeMembers); $usersData = array(); // Time spend by user for each project (depending on the chosen Timestamp) foreach ($activeMembersIds as $user_id) { $user = UserCache::getInstance()->getUser($user_id); $timeTracks = $user->getTimeTracks($startTimestamp, $endTimestamp); $userElapsedPerProject = array(); foreach ($timeTracks as $timeTrack) { $userElapsedPerProject[$timeTrack->getProjectId()] += $timeTrack->getDuration(); } $usersData[$user_id] = $userElapsedPerProject; } // Check SideTask & ExternalTask $projList = $team->getProjects(true, true, $isSideTasksPrj); if (!$isExtTasksPrj) { if (array_key_exists(Config::getInstance()->getValue(Config::id_externalTasksProject), $projList)) { unset($projList[Config::getInstance()->getValue(Config::id_externalTasksProject)]); } } // Time elapsed per user and per project (plus total per user) $usersSmartyData = array(); foreach ($activeMembers as $user_id => $realName) { $elapsedPerProject = array(); $userTotal = 0; foreach (array_keys($projList) as $projId) { $val = $usersData[$user_id][$projId]; $elapsedPerProject[$projId] = $val; $userTotal += $val; } // Formatting for Smarty $usersSmartyData[] = array('id' => $user_id, 'name' => $realName, 'elapsedPerProject' => $elapsedPerProject, 'total' => $userTotal); } // Time elapsed per project plus total for all the projects $totalAllProj = 0; $totalPerProj = array(); foreach (array_keys($projList) as $projId) { foreach ($activeMembersIds as $userId) { $totalAllProj += $usersData[$userId][$projId]; $totalPerProj[$projId] += $usersData[$userId][$projId]; } } $totalPerProj['total'] = $totalAllProj; $data = array('usersData' => $usersSmartyData, 'projList' => $projList, 'totalPerProj' => $totalPerProj); return $data; }
/** * return the posts to be displayed for a given user, * depending on it's [userid, teams, projects] and personal filter preferences. * * we want: * - all posts assigned to the user * - all posts assigned to a team where the user is member * - all posts assigned to a project that is in one of the user's teams * * @param int $user_id * * @return BlogPost[] */ public function getPosts($user_id) { $user = UserCache::getInstance()->getUser($user_id); $teamList = $user->getTeamList(); $projList = $user->getProjectList(); $formattedTeamList = implode(',', array_keys($teamList)); $formattedProjList = implode(',', array_keys($projList)); $query = "SELECT * FROM `codev_blog_table` " . "WHERE dest_user_id = {$user_id} " . "OR (dest_user_id = 0 AND dest_team_id IN ({$formattedTeamList})) " . "OR (dest_user_id = 0 AND dest_team_id IN (0,{$formattedTeamList}) AND dest_project_id IN ({$formattedProjList})) " . "ORDER BY date_submitted DESC"; $result = SqlWrapper::getInstance()->sql_query($query); if (!$result) { echo "<span style='color:red'>ERROR: Query FAILED</span>"; exit; } $postList = array(); while ($row = SqlWrapper::getInstance()->sql_fetch_object($result)) { $postList[$row->id] = BlogPostCache::getInstance()->getBlogPost($row->id, $row); } return $postList; }
protected function display() { if (Tools::isConnectedUser()) { $user = UserCache::getInstance()->getUser($_SESSION['userid']); $teamid = $_SESSION['teamid']; $teamList = $user->getTeamList(); if (count($teamList) > 0) { // --- define the list of tasks the user can display // All projects from teams where I'm a Developper or Manager AND Observer $allProject[0] = T_('(all)'); $dTeamList = $user->getDevTeamList(); $devProjList = count($dTeamList) > 0 ? $user->getProjectList($dTeamList, true, false) : array(); $managedTeamList = $user->getManagedTeamList(); $managedProjList = count($managedTeamList) > 0 ? $user->getProjectList($managedTeamList, true, false) : array(); $oTeamList = $user->getObservedTeamList(); $observedProjList = count($oTeamList) > 0 ? $user->getProjectList($oTeamList, true, false) : array(); $projList = $allProject + $devProjList + $managedProjList + $observedProjList; // if 'support' is set in the URL, display graphs for 'with/without Support' $displaySupport = filter_input(INPUT_GET, 'support') ? true : false; if ($displaySupport) { $this->smartyHelper->assign('support', $displaySupport); } if (filter_input(INPUT_GET, 'bugid')) { $bug_id = Tools::getSecureGETIntValue('bugid', 0); } else { if (isset($_SESSION['bugid'])) { $bug_id = $_SESSION['bugid']; } else { $bug_id = 0; unset($_SESSION['bugid']); } } $bugs = NULL; $projects = NULL; if ($bug_id != 0) { try { $issue = IssueCache::getInstance()->getIssue($bug_id); $defaultProjectid = $issue->getProjectId(); $bugs = SmartyTools::getBugs($defaultProjectid, $bug_id); if (array_key_exists($defaultProjectid, $projList) && array_key_exists($bug_id, $bugs)) { $consistencyErrors = NULL; $ccheck = new ConsistencyCheck2(array($issue)); $cerrList = $ccheck->check(); if (0 != count($cerrList)) { foreach ($cerrList as $cerr) { $consistencyErrors[] = array('severity' => $cerr->getLiteralSeverity(), 'severityColor' => $cerr->getSeverityColor(), 'desc' => $cerr->desc); } $this->smartyHelper->assign('ccheckButtonTitle', count($consistencyErrors) . ' ' . T_("Errors")); $this->smartyHelper->assign('ccheckBoxTitle', count($consistencyErrors) . ' ' . T_("Errors")); $this->smartyHelper->assign('ccheckErrList', $consistencyErrors); } $this->smartyHelper->assign('isManager', $user->isTeamManager($teamid)); $this->smartyHelper->assign('isObserver', $user->isTeamObserver($teamid)); $isManagerView = array_key_exists($issue->getProjectId(), $managedProjList) ? true : false; $isObserverView = array_key_exists($issue->getProjectId(), $observedProjList) ? true : false; $this->smartyHelper->assign('issueGeneralInfo', IssueInfoTools::getIssueGeneralInfo($issue, $isManagerView || $isObserverView, $displaySupport)); $timeTracks = $issue->getTimeTracks(); $this->smartyHelper->assign('jobDetails', $this->getJobDetails($timeTracks)); $this->smartyHelper->assign('timeDrift', $this->getTimeDrift($issue)); $this->smartyHelper->assign('months', $this->getCalendar($issue, $timeTracks)); // set Commands I belong to $parentCmds = $this->getParentCommands($issue); $this->smartyHelper->assign('parentCommands', $parentCmds); $this->smartyHelper->assign('nbParentCommands', count($parentCmds)); } $projects = SmartyTools::getSmartyArray($projList, $defaultProjectid); $_SESSION['projectid'] = $defaultProjectid; $_SESSION['bugid'] = $bug_id; // Dashboard IssueInfoTools::dashboardSettings($this->smartyHelper, $issue, $this->session_userid, $this->teamid); } catch (Exception $e) { self::$logger->warn("issue {$bug_id} not found in mantis DB !"); unset($_SESSION['bugid']); } } else { try { $defaultProjectid = 0; if (isset($_SESSION['projectid']) && 0 != $_SESSION['projectid']) { $defaultProjectid = $_SESSION['projectid']; $bugs = SmartyTools::getBugs($defaultProjectid, $bug_id); } else { $bugs = SmartyTools::getBugs($defaultProjectid, $bug_id, $projList); } $projects = SmartyTools::getSmartyArray($projList, $defaultProjectid); } catch (Exception $e) { self::$logger->warn("issue {$bug_id} not found in mantis DB !"); unset($_SESSION['bugid']); } } $this->smartyHelper->assign('bugs', $bugs); $this->smartyHelper->assign('projects', $projects); } } }
if (Tools::isConnectedUser() && (isset($_GET['action']) || isset($_POST['action']))) { $logger = Logger::getLogger("TimeTrackingAjax"); $teamid = isset($_SESSION['teamid']) ? $_SESSION['teamid'] : 0; $session_user = $_SESSION['userid']; // TODO check $session_user & teamid ? #$action = $_POST['action']; $action = Tools::getSecurePOSTStringValue('action'); if (isset($action)) { $smartyHelper = new SmartyHelper(); if ("getIssuesAndDurations" == $action) { // TODO check session_user is allowed to manage user ( & get issue list...) $defaultProjectid = Tools::getSecurePOSTIntValue('projectid'); $managedUserid = Tools::getSecurePOSTIntValue('managedUserid'); $team = TeamCache::getInstance()->getTeam($teamid); $projList = $team->getProjects(true, false); $managedUser = UserCache::getInstance()->getUser($managedUserid); $isOnlyAssignedTo = '0' == $managedUser->getTimetrackingFilter('onlyAssignedTo') ? false : true; $isHideResolved = '0' == $managedUser->getTimetrackingFilter('hideResolved') ? false : true; $availableIssues = TimeTrackingTools::getIssues($teamid, $defaultProjectid, $isOnlyAssignedTo, $managedUserid, $projList, $isHideResolved, 0); $jobs = TimeTrackingTools::getJobs($defaultProjectid, $teamid); $durations = TimeTrackingTools::getDurationList($teamid); // return data $data = array('availableIssues' => $availableIssues, 'availableJobs' => $jobs, 'availableDurations' => $durations); $jsonData = json_encode($data); // return data echo $jsonData; } elseif ($action == 'getUpdateBacklogData') { // get info to display the updateBacklog dialogbox // (when clicking on the backlog value in WeekTaskDetails) // OR clicking the addTrack button in addTrack form (form1) $bugid = Tools::getSecurePOSTIntValue('bugid');
/** * send an email to each member with the list of all incomplete/missing days in the period */ public function sendTimesheetEmails($startTimestamp = NULL, $endTimestamp = NULL) { if ($this->isEnabled() && 1 == Constants::$emailSettings['enable_email_notification'] && 1 == $this->getGeneralPreference('sendTimesheetEmailNotification')) { echo "=== Team {$this->id} : " . $this->getName() . "\n"; $users = $this->getActiveMembers(); foreach ($users as $id => $name) { try { $user = UserCache::getInstance()->getUser($id); if ($user->isEnabled()) { $user->sendTimesheetEmail($this->id, $startTimestamp, $endTimestamp); } } catch (Exception $e) { self::$logger->error("sendTimetrackEmails: Could not send mail to {$name}"); } } } }
/** * Export week activity * @param int $teamid * @param $weekDates * @param TimeTracking $timeTracking * @param string $myFile * @return string */ private function exportWeekActivityReportToCSV($teamid, $weekDates, $timeTracking, $myFile) { $sepChar = ';'; // create filename & open file $fh = fopen($myFile, 'w'); $stringData = T_("Task") . $sepChar . T_("Job") . $sepChar . T_("Description") . $sepChar . T_("Assigned to") . $sepChar . Tools::formatDate("%A %d/%m", $weekDates[1]) . $sepChar . Tools::formatDate("%A %d/%m", $weekDates[2]) . $sepChar . Tools::formatDate("%A %d/%m", $weekDates[3]) . $sepChar . Tools::formatDate("%A %d/%m", $weekDates[4]) . $sepChar . Tools::formatDate("%A %d/%m", $weekDates[5]) . "\n"; fwrite($fh, $stringData); $query = "SELECT codev_team_user_table.user_id, mantis_user_table.realname " . "FROM `codev_team_user_table`, `mantis_user_table` " . "WHERE codev_team_user_table.team_id = {$teamid} " . "AND codev_team_user_table.user_id = mantis_user_table.id " . "ORDER BY mantis_user_table.realname"; $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)) { // if user was working on the project during the timestamp $user = UserCache::getInstance()->getUser($row->user_id); if ($user->isTeamDeveloper($teamid, $timeTracking->getStartTimestamp(), $timeTracking->getEndTimestamp()) || $user->isTeamManager($teamid, $timeTracking->getStartTimestamp(), $timeTracking->getEndTimestamp())) { $this->exportWeekDetailsToCSV($row->user_id, $timeTracking, $user->getShortname(), $fh); } } fclose($fh); return $myFile; }
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 { $team = TeamCache::getInstance()->getTeam($this->teamid); // if first call to this page if (!array_key_exists('nextForm', $_POST)) { $activeMembers = $team->getActiveMembers(); if ($this->session_user->isTeamManager($this->teamid)) { $this->smartyHelper->assign('users', SmartyTools::getSmartyArray($activeMembers, $this->session_userid)); } else { // developper & manager can add timeTracks if (array_key_exists($this->session_userid, $activeMembers)) { $_POST['userid'] = $this->session_userid; $_POST['nextForm'] = "addHolidaysForm"; //$_POST['days'] = 'dayid'; } } } $nextForm = Tools::getSecurePOSTStringValue('nextForm', ''); if ($nextForm == "addHolidaysForm") { $userid = Tools::getSecurePOSTIntValue('userid', $this->session_userid); $managed_user = UserCache::getInstance()->getUser($userid); // dates $startdate = Tools::getSecurePOSTStringValue('startdate', date("Y-m-d")); $enddate = Tools::getSecurePOSTStringValue('enddate', ''); $defaultBugid = Tools::getSecurePOSTIntValue('bugid', 0); $action = Tools::getSecurePOSTStringValue('action', ''); $duration = Tools::getSecurePOSTNumberValue('duree', 0); if ("addHolidays" == $action) { // TODO add tracks ! $job = Tools::getSecurePOSTStringValue('job'); $duration = Tools::getSecurePOSTNumberValue('duree'); $holydays = Holidays::getInstance(); $keyvalue = Tools::getSecurePOSTStringValue('checkedDays'); $checkedDaysList = Tools::doubleExplode(':', ',', $keyvalue); $startTimestamp = Tools::date2timestamp($startdate); $endTimestamp = Tools::date2timestamp($enddate); // save to DB $weekday = date('l', strtotime($startdate)); $timestamp = $startTimestamp; while ($timestamp <= $endTimestamp) { // check if not a fixed holiday if (!$holydays->isHoliday($timestamp)) { // check existing timetracks on $timestamp and adjust duration $availabletime = $managed_user->getAvailableTime($timestamp); // not imput more than possible if ($duration >= $availabletime) { $imput = $availabletime; } else { $imput = $duration; } // check if weekday checkbox is checked if (1 == $checkedDaysList[$weekday]) { if ($duration > 0) { if (self::$logger->isDebugEnabled()) { self::$logger->debug(date("Y-m-d", $timestamp) . " duration {$imput} job {$job}"); } TimeTrack::create($managed_user->getId(), $defaultBugid, $job, $timestamp, $imput, $this->session_userid); } } } $timestamp = strtotime("+1 day", $timestamp); $weekday = date('l', strtotime(date("Y-m-d", $timestamp))); } // We redirect to holidays report, so the user can verify his holidays header('Location:holidays_report.php'); } $this->smartyHelper->assign('startDate', $startdate); $this->smartyHelper->assign('endDate', $enddate); if ($this->session_userid != $managed_user->getId()) { $this->smartyHelper->assign('otherrealname', $managed_user->getRealname()); } // Get Team SideTasks Project List $projList = $team->getProjects(true, false); foreach ($projList as $pid => $pname) { // we want only SideTasks projects try { if (!$team->isSideTasksProject($pid)) { unset($projList[$pid]); } } catch (Exception $e) { self::$logger->error("project {$pid}: " . $e->getMessage()); } } $extproj_id = Config::getInstance()->getValue(Config::id_externalTasksProject); $extProj = ProjectCache::getInstance()->getProject($extproj_id); $projList[$extproj_id] = $extProj->getName(); $defaultProjectid = Tools::getSecurePOSTIntValue('projectid', 0); if ($defaultBugid != 0 && $action == 'setBugId') { // find ProjectId to update categories $issue = IssueCache::getInstance()->getIssue($defaultBugid); $defaultProjectid = $issue->getProjectId(); } $this->smartyHelper->assign('projects', SmartyTools::getSmartyArray($projList, $defaultProjectid)); $this->smartyHelper->assign('issues', $this->getIssues($defaultProjectid, $projList, $extproj_id, $defaultBugid)); $this->smartyHelper->assign('jobs', $this->getJobs($defaultProjectid, $projList)); $this->smartyHelper->assign('duration', SmartyTools::getSmartyArray(TimeTrackingTools::getDurationList($team->getId()), $duration)); $this->smartyHelper->assign('userid', $managed_user->getId()); } } } }
/** * 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; }
if (Tools::isConnectedUser() && (isset($_GET['action']) || isset($_POST['action']))) { if (isset($_GET['action'])) { $smartyHelper = new SmartyHelper(); if ($_GET['action'] == 'getTeamProjects') { $withDisabled = '1' == Tools::getSecureGETIntValue('withDisabledProjects', 1) ? true : false; $projects = TeamCache::getInstance()->getTeam(Tools::getSecureGETIntValue('teamid'))->getProjects(false, $withDisabled); $smartyHelper->assign('projects', SmartyTools::getSmartyArray($projects, 0)); $smartyHelper->display('form/projectSelector'); } elseif ($_GET['action'] == 'getTeamAllProjects') { $withDisabled = '1' == Tools::getSecureGETIntValue('withDisabledProjects', 1) ? true : false; $projects[0] = T_('All projects'); $projects += $projects = TeamCache::getInstance()->getTeam(Tools::getSecureGETIntValue('teamid'))->getProjects(false, $withDisabled); $smartyHelper->assign('projects', SmartyTools::getSmartyArray($projects, 0)); $smartyHelper->display('form/projectSelector'); } elseif ($_GET['action'] == 'getProjectIssues') { $user = UserCache::getInstance()->getUser($_SESSION['userid']); $withDisabled = '1' == Tools::getSecureGETIntValue('withDisabledProjects', 1) ? true : false; // --- define the list of tasks the user can display // All projects from teams where I'm a Developper or Manager AND Observer $allProject[0] = T_('(all)'); $dTeamList = $user->getDevTeamList(); $devProjList = count($dTeamList) > 0 ? $user->getProjectList($dTeamList, true, $withDisabled) : array(); $managedTeamList = $user->getManagedTeamList(); $managedProjList = count($managedTeamList) > 0 ? $user->getProjectList($managedTeamList, true, $withDisabled) : array(); $oTeamList = $user->getObservedTeamList(); $observedProjList = count($oTeamList) > 0 ? $user->getProjectList($oTeamList, true, $withDisabled) : array(); $projList = $allProject + $devProjList + $managedProjList + $observedProjList; // WORKAROUND if ($_GET['bugid'] == 'null') { $_GET['bugid'] = 0; }
/** * returns the tasks with the isOnTime attribute to definie color. * @static * @param User $user * @param int $today (a day AT MIDNIGHT) * @param bool $addMonitored * @return ScheduledTask[] array of ScheduledTask */ public static function scheduleUser(User $user, $today, $teamid, $addMonitored = false) { $scheduledTaskList = array(); // get Ordered List of Issues to schedule $issueList = $user->getAssignedIssues(); if (self::$logger->isDebugEnabled()) { self::$logger->debug("scheduleUser " . $user->getId() . " : nb assigned issues = " . count($issueList)); } // foreach task $sumDurations = 0; foreach ($issueList as $issue) { // determinate issue duration (Backlog, EffortEstim, MgrEffortEstim) $issueDuration = $issue->getDuration(); if (self::$logger->isDebugEnabled()) { self::$logger->debug("issue " . $issue->getId() . " Duration = {$issueDuration} deadLine=" . date("Y-m-d", $issue->getDeadLine())); } $currentST = new ScheduledTask($issue->getId(), $issue->getDeadLine(), $issueDuration); if (self::$logger->isDebugEnabled()) { self::$logger->debug("issue " . $issue->getId() . " -- user->getAvailableWorkload(" . $today . ", " . $issue->getDeadLine() . ")"); self::$logger->debug("issue " . $issue->getId() . " nbDaysToDeadLine=" . $user->getAvailableWorkforce($today, $issue->getDeadLine()), $teamid); } $currentST->nbDaysToDeadLine = $user->getAvailableWorkforce($today, $issue->getDeadLine(), $teamid); $currentST->projectName = $issue->getProjectName(); $currentST->summary = $issue->getSummary(); $currentST->priorityName = $issue->getPriorityName(); $currentST->severityName = $issue->getSeverityName(); $currentST->statusName = Constants::$statusNames[$issue->getCurrentStatus()]; $handler = UserCache::getInstance()->getUser($issue->getHandlerId()); $currentST->handlerName = $handler->getName(); // check if onTime if (NULL == $issue->getDeadLine()) { $currentST->isOnTime = true; } else { $currentST->isOnTime = $sumDurations + $issueDuration <= $currentST->nbDaysToDeadLine ? true : false; } // add to list if (0 != $issueDuration) { $scheduledTaskList["{$sumDurations}"] = $currentST; $sumDurations += $issueDuration; } } if ($addMonitored) { $monitoredList = $user->getMonitoredIssues(); foreach ($monitoredList as $issue) { if (in_array($issue, $issueList)) { continue; } // determinate issue duration (Backlog, EffortEstim, MgrEffortEstim) $issueDuration = $issue->getDuration(); #echo "DEBUG Monitored issue $issue->bugId Duration = $issueDuration<br/>"; $currentST = new ScheduledTask($issue->getId(), $issue->getDeadLine(), $issueDuration); $currentST->nbDaysToDeadLine = $user->getAvailableWorkforce($today, $issue->getDeadLine(), $teamid); $currentST->projectName = $issue->getProjectName(); $currentST->summary = $issue->getSummary(); $currentST->priorityName = $issue->getPriorityName(); $currentST->severityName = $issue->getSeverityName(); $currentST->statusName = Constants::$statusNames[$issue->getCurrentStatus()]; $currentST->isMonitored = true; $handler = UserCache::getInstance()->getUser($issue->getHandlerId()); $currentST->handlerName = $handler->getName(); // check if onTime if (NULL == $issue->getDeadLine()) { $currentST->isOnTime = true; } else { $currentST->isOnTime = $sumDurations + $issueDuration <= $currentST->nbDaysToDeadLine ? true : false; } // add to list if (0 != $issueDuration) { $scheduledTaskList["{$sumDurations}"] = $currentST; $sumDurations += $issueDuration; } } } return $scheduledTaskList; }
/** * 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; }
/** * */ public function execute() { $user = UserCache::getInstance()->getUser($this->session_userid); $isManager = $user->isTeamManager($this->teamid); $isObserver = $user->isTeamObserver($this->teamid); $currentIssuesInDrift = NULL; $resolvedIssuesInDrift = NULL; foreach ($this->inputIssueSel->getIssuesInDrift($isManager || $isObserver) as $issue) { $smartyIssue = $this->getSmartyDirftedIssue($issue, $isManager || $isObserver); if (NULL != $smartyIssue) { if ($issue->isResolved()) { $resolvedIssuesInDrift[] = $smartyIssue; } else { $currentIssuesInDrift[] = $smartyIssue; } } } $this->execData = array('currentIssuesInDrift' => $currentIssuesInDrift, 'resolvedIssuesInDrift' => $resolvedIssuesInDrift); return $this->execData; }