Files
luxtools-plugin/src/CalendarEvent.php
2026-03-11 12:18:02 +01:00

87 lines
2.0 KiB
PHP

<?php
namespace dokuwiki\plugin\luxtools;
/**
* Normalized calendar event/task for internal use.
*
* All calendar data (from any slot, any source) is converted into this
* structure before rendering or querying.
*/
class CalendarEvent
{
/** @var string Calendar slot key (e.g. 'general', 'maintenance') */
public $slotKey;
/** @var string Unique source event UID */
public $uid;
/** @var string Recurrence ID (empty for non-recurring or master) */
public $recurrenceId;
/** @var string Event summary/title */
public $summary;
/** @var string ISO 8601 start date/time */
public $startIso;
/** @var string ISO 8601 end date/time (may be empty) */
public $endIso;
/** @var bool Whether this is an all-day event */
public $allDay;
/** @var string Formatted time string (HH:MM) or empty for all-day */
public $time;
/** @var string Location (may be empty) */
public $location;
/** @var string Description (may be empty) */
public $description;
/**
* Status: empty, CONFIRMED, TENTATIVE, CANCELLED, TODO, COMPLETED,
* IN-PROCESS, NEEDS-ACTION.
* @var string
*/
public $status;
/** @var string Component type from source: VEVENT */
public $componentType;
/** @var string The date (YYYY-MM-DD) this event applies to */
public $dateIso;
/**
* Build a stable completion key for maintenance task tracking.
*
* @return string
*/
public function completionKey(): string
{
return implode('|', [$this->slotKey, $this->uid, $this->dateIso]);
}
/**
* Whether this event/task is marked as completed.
*
* @return bool
*/
public function isCompleted(): bool
{
$s = strtoupper($this->status);
return $s === 'COMPLETED';
}
/**
* Whether this event/task is open (for maintenance filtering).
*
* @return bool
*/
public function isOpen(): bool
{
return !$this->isCompleted();
}
}