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