1*9ccd446eSAtari911# DokuWiki Calendar Plugin — Matrix Edition 219378907SAtari911 3*9ccd446eSAtari911A full-featured calendar plugin for DokuWiki with five visual themes, Outlook sync, conflict detection, and an admin panel for managing events across namespaces. 419378907SAtari911 5*9ccd446eSAtari911**Version:** 6.0.0 6*9ccd446eSAtari911**Author:** atari911 (atari911@gmail.com) 7*9ccd446eSAtari911**License:** GPL 2 8*9ccd446eSAtari911**Requires:** DokuWiki "Kaos" (2024) or newer 919378907SAtari911 10231d0edbSAtari911--- 1119378907SAtari911 12*9ccd446eSAtari911## Installation 1319378907SAtari911 14*9ccd446eSAtari9111. Download the latest release ZIP. 15*9ccd446eSAtari9112. Extract into `lib/plugins/` so the path is `lib/plugins/calendar/`. 16*9ccd446eSAtari9113. Go to **Admin → Calendar Management** to verify. 1719378907SAtari911 18*9ccd446eSAtari911Alternatively, place the ZIP in the DokuWiki plugin manager upload field. 19231d0edbSAtari911 20231d0edbSAtari911--- 21231d0edbSAtari911 22*9ccd446eSAtari911## Quick Start 23231d0edbSAtari911 24*9ccd446eSAtari911Add any of these to a wiki page: 25*9ccd446eSAtari911 26*9ccd446eSAtari911``` 27*9ccd446eSAtari911{{calendar}} Full month calendar with event panel 28*9ccd446eSAtari911{{eventlist sidebar}} Sidebar widget (week grid + today/tomorrow) 29*9ccd446eSAtari911{{eventpanel}} Standalone event list 30*9ccd446eSAtari911{{eventlist range=30}} Upcoming events for the next 30 days 31*9ccd446eSAtari911{{eventlist range=-7,30}} Past 7 days through next 30 days 32*9ccd446eSAtari911``` 33*9ccd446eSAtari911 34*9ccd446eSAtari911### Namespace-scoped calendars 35*9ccd446eSAtari911 36*9ccd446eSAtari911``` 37*9ccd446eSAtari911{{calendar namespace=work}} Only show events in the "work" namespace 38*9ccd446eSAtari911{{eventlist sidebar namespace=personal}} 39*9ccd446eSAtari911``` 40*9ccd446eSAtari911 41*9ccd446eSAtari911### Theme selection 42*9ccd446eSAtari911 43*9ccd446eSAtari911``` 44*9ccd446eSAtari911{{calendar theme=matrix}} 45*9ccd446eSAtari911{{calendar theme=purple}} 46*9ccd446eSAtari911{{calendar theme=pink}} 47*9ccd446eSAtari911{{calendar theme=professional}} 48*9ccd446eSAtari911{{calendar theme=wiki}} 49*9ccd446eSAtari911``` 50*9ccd446eSAtari911 51*9ccd446eSAtari911The `wiki` theme reads your DokuWiki template's `style.ini` colors automatically. The default theme for sidebar widgets can be set globally in **Admin → Calendar Management → Themes**. 52*9ccd446eSAtari911 53*9ccd446eSAtari911--- 54*9ccd446eSAtari911 55*9ccd446eSAtari911## Features 56*9ccd446eSAtari911 57*9ccd446eSAtari911### Calendar views 58*9ccd446eSAtari911 59*9ccd446eSAtari911- **Full calendar** — Month grid with clickable day cells, integrated event panel, month picker, AJAX navigation. 60*9ccd446eSAtari911- **Sidebar widget** — Compact week grid with expandable day events, Today / Tomorrow / Important Events sections, conflict badges. 61*9ccd446eSAtari911- **Event panel** — Standalone chronological event list with past-event collapsing. 62*9ccd446eSAtari911- **Event list** — Date-range-based display for dashboards and overview pages. 63*9ccd446eSAtari911 64*9ccd446eSAtari911### Event management 65*9ccd446eSAtari911 66*9ccd446eSAtari911- Create, edit, and delete events without page reload (AJAX). 67*9ccd446eSAtari911- All-day and timed events with start/end times. 68*9ccd446eSAtari911- Multi-day events with end date support. 69*9ccd446eSAtari911- Recurring events (daily, weekly, biweekly, monthly, yearly) with series editing. 70*9ccd446eSAtari911- Tasks with completion checkboxes and past-due badges. 71*9ccd446eSAtari911- Event colors (8 presets + custom hex picker). 72*9ccd446eSAtari911- Rich descriptions with full DokuWiki markup (bold, italic, links, etc.). 73*9ccd446eSAtari911- Draggable event dialogs. 74*9ccd446eSAtari911- Namespace-based organization. 75*9ccd446eSAtari911 76*9ccd446eSAtari911### Conflict detection 77*9ccd446eSAtari911 78*9ccd446eSAtari911Overlapping timed events on the same day display an ⚠️ badge with a tooltip listing all conflicts. Works across all views including after AJAX navigation. 79*9ccd446eSAtari911 80*9ccd446eSAtari911### Five themes 81*9ccd446eSAtari911 82*9ccd446eSAtari911| Theme | Style | 83*9ccd446eSAtari911|---|---| 84*9ccd446eSAtari911| **Matrix** | Green-on-dark with glow effects | 85*9ccd446eSAtari911| **Purple** | Purple-on-dark with soft highlights | 86*9ccd446eSAtari911| **Pink** | Hot pink neon on dark with particle effects | 87*9ccd446eSAtari911| **Professional** | Clean blue-on-white, no glow | 88*9ccd446eSAtari911| **Wiki** | Inherits colors from your DokuWiki template | 89*9ccd446eSAtari911 90*9ccd446eSAtari911All themes are applied via CSS variables — no inline style overrides. The sidebar widget, full calendar, event panel, day popups, conflict tooltips, and event dialogs all inherit theme colors consistently. 91*9ccd446eSAtari911 92*9ccd446eSAtari911### Outlook sync (one-way: DokuWiki → Outlook) 93*9ccd446eSAtari911 94*9ccd446eSAtari911Push calendar events to Microsoft 365 / Outlook via the Graph API. 95*9ccd446eSAtari911 96*9ccd446eSAtari911- **Delta sync** — Only new, modified, or deleted events hit the API. Unchanged events are skipped entirely using hash-based change tracking. 97*9ccd446eSAtari911- **Category mapping** — Map DokuWiki namespaces or event colors to Outlook color categories. 98*9ccd446eSAtari911- **Duplicate detection** — Automatic cleanup of duplicate events. 99*9ccd446eSAtari911- **Dry-run mode** — Preview what would sync before committing. 100*9ccd446eSAtari911- **Cron-friendly** — Run on a schedule; typical syncs with few changes complete in seconds. 101*9ccd446eSAtari911 102*9ccd446eSAtari911Setup: copy `sync_config.php`, add your Azure app credentials, and run: 103*9ccd446eSAtari911 10419378907SAtari911```bash 105*9ccd446eSAtari911php lib/plugins/calendar/sync_outlook.php --dry-run 106*9ccd446eSAtari911php lib/plugins/calendar/sync_outlook.php 10719378907SAtari911``` 10819378907SAtari911 109*9ccd446eSAtari911See `OUTLOOK_SYNC_SETUP.md` and `CRON_SETUP.md` for full instructions. 11019378907SAtari911 111231d0edbSAtari911--- 112231d0edbSAtari911 113*9ccd446eSAtari911## Admin panel 114231d0edbSAtari911 115*9ccd446eSAtari911Access via **Admin → Calendar Management**. Four tabs: 116231d0edbSAtari911 117*9ccd446eSAtari911### Manage Events 118*9ccd446eSAtari911 119*9ccd446eSAtari911- **Event statistics** — Total events, namespaces, files, recurring series. 120*9ccd446eSAtari911- **Re-scan / Export / Import** — Bulk operations across all namespaces. 121*9ccd446eSAtari911- **Cleanup** — Delete events by age, status (completed tasks / past events), or date range. Automatic backup before deletion. Preview before committing. 122*9ccd446eSAtari911- **Recurring events table** — View, edit, and delete recurring series. Sortable columns, search filter. Edit dialog lets you change title, times, interval, and namespace for all occurrences at once. 123*9ccd446eSAtari911- **Namespace explorer** — Tree view of all events by namespace. Checkbox selection, drag-and-drop between namespaces, rename/delete namespaces, create new namespaces. 124*9ccd446eSAtari911 125*9ccd446eSAtari911### Update Plugin 126*9ccd446eSAtari911 127*9ccd446eSAtari911- Current version display. 128*9ccd446eSAtari911- Upload a new ZIP to update in place (automatic backup). 129*9ccd446eSAtari911- Paginated changelog viewer (all 150+ versions). 130*9ccd446eSAtari911- Clear DokuWiki cache. 131*9ccd446eSAtari911 132*9ccd446eSAtari911### Outlook Sync 133*9ccd446eSAtari911 134*9ccd446eSAtari911- Azure credential configuration (encrypted storage). 135*9ccd446eSAtari911- Category mapping editor. 136*9ccd446eSAtari911- Live sync runner with real-time log output. 137*9ccd446eSAtari911- Cron status detection. 138*9ccd446eSAtari911 139*9ccd446eSAtari911### Themes 140*9ccd446eSAtari911 141*9ccd446eSAtari911- Global sidebar widget theme selector with live preview. 142*9ccd446eSAtari911- Week start day setting (Sunday or Monday). 143*9ccd446eSAtari911 144*9ccd446eSAtari911--- 145*9ccd446eSAtari911 146*9ccd446eSAtari911## File structure 14719378907SAtari911 148231d0edbSAtari911``` 149*9ccd446eSAtari911calendar/ 150*9ccd446eSAtari911├── syntax.php Main plugin (calendar rendering, PHP event logic) 151*9ccd446eSAtari911├── action.php AJAX handlers (create, edit, delete, navigate) 152*9ccd446eSAtari911├── admin.php Admin panel (4 tabs, all management features) 153*9ccd446eSAtari911├── calendar-main.js Client-side JavaScript (2,800+ lines) 154*9ccd446eSAtari911├── style.css All CSS with theme variables (3,200+ lines) 155*9ccd446eSAtari911├── script.js Empty loader (avoids DokuWiki concatenation) 156*9ccd446eSAtari911├── sync_outlook.php Outlook sync script (delta-aware) 157*9ccd446eSAtari911├── sync_config.php Outlook sync credentials (edit this) 158*9ccd446eSAtari911├── get_system_stats.php System monitoring endpoint 159*9ccd446eSAtari911├── plugin.info.txt Plugin metadata 160*9ccd446eSAtari911├── lang/en/lang.php Language strings 161*9ccd446eSAtari911├── CHANGELOG.md Full version history 162*9ccd446eSAtari911├── OUTLOOK_SYNC_SETUP.md Outlook sync setup guide 163*9ccd446eSAtari911├── CRON_SETUP.md Cron job setup guide 164*9ccd446eSAtari911└── QUICK_REFERENCE.md Syntax quick reference 165231d0edbSAtari911``` 16619378907SAtari911 167*9ccd446eSAtari911--- 16819378907SAtari911 169*9ccd446eSAtari911## Event data storage 170*9ccd446eSAtari911 171*9ccd446eSAtari911Events are stored as JSON files in DokuWiki's `data/meta/` directory: 172*9ccd446eSAtari911 173231d0edbSAtari911``` 174*9ccd446eSAtari911data/meta/calendar/2026-02.json Default namespace 175*9ccd446eSAtari911data/meta/work/calendar/2026-02.json "work" namespace 176*9ccd446eSAtari911data/meta/personal/calendar/2026-02.json "personal" namespace 177231d0edbSAtari911``` 178231d0edbSAtari911 179*9ccd446eSAtari911Each file is keyed by date, with an array of events per date. Events are plain JSON — no database required. 1805836612dSAtari911 181*9ccd446eSAtari911--- 182*9ccd446eSAtari911 183*9ccd446eSAtari911## Syntax reference 184*9ccd446eSAtari911 185*9ccd446eSAtari911### Full calendar 1865836612dSAtari911 1875836612dSAtari911``` 1885836612dSAtari911{{calendar}} 189*9ccd446eSAtari911{{calendar namespace=work theme=purple}} 1905836612dSAtari911``` 1915836612dSAtari911 192*9ccd446eSAtari911### Sidebar widget 193*9ccd446eSAtari911 1945836612dSAtari911``` 195*9ccd446eSAtari911{{eventlist sidebar}} 196*9ccd446eSAtari911{{eventlist sidebar namespace=personal theme=wiki}} 1975836612dSAtari911``` 1985836612dSAtari911 199*9ccd446eSAtari911### Event panel 2005836612dSAtari911 20119378907SAtari911``` 20219378907SAtari911{{eventpanel}} 203*9ccd446eSAtari911{{eventpanel namespace=work}} 20419378907SAtari911``` 2055836612dSAtari911 206*9ccd446eSAtari911### Event list with date range 2075836612dSAtari911 20819378907SAtari911``` 209*9ccd446eSAtari911{{eventlist range=30}} Next 30 days 210*9ccd446eSAtari911{{eventlist range=-7,30}} Past 7 days + next 30 211*9ccd446eSAtari911{{eventlist range=90 namespace=work}} 21219378907SAtari911``` 21319378907SAtari911 214231d0edbSAtari911--- 21519378907SAtari911 216*9ccd446eSAtari911## Week start day 21719378907SAtari911 218*9ccd446eSAtari911By default the week grid starts on Sunday. To change to Monday, go to **Admin → Calendar Management → Themes** and select Monday. This applies globally to all sidebar widgets. 21919378907SAtari911 220231d0edbSAtari911--- 221231d0edbSAtari911 222*9ccd446eSAtari911## Changelog 223231d0edbSAtari911 224*9ccd446eSAtari911See `CHANGELOG.md` for the full version history. Recent highlights: 225231d0edbSAtari911 226*9ccd446eSAtari911- **6.0.0** — Code audit, admin cleanup, fresh README. 227*9ccd446eSAtari911- **5.5.8** — Delta sync for Outlook (hash-based change tracking). 228*9ccd446eSAtari911- **5.5.0** — Full CSS refactor, CSS variables as single source of truth for all themes. 229*9ccd446eSAtari911- **5.0.0** — Wiki theme with automatic template color inheritance. 230*9ccd446eSAtari911- **4.0.0** — Sidebar widget, five themes, conflict detection, system monitoring. 231231d0edbSAtari911 232231d0edbSAtari911--- 233231d0edbSAtari911 234*9ccd446eSAtari911## Version 6.0.0 235