xref: /plugin/calendar/README.md (revision 5836612d105738842420c414950cae1635b730cc)
1*5836612dSAtari911# DokuWiki Calendar Plugin - Matrix Edition v4.0.0
219378907SAtari911
3*5836612dSAtari911A powerful, feature-rich calendar plugin with **Matrix theme**, live system monitoring, real-time weather, **Outlook sync**, and advanced event management.
419378907SAtari911
5*5836612dSAtari911**Version**: 4.0.0
6*5836612dSAtari911**Release Date**: February 6, 2026
7*5836612dSAtari911**Codename**: Matrix Edition
819378907SAtari911
9231d0edbSAtari911---
1019378907SAtari911
11231d0edbSAtari911## �� Key Features
1219378907SAtari911
13*5836612dSAtari911### �� Multiple Views
14*5836612dSAtari911- **Sidebar Widget** - Compact week view with live stats (recommended)
15231d0edbSAtari911- **Full Calendar** - Traditional month grid with event panel
16231d0edbSAtari911- **Event Panel** - Standalone event management
17231d0edbSAtari911- **Event List** - Flexible date range displays
1819378907SAtari911
19231d0edbSAtari911### �� Matrix Theme
20*5836612dSAtari911- **Authentic Aesthetics** - Green glow effects throughout
21*5836612dSAtari911- **Single Color Bars** - Clean 3px bars showing event color
22*5836612dSAtari911- **Dark Backgrounds** - #1a1a1a, rgba(36, 36, 36)
23*5836612dSAtari911- **Live Updates** - Clock, weather, system stats
24*5836612dSAtari911
25*5836612dSAtari911### �� Sidebar Widget Features
26*5836612dSAtari911- **Interactive Week Grid** - Click any day to view events
27*5836612dSAtari911- **Live System Monitoring** - CPU load, real-time CPU, memory usage
28*5836612dSAtari911- **Hover Tooltips** - Detailed stats (load averages, top processes)
29*5836612dSAtari911- **Real-time Weather** - Geolocation-based temperature
30231d0edbSAtari911- **Live Clock** - Updates every second
31*5836612dSAtari911- **Event Sections** - Today (orange), Tomorrow (green), Important (purple)
32*5836612dSAtari911- **Add Event Button** - Dark green bar opens full event dialog
3319378907SAtari911
34*5836612dSAtari911### ⚡ Event Management
35*5836612dSAtari911- **All-Day Events First** - Then sorted chronologically by time
36*5836612dSAtari911- **Conflict Detection** - Orange ⚠ badge on overlapping events
37*5836612dSAtari911- **Rich Content** - Full DokuWiki formatting (**bold**, [[links]], //italic//)
38*5836612dSAtari911- **Single Color Bars** - Clean design with event's assigned color
39*5836612dSAtari911- **AJAX Operations** - Create, edit, delete without page reload
40*5836612dSAtari911- **Draggable Dialogs** - Professional event forms
41231d0edbSAtari911
42*5836612dSAtari911### �� Outlook Integration
43*5836612dSAtari911- **Bi-directional Sync** - DokuWiki ↔ Microsoft Outlook calendars
44*5836612dSAtari911- **Category Mapping** - Map DokuWiki colors to Outlook categories
45*5836612dSAtari911- **Azure AD Authentication** - Secure OAuth 2.0
46*5836612dSAtari911- **Import/Export Config** - Encrypted configuration files
47*5836612dSAtari911
48*5836612dSAtari911### ��️ Admin Interface
49*5836612dSAtari911- **Update Plugin Tab** (default) - Version info, changelog, Clear Cache button
50*5836612dSAtari911- **Outlook Sync Tab** - Azure configuration, category mapping
51231d0edbSAtari911- **Manage Events Tab** - Browse, edit, delete, move events
52231d0edbSAtari911
53231d0edbSAtari911---
54231d0edbSAtari911
55231d0edbSAtari911## �� Installation
56231d0edbSAtari911
57231d0edbSAtari911### 1. Extract Plugin
5819378907SAtari911```bash
59231d0edbSAtari911cd /path/to/dokuwiki/lib/plugins/
60*5836612dSAtari911unzip calendar-matrix-edition-v4.0.0.zip
6119378907SAtari911```
6219378907SAtari911
63231d0edbSAtari911### 2. Set Permissions
64231d0edbSAtari911```bash
65231d0edbSAtari911mkdir -p data/meta/calendar
66231d0edbSAtari911chmod -R 775 data/meta/calendar
67231d0edbSAtari911chown -R www-data:www-data data/meta/calendar
68231d0edbSAtari911```
6919378907SAtari911
70231d0edbSAtari911### 3. Clear Cache
71231d0edbSAtari9111. Go to **Admin → Calendar Management**
72*5836612dSAtari9112. Click **��️ Clear Cache** button (orange, prominent)
73*5836612dSAtari9113. Refresh your wiki page
7419378907SAtari911
75231d0edbSAtari911---
76231d0edbSAtari911
77231d0edbSAtari911## �� Usage
78231d0edbSAtari911
79*5836612dSAtari911### Sidebar Widget (Recommended)
80231d0edbSAtari911
81*5836612dSAtari911Display the Matrix-themed sidebar widget:
8219378907SAtari911
83231d0edbSAtari911```
84231d0edbSAtari911{{calendar sidebar}}
85231d0edbSAtari911```
8619378907SAtari911
87231d0edbSAtari911**Features**:
88*5836612dSAtari911- Current week grid (7 days, clickable)
89*5836612dSAtari911- Live system stats (CPU, memory)
90231d0edbSAtari911- Real-time weather with temperature
91*5836612dSAtari911- Live clock
92231d0edbSAtari911- Today/Tomorrow/Important event sections
93*5836612dSAtari911- Dark green Add Event button
9419378907SAtari911
95*5836612dSAtari911**With Namespace**:
96231d0edbSAtari911```
97231d0edbSAtari911{{calendar sidebar namespace=team}}
98231d0edbSAtari911```
99231d0edbSAtari911
100*5836612dSAtari911### Full Calendar
101*5836612dSAtari911
102*5836612dSAtari911Traditional month view with event panel:
103*5836612dSAtari911
104*5836612dSAtari911```
105*5836612dSAtari911{{calendar}}
106*5836612dSAtari911```
107*5836612dSAtari911
108*5836612dSAtari911**Specific Month**:
109*5836612dSAtari911```
110*5836612dSAtari911{{calendar year=2026 month=6}}
111*5836612dSAtari911```
112*5836612dSAtari911
113*5836612dSAtari911**With Namespace**:
114*5836612dSAtari911```
115*5836612dSAtari911{{calendar namespace=team}}
116*5836612dSAtari911```
117*5836612dSAtari911
118231d0edbSAtari911### Event Panel Only
119*5836612dSAtari911
120*5836612dSAtari911Display just the event management panel (320px wide):
121*5836612dSAtari911
12219378907SAtari911```
12319378907SAtari911{{eventpanel}}
12419378907SAtari911```
125*5836612dSAtari911
126*5836612dSAtari911Perfect for page sidebars.
12719378907SAtari911
128231d0edbSAtari911### Event List
129*5836612dSAtari911
130*5836612dSAtari911Display events in a simple list:
131*5836612dSAtari911
13219378907SAtari911```
133*5836612dSAtari911{{eventlist date=2026-02-06}}
13419378907SAtari911```
13519378907SAtari911
136231d0edbSAtari911**Date Range**:
13719378907SAtari911```
13819378907SAtari911{{eventlist daterange=2026-01-01:2026-01-31}}
13919378907SAtari911```
14019378907SAtari911
141231d0edbSAtari911**With Namespace**:
14219378907SAtari911```
14319378907SAtari911{{eventlist daterange=2026-01-01:2026-01-31 namespace=team}}
14419378907SAtari911```
14519378907SAtari911
146231d0edbSAtari911---
14719378907SAtari911
148231d0edbSAtari911## �� Creating Events
14919378907SAtari911
150*5836612dSAtari911### Method 1: Sidebar Widget Add Event Button
151*5836612dSAtari911
152*5836612dSAtari9111. Click the **+ ADD EVENT** dark green bar
153*5836612dSAtari9112. Event dialog opens
154231d0edbSAtari9113. Fill in event details
15519378907SAtari9114. Click **Save**
15619378907SAtari911
157*5836612dSAtari911### Method 2: Click Week Grid Day
158*5836612dSAtari911
159*5836612dSAtari9111. Click any day in the week grid
160*5836612dSAtari9112. View existing events
161*5836612dSAtari9113. Click **+ Add** button if desired
162*5836612dSAtari9114. Fill in event details
163*5836612dSAtari9115. Click **Save**
164*5836612dSAtari911
165*5836612dSAtari911### Method 3: Full Calendar
166*5836612dSAtari911
167231d0edbSAtari9111. Click **+ Add** button in event panel
168231d0edbSAtari9112. Fill in event details
169231d0edbSAtari9113. Click **Save**
17019378907SAtari911
171231d0edbSAtari911### Event Fields
17219378907SAtari911
173231d0edbSAtari911**Required**:
174*5836612dSAtari911- **Date** - YYYY-MM-DD format
175231d0edbSAtari911- **Title** - Event name (supports **bold**, [[links]], //italic//)
17619378907SAtari911
177231d0edbSAtari911**Optional**:
178*5836612dSAtari911- **Time** - HH:MM format (24-hour) - leave blank for all-day
179231d0edbSAtari911- **End Time** - HH:MM format (for duration)
180*5836612dSAtari911- **Color** - Choose from picker or enter hex code
181231d0edbSAtari911- **Category** - For organization
182231d0edbSAtari911- **Description** - Full DokuWiki formatting supported
18319378907SAtari911
184*5836612dSAtari911### DokuWiki Formatting
18519378907SAtari911
186231d0edbSAtari911Events support full DokuWiki syntax:
18719378907SAtari911
18819378907SAtari911```
189231d0edbSAtari911**Meeting with [[team:bob|Bob]]**
19019378907SAtari911
191231d0edbSAtari911Discuss:
192231d0edbSAtari911  * Project timeline
193231d0edbSAtari911  * //Budget review//
194231d0edbSAtari911  * [[projects:alpha|Project Alpha]] status
19519378907SAtari911```
19619378907SAtari911
197231d0edbSAtari911Renders with proper HTML formatting including clickable links.
19819378907SAtari911
199231d0edbSAtari911---
200231d0edbSAtari911
201231d0edbSAtari911## �� Viewing Events
202231d0edbSAtari911
203231d0edbSAtari911### Sidebar Widget
204231d0edbSAtari911
205231d0edbSAtari911**Week Grid**:
206231d0edbSAtari911- 7 days displayed (current week)
207231d0edbSAtari911- Event count badges on days with events
208*5836612dSAtari911- Click any day → View all events (expandable section)
209231d0edbSAtari911- Events sorted: All-day first, then by time
210231d0edbSAtari911
211231d0edbSAtari911**Today Section** (Orange):
212231d0edbSAtari911- All events happening today
213*5836612dSAtari911- Sorted: All-day first, then chronologically
214231d0edbSAtari911
215231d0edbSAtari911**Tomorrow Section** (Green):
216231d0edbSAtari911- All events happening tomorrow
217231d0edbSAtari911- Same sorting as Today
218231d0edbSAtari911
219231d0edbSAtari911**Important Events Section** (Purple):
220231d0edbSAtari911- Future events from "important" namespace
221231d0edbSAtari911- Configurable in Outlook Sync settings
222231d0edbSAtari911
223231d0edbSAtari911### Clicked Day Events
224231d0edbSAtari911
225231d0edbSAtari911When you click a day in the week grid:
226231d0edbSAtari911
22719378907SAtari911```
228231d0edbSAtari911Monday, Feb 5
229*5836612dSAtari911├─ [Green]  All Day - Project Deadline
230*5836612dSAtari911├─ [Blue]   8:00 AM - Morning Standup
231*5836612dSAtari911├─ [Orange] 10:30 AM - Coffee with Bob ⚠
232*5836612dSAtari911└─ [Purple] 2:00 PM - Team Meeting
23319378907SAtari911```
23419378907SAtari911
235*5836612dSAtari911**Features**:
236*5836612dSAtari911- **Single color bar** (3px) - Event's assigned color
237*5836612dSAtari911- **Conflict badge** - ⚠ appears on right if event overlaps
238*5836612dSAtari911- **Sorting** - All-day events FIRST, then chronological
239231d0edbSAtari911
240231d0edbSAtari911---
241231d0edbSAtari911
242*5836612dSAtari911## ⚙️ System Monitoring
243231d0edbSAtari911
244*5836612dSAtari911### Live Stats in Sidebar
245231d0edbSAtari911
246*5836612dSAtari911**Green Bar** (5-min CPU Load):
247*5836612dSAtari911```
248*5836612dSAtari911Hover to see:
249*5836612dSAtari911CPU Load Average
250*5836612dSAtari9111-min: 2.45
251*5836612dSAtari9115-min: 2.12
252*5836612dSAtari91115-min: 1.98
253*5836612dSAtari911Uptime: 5 days, 3 hours
254*5836612dSAtari911```
255231d0edbSAtari911
256*5836612dSAtari911**Purple Bar** (Real-time CPU):
257*5836612dSAtari911```
258*5836612dSAtari911Hover to see:
259*5836612dSAtari911CPU Load (Short-term)
260*5836612dSAtari911Current: 25.3%
261231d0edbSAtari911
262*5836612dSAtari911Top Processes:
263*5836612dSAtari9111. apache2 (8.2%)
264*5836612dSAtari9112. mysql (6.1%)
265*5836612dSAtari9113. php-fpm (4.5%)
266*5836612dSAtari911```
267231d0edbSAtari911
268*5836612dSAtari911**Orange Bar** (Memory Usage):
269*5836612dSAtari911```
270*5836612dSAtari911Hover to see:
271*5836612dSAtari911Memory Usage
272*5836612dSAtari911Total: 16.0 GB
273*5836612dSAtari911Used: 8.2 GB (51%)
274*5836612dSAtari911Available: 7.8 GB
275231d0edbSAtari911
276*5836612dSAtari911Top Processes:
277*5836612dSAtari9111. mysql (2.1 GB)
278*5836612dSAtari9112. apache2 (1.3 GB)
279*5836612dSAtari9113. php-fpm (845 MB)
280*5836612dSAtari911```
281231d0edbSAtari911
282*5836612dSAtari911**Update Frequency**:
283*5836612dSAtari911- Stats: Every 2 seconds
284*5836612dSAtari911- Weather: Every 10 minutes
285*5836612dSAtari911- Clock: Every second
286231d0edbSAtari911
287*5836612dSAtari911---
288231d0edbSAtari911
289*5836612dSAtari911## ��️ Weather Display
290231d0edbSAtari911
291*5836612dSAtari911- **Geolocation-based** temperature
292*5836612dSAtari911- **Fallback**: Irvine, CA (33.6846, -117.8265)
293*5836612dSAtari911- **Updates**: Every 10 minutes
294*5836612dSAtari911- **Display**: Icon + temperature (e.g., "��️ 72°")
295231d0edbSAtari911
296231d0edbSAtari911---
297231d0edbSAtari911
298231d0edbSAtari911## �� Outlook Sync Setup
299231d0edbSAtari911
300231d0edbSAtari911### Prerequisites
301231d0edbSAtari9111. Microsoft Azure account
302231d0edbSAtari9112. Registered application in Azure Portal
303231d0edbSAtari9113. Calendar permissions granted
304231d0edbSAtari911
305231d0edbSAtari911### Configuration Steps
306231d0edbSAtari911
307231d0edbSAtari9111. **Register Azure App**:
308231d0edbSAtari911   - Go to https://portal.azure.com
309231d0edbSAtari911   - Navigate to App Registrations
310231d0edbSAtari911   - Create new registration
311231d0edbSAtari911   - Note: Tenant ID, Client ID
312231d0edbSAtari911
313231d0edbSAtari9112. **Create Client Secret**:
314231d0edbSAtari911   - In your app, go to Certificates & secrets
315231d0edbSAtari911   - Create new client secret
316231d0edbSAtari911   - Copy the secret value (shown once!)
317231d0edbSAtari911
318231d0edbSAtari9113. **Configure Permissions**:
319231d0edbSAtari911   - Add API permissions:
320231d0edbSAtari911     - Calendars.ReadWrite
321231d0edbSAtari911     - Calendars.ReadWrite.Shared
322231d0edbSAtari911   - Grant admin consent
323231d0edbSAtari911
324231d0edbSAtari9114. **Enter in DokuWiki**:
325231d0edbSAtari911   - Admin → Calendar Management → Outlook Sync
326231d0edbSAtari911   - Enter Tenant ID, Client ID, Client Secret
327231d0edbSAtari911   - Enter your email address
328231d0edbSAtari911   - Select timezone
329231d0edbSAtari911   - Configure sync settings
330231d0edbSAtari911   - Click **Save Configuration**
331231d0edbSAtari911
332231d0edbSAtari9115. **Test Sync**:
333231d0edbSAtari911   - Create event in DokuWiki
334231d0edbSAtari911   - Run sync (cron job or manual)
335231d0edbSAtari911   - Check Outlook calendar
336231d0edbSAtari911   - Create event in Outlook
337231d0edbSAtari911   - Run sync
338231d0edbSAtari911   - Check DokuWiki calendar
339231d0edbSAtari911
340231d0edbSAtari911### Sync Behavior
341231d0edbSAtari911
342231d0edbSAtari911**DokuWiki → Outlook**:
343231d0edbSAtari911- New events created in Outlook
344231d0edbSAtari911- Updates sync to existing events
345231d0edbSAtari911- Deletes sync if "Delete Outlook events" enabled
346231d0edbSAtari911
347231d0edbSAtari911**Outlook → DokuWiki**:
348231d0edbSAtari911- New events created in DokuWiki
349231d0edbSAtari911- Updates sync to existing events
350231d0edbSAtari911- Category colors mapped to DokuWiki colors
351231d0edbSAtari911
352*5836612dSAtari911**Conflict Resolution**: Last-write-wins
353231d0edbSAtari911
354231d0edbSAtari911---
355231d0edbSAtari911
356231d0edbSAtari911## �� Color Scheme
357231d0edbSAtari911
358*5836612dSAtari911### Section Colors
359231d0edbSAtari911
360*5836612dSAtari911- **Today**: Orange #ff9800
361*5836612dSAtari911- **Tomorrow**: Green #4caf50
362*5836612dSAtari911- **Important Events**: Purple #9b59b6
363*5836612dSAtari911- **Add Event Bar**: Dark green #006400
364231d0edbSAtari911
365231d0edbSAtari911### System Bars
366231d0edbSAtari911
367*5836612dSAtari911- **Green Bar**: 5-min CPU load average
368*5836612dSAtari911- **Purple Bar**: Real-time CPU usage
369*5836612dSAtari911- **Orange Bar**: Real-time memory usage
370231d0edbSAtari911
371*5836612dSAtari911### Event Colors
372231d0edbSAtari911
373*5836612dSAtari911- **Default**: Matrix Green #00cc07
374*5836612dSAtari911- **Custom**: User-assigned color (via color picker)
375231d0edbSAtari911
376231d0edbSAtari911---
377231d0edbSAtari911
378*5836612dSAtari911## ��️ Admin Interface
379231d0edbSAtari911
380*5836612dSAtari911### Access
381*5836612dSAtari911Go to **Admin → Calendar Management**
382231d0edbSAtari911
383*5836612dSAtari911### Tabs
38419378907SAtari911
385*5836612dSAtari911#### 1. �� Update Plugin (Default Tab)
38619378907SAtari911
387*5836612dSAtari911**Features**:
388*5836612dSAtari911- Current version and date
389*5836612dSAtari911- Author information
390*5836612dSAtari911- Installation path
391*5836612dSAtari911- Permission check
392*5836612dSAtari911- **��️ Clear Cache** button (prominent orange)
393*5836612dSAtari911- Recent changelog (last 10 versions)
39419378907SAtari911
395*5836612dSAtari911**Clear Cache**:
396*5836612dSAtari911- Click orange button
397*5836612dSAtari911- Confirm dialog
398*5836612dSAtari911- Clears all DokuWiki cache
399*5836612dSAtari911- **Use after every plugin update!**
40019378907SAtari911
401*5836612dSAtari911#### 2. ⚙️ Outlook Sync
40219378907SAtari911
403*5836612dSAtari911**Azure Configuration**:
404*5836612dSAtari911- Tenant ID
405*5836612dSAtari911- Client ID
406*5836612dSAtari911- Client Secret
407*5836612dSAtari911- User Email
408*5836612dSAtari911- Timezone
409*5836612dSAtari911
410*5836612dSAtari911**Sync Settings**:
411*5836612dSAtari911- Default category
412*5836612dSAtari911- Reminder minutes
413*5836612dSAtari911- Sync completed tasks (checkbox)
414*5836612dSAtari911- Delete Outlook events (checkbox)
415*5836612dSAtari911- Important namespaces (comma-separated)
416*5836612dSAtari911
417*5836612dSAtari911**Category Mapping**:
418*5836612dSAtari911- Map DokuWiki colors to Outlook categories
419*5836612dSAtari911- Visual color picker
420*5836612dSAtari911
421*5836612dSAtari911**Buttons**:
422*5836612dSAtari911- **�� Export Config** - Download encrypted config
423*5836612dSAtari911- **�� Import Config** - Upload encrypted config
424*5836612dSAtari911- **Save Configuration**
425*5836612dSAtari911
426*5836612dSAtari911#### 3. �� Manage Events
427*5836612dSAtari911
428*5836612dSAtari911**Features**:
429*5836612dSAtari911- Browse all events across all namespaces
430*5836612dSAtari911- Filter by namespace
431*5836612dSAtari911- Search events
432*5836612dSAtari911- Edit event details
433*5836612dSAtari911- Delete events
434*5836612dSAtari911- Move events between dates/namespaces
43519378907SAtari911
436231d0edbSAtari911---
43719378907SAtari911
438231d0edbSAtari911## �� File Structure
439231d0edbSAtari911
440231d0edbSAtari911### Event Storage
44119378907SAtari911```
44219378907SAtari911data/meta/calendar/2026-02.json
443*5836612dSAtari911data/meta/team/calendar/2026-02.json
44419378907SAtari911```
44519378907SAtari911
446231d0edbSAtari911### Event JSON Format
44719378907SAtari911```json
44819378907SAtari911{
449231d0edbSAtari911  "2026-02-06": [
45019378907SAtari911    {
451231d0edbSAtari911      "id": "evt_abc123",
452*5836612dSAtari911      "title": "**Team Meeting**",
453*5836612dSAtari911      "title_html": "<strong>Team Meeting</strong>",
45419378907SAtari911      "time": "14:00",
455231d0edbSAtari911      "end_time": "15:00",
456*5836612dSAtari911      "description": "Discuss //timeline//",
457*5836612dSAtari911      "description_html": "Discuss <em>timeline</em>",
45819378907SAtari911      "color": "#3498db",
459231d0edbSAtari911      "category": "Meetings",
460231d0edbSAtari911      "namespace": "team",
461231d0edbSAtari911      "created": "2026-02-05 10:00:00",
462231d0edbSAtari911      "modified": "2026-02-05 10:30:00",
463*5836612dSAtari911      "conflict": false
46419378907SAtari911    }
46519378907SAtari911  ]
46619378907SAtari911}
46719378907SAtari911```
46819378907SAtari911
469231d0edbSAtari911### Fields Explained
47019378907SAtari911
471231d0edbSAtari911- **id**: Unique identifier (auto-generated)
472231d0edbSAtari911- **title**: Raw DokuWiki syntax
473*5836612dSAtari911- **title_html**: Pre-rendered HTML for JavaScript
474231d0edbSAtari911- **time**: Start time (HH:MM, 24-hour)
475231d0edbSAtari911- **end_time**: End time (optional)
476231d0edbSAtari911- **description**: Raw DokuWiki syntax
477231d0edbSAtari911- **description_html**: Pre-rendered HTML
478231d0edbSAtari911- **color**: Hex color code
479231d0edbSAtari911- **category**: Category name
480231d0edbSAtari911- **namespace**: Calendar namespace
481*5836612dSAtari911- **created**: Timestamp
482231d0edbSAtari911- **modified**: Last modified timestamp
483231d0edbSAtari911- **conflict**: Boolean - time conflict detected
48419378907SAtari911
485231d0edbSAtari911---
48619378907SAtari911
487*5836612dSAtari911## �� Troubleshooting
48819378907SAtari911
489231d0edbSAtari911### Events Not Displaying
49019378907SAtari911
491231d0edbSAtari911**Check 1**: Clear cache
492231d0edbSAtari911- Admin → Calendar Management
493231d0edbSAtari911- Click **��️ Clear Cache**
494231d0edbSAtari911- Confirm and refresh page
49519378907SAtari911
496231d0edbSAtari911**Check 2**: File permissions
497231d0edbSAtari911```bash
498231d0edbSAtari911ls -la data/meta/calendar/
499231d0edbSAtari911# Should show www-data:www-data ownership
500231d0edbSAtari911# Should show 775 permissions
501231d0edbSAtari911
502231d0edbSAtari911# Fix if needed:
503231d0edbSAtari911chown -R www-data:www-data data/meta/calendar/
504231d0edbSAtari911chmod -R 775 data/meta/calendar/
50519378907SAtari911```
50619378907SAtari911
507231d0edbSAtari911**Check 3**: Check JSON validity
508231d0edbSAtari911```bash
509231d0edbSAtari911cat data/meta/calendar/2026-02.json
510231d0edbSAtari911# Should be valid JSON
511231d0edbSAtari911```
51219378907SAtari911
513231d0edbSAtari911### Color Bars Not Showing
51419378907SAtari911
515231d0edbSAtari911**Solution**:
516231d0edbSAtari9111. Clear browser cache (Ctrl+Shift+R)
517231d0edbSAtari9112. Clear DokuWiki cache (admin button)
518*5836612dSAtari9113. Verify plugin version is 4.0.0
51919378907SAtari911
520231d0edbSAtari911### Tooltips Not Working
52119378907SAtari911
522231d0edbSAtari911**Solution**:
523231d0edbSAtari9111. Verify JavaScript is enabled
524231d0edbSAtari9112. Clear cache
525*5836612dSAtari9113. Check console for errors
526*5836612dSAtari9114. Update to version 4.0.0
527231d0edbSAtari911
528231d0edbSAtari911### Weather Shows "--°"
529231d0edbSAtari911
530231d0edbSAtari911**Solution**:
531231d0edbSAtari9111. Clear cache
532*5836612dSAtari9112. Allow geolocation in browser
533231d0edbSAtari9113. Wait 10 seconds for initial update
534*5836612dSAtari9114. Check console for errors
535*5836612dSAtari911
536*5836612dSAtari911### Add Event Button Doesn't Work
537*5836612dSAtari911
538*5836612dSAtari911**Solution**:
539*5836612dSAtari9111. Check browser console for errors
540*5836612dSAtari9112. Verify calendar-main.js loaded
541*5836612dSAtari9113. Clear cache
542*5836612dSAtari9114. Update to version 4.0.0
543231d0edbSAtari911
544231d0edbSAtari911### Outlook Sync Not Working
545231d0edbSAtari911
546231d0edbSAtari911**Check 1**: Azure credentials
547231d0edbSAtari911- Verify Tenant ID, Client ID, Client Secret
548231d0edbSAtari911- Check app permissions in Azure Portal
549231d0edbSAtari911- Ensure admin consent granted
550231d0edbSAtari911
551*5836612dSAtari911**Check 2**: Cron job
552231d0edbSAtari911```bash
553231d0edbSAtari911# Check cron is running
554231d0edbSAtari911crontab -l
555231d0edbSAtari911
556231d0edbSAtari911# Should show:
557231d0edbSAtari911*/15 * * * * /usr/bin/php /path/to/dokuwiki/lib/plugins/calendar/sync_outlook.php
558231d0edbSAtari911```
559231d0edbSAtari911
560231d0edbSAtari911---
561231d0edbSAtari911
562231d0edbSAtari911## �� Performance
563231d0edbSAtari911
564231d0edbSAtari911### Optimizations
565231d0edbSAtari911
566231d0edbSAtari911- **Event Caching**: JSON files cached per month
567231d0edbSAtari911- **Lazy Loading**: Events loaded on demand
568231d0edbSAtari911- **AJAX Updates**: No full page reloads
569231d0edbSAtari911- **Minimal DOM**: Only visible events rendered
570231d0edbSAtari911
571231d0edbSAtari911### Recommended Limits
572231d0edbSAtari911
573231d0edbSAtari911- **Events per month**: < 500 (no performance issues)
574231d0edbSAtari911- **Events per day**: < 50 (UI remains clean)
575231d0edbSAtari911- **Namespaces**: Unlimited (loaded separately)
576231d0edbSAtari911- **Event description**: < 500 characters (for readability)
577231d0edbSAtari911
578231d0edbSAtari911---
579231d0edbSAtari911
580231d0edbSAtari911## �� Security
581231d0edbSAtari911
582231d0edbSAtari911### Data Storage
583231d0edbSAtari911- Events stored server-side in JSON
584231d0edbSAtari911- No client-side storage used
585231d0edbSAtari911- File permissions protect data
586231d0edbSAtari911
587231d0edbSAtari911### Outlook Sync
588231d0edbSAtari911- Credentials encrypted in config file
589231d0edbSAtari911- OAuth 2.0 authentication
590231d0edbSAtari911- Secrets never logged or displayed
591231d0edbSAtari911
592231d0edbSAtari911### Admin Access
593231d0edbSAtari911- Requires DokuWiki admin permissions
594231d0edbSAtari911- All actions logged
595231d0edbSAtari911- CSRF protection on forms
596231d0edbSAtari911
597231d0edbSAtari911---
598231d0edbSAtari911
599231d0edbSAtari911## �� Browser Support
600231d0edbSAtari911
601231d0edbSAtari911| Browser | Version | Status |
602231d0edbSAtari911|---------|---------|--------|
603231d0edbSAtari911| Chrome  | 90+     | ✅ Full |
604231d0edbSAtari911| Firefox | 88+     | ✅ Full |
605231d0edbSAtari911| Safari  | 14+     | ✅ Full |
606231d0edbSAtari911| Edge    | 90+     | ✅ Full |
607*5836612dSAtari911| Mobile  | Modern  | ⚠️ Limited (sidebar scrollable) |
608231d0edbSAtari911
609231d0edbSAtari911**Required Features**:
610231d0edbSAtari911- Flexbox
611231d0edbSAtari911- Fetch API
612231d0edbSAtari911- ES6 JavaScript
613231d0edbSAtari911- CSS Grid
614231d0edbSAtari911
615231d0edbSAtari911---
616231d0edbSAtari911
617231d0edbSAtari911## �� Support
618231d0edbSAtari911
619231d0edbSAtari911### Documentation
620*5836612dSAtari911- `CHANGELOG.md` - Full version history
621*5836612dSAtari911- `RELEASE_NOTES_v4.0.0.txt` - v4.0 details
622231d0edbSAtari911- `OUTLOOK_SYNC_SETUP.md` - Detailed sync guide
623231d0edbSAtari911- `QUICK_REFERENCE.md` - Syntax quick reference
624231d0edbSAtari911
625231d0edbSAtari911### Getting Help
626231d0edbSAtari9111. Check this README first
627231d0edbSAtari9112. Review CHANGELOG for recent changes
628231d0edbSAtari9113. Clear cache after updates
629231d0edbSAtari9114. Check browser console for errors
630231d0edbSAtari9115. Verify file permissions
631231d0edbSAtari911
632231d0edbSAtari911---
633231d0edbSAtari911
634231d0edbSAtari911## �� License
63519378907SAtari911
63619378907SAtari911GPL 2.0
63719378907SAtari911
638231d0edbSAtari911---
63919378907SAtari911
640*5836612dSAtari911## ✨ What's New in v4.0.0
641231d0edbSAtari911
642*5836612dSAtari911### Major Changes from v3.x
643*5836612dSAtari911- ✅ **Single color bars** (removed dual bars)
644*5836612dSAtari911- ✅ **All-day events first** (reversed sorting)
645*5836612dSAtari911- ✅ **Add Event dialog** in sidebar widget
646*5836612dSAtari911- ✅ **Perfect spacing** throughout
647*5836612dSAtari911- ✅ **Matrix Edition** official naming
648*5836612dSAtari911- ✅ **Production ready** - all bugs resolved
649231d0edbSAtari911
650*5836612dSAtari911### Breaking Changes
651*5836612dSAtari911- Dual color bars removed (now single bar only)
652*5836612dSAtari911- All-day events now appear FIRST (not last)
653*5836612dSAtari911- Update Plugin tab is now default (not Config)
654*5836612dSAtari911
655*5836612dSAtari911### Bug Fixes
656*5836612dSAtari911- Fixed color bars rendering (align-self:stretch)
657*5836612dSAtari911- Fixed tooltip function naming
658*5836612dSAtari911- Fixed weather display
659*5836612dSAtari911- Fixed HTML rendering in events
660*5836612dSAtari911- Fixed Add Event dialog
661*5836612dSAtari911- Fixed spacing throughout
662231d0edbSAtari911
663231d0edbSAtari911---
664231d0edbSAtari911
665231d0edbSAtari911## �� Quick Start Examples
666231d0edbSAtari911
667231d0edbSAtari911### Personal Calendar
668231d0edbSAtari911```
669231d0edbSAtari911====== My Schedule ======
670231d0edbSAtari911
671231d0edbSAtari911{{calendar sidebar namespace=personal}}
672231d0edbSAtari911
673*5836612dSAtari911**Quick Add**: Click the dark green "+ ADD EVENT" bar
674231d0edbSAtari911```
675231d0edbSAtari911
676231d0edbSAtari911### Team Dashboard
677231d0edbSAtari911```
678231d0edbSAtari911====== Development Team ======
679231d0edbSAtari911
680231d0edbSAtari911{{calendar sidebar namespace=team:dev}}
681231d0edbSAtari911
682231d0edbSAtari911**System Stats**: Hover over colored bars for details
683231d0edbSAtari911**Today's Events**: Automatically displayed below calendar
684231d0edbSAtari911```
685231d0edbSAtari911
686231d0edbSAtari911### Project Timeline
687231d0edbSAtari911```
688231d0edbSAtari911====== Project Alpha ======
689231d0edbSAtari911
690231d0edbSAtari911{{calendar namespace=projects:alpha year=2026 month=3}}
691231d0edbSAtari911
692231d0edbSAtari911**Milestones**:
693231d0edbSAtari911  * [[projects:alpha:kickoff|Mar 1 - Kickoff]]
694231d0edbSAtari911  * [[projects:alpha:design|Mar 15 - Design Review]]
695231d0edbSAtari911  * [[projects:alpha:launch|Mar 31 - Launch]]
696231d0edbSAtari911```
697231d0edbSAtari911
698231d0edbSAtari911---
699231d0edbSAtari911
700*5836612dSAtari911## �� Credits
701*5836612dSAtari911
702*5836612dSAtari911**Author**: atari911
703*5836612dSAtari911**Email**: atari911@gmail.com
704*5836612dSAtari911**Version**: 4.0.0
705*5836612dSAtari911**Date**: February 6, 2026
706*5836612dSAtari911
707*5836612dSAtari911**Special Features**:
708*5836612dSAtari911- Matrix theme design
709*5836612dSAtari911- Outlook synchronization
710*5836612dSAtari911- System monitoring integration
711*5836612dSAtari911- Real-time weather display
712*5836612dSAtari911- Advanced event conflict detection
713*5836612dSAtari911
714*5836612dSAtari911---
715*5836612dSAtari911
716*5836612dSAtari911## �� Final Notes
717*5836612dSAtari911
718*5836612dSAtari911**Version 4.0.0 - Matrix Edition** represents a complete, production-ready calendar plugin with:
719*5836612dSAtari911
720*5836612dSAtari911- ✨ Beautiful Matrix-themed design
721*5836612dSAtari911- �� Live system monitoring
722*5836612dSAtari911- ��️ Real-time weather
723*5836612dSAtari911- �� Advanced event management
724*5836612dSAtari911- �� Enterprise Outlook sync
725*5836612dSAtari911- �� Polished UI throughout
726*5836612dSAtari911
727*5836612dSAtari911**Install it, clear cache, and enjoy your Matrix calendar!** ��
728*5836612dSAtari911
729*5836612dSAtari911---
730*5836612dSAtari911
731*5836612dSAtari911**Happy Calendaring! ��️✨**
732