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$hlp = null; 18$hlp =& plugin_load('helper', 'davcal'); 19 20if(is_null($hlp)) 21{ 22 die('Error loading helper plugin'); 23} 24 25$baseUri = DOKU_BASE.'lib/plugins/davcal/'.basename(__FILE__).'/'; 26$sqlFile = $conf['metadir'].'/davcal.sqlite3'; 27 28if(!file_exists($sqlFile)) 29{ 30 die('SQL File doesn\'t exist'); 31} 32 33if($hlp->getConfig('disable_sync') === 1) 34{ 35 die('Synchronisation is disabled'); 36} 37 38/* Database */ 39$pdo = new PDO('sqlite:'.$sqlFile); 40$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 41 42//Mapping PHP errors to exceptions 43function exception_error_handler($errno, $errstr, $errfile, $errline) { 44 throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 45} 46//set_error_handler("exception_error_handler"); 47 48// Files we need 49require_once 'vendor/autoload.php'; 50require_once('authBackendDokuwiki.php'); 51require_once('principalBackendDokuwiki.php'); 52require_once('calendarBackendDokuwiki.php'); 53 54// Backends - our DokuWiki backends 55$authBackend = new DokuWikiSabreAuthBackend(); 56$calendarBackend = new DokuWikiSabreCalendarBackend($pdo); 57$principalBackend = new DokuWikiSabrePrincipalBackend(); 58 59// Directory structure 60$tree = [ 61 new Sabre\CalDAV\Principal\Collection($principalBackend), 62 new Sabre\CalDAV\CalendarRoot($principalBackend, $calendarBackend), 63]; 64 65$server = new Sabre\DAV\Server($tree); 66 67if (isset($baseUri)) 68 $server->setBaseUri($baseUri); 69 70/* Server Plugins */ 71$authPlugin = new Sabre\DAV\Auth\Plugin($authBackend); 72$server->addPlugin($authPlugin); 73 74$aclPlugin = new Sabre\DAVACL\Plugin(); 75$server->addPlugin($aclPlugin); 76 77/* CalDAV support */ 78$caldavPlugin = new Sabre\CalDAV\Plugin(); 79$server->addPlugin($caldavPlugin); 80 81/* Calendar subscription support */ 82//$server->addPlugin( 83// new Sabre\CalDAV\Subscriptions\Plugin() 84//); 85 86/* Calendar scheduling support */ 87//$server->addPlugin( 88// new Sabre\CalDAV\Schedule\Plugin() 89//); 90 91/* WebDAV-Sync plugin */ 92$server->addPlugin(new Sabre\DAV\Sync\Plugin()); 93 94// Support for html frontend 95$browser = new Sabre\DAV\Browser\Plugin(); 96$server->addPlugin($browser); 97 98// And off we go! 99$server->exec(); 100