1<?php 2 3/** 4 * DokuWiki DAVCal PlugIn - DAV Calendar Server PlugIn. 5 * 6 * This is heavily based on SabreDAV and features a DokuWiki connector. 7 */ 8 9 // Initialize DokuWiki 10if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__).'/../../../'); 11if (!defined('DOKU_DISABLE_GZIP_OUTPUT')) define('DOKU_DISABLE_GZIP_OUTPUT', 1); 12require_once(DOKU_INC.'inc/init.php'); 13session_write_close(); //close session 14 15global $conf; 16 17$baseUri = DOKU_BASE.'lib/plugins/davcal/'.basename(__FILE__).'/'; 18$sqlFile = $conf['metadir'].'/davcal.sqlite3'; 19 20if(!file_exists($sqlFile)) 21{ 22 die('SQL File doesn\'t exist'); 23} 24 25if(!isset($conf['plugin']['davcal']['disable_sync']) || ($conf['plugin']['davcal']['disable_sync'] == 1)) 26{ 27 die('Synchronisation is disabled'); 28} 29 30/* Database */ 31$pdo = new PDO('sqlite:'.$sqlFile); 32$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 33 34//Mapping PHP errors to exceptions 35function exception_error_handler($errno, $errstr, $errfile, $errline) { 36 throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 37} 38//set_error_handler("exception_error_handler"); 39 40// Files we need 41require_once 'vendor/autoload.php'; 42require_once('authBackendDokuwiki.php'); 43require_once('principalBackendDokuwiki.php'); 44require_once('calendarBackendDokuwiki.php'); 45 46// Backends - our DokuWiki backends 47$authBackend = new DokuWikiSabreAuthBackend(); 48$calendarBackend = new DokuWikiSabreCalendarBackend($pdo); 49$principalBackend = new DokuWikiSabrePrincipalBackend(); 50 51// Directory structure 52$tree = [ 53 new Sabre\CalDAV\Principal\Collection($principalBackend), 54 new Sabre\CalDAV\CalendarRoot($principalBackend, $calendarBackend), 55]; 56 57$server = new Sabre\DAV\Server($tree); 58 59if (isset($baseUri)) 60 $server->setBaseUri($baseUri); 61 62/* Server Plugins */ 63$authPlugin = new Sabre\DAV\Auth\Plugin($authBackend); 64$server->addPlugin($authPlugin); 65 66$aclPlugin = new Sabre\DAVACL\Plugin(); 67$server->addPlugin($aclPlugin); 68 69/* CalDAV support */ 70$caldavPlugin = new Sabre\CalDAV\Plugin(); 71$server->addPlugin($caldavPlugin); 72 73/* Calendar subscription support */ 74//$server->addPlugin( 75// new Sabre\CalDAV\Subscriptions\Plugin() 76//); 77 78/* Calendar scheduling support */ 79//$server->addPlugin( 80// new Sabre\CalDAV\Schedule\Plugin() 81//); 82 83/* WebDAV-Sync plugin */ 84$server->addPlugin(new Sabre\DAV\Sync\Plugin()); 85 86// Support for html frontend 87$browser = new Sabre\DAV\Browser\Plugin(); 88$server->addPlugin($browser); 89 90// And off we go! 91$server->exec(); 92