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