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