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 25/* Database */ 26$pdo = new PDO('sqlite:'.$sqlFile); 27$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 28 29//Mapping PHP errors to exceptions 30function exception_error_handler($errno, $errstr, $errfile, $errline) { 31 throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 32} 33//set_error_handler("exception_error_handler"); 34 35// Files we need 36require_once 'vendor/autoload.php'; 37require_once('authBackendDokuwiki.php'); 38require_once('principalBackendDokuwiki.php'); 39require_once('calendarBackendDokuwiki.php'); 40 41// Backends - our DokuWiki backends 42$authBackend = new DokuWikiSabreAuthBackend(); 43$calendarBackend = new DokuWikiSabreCalendarBackend($pdo); 44$principalBackend = new DokuWikiSabrePrincipalBackend(); 45 46// Directory structure 47$tree = [ 48 new Sabre\CalDAV\Principal\Collection($principalBackend), 49 new Sabre\CalDAV\CalendarRoot($principalBackend, $calendarBackend), 50]; 51 52$server = new Sabre\DAV\Server($tree); 53 54if (isset($baseUri)) 55 $server->setBaseUri($baseUri); 56 57/* Server Plugins */ 58$authPlugin = new Sabre\DAV\Auth\Plugin($authBackend); 59$server->addPlugin($authPlugin); 60 61$aclPlugin = new Sabre\DAVACL\Plugin(); 62$server->addPlugin($aclPlugin); 63 64/* CalDAV support */ 65$caldavPlugin = new Sabre\CalDAV\Plugin(); 66$server->addPlugin($caldavPlugin); 67 68/* Calendar subscription support */ 69//$server->addPlugin( 70// new Sabre\CalDAV\Subscriptions\Plugin() 71//); 72 73/* Calendar scheduling support */ 74//$server->addPlugin( 75// new Sabre\CalDAV\Schedule\Plugin() 76//); 77 78/* WebDAV-Sync plugin */ 79$server->addPlugin(new Sabre\DAV\Sync\Plugin()); 80 81// Support for html frontend 82$browser = new Sabre\DAV\Browser\Plugin(); 83$server->addPlugin($browser); 84 85// And off we go! 86$server->exec(); 87