summaryrefslogtreecommitdiff
path: root/app/Controller/ProjectUserOverviewController.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Controller/ProjectUserOverviewController.php')
-rw-r--r--app/Controller/ProjectUserOverviewController.php130
1 files changed, 130 insertions, 0 deletions
diff --git a/app/Controller/ProjectUserOverviewController.php b/app/Controller/ProjectUserOverviewController.php
new file mode 100644
index 00000000..90887a8a
--- /dev/null
+++ b/app/Controller/ProjectUserOverviewController.php
@@ -0,0 +1,130 @@
+<?php
+
+namespace Kanboard\Controller;
+
+use Kanboard\Model\User as UserModel;
+use Kanboard\Model\Task as TaskModel;
+use Kanboard\Core\Security\Role;
+
+/**
+ * Project User overview
+ *
+ * @package Kanboard\Controller
+ * @author Frederic Guillot
+ */
+class ProjectUserOverviewController extends BaseController
+{
+ private function common()
+ {
+ $user_id = $this->request->getIntegerParam('user_id', UserModel::EVERYBODY_ID);
+
+ if ($this->userSession->isAdmin()) {
+ $project_ids = $this->project->getAllIds();
+ } else {
+ $project_ids = $this->projectPermission->getActiveProjectIds($this->userSession->getId());
+ }
+
+ return array($user_id, $project_ids, $this->user->getActiveUsersList(true));
+ }
+
+ private function role($role, $action, $title, $title_user)
+ {
+ list($user_id, $project_ids, $users) = $this->common();
+
+ $query = $this->projectPermission->getQueryByRole($project_ids, $role)->callback(array($this->project, 'applyColumnStats'));
+
+ if ($user_id !== UserModel::EVERYBODY_ID && isset($users[$user_id])) {
+ $query->eq(UserModel::TABLE.'.id', $user_id);
+ $title = t($title_user, $users[$user_id]);
+ }
+
+ $paginator = $this->paginator
+ ->setUrl('ProjectUserOverviewController', $action, array('user_id' => $user_id))
+ ->setMax(30)
+ ->setOrder('projects.name')
+ ->setQuery($query)
+ ->calculate();
+
+ $this->response->html($this->helper->layout->projectUser('project_user_overview/roles', array(
+ 'paginator' => $paginator,
+ 'title' => $title,
+ 'user_id' => $user_id,
+ 'users' => $users,
+ )));
+ }
+
+ private function tasks($is_active, $action, $title, $title_user)
+ {
+ list($user_id, $project_ids, $users) = $this->common();
+
+ $query = $this->taskFinder->getProjectUserOverviewQuery($project_ids, $is_active);
+
+ if ($user_id !== UserModel::EVERYBODY_ID && isset($users[$user_id])) {
+ $query->eq(TaskModel::TABLE.'.owner_id', $user_id);
+ $title = t($title_user, $users[$user_id]);
+ }
+
+ $paginator = $this->paginator
+ ->setUrl('ProjectUserOverviewController', $action, array('user_id' => $user_id))
+ ->setMax(50)
+ ->setOrder(TaskModel::TABLE.'.id')
+ ->setQuery($query)
+ ->calculate();
+
+ $this->response->html($this->helper->layout->projectUser('project_user_overview/tasks', array(
+ 'paginator' => $paginator,
+ 'title' => $title,
+ 'user_id' => $user_id,
+ 'users' => $users,
+ )));
+ }
+
+ /**
+ * Display the list of project managers
+ *
+ */
+ public function managers()
+ {
+ $this->role(Role::PROJECT_MANAGER, 'managers', t('People who are project managers'), 'Projects where "%s" is manager');
+ }
+
+ /**
+ * Display the list of project members
+ *
+ */
+ public function members()
+ {
+ $this->role(Role::PROJECT_MEMBER, 'members', t('People who are project members'), 'Projects where "%s" is member');
+ }
+
+ /**
+ * Display the list of open taks
+ *
+ */
+ public function opens()
+ {
+ $this->tasks(TaskModel::STATUS_OPEN, 'opens', t('Open tasks'), 'Open tasks assigned to "%s"');
+ }
+
+ /**
+ * Display the list of closed tasks
+ *
+ */
+ public function closed()
+ {
+ $this->tasks(TaskModel::STATUS_CLOSED, 'closed', t('Closed tasks'), 'Closed tasks assigned to "%s"');
+ }
+
+ /**
+ * Users tooltip
+ */
+ public function users()
+ {
+ $project = $this->getProject();
+
+ return $this->response->html($this->template->render('project_user_overview/tooltip_users', array(
+ 'users' => $this->projectUserRole->getAllUsersGroupedByRole($project['id']),
+ 'roles' => $this->role->getProjectRoles(),
+ )));
+ }
+}