Calendar fixes
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
use dokuwiki\Extension\SyntaxPlugin;
|
||||
use dokuwiki\plugin\luxtools\CalendarService;
|
||||
use dokuwiki\plugin\luxtools\CalendarSlot;
|
||||
use dokuwiki\plugin\luxtools\ChronoID;
|
||||
|
||||
require_once(__DIR__ . '/../autoload.php');
|
||||
|
||||
@@ -14,9 +13,12 @@ require_once(__DIR__ . '/../autoload.php');
|
||||
*
|
||||
* Syntax:
|
||||
* {{maintenance_tasks>}}
|
||||
* {{maintenance_tasks>&past=14}}
|
||||
*/
|
||||
class syntax_plugin_luxtools_maintenance extends SyntaxPlugin
|
||||
{
|
||||
private const DEFAULT_PAST_DAYS = 30;
|
||||
|
||||
/** @inheritdoc */
|
||||
public function getType()
|
||||
{
|
||||
@@ -39,7 +41,7 @@ class syntax_plugin_luxtools_maintenance extends SyntaxPlugin
|
||||
public function connectTo($mode)
|
||||
{
|
||||
$this->Lexer->addSpecialPattern(
|
||||
'\{\{maintenance_tasks>\}\}',
|
||||
'\{\{maintenance_tasks>.*?\}\}',
|
||||
$mode,
|
||||
'plugin_luxtools_maintenance'
|
||||
);
|
||||
@@ -48,7 +50,13 @@ class syntax_plugin_luxtools_maintenance extends SyntaxPlugin
|
||||
/** @inheritdoc */
|
||||
public function handle($match, $state, $pos, Doku_Handler $handler)
|
||||
{
|
||||
return ['ok' => true];
|
||||
$match = substr($match, strlen('{{maintenance_tasks>'), -2);
|
||||
$params = $this->parseFlags($match);
|
||||
|
||||
return [
|
||||
'ok' => true,
|
||||
'past' => $this->normalizePastDays($params['past'] ?? null),
|
||||
];
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
@@ -72,12 +80,17 @@ class syntax_plugin_luxtools_maintenance extends SyntaxPlugin
|
||||
}
|
||||
|
||||
$todayIso = date('Y-m-d');
|
||||
$tasks = CalendarService::openMaintenanceTasks($maintenanceSlot, $todayIso);
|
||||
$pastDays = $this->normalizePastDays($data['past'] ?? null);
|
||||
$tasks = CalendarService::openMaintenanceTasks($maintenanceSlot, $todayIso, $pastDays);
|
||||
$ajaxUrl = defined('DOKU_BASE') ? (string)DOKU_BASE . 'lib/exe/ajax.php' : 'lib/exe/ajax.php';
|
||||
$secToken = function_exists('getSecurityToken') ? (string)getSecurityToken() : '';
|
||||
|
||||
$title = (string)$this->getLang('chronological_maintenance_title');
|
||||
if ($title === '') $title = 'Tasks';
|
||||
|
||||
$renderer->doc .= '<div class="luxtools-plugin luxtools-maintenance-tasks">';
|
||||
$renderer->doc .= '<div class="luxtools-plugin luxtools-maintenance-tasks"'
|
||||
. ' data-luxtools-ajax-url="' . hsc($ajaxUrl) . '"'
|
||||
. ' data-luxtools-sectok="' . hsc($secToken) . '">';
|
||||
$renderer->doc .= '<h3>' . hsc($title) . '</h3>';
|
||||
|
||||
if ($tasks === []) {
|
||||
@@ -126,4 +139,56 @@ class syntax_plugin_luxtools_maintenance extends SyntaxPlugin
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $rawFlags
|
||||
* @return array<string,string>
|
||||
*/
|
||||
protected function parseFlags(string $rawFlags): array
|
||||
{
|
||||
$rawFlags = trim($rawFlags);
|
||||
if ($rawFlags === '') {
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($rawFlags[0] === '&') {
|
||||
$rawFlags = substr($rawFlags, 1);
|
||||
}
|
||||
|
||||
$params = [];
|
||||
foreach (explode('&', $rawFlags) as $flag) {
|
||||
if (trim($flag) === '') continue;
|
||||
|
||||
[$name, $value] = array_pad(explode('=', $flag, 2), 2, '');
|
||||
$name = strtolower(trim($name));
|
||||
$value = trim($value);
|
||||
|
||||
if ($name === '') continue;
|
||||
$params[$name] = $value;
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $value
|
||||
* @return int
|
||||
*/
|
||||
protected function normalizePastDays($value): int
|
||||
{
|
||||
if ($value === null || $value === '') {
|
||||
return self::DEFAULT_PAST_DAYS;
|
||||
}
|
||||
|
||||
if (is_int($value)) {
|
||||
return max(0, $value);
|
||||
}
|
||||
|
||||
$value = trim((string)$value);
|
||||
if ($value === '' || !preg_match('/^-?\d+$/', $value)) {
|
||||
return self::DEFAULT_PAST_DAYS;
|
||||
}
|
||||
|
||||
return max(0, (int)$value);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user