xref: /plugin/davcal/calendarserver.php (revision 185e2535914616e98630b0777145a3e6d5c8d81b)
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