|
<?php |
|
|
|
namespace Kanboard\Controller; |
|
|
|
use Exception; |
|
use Kanboard\Core\Controller\AccessForbiddenException; |
|
use Kanboard\Model\UserMetadataModel; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BoardAjaxController extends BaseController |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
public function save() |
|
{ |
|
$this->checkReusableGETCSRFParam(); |
|
$project_id = $this->request->getIntegerParam('project_id'); |
|
|
|
if (! $project_id || ! $this->request->isAjax()) { |
|
throw new AccessForbiddenException(); |
|
} |
|
|
|
$values = $this->request->getJson(); |
|
|
|
if (! $this->helper->projectRole->canMoveTask($project_id, $values['src_column_id'], $values['dst_column_id'])) { |
|
throw new AccessForbiddenException(e("You don't have the permission to move this task")); |
|
} |
|
|
|
try { |
|
$result =$this->taskPositionModel->movePosition( |
|
$project_id, |
|
$values['task_id'], |
|
$values['dst_column_id'], |
|
$values['position'], |
|
$values['swimlane_id'] |
|
); |
|
|
|
if (! $result) { |
|
$this->response->status(400); |
|
} else { |
|
$this->response->html($this->renderBoard($project_id), 201); |
|
} |
|
} catch (Exception $e) { |
|
$this->response->html('<div class="alert alert-error">'.$e->getMessage().'</div>'); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
public function check() |
|
{ |
|
$project_id = $this->request->getIntegerParam('project_id'); |
|
$timestamp = $this->request->getIntegerParam('timestamp'); |
|
|
|
if (! $project_id || ! $this->request->isAjax()) { |
|
throw new AccessForbiddenException(); |
|
} elseif (! $this->projectModel->isModifiedSince($project_id, $timestamp)) { |
|
$this->response->status(304); |
|
} else { |
|
$this->response->html($this->renderBoard($project_id)); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
public function reload() |
|
{ |
|
$project_id = $this->request->getIntegerParam('project_id'); |
|
|
|
if (! $project_id || ! $this->request->isAjax()) { |
|
throw new AccessForbiddenException(); |
|
} |
|
|
|
$values = $this->request->getJson(); |
|
$this->userSession->setFilters($project_id, empty($values['search']) ? '' : $values['search']); |
|
|
|
$this->response->html($this->renderBoard($project_id)); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
public function collapse() |
|
{ |
|
$this->changeDisplayMode(1); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
public function expand() |
|
{ |
|
$this->changeDisplayMode(0); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private function changeDisplayMode($mode) |
|
{ |
|
$project_id = $this->request->getIntegerParam('project_id'); |
|
$this->userMetadataCacheDecorator->set(UserMetadataModel::KEY_BOARD_COLLAPSED.$project_id, $mode); |
|
|
|
if ($this->request->isAjax()) { |
|
$this->response->html($this->renderBoard($project_id)); |
|
} else { |
|
$this->response->redirect($this->helper->url->to('BoardViewController', 'show', array('project_id' => $project_id))); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected function renderBoard($project_id) |
|
{ |
|
return $this->template->render('board/table_container', array( |
|
'project' => $this->projectModel->getById($project_id), |
|
'board_private_refresh_interval' => $this->configModel->get('board_private_refresh_interval'), |
|
'board_highlight_period' => $this->configModel->get('board_highlight_period'), |
|
'swimlanes' => $this->taskLexer |
|
->build($this->userSession->getFilters($project_id)) |
|
->format($this->boardFormatter->withProjectId($project_id)) |
|
)); |
|
} |
|
} |
|
|