summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
-rw-r--r--app/Formatter/ProjectGanttFormatter.php2
-rw-r--r--app/ServiceProvider/AuthenticationProvider.php3
-rw-r--r--app/ServiceProvider/RouteProvider.php17
-rw-r--r--app/Template/dashboard/layout.php4
-rw-r--r--app/Template/gantt/projects.php2
-rw-r--r--app/Template/header.php2
-rw-r--r--app/Template/project/disable.php14
-rw-r--r--app/Template/project/dropdown.php2
-rw-r--r--app/Template/project/enable.php14
-rw-r--r--app/Template/project/remove.php14
-rw-r--r--app/Template/project/sidebar.php34
-rw-r--r--app/Template/project_creation/create.php4
-rw-r--r--app/Template/project_header/dropdown.php4
-rw-r--r--app/Template/project_list/show.php (renamed from app/Template/project/index.php)0
-rw-r--r--app/Template/project_status/disable.php14
-rw-r--r--app/Template/project_status/enable.php14
-rw-r--r--app/Template/project_status/remove.php14
-rw-r--r--app/Template/project_user/layout.php2
-rw-r--r--app/Template/project_user/roles.php4
-rw-r--r--app/Template/project_view/duplicate.php (renamed from app/Template/project/duplicate.php)6
-rw-r--r--app/Template/project_view/integrations.php (renamed from app/Template/project/integrations.php)4
-rw-r--r--app/Template/project_view/notifications.php (renamed from app/Template/project/notifications.php)6
-rw-r--r--app/Template/project_view/share.php (renamed from app/Template/project/share.php)5
-rw-r--r--app/Template/project_view/show.php (renamed from app/Template/project/show.php)0
29 files changed, 397 insertions, 335 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)));
+ }
+}
diff --git a/app/Formatter/ProjectGanttFormatter.php b/app/Formatter/ProjectGanttFormatter.php
index aee1f27f..532e6822 100644
--- a/app/Formatter/ProjectGanttFormatter.php
+++ b/app/Formatter/ProjectGanttFormatter.php
@@ -43,7 +43,7 @@ class ProjectGanttFormatter extends BaseFormatter implements FormatterInterface
(int) date('n', $end),
(int) date('j', $end),
),
- 'link' => $this->helper->url->href('project', 'show', array('project_id' => $project['id'])),
+ 'link' => $this->helper->url->href('ProjectViewController', 'show', array('project_id' => $project['id'])),
'board_link' => $this->helper->url->href('board', 'show', array('project_id' => $project['id'])),
'gantt_link' => $this->helper->url->href('gantt', 'project', array('project_id' => $project['id'])),
'color' => $color,
diff --git a/app/ServiceProvider/AuthenticationProvider.php b/app/ServiceProvider/AuthenticationProvider.php
index d4f130e2..fd61c1f6 100644
--- a/app/ServiceProvider/AuthenticationProvider.php
+++ b/app/ServiceProvider/AuthenticationProvider.php
@@ -81,11 +81,12 @@ class AuthenticationProvider implements ServiceProviderInterface
$acl->add('Export', '*', Role::PROJECT_MANAGER);
$acl->add('TaskFile', array('screenshot', 'create', 'save', 'remove', 'confirm'), Role::PROJECT_MEMBER);
$acl->add('Gantt', '*', Role::PROJECT_MANAGER);
- $acl->add('Project', array('share', 'integrations', 'notifications', 'duplicate', 'disable', 'enable', 'remove'), Role::PROJECT_MANAGER);
+ $acl->add('ProjectViewController', array('share', 'updateSharing', 'integrations', 'updateIntegrations', 'notifications', 'updateNotifications', 'duplicate', 'doDuplication'), Role::PROJECT_MANAGER);
$acl->add('ProjectPermission', '*', Role::PROJECT_MANAGER);
$acl->add('ProjectEdit', '*', Role::PROJECT_MANAGER);
$acl->add('ProjectFile', '*', Role::PROJECT_MEMBER);
$acl->add('Projectuser', '*', Role::PROJECT_MANAGER);
+ $acl->add('ProjectStatusController', '*', Role::PROJECT_MANAGER);
$acl->add('SubtaskController', '*', Role::PROJECT_MEMBER);
$acl->add('SubtaskRestrictionController', '*', Role::PROJECT_MEMBER);
$acl->add('SubtaskStatusController', '*', Role::PROJECT_MEMBER);
diff --git a/app/ServiceProvider/RouteProvider.php b/app/ServiceProvider/RouteProvider.php
index 4a126b58..86e00cbd 100644
--- a/app/ServiceProvider/RouteProvider.php
+++ b/app/ServiceProvider/RouteProvider.php
@@ -49,17 +49,14 @@ class RouteProvider implements ServiceProviderInterface
$container['route']->addRoute('project/create/private', 'ProjectCreation', 'createPrivate');
// Project routes
- $container['route']->addRoute('projects', 'project', 'index');
- $container['route']->addRoute('project/:project_id', 'project', 'show');
- $container['route']->addRoute('p/:project_id', 'project', 'show');
+ $container['route']->addRoute('projects', 'ProjectListController', 'show');
+ $container['route']->addRoute('project/:project_id', 'ProjectViewController', 'show');
+ $container['route']->addRoute('p/:project_id', 'ProjectViewController', 'show');
$container['route']->addRoute('project/:project_id/customer-filters', 'customfilter', 'index');
- $container['route']->addRoute('project/:project_id/share', 'project', 'share');
- $container['route']->addRoute('project/:project_id/notifications', 'project', 'notifications');
- $container['route']->addRoute('project/:project_id/integrations', 'project', 'integrations');
- $container['route']->addRoute('project/:project_id/duplicate', 'project', 'duplicate');
- $container['route']->addRoute('project/:project_id/remove', 'project', 'remove');
- $container['route']->addRoute('project/:project_id/disable', 'project', 'disable');
- $container['route']->addRoute('project/:project_id/enable', 'project', 'enable');
+ $container['route']->addRoute('project/:project_id/share', 'ProjectViewController', 'share');
+ $container['route']->addRoute('project/:project_id/notifications', 'ProjectViewController', 'notifications');
+ $container['route']->addRoute('project/:project_id/integrations', 'ProjectViewController', 'integrations');
+ $container['route']->addRoute('project/:project_id/duplicate', 'ProjectViewController', 'duplicate');
$container['route']->addRoute('project/:project_id/permissions', 'ProjectPermission', 'index');
$container['route']->addRoute('project/:project_id/import', 'taskImport', 'step1');
$container['route']->addRoute('project/:project_id/activity', 'activity', 'project');
diff --git a/app/Template/dashboard/layout.php b/app/Template/dashboard/layout.php
index 2a32ac02..187f7f42 100644
--- a/app/Template/dashboard/layout.php
+++ b/app/Template/dashboard/layout.php
@@ -19,7 +19,7 @@
</li>
<li>
<i class="fa fa-folder fa-fw"></i>
- <?= $this->url->link(t('Project management'), 'project', 'index') ?>
+ <?= $this->url->link(t('Project management'), 'ProjectListController', 'show') ?>
</li>
</ul>
</div>
@@ -29,4 +29,4 @@
<?= $content_for_sublayout ?>
</div>
</section>
-</section> \ No newline at end of file
+</section>
diff --git a/app/Template/gantt/projects.php b/app/Template/gantt/projects.php
index a072452d..b8431d03 100644
--- a/app/Template/gantt/projects.php
+++ b/app/Template/gantt/projects.php
@@ -2,7 +2,7 @@
<div class="page-header">
<ul>
<li>
- <i class="fa fa-folder fa-fw"></i><?= $this->url->link(t('Projects list'), 'project', 'index') ?>
+ <i class="fa fa-folder fa-fw"></i><?= $this->url->link(t('Projects list'), 'ProjectListController', 'show') ?>
</li>
<?php if ($this->user->hasAccess('projectuser', 'managers')): ?>
<li><i class="fa fa-user fa-fw"></i><?= $this->url->link(t('Users overview'), 'projectuser', 'managers') ?></li>
diff --git a/app/Template/header.php b/app/Template/header.php
index 428cf477..1ff8bf33 100644
--- a/app/Template/header.php
+++ b/app/Template/header.php
@@ -71,7 +71,7 @@
</li>
<li>
<i class="fa fa-folder fa-fw"></i>
- <?= $this->url->link(t('Projects management'), 'project', 'index') ?>
+ <?= $this->url->link(t('Projects management'), 'ProjectListController', 'show') ?>
</li>
<?php if ($this->user->hasAccess('UserListController', 'show')): ?>
<li>
diff --git a/app/Template/project/disable.php b/app/Template/project/disable.php
deleted file mode 100644
index ddfcdca2..00000000
--- a/app/Template/project/disable.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<div class="page-header">
- <h2><?= t('Project activation') ?></h2>
-</div>
-
-<div class="confirm">
- <p class="alert alert-info">
- <?= t('Do you really want to disable this project: "%s"?', $project['name']) ?>
- </p>
-
- <div class="form-actions">
- <?= $this->url->link(t('Yes'), 'project', 'disable', array('project_id' => $project['id'], 'disable' => 'yes'), true, 'btn btn-red') ?>
- <?= t('or') ?> <?= $this->url->link(t('cancel'), 'project', 'show', array('project_id' => $project['id'])) ?>
- </div>
-</div> \ No newline at end of file
diff --git a/app/Template/project/dropdown.php b/app/Template/project/dropdown.php
index 843574fe..02bc4c02 100644
--- a/app/Template/project/dropdown.php
+++ b/app/Template/project/dropdown.php
@@ -37,7 +37,7 @@
<?php if ($this->user->hasProjectAccess('ProjectEdit', 'edit', $project['id'])): ?>
<li>
<i class="fa fa-cog fa-fw"></i>
- <?= $this->url->link(t('Settings'), 'project', 'show', array('project_id' => $project['id'])) ?>
+ <?= $this->url->link(t('Settings'), 'ProjectViewController', 'show', array('project_id' => $project['id'])) ?>
</li>
<?php endif ?>
</ul>
diff --git a/app/Template/project/enable.php b/app/Template/project/enable.php
deleted file mode 100644
index c10d2f12..00000000
--- a/app/Template/project/enable.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<div class="page-header">
- <h2><?= t('Project activation') ?></h2>
-</div>
-
-<div class="confirm">
- <p class="alert alert-info">
- <?= t('Do you really want to enable this project: "%s"?', $project['name']) ?>
- </p>
-
- <div class="form-actions">
- <?= $this->url->link(t('Yes'), 'project', 'enable', array('project_id' => $project['id'], 'enable' => 'yes'), true, 'btn btn-red') ?>
- <?= t('or') ?> <?= $this->url->link(t('cancel'), 'project', 'show', array('project_id' => $project['id'])) ?>
- </div>
-</div> \ No newline at end of file
diff --git a/app/Template/project/remove.php b/app/Template/project/remove.php
deleted file mode 100644
index fa43fc78..00000000
--- a/app/Template/project/remove.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<div class="page-header">
- <h2><?= t('Remove project') ?></h2>
-</div>
-
-<div class="confirm">
- <p class="alert alert-info">
- <?= t('Do you really want to remove this project: "%s"?', $project['name']) ?>
- </p>
-
- <div class="form-actions">
- <?= $this->url->link(t('Yes'), 'project', 'remove', array('project_id' => $project['id'], 'remove' => 'yes'), true, 'btn btn-red') ?>
- <?= t('or') ?> <?= $this->url->link(t('cancel'), 'project', 'show', array('project_id' => $project['id'])) ?>
- </div>
-</div> \ No newline at end of file
diff --git a/app/Template/project/sidebar.php b/app/Template/project/sidebar.php
index 7fb7718d..50929977 100644
--- a/app/Template/project/sidebar.php
+++ b/app/Template/project/sidebar.php
@@ -1,8 +1,8 @@
<div class="sidebar">
<h2><?= t('Actions') ?></h2>
<ul>
- <li <?= $this->app->checkMenuSelection('project', 'show') ?>>
- <?= $this->url->link(t('Summary'), 'project', 'show', array('project_id' => $project['id'])) ?>
+ <li <?= $this->app->checkMenuSelection('ProjectViewController', 'show') ?>>
+ <?= $this->url->link(t('Summary'), 'ProjectViewController', 'show', array('project_id' => $project['id'])) ?>
</li>
<?php if ($this->user->hasProjectAccess('customfilter', 'index', $project['id'])): ?>
<li <?= $this->app->checkMenuSelection('customfilter') ?>>
@@ -14,14 +14,14 @@
<li <?= $this->app->checkMenuSelection('ProjectEdit') ?>>
<?= $this->url->link(t('Edit project'), 'ProjectEdit', 'edit', array('project_id' => $project['id'])) ?>
</li>
- <li <?= $this->app->checkMenuSelection('project', 'share') ?>>
- <?= $this->url->link(t('Public access'), 'project', 'share', array('project_id' => $project['id'])) ?>
+ <li <?= $this->app->checkMenuSelection('ProjectViewController', 'share') ?>>
+ <?= $this->url->link(t('Public access'), 'ProjectViewController', 'share', array('project_id' => $project['id'])) ?>
</li>
- <li <?= $this->app->checkMenuSelection('project', 'notifications') ?>>
- <?= $this->url->link(t('Notifications'), 'project', 'notifications', array('project_id' => $project['id'])) ?>
+ <li <?= $this->app->checkMenuSelection('ProjectViewController', 'notifications') ?>>
+ <?= $this->url->link(t('Notifications'), 'ProjectViewController', 'notifications', array('project_id' => $project['id'])) ?>
</li>
- <li <?= $this->app->checkMenuSelection('project', 'integrations') ?>>
- <?= $this->url->link(t('Integrations'), 'project', 'integrations', array('project_id' => $project['id'])) ?>
+ <li <?= $this->app->checkMenuSelection('ProjectViewController', 'integrations') ?>>
+ <?= $this->url->link(t('Integrations'), 'ProjectViewController', 'integrations', array('project_id' => $project['id'])) ?>
</li>
<li <?= $this->app->checkMenuSelection('column') ?>>
<?= $this->url->link(t('Columns'), 'column', 'index', array('project_id' => $project['id'])) ?>
@@ -40,23 +40,23 @@
<li <?= $this->app->checkMenuSelection('action') ?>>
<?= $this->url->link(t('Automatic actions'), 'action', 'index', array('project_id' => $project['id'])) ?>
</li>
- <li <?= $this->app->checkMenuSelection('project', 'duplicate') ?>>
- <?= $this->url->link(t('Duplicate'), 'project', 'duplicate', array('project_id' => $project['id'])) ?>
+ <li <?= $this->app->checkMenuSelection('ProjectViewController', 'duplicate') ?>>
+ <?= $this->url->link(t('Duplicate'), 'ProjectViewController', 'duplicate', array('project_id' => $project['id'])) ?>
</li>
<?php if ($project['is_active']): ?>
- <li <?= $this->app->checkMenuSelection('project', 'disable') ?>>
- <?= $this->url->link(t('Disable'), 'project', 'disable', array('project_id' => $project['id']), true) ?>
+ <li>
+ <?= $this->url->link(t('Disable'), 'ProjectStatusController', 'confirmDisable', array('project_id' => $project['id']), false, 'popover') ?>
<?php else: ?>
- <li <?= $this->app->checkMenuSelection('project', 'enable') ?>>
- <?= $this->url->link(t('Enable'), 'project', 'enable', array('project_id' => $project['id']), true) ?>
+ <li>
+ <?= $this->url->link(t('Enable'), 'ProjectStatusController', 'confirmEnable', array('project_id' => $project['id']), false, 'popover') ?>
<?php endif ?>
</li>
<li <?= $this->app->checkMenuSelection('taskImport') ?>>
<?= $this->url->link(t('Import'), 'taskImport', 'step1', array('project_id' => $project['id'])) ?>
</li>
- <?php if ($this->user->hasProjectAccess('project', 'remove', $project['id'])): ?>
- <li <?= $this->app->checkMenuSelection('project', 'remove') ?>>
- <?= $this->url->link(t('Remove'), 'project', 'remove', array('project_id' => $project['id'])) ?>
+ <?php if ($this->user->hasProjectAccess('ProjectStatusController', 'remove', $project['id'])): ?>
+ <li>
+ <?= $this->url->link(t('Remove'), 'ProjectStatusController', 'confirmRemove', array('project_id' => $project['id']), false, 'popover') ?>
</li>
<?php endif ?>
<?php endif ?>
diff --git a/app/Template/project_creation/create.php b/app/Template/project_creation/create.php
index c34173a9..ea5783a6 100644
--- a/app/Template/project_creation/create.php
+++ b/app/Template/project_creation/create.php
@@ -31,7 +31,7 @@
<div class="form-actions">
<button type="submit" class="btn btn-blue"><?= t('Save') ?></button>
<?= t('or') ?>
- <?= $this->url->link(t('cancel'), 'project', 'index', array(), false, 'close-popover') ?>
+ <?= $this->url->link(t('cancel'), 'ProjectListController', 'show', array(), false, 'close-popover') ?>
</div>
</form>
<?php if ($is_private): ?>
@@ -39,4 +39,4 @@
<p><?= t('There is no user management for private projects.') ?></p>
</div>
<?php endif ?>
-</section> \ No newline at end of file
+</section>
diff --git a/app/Template/project_header/dropdown.php b/app/Template/project_header/dropdown.php
index 1aa59a8d..7dffcb85 100644
--- a/app/Template/project_header/dropdown.php
+++ b/app/Template/project_header/dropdown.php
@@ -75,13 +75,13 @@
<?php if ($this->user->hasProjectAccess('ProjectEdit', 'edit', $project['id'])): ?>
<li>
<i class="fa fa-cog fa-fw"></i>
- <?= $this->url->link(t('Settings'), 'project', 'show', array('project_id' => $project['id'])) ?>
+ <?= $this->url->link(t('Settings'), 'ProjectViewController', 'show', array('project_id' => $project['id'])) ?>
</li>
<?php endif ?>
<li>
<i class="fa fa-folder fa-fw" aria-hidden="true"></i>
- <?= $this->url->link(t('Manage projects'), 'project', 'index') ?>
+ <?= $this->url->link(t('Manage projects'), 'ProjectListController', 'show') ?>
</li>
</ul>
</div>
diff --git a/app/Template/project/index.php b/app/Template/project_list/show.php
index 06e4a626..06e4a626 100644
--- a/app/Template/project/index.php
+++ b/app/Template/project_list/show.php
diff --git a/app/Template/project_status/disable.php b/app/Template/project_status/disable.php
new file mode 100644
index 00000000..d8145d3c
--- /dev/null
+++ b/app/Template/project_status/disable.php
@@ -0,0 +1,14 @@
+<div class="page-header">
+ <h2><?= t('Project activation') ?></h2>
+</div>
+
+<div class="confirm">
+ <p class="alert alert-info">
+ <?= t('Do you really want to disable this project: "%s"?', $project['name']) ?>
+ </p>
+
+ <div class="form-actions">
+ <?= $this->url->link(t('Yes'), 'ProjectStatusController', 'disable', array('project_id' => $project['id']), true, 'btn btn-red') ?>
+ <?= t('or') ?> <?= $this->url->link(t('cancel'), 'ProjectViewController', 'show', array('project_id' => $project['id']), false, 'close-popover') ?>
+ </div>
+</div>
diff --git a/app/Template/project_status/enable.php b/app/Template/project_status/enable.php
new file mode 100644
index 00000000..1f76d093
--- /dev/null
+++ b/app/Template/project_status/enable.php
@@ -0,0 +1,14 @@
+<div class="page-header">
+ <h2><?= t('Project activation') ?></h2>
+</div>
+
+<div class="confirm">
+ <p class="alert alert-info">
+ <?= t('Do you really want to enable this project: "%s"?', $project['name']) ?>
+ </p>
+
+ <div class="form-actions">
+ <?= $this->url->link(t('Yes'), 'ProjectStatusController', 'enable', array('project_id' => $project['id']), true, 'btn btn-red') ?>
+ <?= t('or') ?> <?= $this->url->link(t('cancel'), 'ProjectViewController', 'show', array('project_id' => $project['id']), false, 'close-popover') ?>
+ </div>
+</div>
diff --git a/app/Template/project_status/remove.php b/app/Template/project_status/remove.php
new file mode 100644
index 00000000..8959ef75
--- /dev/null
+++ b/app/Template/project_status/remove.php
@@ -0,0 +1,14 @@
+<div class="page-header">
+ <h2><?= t('Remove project') ?></h2>
+</div>
+
+<div class="confirm">
+ <p class="alert alert-info">
+ <?= t('Do you really want to remove this project: "%s"?', $project['name']) ?>
+ </p>
+
+ <div class="form-actions">
+ <?= $this->url->link(t('Yes'), 'ProjectStatusController', 'remove', array('project_id' => $project['id']), true, 'btn btn-red') ?>
+ <?= t('or') ?> <?= $this->url->link(t('cancel'), 'ProjectViewController', 'show', array('project_id' => $project['id']), false, 'close-popover') ?>
+ </div>
+</div>
diff --git a/app/Template/project_user/layout.php b/app/Template/project_user/layout.php
index 7a7c1a50..ab4326f6 100644
--- a/app/Template/project_user/layout.php
+++ b/app/Template/project_user/layout.php
@@ -3,7 +3,7 @@
<ul>
<li>
<i class="fa fa-folder fa-fw"></i>
- <?= $this->url->link(t('Projects list'), 'project', 'index') ?>
+ <?= $this->url->link(t('Projects list'), 'ProjectListController', 'show') ?>
</li>
<?php if ($this->user->hasAccess('gantt', 'projects')): ?>
<li>
diff --git a/app/Template/project_user/roles.php b/app/Template/project_user/roles.php
index 17fb709b..6be929d8 100644
--- a/app/Template/project_user/roles.php
+++ b/app/Template/project_user/roles.php
@@ -15,7 +15,7 @@
<td>
<?= $this->url->link('<i class="fa fa-th"></i>', 'board', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link', t('Board')) ?>
<?= $this->url->link('<i class="fa fa-sliders fa-fw"></i>', 'gantt', 'project', array('project_id' => $project['id']), false, 'dashboard-table-link', t('Gantt chart')) ?>
- <?= $this->url->link('<i class="fa fa-cog fa-fw"></i>', 'project', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link', t('Project settings')) ?>
+ <?= $this->url->link('<i class="fa fa-cog fa-fw"></i>', 'ProjectViewController', 'show', array('project_id' => $project['id']), false, 'dashboard-table-link', t('Project settings')) ?>
<?= $this->text->e($project['project_name']) ?>
</td>
@@ -30,4 +30,4 @@
</table>
<?= $paginator ?>
-<?php endif ?> \ No newline at end of file
+<?php endif ?>
diff --git a/app/Template/project/duplicate.php b/app/Template/project_view/duplicate.php
index e856ec80..41ae39df 100644
--- a/app/Template/project/duplicate.php
+++ b/app/Template/project_view/duplicate.php
@@ -6,7 +6,7 @@
<p class="alert alert-info">
<?= t('Which parts of the project do you want to duplicate?') ?>
</p>
- <form method="post" action="<?= $this->url->href('project', 'duplicate', array('project_id' => $project['id'], 'duplicate' => 'yes')) ?>" autocomplete="off">
+ <form method="post" action="<?= $this->url->href('ProjectViewController', 'doDuplication', array('project_id' => $project['id'], 'duplicate' => 'yes')) ?>" autocomplete="off">
<?= $this->form->csrf() ?>
@@ -22,7 +22,7 @@
<div class="form-actions">
<button type="submit" class="btn btn-red"><?= t('Duplicate') ?></button>
- <?= t('or') ?> <?= $this->url->link(t('cancel'), 'project', 'show', array('project_id' => $project['id'])) ?>
+ <?= t('or') ?> <?= $this->url->link(t('cancel'), 'ProjectViewController', 'show', array('project_id' => $project['id'])) ?>
</div>
</form>
-</div> \ No newline at end of file
+</div>
diff --git a/app/Template/project/integrations.php b/app/Template/project_view/integrations.php
index 54720c69..f8bff7ea 100644
--- a/app/Template/project/integrations.php
+++ b/app/Template/project_view/integrations.php
@@ -2,7 +2,7 @@
<h2><?= t('Integration with third-party services') ?></h2>
</div>
-<form method="post" action="<?= $this->url->href('project', 'integrations', array('project_id' => $project['id'])) ?>" autocomplete="off">
+<form method="post" action="<?= $this->url->href('ProjectViewController', 'updateIntegrations', array('project_id' => $project['id'])) ?>" autocomplete="off">
<?= $this->form->csrf() ?>
<?php $integrations = $this->hook->render('template:project:integrations', array('project' => $project, 'values' => $values, 'webhook_token' => $webhook_token)) ?>
@@ -12,4 +12,4 @@
<?php else: ?>
<?= $integrations ?>
<?php endif ?>
-</form> \ No newline at end of file
+</form>
diff --git a/app/Template/project/notifications.php b/app/Template/project_view/notifications.php
index 494a322a..29cc088c 100644
--- a/app/Template/project/notifications.php
+++ b/app/Template/project_view/notifications.php
@@ -4,7 +4,7 @@
<?php if (empty($types)): ?>
<p class="alert"><?= t('No plugin has registered a project notification method. You can still configure individual notifications in your user profile.') ?></p>
<?php else: ?>
- <form method="post" action="<?= $this->url->href('project', 'notifications', array('project_id' => $project['id'])) ?>" autocomplete="off">
+ <form method="post" action="<?= $this->url->href('ProjectViewController', 'updateNotifications', array('project_id' => $project['id'])) ?>" autocomplete="off">
<?= $this->form->csrf() ?>
@@ -14,7 +14,7 @@
<div class="form-actions">
<button type="submit" class="btn btn-blue"><?= t('Save') ?></button>
<?= t('or') ?>
- <?= $this->url->link(t('cancel'), 'project', 'show', array('project_id' => $project['id'])) ?>
+ <?= $this->url->link(t('cancel'), 'ProjectViewController', 'show', array('project_id' => $project['id'])) ?>
</div>
</form>
-<?php endif ?> \ No newline at end of file
+<?php endif ?>
diff --git a/app/Template/project/share.php b/app/Template/project_view/share.php
index 6f66c97e..6161faa9 100644
--- a/app/Template/project/share.php
+++ b/app/Template/project_view/share.php
@@ -12,8 +12,7 @@
</ul>
</div>
- <?= $this->url->link(t('Disable public access'), 'project', 'share', array('project_id' => $project['id'], 'switch' => 'disable'), true, 'btn btn-red') ?>
-
+ <?= $this->url->link(t('Disable public access'), 'ProjectViewController', 'updateSharing', array('project_id' => $project['id'], 'switch' => 'disable'), true, 'btn btn-red') ?>
<?php else: ?>
- <?= $this->url->link(t('Enable public access'), 'project', 'share', array('project_id' => $project['id'], 'switch' => 'enable'), true, 'btn btn-blue') ?>
+ <?= $this->url->link(t('Enable public access'), 'ProjectViewController', 'updateSharing', array('project_id' => $project['id'], 'switch' => 'enable'), true, 'btn btn-blue') ?>
<?php endif ?>
diff --git a/app/Template/project/show.php b/app/Template/project_view/show.php
index 4aba4919..4aba4919 100644
--- a/app/Template/project/show.php
+++ b/app/Template/project_view/show.php