xref: /plugin/calendar/README.md (revision 231d0edb9148222207862b7b998861794a543cdd)
1*231d0edbSAtari911# DokuWiki Calendar Plugin - Matrix Edition
219378907SAtari911
3*231d0edbSAtari911A powerful, feature-rich calendar plugin with **Matrix theme**, integrated event management, **Outlook sync**, system monitoring, and advanced features.
419378907SAtari911
5*231d0edbSAtari911**Current Version**: 3.10.6
619378907SAtari911
7*231d0edbSAtari911---
819378907SAtari911
9*231d0edbSAtari911## �� Key Features
1019378907SAtari911
11*231d0edbSAtari911### �� Calendar Views
12*231d0edbSAtari911- **Full Calendar** - Traditional month grid with event panel
13*231d0edbSAtari911- **Sidebar Widget** - Compact week view with live system stats
14*231d0edbSAtari911- **Event Panel** - Standalone event management
15*231d0edbSAtari911- **Event List** - Flexible date range displays
1619378907SAtari911
17*231d0edbSAtari911### �� Matrix Theme
18*231d0edbSAtari911- **Green Glow Effects** - Authentic Matrix-style aesthetics
19*231d0edbSAtari911- **Dual Color Bars** - Section color (4px) + Event color (3px) with 6px gap
20*231d0edbSAtari911- **Live Clock** - Updates every second
21*231d0edbSAtari911- **Weather Display** - Real-time temperature with geolocation
22*231d0edbSAtari911- **System Monitoring** - CPU load, memory usage with tooltips
2319378907SAtari911
24*231d0edbSAtari911### ⚡ Advanced Features
25*231d0edbSAtari911- **Outlook Sync** - Bi-directional sync with Microsoft Outlook calendars
26*231d0edbSAtari911- **Time Conflict Detection** - Automatic detection with warning badges (⚠)
27*231d0edbSAtari911- **DokuWiki Formatting** - Full support for **bold**, [[links]], //italic//, etc.
28*231d0edbSAtari911- **Event HTML Rendering** - Rich content in event titles and descriptions
29*231d0edbSAtari911- **Click-to-View** - Click week grid days to see all events
30*231d0edbSAtari911- **Quick Add** - Ultra-thin orange bar for instant event creation
31*231d0edbSAtari911
32*231d0edbSAtari911### �� Admin Interface
33*231d0edbSAtari911- **Update Plugin Tab** (default) - Version info, changelog, cache management
34*231d0edbSAtari911- **Outlook Sync Tab** - Configure Microsoft Azure integration
35*231d0edbSAtari911- **Manage Events Tab** - Browse, edit, delete, move events
36*231d0edbSAtari911
37*231d0edbSAtari911---
38*231d0edbSAtari911
39*231d0edbSAtari911## �� Installation
40*231d0edbSAtari911
41*231d0edbSAtari911### 1. Extract Plugin
4219378907SAtari911```bash
43*231d0edbSAtari911# Extract to DokuWiki plugins directory
44*231d0edbSAtari911cd /path/to/dokuwiki/lib/plugins/
45*231d0edbSAtari911unzip calendar-matrix-update-v3.10.6.zip
4619378907SAtari911```
4719378907SAtari911
48*231d0edbSAtari911### 2. Set Permissions
49*231d0edbSAtari911```bash
50*231d0edbSAtari911# Create data directories
51*231d0edbSAtari911mkdir -p data/meta/calendar
52*231d0edbSAtari911chmod -R 775 data/meta/calendar
53*231d0edbSAtari911chown -R www-data:www-data data/meta/calendar
54*231d0edbSAtari911```
5519378907SAtari911
56*231d0edbSAtari911### 3. Clear Cache
57*231d0edbSAtari9111. Go to **Admin → Calendar Management**
58*231d0edbSAtari9112. Update Plugin tab opens automatically
59*231d0edbSAtari9113. Click **��️ Clear Cache** button
60*231d0edbSAtari9114. Refresh your wiki page
6119378907SAtari911
62*231d0edbSAtari911---
63*231d0edbSAtari911
64*231d0edbSAtari911## �� Usage
65*231d0edbSAtari911
66*231d0edbSAtari911### Basic Calendar Syntax
67*231d0edbSAtari911
68*231d0edbSAtari911#### Full Calendar (Month View)
6919378907SAtari911```
7019378907SAtari911{{calendar}}
7119378907SAtari911```
72*231d0edbSAtari911Displays current month with event panel on the right.
7319378907SAtari911
74*231d0edbSAtari911#### Specific Month
7519378907SAtari911```
7619378907SAtari911{{calendar year=2026 month=6}}
7719378907SAtari911```
7819378907SAtari911
79*231d0edbSAtari911#### With Namespace
8019378907SAtari911```
8119378907SAtari911{{calendar namespace=team}}
8219378907SAtari911```
83*231d0edbSAtari911Separate calendars for different teams/projects.
8419378907SAtari911
85*231d0edbSAtari911### Sidebar Widget
8619378907SAtari911
87*231d0edbSAtari911#### Week View with System Stats
88*231d0edbSAtari911```
89*231d0edbSAtari911{{calendar sidebar}}
90*231d0edbSAtari911```
9119378907SAtari911
92*231d0edbSAtari911**Features**:
93*231d0edbSAtari911- Current week grid (7 days)
94*231d0edbSAtari911- Live clock (updates every second)
95*231d0edbSAtari911- Real-time weather with temperature
96*231d0edbSAtari911- System monitoring bars:
97*231d0edbSAtari911  - **Green bar**: 5-min CPU load average
98*231d0edbSAtari911  - **Purple bar**: Real-time CPU usage
99*231d0edbSAtari911  - **Orange bar**: Memory usage
100*231d0edbSAtari911- Hover tooltips with detailed stats
101*231d0edbSAtari911- Click days to view all events
102*231d0edbSAtari911- **+ ADD EVENT** bar for quick access
103*231d0edbSAtari911- Today/Tomorrow/Important event sections
10419378907SAtari911
105*231d0edbSAtari911#### With Namespace
106*231d0edbSAtari911```
107*231d0edbSAtari911{{calendar sidebar namespace=team}}
108*231d0edbSAtari911```
109*231d0edbSAtari911
110*231d0edbSAtari911### Event Panel Only
11119378907SAtari911```
11219378907SAtari911{{eventpanel}}
11319378907SAtari911```
114*231d0edbSAtari911320px wide panel - perfect for page sidebars.
11519378907SAtari911
116*231d0edbSAtari911### Event List
11719378907SAtari911```
11819378907SAtari911{{eventlist date=2026-01-22}}
11919378907SAtari911```
12019378907SAtari911
121*231d0edbSAtari911**Date Range**:
12219378907SAtari911```
12319378907SAtari911{{eventlist daterange=2026-01-01:2026-01-31}}
12419378907SAtari911```
12519378907SAtari911
126*231d0edbSAtari911**With Namespace**:
12719378907SAtari911```
12819378907SAtari911{{eventlist daterange=2026-01-01:2026-01-31 namespace=team}}
12919378907SAtari911```
13019378907SAtari911
131*231d0edbSAtari911---
13219378907SAtari911
133*231d0edbSAtari911## �� Creating Events
13419378907SAtari911
135*231d0edbSAtari911### Method 1: Sidebar Widget
136*231d0edbSAtari9111. Click the **+ ADD EVENT** bar (thin orange line below header)
137*231d0edbSAtari9112. Opens Admin → Manage Events tab
138*231d0edbSAtari9113. Fill in event details
13919378907SAtari9114. Click **Save**
14019378907SAtari911
141*231d0edbSAtari911### Method 2: Calendar Grid
142*231d0edbSAtari9111. Click **+ Add** button in event panel
143*231d0edbSAtari9112. Fill in event details
144*231d0edbSAtari9113. Click **Save**
14519378907SAtari911
146*231d0edbSAtari911### Method 3: Day Popup
147*231d0edbSAtari9111. Click any day in calendar grid
148*231d0edbSAtari9112. Click **+ Add** in popup
149*231d0edbSAtari9113. Fill in event details
15019378907SAtari9114. Click **Save**
15119378907SAtari911
152*231d0edbSAtari911### Event Fields
15319378907SAtari911
154*231d0edbSAtari911**Required**:
155*231d0edbSAtari911- **Date** - YYYY-MM-DD format (can be changed to move events)
156*231d0edbSAtari911- **Title** - Event name (supports **bold**, [[links]], //italic//)
15719378907SAtari911
158*231d0edbSAtari911**Optional**:
159*231d0edbSAtari911- **Time** - HH:MM format (24-hour)
160*231d0edbSAtari911  - Leave blank for all-day events
161*231d0edbSAtari911- **End Time** - HH:MM format (for duration)
162*231d0edbSAtari911- **Color** - Choose from color picker or enter hex code
163*231d0edbSAtari911- **Category** - For organization
164*231d0edbSAtari911- **Description** - Full DokuWiki formatting supported
16519378907SAtari911
166*231d0edbSAtari911### DokuWiki Formatting Support
16719378907SAtari911
168*231d0edbSAtari911Events support full DokuWiki syntax:
16919378907SAtari911
17019378907SAtari911```
171*231d0edbSAtari911**Meeting with [[team:bob|Bob]]**
17219378907SAtari911
173*231d0edbSAtari911Discuss:
174*231d0edbSAtari911  * Project timeline
175*231d0edbSAtari911  * //Budget review//
176*231d0edbSAtari911  * [[projects:alpha|Project Alpha]] status
17719378907SAtari911```
17819378907SAtari911
179*231d0edbSAtari911Renders with proper HTML formatting including clickable links.
18019378907SAtari911
181*231d0edbSAtari911---
182*231d0edbSAtari911
183*231d0edbSAtari911## �� Viewing Events
184*231d0edbSAtari911
185*231d0edbSAtari911### Sidebar Widget
186*231d0edbSAtari911
187*231d0edbSAtari911**Week Grid**:
188*231d0edbSAtari911- 7 days displayed (current week)
189*231d0edbSAtari911- Event count badges on days with events
190*231d0edbSAtari911- Click any day → View all events in expandable section
191*231d0edbSAtari911- Events sorted: All-day first, then by time
192*231d0edbSAtari911
193*231d0edbSAtari911**Today Section** (Orange):
194*231d0edbSAtari911- All events happening today
195*231d0edbSAtari911- Sorted: All-day events first, then chronologically
196*231d0edbSAtari911
197*231d0edbSAtari911**Tomorrow Section** (Green):
198*231d0edbSAtari911- All events happening tomorrow
199*231d0edbSAtari911- Same sorting as Today
200*231d0edbSAtari911
201*231d0edbSAtari911**Important Events Section** (Purple):
202*231d0edbSAtari911- Future events from "important" namespace
203*231d0edbSAtari911- Configurable in Outlook Sync settings
204*231d0edbSAtari911
205*231d0edbSAtari911### Clicked Day Events
206*231d0edbSAtari911
207*231d0edbSAtari911When you click a day in the week grid:
208*231d0edbSAtari911
209*231d0edbSAtari911**Display**:
21019378907SAtari911```
211*231d0edbSAtari911Monday, Feb 5
212*231d0edbSAtari911├─ [Blue][Green]  All Day - Project Deadline
213*231d0edbSAtari911├─ [Blue][Green]  8:00 AM - Morning Standup
214*231d0edbSAtari911├─ [Blue][Orange] 10:30 AM - Coffee with Bob ⚠
215*231d0edbSAtari911└─ [Blue][Purple] 2:00 PM - Team Meeting
21619378907SAtari911```
21719378907SAtari911
218*231d0edbSAtari911**Color Bars**:
219*231d0edbSAtari911- **First bar** (4px, blue) - Section color (selected day = blue)
220*231d0edbSAtari911- **Second bar** (3px) - Event's assigned color
221*231d0edbSAtari911- 6px gap between bars
22219378907SAtari911
223*231d0edbSAtari911**Conflict Badge**:
224*231d0edbSAtari911- **⚠** appears if event overlaps with another
225*231d0edbSAtari911- Orange warning triangle on the right
226*231d0edbSAtari911- Small (10px) and unobtrusive
227*231d0edbSAtari911
228*231d0edbSAtari911**Sorting Order**:
229*231d0edbSAtari9111. All-day events (no time) appear **first**
230*231d0edbSAtari9112. Timed events sorted chronologically (earliest → latest)
231*231d0edbSAtari911
232*231d0edbSAtari911---
233*231d0edbSAtari911
234*231d0edbSAtari911## ⚙️ Admin Interface
235*231d0edbSAtari911
236*231d0edbSAtari911### Access
237*231d0edbSAtari911Go to **Admin → Calendar Management**
238*231d0edbSAtari911
239*231d0edbSAtari911### Tabs
240*231d0edbSAtari911
241*231d0edbSAtari911#### 1. �� Update Plugin (Default Tab)
242*231d0edbSAtari911
243*231d0edbSAtari911**Features**:
244*231d0edbSAtari911- Current version and date
245*231d0edbSAtari911- Author information
246*231d0edbSAtari911- Installation path
247*231d0edbSAtari911- Permission check
248*231d0edbSAtari911- **��️ Clear Cache** button (prominent orange button)
249*231d0edbSAtari911- Recent changelog (last 10 versions)
250*231d0edbSAtari911
251*231d0edbSAtari911**Clear Cache**:
252*231d0edbSAtari911- Click orange button
253*231d0edbSAtari911- Confirm dialog
254*231d0edbSAtari911- Clears all DokuWiki cache
255*231d0edbSAtari911- **Use after every plugin update!**
256*231d0edbSAtari911- Success message displays on same tab
257*231d0edbSAtari911
258*231d0edbSAtari911#### 2. ⚙️ Outlook Sync
259*231d0edbSAtari911
260*231d0edbSAtari911**Azure Configuration**:
261*231d0edbSAtari911- Tenant ID
262*231d0edbSAtari911- Client ID
263*231d0edbSAtari911- Client Secret
264*231d0edbSAtari911- User Email
265*231d0edbSAtari911- Timezone
266*231d0edbSAtari911
267*231d0edbSAtari911**Sync Settings**:
268*231d0edbSAtari911- Default category
269*231d0edbSAtari911- Reminder minutes
270*231d0edbSAtari911- Sync completed tasks (checkbox)
271*231d0edbSAtari911- Delete Outlook events (checkbox)
272*231d0edbSAtari911- Important namespaces (comma-separated)
273*231d0edbSAtari911
274*231d0edbSAtari911**Namespace Selection**:
275*231d0edbSAtari911- Sync all namespaces (checkbox)
276*231d0edbSAtari911- Or select specific namespaces
277*231d0edbSAtari911
278*231d0edbSAtari911**Category Mapping**:
279*231d0edbSAtari911- Map DokuWiki colors to Outlook categories
280*231d0edbSAtari911- Visual color picker
281*231d0edbSAtari911- Custom mappings
282*231d0edbSAtari911
283*231d0edbSAtari911**Buttons**:
284*231d0edbSAtari911- **�� Export Config** - Download encrypted config
285*231d0edbSAtari911- **�� Import Config** - Upload encrypted config
286*231d0edbSAtari911- **Save Configuration**
287*231d0edbSAtari911
288*231d0edbSAtari911#### 3. �� Manage Events
289*231d0edbSAtari911
290*231d0edbSAtari911**Features**:
291*231d0edbSAtari911- Browse all events across all namespaces
292*231d0edbSAtari911- Filter by namespace
293*231d0edbSAtari911- Search events
294*231d0edbSAtari911- Edit event details
295*231d0edbSAtari911- Delete events
296*231d0edbSAtari911- Move events between dates/namespaces
297*231d0edbSAtari911- Bulk operations
298*231d0edbSAtari911
299*231d0edbSAtari911---
300*231d0edbSAtari911
301*231d0edbSAtari911## �� Outlook Sync Setup
302*231d0edbSAtari911
303*231d0edbSAtari911### Prerequisites
304*231d0edbSAtari9111. Microsoft Azure account
305*231d0edbSAtari9112. Registered application in Azure Portal
306*231d0edbSAtari9113. Calendar permissions granted
307*231d0edbSAtari911
308*231d0edbSAtari911### Configuration Steps
309*231d0edbSAtari911
310*231d0edbSAtari9111. **Register Azure App**:
311*231d0edbSAtari911   - Go to https://portal.azure.com
312*231d0edbSAtari911   - Navigate to App Registrations
313*231d0edbSAtari911   - Create new registration
314*231d0edbSAtari911   - Note: Tenant ID, Client ID
315*231d0edbSAtari911
316*231d0edbSAtari9112. **Create Client Secret**:
317*231d0edbSAtari911   - In your app, go to Certificates & secrets
318*231d0edbSAtari911   - Create new client secret
319*231d0edbSAtari911   - Copy the secret value (shown once!)
320*231d0edbSAtari911
321*231d0edbSAtari9113. **Configure Permissions**:
322*231d0edbSAtari911   - Add API permissions:
323*231d0edbSAtari911     - Calendars.ReadWrite
324*231d0edbSAtari911     - Calendars.ReadWrite.Shared
325*231d0edbSAtari911   - Grant admin consent
326*231d0edbSAtari911
327*231d0edbSAtari9114. **Enter in DokuWiki**:
328*231d0edbSAtari911   - Admin → Calendar Management → Outlook Sync
329*231d0edbSAtari911   - Enter Tenant ID, Client ID, Client Secret
330*231d0edbSAtari911   - Enter your email address
331*231d0edbSAtari911   - Select timezone
332*231d0edbSAtari911   - Configure sync settings
333*231d0edbSAtari911   - Click **Save Configuration**
334*231d0edbSAtari911
335*231d0edbSAtari9115. **Test Sync**:
336*231d0edbSAtari911   - Create event in DokuWiki
337*231d0edbSAtari911   - Run sync (cron job or manual)
338*231d0edbSAtari911   - Check Outlook calendar
339*231d0edbSAtari911   - Create event in Outlook
340*231d0edbSAtari911   - Run sync
341*231d0edbSAtari911   - Check DokuWiki calendar
342*231d0edbSAtari911
343*231d0edbSAtari911### Sync Behavior
344*231d0edbSAtari911
345*231d0edbSAtari911**DokuWiki → Outlook**:
346*231d0edbSAtari911- New events created in Outlook
347*231d0edbSAtari911- Updates sync to existing events
348*231d0edbSAtari911- Deletes sync if "Delete Outlook events" enabled
349*231d0edbSAtari911
350*231d0edbSAtari911**Outlook → DokuWiki**:
351*231d0edbSAtari911- New events created in DokuWiki
352*231d0edbSAtari911- Updates sync to existing events
353*231d0edbSAtari911- Category colors mapped to DokuWiki colors
354*231d0edbSAtari911
355*231d0edbSAtari911**Conflict Resolution**:
356*231d0edbSAtari911- Last-write-wins
357*231d0edbSAtari911- Sync timestamp tracked
358*231d0edbSAtari911
359*231d0edbSAtari911---
360*231d0edbSAtari911
361*231d0edbSAtari911## �� Color Scheme
362*231d0edbSAtari911
363*231d0edbSAtari911### Section Colors (Left Bar, 4px)
364*231d0edbSAtari911
365*231d0edbSAtari911- **Today**: Orange `#ff9800`
366*231d0edbSAtari911- **Tomorrow**: Green `#4caf50`
367*231d0edbSAtari911- **Important Events**: Purple `#9b59b6`
368*231d0edbSAtari911- **Selected Day**: Blue `#3498db`
369*231d0edbSAtari911
370*231d0edbSAtari911### Event Colors (Right Bar, 3px)
371*231d0edbSAtari911
372*231d0edbSAtari911- **Default**: Matrix Green `#00cc07`
373*231d0edbSAtari911- **Custom**: User-assigned color
374*231d0edbSAtari911- **Gap**: 6px between section and event bars
375*231d0edbSAtari911
376*231d0edbSAtari911### System Bars
377*231d0edbSAtari911
378*231d0edbSAtari911- **Green**: 5-min CPU load average
379*231d0edbSAtari911- **Purple**: Real-time CPU usage (5-sec average)
380*231d0edbSAtari911- **Orange**: Real-time memory usage
381*231d0edbSAtari911
382*231d0edbSAtari911### UI Elements
383*231d0edbSAtari911
384*231d0edbSAtari911- **Add Event Bar**: Orange `#ff9800` (6px height)
385*231d0edbSAtari911- **Conflict Badge**: Orange `#ff9800` (⚠ symbol)
386*231d0edbSAtari911- **Clear Cache Button**: Orange `#ff9800`
387*231d0edbSAtari911
388*231d0edbSAtari911---
389*231d0edbSAtari911
390*231d0edbSAtari911## �� System Monitoring
391*231d0edbSAtari911
392*231d0edbSAtari911### Sidebar Widget Stats
393*231d0edbSAtari911
394*231d0edbSAtari911**Green Bar Tooltip** (5-min CPU Load):
39519378907SAtari911```
396*231d0edbSAtari911CPU Load Average
397*231d0edbSAtari9111-min: 2.45
398*231d0edbSAtari9115-min: 2.12
399*231d0edbSAtari91115-min: 1.98
400*231d0edbSAtari911Uptime: 5 days, 3 hours
40119378907SAtari911```
40219378907SAtari911
403*231d0edbSAtari911**Purple Bar Tooltip** (Real-time CPU):
40419378907SAtari911```
405*231d0edbSAtari911CPU Load (Short-term)
406*231d0edbSAtari911Current: 25.3%
40719378907SAtari911
408*231d0edbSAtari911Top Processes:
409*231d0edbSAtari9111. apache2 (8.2%)
410*231d0edbSAtari9112. mysql (6.1%)
411*231d0edbSAtari9113. php-fpm (4.5%)
41219378907SAtari911```
41319378907SAtari911
414*231d0edbSAtari911**Orange Bar Tooltip** (Memory):
41519378907SAtari911```
416*231d0edbSAtari911Memory Usage
417*231d0edbSAtari911Total: 16.0 GB
418*231d0edbSAtari911Used: 8.2 GB (51%)
419*231d0edbSAtari911Available: 7.8 GB
42019378907SAtari911
421*231d0edbSAtari911Top Processes:
422*231d0edbSAtari9111. mysql (2.1 GB)
423*231d0edbSAtari9112. apache2 (1.3 GB)
424*231d0edbSAtari9113. php-fpm (845 MB)
42519378907SAtari911```
42619378907SAtari911
427*231d0edbSAtari911**Update Frequency**:
428*231d0edbSAtari911- Stats: Every 2 seconds
429*231d0edbSAtari911- Weather: Every 10 minutes
430*231d0edbSAtari911- Clock: Every second
43119378907SAtari911
432*231d0edbSAtari911---
43319378907SAtari911
434*231d0edbSAtari911## �� File Structure
435*231d0edbSAtari911
436*231d0edbSAtari911### Event Storage
43719378907SAtari911```
43819378907SAtari911data/meta/calendar/2026-01.json
43919378907SAtari911data/meta/calendar/2026-02.json
44019378907SAtari911data/meta/[namespace]/calendar/2026-01.json
441*231d0edbSAtari911data/meta/team/calendar/2026-03.json
44219378907SAtari911```
44319378907SAtari911
444*231d0edbSAtari911### Event JSON Format
44519378907SAtari911```json
44619378907SAtari911{
447*231d0edbSAtari911  "2026-02-06": [
44819378907SAtari911    {
449*231d0edbSAtari911      "id": "evt_abc123",
450*231d0edbSAtari911      "title": "**Team Meeting** with [[team:bob|Bob]]",
451*231d0edbSAtari911      "title_html": "<strong>Team Meeting</strong> with <a href=\"...\">Bob</a>",
45219378907SAtari911      "time": "14:00",
453*231d0edbSAtari911      "end_time": "15:00",
454*231d0edbSAtari911      "description": "Discuss //project timeline//",
455*231d0edbSAtari911      "description_html": "Discuss <em>project timeline</em>",
45619378907SAtari911      "color": "#3498db",
457*231d0edbSAtari911      "category": "Meetings",
458*231d0edbSAtari911      "namespace": "team",
459*231d0edbSAtari911      "created": "2026-02-05 10:00:00",
460*231d0edbSAtari911      "modified": "2026-02-05 10:30:00",
461*231d0edbSAtari911      "conflict": true
46219378907SAtari911    }
46319378907SAtari911  ]
46419378907SAtari911}
46519378907SAtari911```
46619378907SAtari911
467*231d0edbSAtari911### Fields Explained
46819378907SAtari911
469*231d0edbSAtari911- **id**: Unique identifier (auto-generated)
470*231d0edbSAtari911- **title**: Raw DokuWiki syntax
471*231d0edbSAtari911- **title_html**: Pre-rendered HTML for JavaScript display
472*231d0edbSAtari911- **time**: Start time (HH:MM, 24-hour)
473*231d0edbSAtari911- **end_time**: End time (optional)
474*231d0edbSAtari911- **description**: Raw DokuWiki syntax
475*231d0edbSAtari911- **description_html**: Pre-rendered HTML
476*231d0edbSAtari911- **color**: Hex color code
477*231d0edbSAtari911- **category**: Category name
478*231d0edbSAtari911- **namespace**: Calendar namespace
479*231d0edbSAtari911- **created**: Timestamp (YYYY-MM-DD HH:MM:SS)
480*231d0edbSAtari911- **modified**: Last modified timestamp
481*231d0edbSAtari911- **conflict**: Boolean - time conflict detected
48219378907SAtari911
483*231d0edbSAtari911---
48419378907SAtari911
485*231d0edbSAtari911## ��️ Troubleshooting
48619378907SAtari911
487*231d0edbSAtari911### Events Not Displaying
48819378907SAtari911
489*231d0edbSAtari911**Check 1**: Clear cache
490*231d0edbSAtari911- Admin → Calendar Management
491*231d0edbSAtari911- Click **��️ Clear Cache**
492*231d0edbSAtari911- Confirm and refresh page
49319378907SAtari911
494*231d0edbSAtari911**Check 2**: File permissions
495*231d0edbSAtari911```bash
496*231d0edbSAtari911ls -la data/meta/calendar/
497*231d0edbSAtari911# Should show www-data:www-data ownership
498*231d0edbSAtari911# Should show 775 permissions
499*231d0edbSAtari911
500*231d0edbSAtari911# Fix if needed:
501*231d0edbSAtari911chown -R www-data:www-data data/meta/calendar/
502*231d0edbSAtari911chmod -R 775 data/meta/calendar/
50319378907SAtari911```
50419378907SAtari911
505*231d0edbSAtari911**Check 3**: Check JSON validity
506*231d0edbSAtari911```bash
507*231d0edbSAtari911cat data/meta/calendar/2026-02.json
508*231d0edbSAtari911# Should be valid JSON
509*231d0edbSAtari911# Check for syntax errors
510*231d0edbSAtari911```
51119378907SAtari911
512*231d0edbSAtari911### Color Bars Not Showing
51319378907SAtari911
514*231d0edbSAtari911**Symptom**: No colored bars in clicked day events
51519378907SAtari911
516*231d0edbSAtari911**Solution**:
517*231d0edbSAtari9111. Clear browser cache (Ctrl+Shift+R)
518*231d0edbSAtari9112. Clear DokuWiki cache (admin button)
519*231d0edbSAtari9113. Check browser console for errors
520*231d0edbSAtari9114. Verify plugin version is 3.10.6+
52119378907SAtari911
522*231d0edbSAtari911### Tooltips Not Working
52319378907SAtari911
524*231d0edbSAtari911**Symptom**: Hover over system bars shows no tooltip
525*231d0edbSAtari911
526*231d0edbSAtari911**Solution**:
527*231d0edbSAtari9111. Verify JavaScript is enabled
528*231d0edbSAtari9112. Clear cache
529*231d0edbSAtari9113. Check console for "showTooltip_sidebar_* is not defined"
530*231d0edbSAtari9114. Update to version 3.10.6+
531*231d0edbSAtari911
532*231d0edbSAtari911### Weather Shows "--°"
533*231d0edbSAtari911
534*231d0edbSAtari911**Solution**:
535*231d0edbSAtari9111. Clear cache
536*231d0edbSAtari9112. Allow geolocation in browser (or uses Irvine, CA default)
537*231d0edbSAtari9113. Wait 10 seconds for initial update
538*231d0edbSAtari9114. Check console for weather API errors
539*231d0edbSAtari911
540*231d0edbSAtari911### Outlook Sync Not Working
541*231d0edbSAtari911
542*231d0edbSAtari911**Check 1**: Azure credentials
543*231d0edbSAtari911- Verify Tenant ID, Client ID, Client Secret
544*231d0edbSAtari911- Check app permissions in Azure Portal
545*231d0edbSAtari911- Ensure admin consent granted
546*231d0edbSAtari911
547*231d0edbSAtari911**Check 2**: Sync logs
548*231d0edbSAtari911- Check `/lib/plugins/calendar/sync.log`
549*231d0edbSAtari911- Look for authentication errors
550*231d0edbSAtari911- Verify API call responses
551*231d0edbSAtari911
552*231d0edbSAtari911**Check 3**: Cron job
553*231d0edbSAtari911```bash
554*231d0edbSAtari911# Check cron is running
555*231d0edbSAtari911crontab -l
556*231d0edbSAtari911
557*231d0edbSAtari911# Should show:
558*231d0edbSAtari911*/15 * * * * /usr/bin/php /path/to/dokuwiki/lib/plugins/calendar/sync_outlook.php
559*231d0edbSAtari911```
560*231d0edbSAtari911
561*231d0edbSAtari911### HTML Formatting Not Rendering
562*231d0edbSAtari911
563*231d0edbSAtari911**Symptom**: Event shows `**bold**` instead of **bold**
564*231d0edbSAtari911
565*231d0edbSAtari911**Solution**:
566*231d0edbSAtari9111. Clear cache (critical!)
567*231d0edbSAtari9112. Verify DokuWiki parser is working
568*231d0edbSAtari9113. Check `title_html` and `description_html` fields exist in JSON
569*231d0edbSAtari9114. Update to version 3.10.2+
570*231d0edbSAtari911
571*231d0edbSAtari911---
572*231d0edbSAtari911
573*231d0edbSAtari911## �� Performance
574*231d0edbSAtari911
575*231d0edbSAtari911### Optimizations
576*231d0edbSAtari911
577*231d0edbSAtari911- **Event Caching**: JSON files cached per month
578*231d0edbSAtari911- **Lazy Loading**: Events loaded on demand
579*231d0edbSAtari911- **AJAX Updates**: No full page reloads
580*231d0edbSAtari911- **Minimal DOM**: Only visible events rendered
581*231d0edbSAtari911
582*231d0edbSAtari911### Recommended Limits
583*231d0edbSAtari911
584*231d0edbSAtari911- **Events per month**: < 500 (no performance issues)
585*231d0edbSAtari911- **Events per day**: < 50 (UI remains clean)
586*231d0edbSAtari911- **Namespaces**: Unlimited (loaded separately)
587*231d0edbSAtari911- **Event description**: < 500 characters (for readability)
588*231d0edbSAtari911
589*231d0edbSAtari911---
590*231d0edbSAtari911
591*231d0edbSAtari911## �� Security
592*231d0edbSAtari911
593*231d0edbSAtari911### Data Storage
594*231d0edbSAtari911- Events stored server-side in JSON
595*231d0edbSAtari911- No client-side storage used
596*231d0edbSAtari911- File permissions protect data
597*231d0edbSAtari911
598*231d0edbSAtari911### Outlook Sync
599*231d0edbSAtari911- Credentials encrypted in config file
600*231d0edbSAtari911- OAuth 2.0 authentication
601*231d0edbSAtari911- Secrets never logged or displayed
602*231d0edbSAtari911
603*231d0edbSAtari911### Admin Access
604*231d0edbSAtari911- Requires DokuWiki admin permissions
605*231d0edbSAtari911- All actions logged
606*231d0edbSAtari911- CSRF protection on forms
607*231d0edbSAtari911
608*231d0edbSAtari911---
609*231d0edbSAtari911
610*231d0edbSAtari911## �� Browser Support
611*231d0edbSAtari911
612*231d0edbSAtari911| Browser | Version | Status |
613*231d0edbSAtari911|---------|---------|--------|
614*231d0edbSAtari911| Chrome  | 90+     | ✅ Full |
615*231d0edbSAtari911| Firefox | 88+     | ✅ Full |
616*231d0edbSAtari911| Safari  | 14+     | ✅ Full |
617*231d0edbSAtari911| Edge    | 90+     | ✅ Full |
618*231d0edbSAtari911| Mobile  | Modern  | ⚠️ Limited (sidebar may need scrolling) |
619*231d0edbSAtari911
620*231d0edbSAtari911**Required Features**:
621*231d0edbSAtari911- Flexbox
622*231d0edbSAtari911- Fetch API
623*231d0edbSAtari911- ES6 JavaScript
624*231d0edbSAtari911- CSS Grid
625*231d0edbSAtari911
626*231d0edbSAtari911---
627*231d0edbSAtari911
628*231d0edbSAtari911## �� Support
629*231d0edbSAtari911
630*231d0edbSAtari911### Documentation
631*231d0edbSAtari911- `CHANGELOG.md` - Version history
632*231d0edbSAtari911- `OUTLOOK_SYNC_SETUP.md` - Detailed sync guide
633*231d0edbSAtari911- `QUICK_REFERENCE.md` - Syntax quick reference
634*231d0edbSAtari911
635*231d0edbSAtari911### Getting Help
636*231d0edbSAtari9111. Check this README first
637*231d0edbSAtari9112. Review CHANGELOG for recent changes
638*231d0edbSAtari9113. Clear cache after updates
639*231d0edbSAtari9114. Check browser console for errors
640*231d0edbSAtari9115. Verify file permissions
641*231d0edbSAtari911
642*231d0edbSAtari911---
643*231d0edbSAtari911
644*231d0edbSAtari911## �� License
64519378907SAtari911
64619378907SAtari911GPL 2.0
64719378907SAtari911
648*231d0edbSAtari911---
64919378907SAtari911
650*231d0edbSAtari911## ✨ Credits
651*231d0edbSAtari911
652*231d0edbSAtari911**Author**: atari911
653*231d0edbSAtari911**Email**: atari911@gmail.com
654*231d0edbSAtari911**Version**: 3.10.6
655*231d0edbSAtari911**Date**: February 6, 2026
656*231d0edbSAtari911
657*231d0edbSAtari911**Special Features**:
658*231d0edbSAtari911- Matrix theme design
659*231d0edbSAtari911- Outlook synchronization
660*231d0edbSAtari911- System monitoring integration
661*231d0edbSAtari911- Real-time weather display
662*231d0edbSAtari911- Advanced event conflict detection
663*231d0edbSAtari911
664*231d0edbSAtari911---
665*231d0edbSAtari911
666*231d0edbSAtari911## �� Quick Start Examples
667*231d0edbSAtari911
668*231d0edbSAtari911### Personal Calendar
669*231d0edbSAtari911```
670*231d0edbSAtari911====== My Schedule ======
671*231d0edbSAtari911
672*231d0edbSAtari911{{calendar sidebar namespace=personal}}
673*231d0edbSAtari911
674*231d0edbSAtari911**Quick Add**: Click the orange "+ ADD EVENT" bar
675*231d0edbSAtari911```
676*231d0edbSAtari911
677*231d0edbSAtari911### Team Dashboard
678*231d0edbSAtari911```
679*231d0edbSAtari911====== Development Team ======
680*231d0edbSAtari911
681*231d0edbSAtari911{{calendar sidebar namespace=team:dev}}
682*231d0edbSAtari911
683*231d0edbSAtari911**System Stats**: Hover over colored bars for details
684*231d0edbSAtari911**Today's Events**: Automatically displayed below calendar
685*231d0edbSAtari911```
686*231d0edbSAtari911
687*231d0edbSAtari911### Project Timeline
688*231d0edbSAtari911```
689*231d0edbSAtari911====== Project Alpha ======
690*231d0edbSAtari911
691*231d0edbSAtari911{{calendar namespace=projects:alpha year=2026 month=3}}
692*231d0edbSAtari911
693*231d0edbSAtari911**Milestones**:
694*231d0edbSAtari911  * [[projects:alpha:kickoff|Mar 1 - Kickoff]]
695*231d0edbSAtari911  * [[projects:alpha:design|Mar 15 - Design Review]]
696*231d0edbSAtari911  * [[projects:alpha:launch|Mar 31 - Launch]]
697*231d0edbSAtari911```
698*231d0edbSAtari911
699*231d0edbSAtari911---
700*231d0edbSAtari911
701*231d0edbSAtari911**�� Enjoy your Matrix-themed calendar with full Outlook integration!**
702