/** * Get all projects, optionaly fetch stats for each project and can check users permissions * * @access public * @param bool $fetch_stats If true, return metrics about each projects * @param bool $check_permissions If true, remove projects not allowed for the current user * @return array */ public function getAll($fetch_stats = false, $check_permissions = false) { if (!$fetch_stats) { return $this->db->table(self::TABLE)->asc('name')->findAll(); } $this->db->startTransaction(); $projects = $this->db->table(self::TABLE)->asc('name')->findAll(); $boardModel = new Board($this->db, $this->event); $taskModel = new Task($this->db, $this->event); $aclModel = new Acl($this->db, $this->event); foreach ($projects as $pkey => &$project) { if ($check_permissions && !$this->isUserAllowed($project['id'], $aclModel->getUserId())) { unset($projects[$pkey]); } else { $columns = $boardModel->getcolumns($project['id']); $project['nb_active_tasks'] = 0; foreach ($columns as &$column) { $column['nb_active_tasks'] = $taskModel->countByColumnId($project['id'], $column['id']); $project['nb_active_tasks'] += $column['nb_active_tasks']; } $project['columns'] = $columns; $project['nb_tasks'] = $taskModel->countByProjectId($project['id']); $project['nb_inactive_tasks'] = $project['nb_tasks'] - $project['nb_active_tasks']; } } $this->db->closeTransaction(); return $projects; }