PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ] ); // Create backend $authBackend = new Auth\Backend\Apache(); // Create authentication plugin $authPlugin = new Auth\Plugin($authBackend); // Create CalDAV backend $caldavBackend = new CalDAV\Backend\PDO($pdo); // Create CardDAV backend (optional, for future use) $carddavBackend = new CardDAV\Backend\PDO($pdo); // Create principal backend with auto-creation support $principalBackend = new AutoCreatePrincipalBackend($pdo); // Create directory tree $nodes = [ new CalDAV\Principal\Collection($principalBackend), new CalDAV\CalendarRoot($principalBackend, $caldavBackend), new CardDAV\AddressBookRoot($principalBackend, $carddavBackend), ]; // Create server $server = new DAV\Server($nodes); $server->setBaseUri($baseUri); // Add plugins $server->addPlugin($authPlugin); $server->addPlugin(new CalDAV\Plugin()); $server->addPlugin(new CardDAV\Plugin()); $server->addPlugin(new DAVACL\Plugin()); $server->addPlugin(new DAV\Browser\Plugin()); // Start server $server->start();