summaryrefslogtreecommitdiff
path: root/app/Controller
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2016-05-25 22:28:09 -0400
committerFrederic Guillot <fred@kanboard.net>2016-05-25 22:28:09 -0400
commitff892c5d25e0bab560f005c788189d38c2bcab7b (patch)
tree72edfcffd52db61f9a7632f860b6d914445593ab /app/Controller
parent872dc79dbd8b04424520e32675a6e0dcb6ed44bc (diff)
Split project controller into multiple classes
Diffstat (limited to 'app/Controller')
-rw-r--r--app/Controller/Project.php240
-rw-r--r--app/Controller/ProjectCreation.php2
-rw-r--r--app/Controller/ProjectListController.php41
-rw-r--r--app/Controller/ProjectStatusController.php102
-rw-r--r--app/Controller/ProjectViewController.php162
5 files changed, 306 insertions, 241 deletions
diff --git a/app/Controller/Project.php b/app/Controller/Project.php
deleted file mode 100644
index 22a9ad30..00000000
--- a/app/Controller/Project.php
+++ /dev/null
@@ -1,240 +0,0 @@
-<?php
-
-namespace Kanboard\Controller;
-
-/**
- * Project controller (Settings + creation/edition)
- *
- * @package controller
- * @author Frederic Guillot
- */
-class Project extends BaseController
-{
- /**
- * List of projects
- *
- * @access public
- */
- public function index()
- {
- if ($this->userSession->isAdmin()) {
- $project_ids = $this->project->getAllIds();
- } else {
- $project_ids = $this->projectPermission->getActiveProjectIds($this->userSession->getId());
- }
-
- $nb_projects = count($project_ids);
-
- $paginator = $this->paginator
- ->setUrl('project', 'index')
- ->setMax(20)
- ->setOrder('name')
- ->setQuery($this->project->getQueryColumnStats($project_ids))
- ->calculate();
-
- $this->response->html($this->helper->layout->app('project/index', array(
- 'paginator' => $paginator,
- 'nb_projects' => $nb_projects,
- 'title' => t('Projects').' ('.$nb_projects.')'
- )));
- }
-
- /**
- * Show the project information page
- *
- * @access public
- */
- public function show()
- {
- $project = $this->getProject();
-
- $this->response->html($this->helper->layout->project('project/show', array(
- 'project' => $project,
- 'stats' => $this->project->getTaskStats($project['id']),
- 'title' => $project['name'],
- )));
- }
-
- /**
- * Public access management
- *
- * @access public
- */
- public function share()
- {
- $project = $this->getProject();
- $switch = $this->request->getStringParam('switch');
-
- if ($switch === 'enable' || $switch === 'disable') {
- $this->checkCSRFParam();
-
- if ($this->project->{$switch.'PublicAccess'}($project['id'])) {
- $this->flash->success(t('Project updated successfully.'));
- } else {
- $this->flash->failure(t('Unable to update this project.'));
- }
-
- $this->response->redirect($this->helper->url->to('project', 'share', array('project_id' => $project['id'])));
- } else {
- $this->show();
- }
- }
-
- /**
- * Integrations page
- *
- * @access public
- */
- public function integrations()
- {
- $project = $this->getProject();
-
- if ($this->request->isPost()) {
- $this->projectMetadata->save($project['id'], $this->request->getValues());
- $this->flash->success(t('Project updated successfully.'));
- $this->response->redirect($this->helper->url->to('project', 'integrations', array('project_id' => $project['id'])));
- } else {
- $this->response->html($this->helper->layout->project('project/integrations', array(
- 'project' => $project,
- 'title' => t('Integrations'),
- 'webhook_token' => $this->config->get('webhook_token'),
- 'values' => $this->projectMetadata->getAll($project['id']),
- 'errors' => array(),
- )));
- }
- }
-
- /**
- * Display project notifications
- *
- * @access public
- */
- public function notifications()
- {
- $project = $this->getProject();
-
- if ($this->request->isPost()) {
- $values = $this->request->getValues();
- $this->projectNotification->saveSettings($project['id'], $values);
- $this->flash->success(t('Project updated successfully.'));
- return $this->response->redirect($this->helper->url->to('project', 'notifications', array('project_id' => $project['id'])));
- }
-
- return $this->response->html($this->helper->layout->project('project/notifications', array(
- 'notifications' => $this->projectNotification->readSettings($project['id']),
- 'types' => $this->projectNotificationType->getTypes(),
- 'project' => $project,
- 'title' => t('Notifications'),
- )));
- }
-
- /**
- * Remove a project
- *
- * @access public
- */
- public function remove()
- {
- $project = $this->getProject();
-
- if ($this->request->getStringParam('remove') === 'yes') {
- $this->checkCSRFParam();
-
- if ($this->project->remove($project['id'])) {
- $this->flash->success(t('Project removed successfully.'));
- } else {
- $this->flash->failure(t('Unable to remove this project.'));
- }
-
- return $this->response->redirect($this->helper->url->to('project', 'index'));
- }
-
- return $this->response->html($this->helper->layout->project('project/remove', array(
- 'project' => $project,
- 'title' => t('Remove project')
- )));
- }
-
- /**
- * Duplicate a project
- *
- * @author Antonio Rabelo
- * @author Michael Lüpkes
- * @access public
- */
- public function duplicate()
- {
- $project = $this->getProject();
-
- if ($this->request->getStringParam('duplicate') === 'yes') {
- $project_id = $this->projectDuplication->duplicate($project['id'], array_keys($this->request->getValues()), $this->userSession->getId());
-
- if ($project_id !== false) {
- $this->flash->success(t('Project cloned successfully.'));
- } else {
- $this->flash->failure(t('Unable to clone this project.'));
- }
-
- return $this->response->redirect($this->helper->url->to('project', 'show', array('project_id' => $project_id)));
- }
-
- return $this->response->html($this->helper->layout->project('project/duplicate', array(
- 'project' => $project,
- 'title' => t('Clone this project')
- )));
- }
-
- /**
- * Disable a project
- *
- * @access public
- */
- public function disable()
- {
- $project = $this->getProject();
-
- if ($this->request->getStringParam('disable') === 'yes') {
- $this->checkCSRFParam();
-
- if ($this->project->disable($project['id'])) {
- $this->flash->success(t('Project disabled successfully.'));
- } else {
- $this->flash->failure(t('Unable to disable this project.'));
- }
-
- return $this->response->redirect($this->helper->url->to('project', 'show', array('project_id' => $project['id'])));
- }
-
- return $this->response->html($this->helper->layout->project('project/disable', array(
- 'project' => $project,
- 'title' => t('Project activation')
- )));
- }
-
- /**
- * Enable a project
- *
- * @access public
- */
- public function enable()
- {
- $project = $this->getProject();
-
- if ($this->request->getStringParam('enable') === 'yes') {
- $this->checkCSRFParam();
-
- if ($this->project->enable($project['id'])) {
- $this->flash->success(t('Project activated successfully.'));
- } else {
- $this->flash->failure(t('Unable to activate this project.'));
- }
-
- return $this->response->redirect($this->helper->url->to('project', 'show', array('project_id' => $project['id'])));
- }
-
- return $this->response->html($this->helper->layout->project('project/enable', array(
- 'project' => $project,
- 'title' => t('Project activation')
- )));
- }
-}
diff --git a/app/Controller/ProjectCreation.php b/app/Controller/ProjectCreation.php
index ed997fea..0ffa2174 100644
--- a/app/Controller/ProjectCreation.php
+++ b/app/Controller/ProjectCreation.php
@@ -59,7 +59,7 @@ class ProjectCreation extends BaseController
if ($project_id > 0) {
$this->flash->success(t('Your project have been created successfully.'));
- return $this->response->redirect($this->helper->url->to('project', 'show', array('project_id' => $project_id)));
+ return $this->response->redirect($this->helper->url->to('ProjectViewController', 'show', array('project_id' => $project_id)));
}
$this->flash->failure(t('Unable to create your project.'));
diff --git a/app/Controller/ProjectListController.php b/app/Controller/ProjectListController.php
new file mode 100644
index 00000000..5571b3c9
--- /dev/null
+++ b/app/Controller/ProjectListController.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace Kanboard\Controller;
+
+/**
+ * Class ProjectListController
+ *
+ * @package Kanboard\Controller
+ * @author Frederic Guillot
+ */
+class ProjectListController extends BaseController
+{
+ /**
+ * List of projects
+ *
+ * @access public
+ */
+ public function show()
+ {
+ if ($this->userSession->isAdmin()) {
+ $project_ids = $this->project->getAllIds();
+ } else {
+ $project_ids = $this->projectPermission->getActiveProjectIds($this->userSession->getId());
+ }
+
+ $nb_projects = count($project_ids);
+
+ $paginator = $this->paginator
+ ->setUrl('ProjectListController', 'show')
+ ->setMax(20)
+ ->setOrder('name')
+ ->setQuery($this->project->getQueryColumnStats($project_ids))
+ ->calculate();
+
+ $this->response->html($this->helper->layout->app('project_list/show', array(
+ 'paginator' => $paginator,
+ 'nb_projects' => $nb_projects,
+ 'title' => t('Projects').' ('.$nb_projects.')'
+ )));
+ }
+}
diff --git a/app/Controller/ProjectStatusController.php b/app/Controller/ProjectStatusController.php
new file mode 100644
index 00000000..16ac32b8
--- /dev/null
+++ b/app/Controller/ProjectStatusController.php
@@ -0,0 +1,102 @@
+<?php
+
+namespace Kanboard\Controller;
+
+/**
+ * Class ProjectStatusController
+ *
+ * @package Kanboard\Controller
+ * @author Frederic Guillot
+ */
+class ProjectStatusController extends BaseController
+{
+ /**
+ * Enable a project (confirmation dialog box)
+ */
+ public function confirmEnable()
+ {
+ $project = $this->getProject();
+
+ $this->response->html($this->template->render('project_status/enable', array(
+ 'project' => $project,
+ 'title' => t('Project activation')
+ )));
+ }
+
+ /**
+ * Enable the project
+ */
+ public function enable()
+ {
+ $project = $this->getProject();
+ $this->checkCSRFParam();
+
+ if ($this->project->enable($project['id'])) {
+ $this->flash->success(t('Project activated successfully.'));
+ } else {
+ $this->flash->failure(t('Unable to activate this project.'));
+ }
+
+ $this->response->redirect($this->helper->url->to('ProjectViewController', 'show', array('project_id' => $project['id'])), true);
+ }
+
+ /**
+ * Disable a project (confirmation dialog box)
+ */
+ public function confirmDisable()
+ {
+ $project = $this->getProject();
+
+ $this->response->html($this->template->render('project_status/disable', array(
+ 'project' => $project,
+ 'title' => t('Project activation')
+ )));
+ }
+
+ /**
+ * Disable a project
+ */
+ public function disable()
+ {
+ $project = $this->getProject();
+ $this->checkCSRFParam();
+
+ if ($this->project->disable($project['id'])) {
+ $this->flash->success(t('Project disabled successfully.'));
+ } else {
+ $this->flash->failure(t('Unable to disable this project.'));
+ }
+
+ $this->response->redirect($this->helper->url->to('ProjectViewController', 'show', array('project_id' => $project['id'])), true);
+ }
+
+ /**
+ * Remove a project (confirmation dialog box)
+ */
+ public function confirmRemove()
+ {
+ $project = $this->getProject();
+
+ $this->response->html($this->template->render('project_status/remove', array(
+ 'project' => $project,
+ 'title' => t('Remove project')
+ )));
+ }
+
+ /**
+ * Remove a project
+ */
+ public function remove()
+ {
+ $project = $this->getProject();
+ $this->checkCSRFParam();
+
+ if ($this->project->remove($project['id'])) {
+ $this->flash->success(t('Project removed successfully.'));
+ } else {
+ $this->flash->failure(t('Unable to remove this project.'));
+ }
+
+ $this->response->redirect($this->helper->url->to('ProjectListController', 'show'), true);
+ }
+}
diff --git a/app/Controller/ProjectViewController.php b/app/Controller/ProjectViewController.php
new file mode 100644
index 00000000..ca112a41
--- /dev/null
+++ b/app/Controller/ProjectViewController.php
@@ -0,0 +1,162 @@
+<?php
+
+namespace Kanboard\Controller;
+
+/**
+ * Class ProjectViewController
+ *
+ * @package Kanboard\Controller
+ * @author Frederic Guillot
+ */
+class ProjectViewController extends BaseController
+{
+ /**
+ * Show the project information page
+ *
+ * @access public
+ */
+ public function show()
+ {
+ $project = $this->getProject();
+
+ $this->response->html($this->helper->layout->project('project_view/show', array(
+ 'project' => $project,
+ 'stats' => $this->project->getTaskStats($project['id']),
+ 'title' => $project['name'],
+ )));
+ }
+
+ /**
+ * Public access management
+ *
+ * @access public
+ */
+ public function share()
+ {
+ $project = $this->getProject();
+
+ $this->response->html($this->helper->layout->project('project_view/share', array(
+ 'project' => $project,
+ 'title' => t('Public access'),
+ )));
+ }
+
+ /**
+ * Change project sharing
+ *
+ * @throws \Kanboard\Core\Controller\AccessForbiddenException
+ * @throws \Kanboard\Core\Controller\PageNotFoundException
+ */
+ public function updateSharing()
+ {
+ $project = $this->getProject();
+ $this->checkCSRFParam();
+ $switch = $this->request->getStringParam('switch');
+
+ if ($this->project->{$switch.'PublicAccess'}($project['id'])) {
+ $this->flash->success(t('Project updated successfully.'));
+ } else {
+ $this->flash->failure(t('Unable to update this project.'));
+ }
+
+ $this->response->redirect($this->helper->url->to('ProjectViewController', 'share', array('project_id' => $project['id'])));
+ }
+
+ /**
+ * Integrations page
+ *
+ * @access public
+ */
+ public function integrations()
+ {
+ $project = $this->getProject();
+
+ $this->response->html($this->helper->layout->project('project_view/integrations', array(
+ 'project' => $project,
+ 'title' => t('Integrations'),
+ 'webhook_token' => $this->config->get('webhook_token'),
+ 'values' => $this->projectMetadata->getAll($project['id']),
+ 'errors' => array(),
+ )));
+ }
+
+ /**
+ * Update integrations
+ *
+ * @throws \Kanboard\Core\Controller\PageNotFoundException
+ */
+ public function updateIntegrations()
+ {
+ $project = $this->getProject();
+
+ $this->projectMetadata->save($project['id'], $this->request->getValues());
+ $this->flash->success(t('Project updated successfully.'));
+ $this->response->redirect($this->helper->url->to('ProjectViewController', 'integrations', array('project_id' => $project['id'])));
+ }
+
+ /**
+ * Display project notifications
+ *
+ * @access public
+ */
+ public function notifications()
+ {
+ $project = $this->getProject();
+
+ $this->response->html($this->helper->layout->project('project_view/notifications', array(
+ 'notifications' => $this->projectNotification->readSettings($project['id']),
+ 'types' => $this->projectNotificationType->getTypes(),
+ 'project' => $project,
+ 'title' => t('Notifications'),
+ )));
+ }
+
+ /**
+ * Update notifications
+ *
+ * @throws \Kanboard\Core\Controller\PageNotFoundException
+ */
+ public function updateNotifications()
+ {
+ $project = $this->getProject();
+ $values = $this->request->getValues();
+
+ $this->projectNotification->saveSettings($project['id'], $values);
+ $this->flash->success(t('Project updated successfully.'));
+ $this->response->redirect($this->helper->url->to('ProjectViewController', 'notifications', array('project_id' => $project['id'])));
+ }
+
+ /**
+ * Duplicate a project
+ *
+ * @author Antonio Rabelo
+ * @author Michael Lüpkes
+ * @access public
+ */
+ public function duplicate()
+ {
+ $project = $this->getProject();
+
+ $this->response->html($this->helper->layout->project('project_view/duplicate', array(
+ 'project' => $project,
+ 'title' => t('Clone this project')
+ )));
+ }
+
+ /**
+ * Do project duplication
+ */
+ public function doDuplication()
+ {
+ $project = $this->getProject();
+ $project_id = $this->projectDuplication->duplicate($project['id'], array_keys($this->request->getValues()), $this->userSession->getId());
+
+ if ($project_id !== false) {
+ $this->flash->success(t('Project cloned successfully.'));
+ } else {
+ $this->flash->failure(t('Unable to clone this project.'));
+ }
+
+ $this->response->redirect($this->helper->url->to('ProjectViewController', 'show', array('project_id' => $project_id)));
+ }
+}