The [x] Done / [ ] Due checkbox v2.0
This commit is contained in:
50
Helper/OrganonDoneHelper.php
Normal file
50
Helper/OrganonDoneHelper.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace Kanboard\Plugin\OrganonTweaks\Helper;
|
||||
|
||||
use Kanboard\Core\Base;
|
||||
|
||||
/**
|
||||
* Done/Due badge helper.
|
||||
*
|
||||
* "Done" has a single source of truth PER MODE (no drift with native Close/Open):
|
||||
* - close-mode on ("check done also closes tasks"): Done == the task is CLOSED (is_active == 0).
|
||||
* The badge reads the task's own is_active, so however a task is closed/reopened (badge, native
|
||||
* sidebar, bulk, API) the badge always matches. No metadata is stored in this mode.
|
||||
* - close-mode off (marker only): Done == the task metadata DONE_KEY == 'on', independent of the
|
||||
* open/closed status. Stored as the non-falsy string 'on' (never '0'/'1'): MetadataModel::get()
|
||||
* uses `?:` and PHP treats "0" as falsy, so a stored "0" would read back as the default.
|
||||
*
|
||||
* Templates cannot read models directly, so the board/task-view badge templates call isDone() here,
|
||||
* passing the task array (which carries both id and is_active) so the close-mode read needs no query.
|
||||
*/
|
||||
class OrganonDoneHelper extends Base
|
||||
{
|
||||
const DONE_KEY = 'organon_done';
|
||||
const CLOSES_KEY = 'organon_tweaks_done_closes_task';
|
||||
|
||||
/**
|
||||
* Is this task Done? (mode-aware: closed status in close-mode, else the metadata marker)
|
||||
*
|
||||
* @param array $task a task array carrying 'id' and 'is_active'
|
||||
* @return bool
|
||||
*/
|
||||
public function isDone(array $task)
|
||||
{
|
||||
if ($this->closesTask()) {
|
||||
return isset($task['is_active']) && (int) $task['is_active'] === 0;
|
||||
}
|
||||
|
||||
return $this->taskMetadataModel->get((int) $task['id'], self::DONE_KEY, '') === 'on';
|
||||
}
|
||||
|
||||
/**
|
||||
* Should toggling Done also close (and reopen) the task? Global setting, default off.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function closesTask()
|
||||
{
|
||||
return (int) $this->configModel->get(self::CLOSES_KEY, 0) === 1;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user