xref: /plugin/davcal/calendarserver.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1<?php
2
3if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__).'/../../../');
4if (!defined('DOKU_DISABLE_GZIP_OUTPUT')) define('DOKU_DISABLE_GZIP_OUTPUT', 1);
5require_once(DOKU_INC.'inc/init.php');
6session_write_close(); //close session
7
8require_once (DOKU_INC.'inc/fetch.functions.php');
9
10global $conf;
11
12$baseUri = DOKU_BASE.'lib/plugins/davcal/'.basename(__FILE__).'/';
13$sqlFile = $conf['metadir'].'/davcal.sqlite3';
14
15if(!file_exists($sqlFile))
16{
17    die('SQL File doesn\'t exist');
18}
19
20/*
21
22CalendarServer example
23
24This server features CalDAV support
25
26*/
27
28// settings
29// date_default_timezone_set('Canada/Eastern');
30
31// If you want to run the SabreDAV server in a custom location (using mod_rewrite for instance)
32// You can override the baseUri here.
33// $baseUri = '/';
34
35/* Database */
36$pdo = new PDO('sqlite:'.$sqlFile);
37$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
38
39//Mapping PHP errors to exceptions
40function exception_error_handler($errno, $errstr, $errfile, $errline) {
41    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
42}
43//set_error_handler("exception_error_handler");
44
45// Files we need
46require_once 'vendor/autoload.php';
47require_once('authBackendDokuwiki.php');
48require_once('principalBackendDokuwiki.php');
49require_once('calendarBackendDokuwiki.php');
50
51// Backends
52$authBackend = new DokuWikiSabreAuthBackend();
53$calendarBackend = new DokuWikiSabreCalendarBackend($pdo); //Sabre\CalDAV\Backend\PDO($pdo);
54$principalBackend = new DokuWikiSabrePrincipalBackend();
55
56// Directory structure
57$tree = [
58    new Sabre\CalDAV\Principal\Collection($principalBackend),
59    new Sabre\CalDAV\CalendarRoot($principalBackend, $calendarBackend),
60];
61
62$server = new Sabre\DAV\Server($tree);
63
64if (isset($baseUri))
65    $server->setBaseUri($baseUri);
66
67/* Server Plugins */
68$authPlugin = new Sabre\DAV\Auth\Plugin($authBackend);
69$server->addPlugin($authPlugin);
70
71$aclPlugin = new Sabre\DAVACL\Plugin();
72$server->addPlugin($aclPlugin);
73
74/* CalDAV support */
75$caldavPlugin = new Sabre\CalDAV\Plugin();
76$server->addPlugin($caldavPlugin);
77
78/* Calendar subscription support */
79$server->addPlugin(
80    new Sabre\CalDAV\Subscriptions\Plugin()
81);
82
83/* Calendar scheduling support */
84$server->addPlugin(
85    new Sabre\CalDAV\Schedule\Plugin()
86);
87
88/* WebDAV-Sync plugin */
89// This breaks the way we manage our calendars - sorry
90// $server->addPlugin(new Sabre\DAV\Sync\Plugin());
91
92// Support for html frontend
93$browser = new Sabre\DAV\Browser\Plugin();
94$server->addPlugin($browser);
95
96// And off we go!
97$server->exec();
98