xref: /plugin/calendar/README.md (revision 9ccd446ecbe25932c2e89f7608c11495a1f1dbac)
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