feature : persistent sort

This commit is contained in:
2026-07-13 10:25:28 -03:00
parent 7ba4348de1
commit d079198103
7 changed files with 335 additions and 1 deletions

View File

@@ -24,6 +24,7 @@ class ConfigController extends BaseController
'organon_tweaks_recurring_filters' => (int) $this->configModel->get('organon_tweaks_recurring_filters', 1),
'organon_tweaks_shortcut_labels' => (int) $this->configModel->get('organon_tweaks_shortcut_labels', 1),
'organon_tweaks_title_click_edit' => (int) $this->configModel->get('organon_tweaks_title_click_edit', 1),
'organon_tweaks_persistent_sort' => (int) $this->configModel->get('organon_tweaks_persistent_sort', 1),
),
'errors' => array(),
)));
@@ -43,6 +44,7 @@ class ConfigController extends BaseController
$recurringFilters = isset($values['organon_tweaks_recurring_filters']) ? 1 : 0;
$shortcutLabels = isset($values['organon_tweaks_shortcut_labels']) ? 1 : 0;
$titleClickEdit = isset($values['organon_tweaks_title_click_edit']) ? 1 : 0;
$persistentSort = isset($values['organon_tweaks_persistent_sort']) ? 1 : 0;
if ($this->configModel->save(array(
'organon_tweaks_always_comment_icon' => $alwaysCommentIcon,
@@ -55,6 +57,7 @@ class ConfigController extends BaseController
'organon_tweaks_recurring_filters' => $recurringFilters,
'organon_tweaks_shortcut_labels' => $shortcutLabels,
'organon_tweaks_title_click_edit' => $titleClickEdit,
'organon_tweaks_persistent_sort' => $persistentSort,
))) {
$this->flash->success(t('Settings saved successfully.'));
} else {

View File

@@ -0,0 +1,61 @@
<?php
namespace Kanboard\Plugin\OrganonTweaks\Controller;
use Kanboard\Controller\BaseController;
use Kanboard\Core\Controller\AccessForbiddenException;
use Kanboard\Plugin\OrganonTweaks\Helper\OrganonSortHelper;
/**
* Per-column persistent sort, driven from the column's sort control on the board. Project-member
* (task-update) gated + CSRF, mirroring core TaskReorderController; returns to the board.
*/
class OrganonSortController extends BaseController
{
private function authorize()
{
$project = $this->getProject();
if (! $this->helper->user->hasProjectAccess('TaskModificationController', 'update', $project['id'])) {
throw new AccessForbiddenException();
}
return $project;
}
private function sorter()
{
return new OrganonSortHelper($this->container);
}
private function backToBoard(array $project)
{
$this->response->redirect($this->helper->url->to('BoardViewController', 'show', array('project_id' => $project['id'])));
}
public function sort()
{
$this->checkCSRFParam();
$project = $this->authorize();
$this->sorter()->applySort(
$project['id'],
$this->request->getIntegerParam('swimlane_id'),
$this->request->getIntegerParam('column_id'),
$this->request->getStringParam('sort'),
$this->request->getStringParam('direction')
);
$this->backToBoard($project);
}
public function toggle()
{
$this->checkCSRFParam();
$project = $this->authorize();
$this->sorter()->toggle($project['id'], $this->request->getIntegerParam('column_id'));
$this->backToBoard($project);
}
}