recurring:XY search keyword + auto-added recurring filter bookmarks v1.7

This commit is contained in:
2026-07-09 07:40:52 -03:00
parent e85d5d71f9
commit 9b637160b2
6 changed files with 136 additions and 12 deletions

View File

@@ -58,26 +58,29 @@ class Plugin extends Base
));
}
// Auto-managed shared custom filters (v1.5 "Show all tasks", v1.6 month filters). Ensured
// lazily whenever a project header renders (covers old + new boards); each group is gated by
// its own config toggle inside OrganonProjectHelper::ensureBoardFilters(). The toggles also
// bulk add/remove the filters (ConfigController).
// Auto-managed shared custom filters (v1.5 "Show all tasks", v1.6 month filters, v1.7
// recurring filters). Ensured lazily whenever a project header renders (covers old + new
// boards); each group is gated by its own config toggle inside
// OrganonProjectHelper::ensureBoardFilters(). The toggles also bulk add/remove the filters.
$showAllFilters = (int) $this->configModel->get('organon_tweaks_show_all_filter', 1) === 1;
$monthFilters = (int) $this->configModel->get('organon_tweaks_month_filters', 1) === 1;
if ($showAllFilters || $monthFilters) {
$recurringFilters = (int) $this->configModel->get('organon_tweaks_recurring_filters', 1) === 1;
if ($showAllFilters || $monthFilters || $recurringFilters) {
$this->template->hook->attach('template:project:header:before', 'organonTweaks:project_header/board_filters');
}
// Custom board-search keywords, registered into the task lexer by extending its factory
// service (Pimple preserves factory status on extend, so the lexer stays per-request fresh).
// `duemonth:VALUE` = a whole calendar month; `aroundmonth:VALUE` = that month padded by 10
// days on each side. Always available to type, independent of the bookmark toggles above.
// Guarded so a future Kanboard service rename no-ops (keyword absent) instead of breaking.
// `duemonth:VALUE` / `aroundmonth:VALUE` = a calendar month (padded by 10 days for around);
// `recurring:XY` = classify recurrence (X system evt/cal/any, Y role ori/dup/all). Always
// available to type, independent of the bookmark toggles above. Guarded so a future Kanboard
// service rename no-ops (keyword absent) instead of breaking.
if (isset($this->container['taskLexer'])) {
$this->container->extend('taskLexer', function ($builder, $c) {
return $builder
->withFilter((new \Kanboard\Plugin\OrganonTweaks\Filter\TaskMonthRangeFilter())->setAttribute('duemonth')->setPadDays(0))
->withFilter((new \Kanboard\Plugin\OrganonTweaks\Filter\TaskMonthRangeFilter())->setAttribute('aroundmonth')->setPadDays(10));
->withFilter((new \Kanboard\Plugin\OrganonTweaks\Filter\TaskMonthRangeFilter())->setAttribute('aroundmonth')->setPadDays(10))
->withFilter((new \Kanboard\Plugin\OrganonTweaks\Filter\TaskRecurringFilter())->setDatabase($c['db']));
});
}
}
@@ -106,7 +109,7 @@ class Plugin extends Base
public function getPluginVersion()
{
return '1.6.1';
return '1.7.0';
}
public function getPluginHomepage()