included sabredav version 3.2.2
authorMario Matzulla <mario@matzullas.de>
Sun, 29 Oct 2017 14:31:46 +0000 (15:31 +0100)
committerMario Matzulla <mario@matzullas.de>
Sun, 29 Oct 2017 14:31:46 +0000 (15:31 +0100)
621 files changed:
CHANGELOG.md [new file with mode: 0644]
Documentation/Changelog/1-1-0.rst [new file with mode: 0644]
LICENSE [changed mode: 0755->0644]
README.md [new file with mode: 0644]
bin/generate_vcards [new file with mode: 0755]
bin/naturalselection [new file with mode: 0755]
bin/sabredav [new file with mode: 0755]
bin/vobject [new file with mode: 0755]
caldav.php
ext_conf_template.txt
ext_emconf.php
lib/ChangeLog [deleted file]
lib/Sabre.includes.php [deleted file]
lib/Sabre/CalDAV/Backend/Abstract.php [deleted file]
lib/Sabre/CalDAV/Backend/PDO.php [deleted file]
lib/Sabre/CalDAV/Backend/TYPO3.php [deleted file]
lib/Sabre/CalDAV/Calendar.php [deleted file]
lib/Sabre/CalDAV/CalendarObject.php [deleted file]
lib/Sabre/CalDAV/CalendarRootNode.php [deleted file]
lib/Sabre/CalDAV/Exception/InvalidICalendarObject.php [deleted file]
lib/Sabre/CalDAV/ICSExportPlugin.php [deleted file]
lib/Sabre/CalDAV/ICalendar.php [deleted file]
lib/Sabre/CalDAV/ICalendarObject.php [deleted file]
lib/Sabre/CalDAV/ICalendarUtil.php [deleted file]
lib/Sabre/CalDAV/Plugin.php [deleted file]
lib/Sabre/CalDAV/Principal/Collection.php [deleted file]
lib/Sabre/CalDAV/Principal/ProxyRead.php [deleted file]
lib/Sabre/CalDAV/Principal/ProxyWrite.php [deleted file]
lib/Sabre/CalDAV/Principal/User.php [deleted file]
lib/Sabre/CalDAV/Property/SupportedCalendarComponentSet.php [deleted file]
lib/Sabre/CalDAV/Property/SupportedCalendarData.php [deleted file]
lib/Sabre/CalDAV/Property/SupportedCollationSet.php [deleted file]
lib/Sabre/CalDAV/Server.php [deleted file]
lib/Sabre/CalDAV/TYPO3Server.php [deleted file]
lib/Sabre/CalDAV/UserCalendars.php [deleted file]
lib/Sabre/CalDAV/Version.php [deleted file]
lib/Sabre/CalDAV/XMLUtil.php [deleted file]
lib/Sabre/CardDAV/AddressBook.php [deleted file]
lib/Sabre/CardDAV/AddressBookQueryParser.php [deleted file]
lib/Sabre/CardDAV/AddressBookRoot.php [deleted file]
lib/Sabre/CardDAV/Backend/Abstract.php [deleted file]
lib/Sabre/CardDAV/Backend/PDO.php [deleted file]
lib/Sabre/CardDAV/Card.php [deleted file]
lib/Sabre/CardDAV/IAddressBook.php [deleted file]
lib/Sabre/CardDAV/ICard.php [deleted file]
lib/Sabre/CardDAV/IDirectory.php [deleted file]
lib/Sabre/CardDAV/Plugin.php [deleted file]
lib/Sabre/CardDAV/Property/SupportedAddressData.php [deleted file]
lib/Sabre/CardDAV/UserAddressBooks.php [deleted file]
lib/Sabre/CardDAV/Version.php [deleted file]
lib/Sabre/DAV/Auth/Backend/AbstractBasic.php [deleted file]
lib/Sabre/DAV/Auth/Backend/AbstractDigest.php [deleted file]
lib/Sabre/DAV/Auth/Backend/Apache.php [deleted file]
lib/Sabre/DAV/Auth/Backend/File.php [deleted file]
lib/Sabre/DAV/Auth/Backend/PDO.php [deleted file]
lib/Sabre/DAV/Auth/Backend/TYPO3.php [deleted file]
lib/Sabre/DAV/Auth/IBackend.php [deleted file]
lib/Sabre/DAV/Auth/Plugin.php [deleted file]
lib/Sabre/DAV/Browser/GuessContentType.php [deleted file]
lib/Sabre/DAV/Browser/MapGetToPropFind.php [deleted file]
lib/Sabre/DAV/Browser/Plugin.php [deleted file]
lib/Sabre/DAV/Client.php [deleted file]
lib/Sabre/DAV/Collection.php [deleted file]
lib/Sabre/DAV/Directory.php [deleted file]
lib/Sabre/DAV/Exception.php [deleted file]
lib/Sabre/DAV/Exception/BadRequest.php [deleted file]
lib/Sabre/DAV/Exception/Conflict.php [deleted file]
lib/Sabre/DAV/Exception/ConflictingLock.php [deleted file]
lib/Sabre/DAV/Exception/FileNotFound.php [deleted file]
lib/Sabre/DAV/Exception/Forbidden.php [deleted file]
lib/Sabre/DAV/Exception/InsufficientStorage.php [deleted file]
lib/Sabre/DAV/Exception/InvalidResourceType.php [deleted file]
lib/Sabre/DAV/Exception/LockTokenMatchesRequestUri.php [deleted file]
lib/Sabre/DAV/Exception/Locked.php [deleted file]
lib/Sabre/DAV/Exception/MethodNotAllowed.php [deleted file]
lib/Sabre/DAV/Exception/NotAuthenticated.php [deleted file]
lib/Sabre/DAV/Exception/NotImplemented.php [deleted file]
lib/Sabre/DAV/Exception/PreconditionFailed.php [deleted file]
lib/Sabre/DAV/Exception/ReportNotImplemented.php [deleted file]
lib/Sabre/DAV/Exception/RequestedRangeNotSatisfiable.php [deleted file]
lib/Sabre/DAV/Exception/UnsupportedMediaType.php [deleted file]
lib/Sabre/DAV/FS/Directory.php [deleted file]
lib/Sabre/DAV/FS/File.php [deleted file]
lib/Sabre/DAV/FS/Node.php [deleted file]
lib/Sabre/DAV/FSExt/Directory.php [deleted file]
lib/Sabre/DAV/FSExt/File.php [deleted file]
lib/Sabre/DAV/FSExt/Node.php [deleted file]
lib/Sabre/DAV/File.php [deleted file]
lib/Sabre/DAV/ICollection.php [deleted file]
lib/Sabre/DAV/IExtendedCollection.php [deleted file]
lib/Sabre/DAV/IFile.php [deleted file]
lib/Sabre/DAV/ILockable.php [deleted file]
lib/Sabre/DAV/INode.php [deleted file]
lib/Sabre/DAV/IProperties.php [deleted file]
lib/Sabre/DAV/IQuota.php [deleted file]
lib/Sabre/DAV/Locks/Backend/Abstract.php [deleted file]
lib/Sabre/DAV/Locks/Backend/FS.php [deleted file]
lib/Sabre/DAV/Locks/Backend/File.php [deleted file]
lib/Sabre/DAV/Locks/Backend/PDO.php [deleted file]
lib/Sabre/DAV/Locks/LockInfo.php [deleted file]
lib/Sabre/DAV/Locks/Plugin.php [deleted file]
lib/Sabre/DAV/Mount/Plugin.php [deleted file]
lib/Sabre/DAV/Node.php [deleted file]
lib/Sabre/DAV/ObjectTree.php [deleted file]
lib/Sabre/DAV/Property.php [deleted file]
lib/Sabre/DAV/Property/GetLastModified.php [deleted file]
lib/Sabre/DAV/Property/Href.php [deleted file]
lib/Sabre/DAV/Property/HrefList.php [deleted file]
lib/Sabre/DAV/Property/IHref.php [deleted file]
lib/Sabre/DAV/Property/LockDiscovery.php [deleted file]
lib/Sabre/DAV/Property/ResourceType.php [deleted file]
lib/Sabre/DAV/Property/Response.php [deleted file]
lib/Sabre/DAV/Property/ResponseList.php [deleted file]
lib/Sabre/DAV/Property/SupportedLock.php [deleted file]
lib/Sabre/DAV/Property/SupportedReportSet.php [deleted file]
lib/Sabre/DAV/Server.php [deleted file]
lib/Sabre/DAV/ServerPlugin.php [deleted file]
lib/Sabre/DAV/SimpleCollection.php [deleted file]
lib/Sabre/DAV/SimpleDirectory.php [deleted file]
lib/Sabre/DAV/SimpleFile.php [deleted file]
lib/Sabre/DAV/StringUtil.php [deleted file]
lib/Sabre/DAV/TemporaryFileFilterPlugin.php [deleted file]
lib/Sabre/DAV/Tree.php [deleted file]
lib/Sabre/DAV/Tree/Filesystem.php [deleted file]
lib/Sabre/DAV/URLUtil.php [deleted file]
lib/Sabre/DAV/UUIDUtil.php [deleted file]
lib/Sabre/DAV/Version.php [deleted file]
lib/Sabre/DAV/XMLUtil.php [deleted file]
lib/Sabre/DAVACL/AbstractPrincipalCollection.php [deleted file]
lib/Sabre/DAVACL/Exception/AceConflict.php [deleted file]
lib/Sabre/DAVACL/Exception/NeedPrivileges.php [deleted file]
lib/Sabre/DAVACL/Exception/NoAbstract.php [deleted file]
lib/Sabre/DAVACL/Exception/NotRecognizedPrincipal.php [deleted file]
lib/Sabre/DAVACL/Exception/NotSupportedPrivilege.php [deleted file]
lib/Sabre/DAVACL/IACL.php [deleted file]
lib/Sabre/DAVACL/IPrincipal.php [deleted file]
lib/Sabre/DAVACL/IPrincipalBackend.php [deleted file]
lib/Sabre/DAVACL/Plugin.php [deleted file]
lib/Sabre/DAVACL/Principal.php [deleted file]
lib/Sabre/DAVACL/PrincipalBackend/PDO.php [deleted file]
lib/Sabre/DAVACL/PrincipalBackend/TYPO3.php [deleted file]
lib/Sabre/DAVACL/PrincipalCollection.php [deleted file]
lib/Sabre/DAVACL/Property/Acl.php [deleted file]
lib/Sabre/DAVACL/Property/CurrentUserPrivilegeSet.php [deleted file]
lib/Sabre/DAVACL/Property/Principal.php [deleted file]
lib/Sabre/DAVACL/Property/SupportedPrivilegeSet.php [deleted file]
lib/Sabre/DAVACL/Version.php [deleted file]
lib/Sabre/HTTP/AWSAuth.php [deleted file]
lib/Sabre/HTTP/AbstractAuth.php [deleted file]
lib/Sabre/HTTP/BasicAuth.php [deleted file]
lib/Sabre/HTTP/DigestAuth.php [deleted file]
lib/Sabre/HTTP/Request.php [deleted file]
lib/Sabre/HTTP/Response.php [deleted file]
lib/Sabre/HTTP/Util.php [deleted file]
lib/Sabre/HTTP/Version.php [deleted file]
lib/Sabre/VObject/Component.php [deleted file]
lib/Sabre/VObject/Element.php [deleted file]
lib/Sabre/VObject/Element/DateTime.php [deleted file]
lib/Sabre/VObject/Element/MultiDateTime.php [deleted file]
lib/Sabre/VObject/ElementList.php [deleted file]
lib/Sabre/VObject/Node.php [deleted file]
lib/Sabre/VObject/Parameter.php [deleted file]
lib/Sabre/VObject/ParseException.php [deleted file]
lib/Sabre/VObject/Property.php [deleted file]
lib/Sabre/VObject/Reader.php [deleted file]
lib/Sabre/VObject/Version.php [deleted file]
lib/Sabre/VObject/includes.php [deleted file]
lib/Sabre/autoload.php [deleted file]
vendor/autoload.php [new file with mode: 0644]
vendor/composer/ClassLoader.php [new file with mode: 0644]
vendor/composer/LICENSE [new file with mode: 0644]
vendor/composer/autoload_classmap.php [new file with mode: 0644]
vendor/composer/autoload_files.php [new file with mode: 0644]
vendor/composer/autoload_namespaces.php [new file with mode: 0644]
vendor/composer/autoload_psr4.php [new file with mode: 0644]
vendor/composer/autoload_real.php [new file with mode: 0644]
vendor/composer/autoload_static.php [new file with mode: 0644]
vendor/composer/installed.json [new file with mode: 0644]
vendor/psr/log/.gitignore [new file with mode: 0644]
vendor/psr/log/LICENSE [new file with mode: 0644]
vendor/psr/log/Psr/Log/AbstractLogger.php [new file with mode: 0644]
vendor/psr/log/Psr/Log/InvalidArgumentException.php [new file with mode: 0644]
vendor/psr/log/Psr/Log/LogLevel.php [new file with mode: 0644]
vendor/psr/log/Psr/Log/LoggerAwareInterface.php [new file with mode: 0644]
vendor/psr/log/Psr/Log/LoggerAwareTrait.php [new file with mode: 0644]
vendor/psr/log/Psr/Log/LoggerInterface.php [new file with mode: 0644]
vendor/psr/log/Psr/Log/LoggerTrait.php [new file with mode: 0644]
vendor/psr/log/Psr/Log/NullLogger.php [new file with mode: 0644]
vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php [new file with mode: 0644]
vendor/psr/log/README.md [new file with mode: 0644]
vendor/psr/log/composer.json [new file with mode: 0644]
vendor/sabre/dav/.gitignore [new file with mode: 0644]
vendor/sabre/dav/.travis.yml [new file with mode: 0644]
vendor/sabre/dav/CONTRIBUTING.md [new file with mode: 0644]
vendor/sabre/dav/bin/build.php [new file with mode: 0644]
vendor/sabre/dav/bin/googlecode_upload.py [new file with mode: 0644]
vendor/sabre/dav/bin/migrateto20.php [new file with mode: 0644]
vendor/sabre/dav/bin/migrateto21.php [new file with mode: 0644]
vendor/sabre/dav/bin/migrateto30.php [new file with mode: 0644]
vendor/sabre/dav/bin/migrateto32.php [new file with mode: 0644]
vendor/sabre/dav/bin/naturalselection [new file with mode: 0644]
vendor/sabre/dav/bin/sabredav [new file with mode: 0644]
vendor/sabre/dav/bin/sabredav.php [new file with mode: 0644]
vendor/sabre/dav/composer.json [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Backend/AbstractBackend.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Backend/BackendInterface.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Backend/NotificationSupport.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Backend/PDO.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Backend/SchedulingSupport.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Backend/SharingSupport.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Backend/SimplePDO.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Backend/SubscriptionSupport.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Backend/SyncSupport.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Backend/TYPO3.php [new file with mode: 0755]
vendor/sabre/dav/lib/CalDAV/Calendar.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/CalendarHome.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/CalendarObject.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/CalendarQueryValidator.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/CalendarRoot.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Exception/InvalidComponentType.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/ICSExportPlugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/ICalendar.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/ICalendarObject.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/ICalendarObjectContainer.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/ISharedCalendar.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Notifications/Collection.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Notifications/ICollection.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Notifications/INode.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Notifications/Node.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Notifications/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Principal/Collection.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Principal/IProxyRead.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Principal/IProxyWrite.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Principal/ProxyRead.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Principal/ProxyWrite.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Principal/User.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Schedule/IInbox.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Schedule/IMipPlugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Schedule/IOutbox.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Schedule/ISchedulingObject.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Schedule/Inbox.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Schedule/Outbox.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Schedule/SchedulingObject.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/SharedCalendar.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/SharingPlugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Subscriptions/ISubscription.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Subscriptions/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Subscriptions/Subscription.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Filter/CalendarData.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Filter/CompFilter.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Filter/ParamFilter.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Filter/PropFilter.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Notification/Invite.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Notification/InviteReply.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Notification/NotificationInterface.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Notification/SystemStatus.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Property/AllowedSharingModes.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Property/EmailAddressSet.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Property/Invite.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Property/ScheduleCalendarTransp.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Property/SupportedCalendarComponentSet.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Property/SupportedCalendarData.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Property/SupportedCollationSet.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Request/CalendarMultiGetReport.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Request/CalendarQueryReport.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Request/FreeBusyQueryReport.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Request/InviteReply.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Request/MkCalendar.php [new file with mode: 0644]
vendor/sabre/dav/lib/CalDAV/Xml/Request/Share.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/AddressBook.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/AddressBookHome.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/AddressBookRoot.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Backend/AbstractBackend.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Backend/BackendInterface.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Backend/PDO.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Backend/SyncSupport.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Card.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/IAddressBook.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/ICard.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/IDirectory.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/VCFExportPlugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Xml/Filter/AddressData.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Xml/Filter/ParamFilter.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Xml/Filter/PropFilter.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Xml/Property/SupportedAddressData.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Xml/Property/SupportedCollationSet.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Xml/Request/AddressBookMultiGetReport.php [new file with mode: 0644]
vendor/sabre/dav/lib/CardDAV/Xml/Request/AddressBookQueryReport.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Auth/Backend/AbstractBasic.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Auth/Backend/AbstractBearer.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Auth/Backend/AbstractDigest.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Auth/Backend/Apache.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Auth/Backend/BackendInterface.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Auth/Backend/BasicCallBack.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Auth/Backend/File.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Auth/Backend/PDO.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Auth/Backend/TYPO3.php [new file with mode: 0755]
vendor/sabre/dav/lib/DAV/Auth/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/GuessContentType.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/HtmlOutput.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/HtmlOutputHelper.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/MapGetToPropFind.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/PropFindAll.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/assets/favicon.ico [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/assets/openiconic/ICON-LICENSE [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/assets/openiconic/open-iconic.css [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/assets/openiconic/open-iconic.eot [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/assets/openiconic/open-iconic.otf [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/assets/openiconic/open-iconic.svg [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/assets/openiconic/open-iconic.ttf [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/assets/openiconic/open-iconic.woff [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/assets/sabredav.css [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Browser/assets/sabredav.png [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Client.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Collection.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/CorePlugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/BadRequest.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/Conflict.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/ConflictingLock.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/Forbidden.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/InsufficientStorage.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/InvalidResourceType.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/InvalidSyncToken.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/LengthRequired.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/LockTokenMatchesRequestUri.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/Locked.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/MethodNotAllowed.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/NotAuthenticated.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/NotFound.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/NotImplemented.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/PaymentRequired.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/PreconditionFailed.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/ReportNotSupported.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/RequestedRangeNotSatisfiable.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/ServiceUnavailable.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/TooManyMatches.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Exception/UnsupportedMediaType.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/FS/Directory.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/FS/File.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/FS/Node.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/FSExt/Directory.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/FSExt/File.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/File.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/ICollection.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/IExtendedCollection.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/IFile.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/IMoveTarget.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/IMultiGet.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/INode.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/IProperties.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/IQuota.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Locks/Backend/AbstractBackend.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Locks/Backend/BackendInterface.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Locks/Backend/File.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Locks/Backend/PDO.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Locks/LockInfo.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Locks/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/MkCol.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Mount/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Node.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/PartialUpdate/IPatchSupport.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/PartialUpdate/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/PropFind.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/PropPatch.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/PropertyStorage/Backend/BackendInterface.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/PropertyStorage/Backend/PDO.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/PropertyStorage/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Server.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/ServerPlugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Sharing/ISharedNode.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Sharing/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/SimpleCollection.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/SimpleFile.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/StringUtil.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Sync/ISyncCollection.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Sync/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/TemporaryFileFilterPlugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Tree.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/UUIDUtil.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Version.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Element/Prop.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Element/Response.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Element/Sharee.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Property/Complex.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Property/GetLastModified.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Property/Href.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Property/Invite.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Property/LocalHref.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Property/LockDiscovery.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Property/ResourceType.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Property/ShareAccess.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Property/SupportedLock.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Property/SupportedMethodSet.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Property/SupportedReportSet.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Request/Lock.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Request/MkCol.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Request/PropFind.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Request/PropPatch.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Request/ShareResource.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Request/SyncCollectionReport.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Response/MultiStatus.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAV/Xml/Service.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/ACLTrait.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/AbstractPrincipalCollection.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Exception/AceConflict.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Exception/NeedPrivileges.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Exception/NoAbstract.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Exception/NotRecognizedPrincipal.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Exception/NotSupportedPrivilege.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/FS/Collection.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/FS/File.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/FS/HomeCollection.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/IACL.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/IPrincipal.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/IPrincipalCollection.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Plugin.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Principal.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/PrincipalBackend/AbstractBackend.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/PrincipalBackend/BackendInterface.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/PrincipalBackend/CreatePrincipalSupport.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/PrincipalBackend/PDO.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/PrincipalBackend/TYPO3.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/PrincipalCollection.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Xml/Property/Acl.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Xml/Property/AclRestrictions.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Xml/Property/CurrentUserPrivilegeSet.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Xml/Property/Principal.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Xml/Property/SupportedPrivilegeSet.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Xml/Request/AclPrincipalPropSetReport.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Xml/Request/ExpandPropertyReport.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Xml/Request/PrincipalMatchReport.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Xml/Request/PrincipalPropertySearchReport.php [new file with mode: 0644]
vendor/sabre/dav/lib/DAVACL/Xml/Request/PrincipalSearchPropertySetReport.php [new file with mode: 0644]
vendor/sabre/event/.gitignore [new file with mode: 0644]
vendor/sabre/event/.travis.yml [new file with mode: 0644]
vendor/sabre/event/CHANGELOG.md [new file with mode: 0644]
vendor/sabre/event/LICENSE [new file with mode: 0644]
vendor/sabre/event/README.md [new file with mode: 0644]
vendor/sabre/event/bin/.empty [new file with mode: 0644]
vendor/sabre/event/composer.json [new file with mode: 0644]
vendor/sabre/event/examples/promise.php [new file with mode: 0644]
vendor/sabre/event/examples/tail.php [new file with mode: 0644]
vendor/sabre/event/lib/EventEmitter.php [new file with mode: 0644]
vendor/sabre/event/lib/EventEmitterInterface.php [new file with mode: 0644]
vendor/sabre/event/lib/EventEmitterTrait.php [new file with mode: 0644]
vendor/sabre/event/lib/Loop/Loop.php [new file with mode: 0644]
vendor/sabre/event/lib/Loop/functions.php [new file with mode: 0644]
vendor/sabre/event/lib/Promise.php [new file with mode: 0644]
vendor/sabre/event/lib/Promise/functions.php [new file with mode: 0644]
vendor/sabre/event/lib/PromiseAlreadyResolvedException.php [new file with mode: 0644]
vendor/sabre/event/lib/Version.php [new file with mode: 0644]
vendor/sabre/event/lib/coroutine.php [new file with mode: 0644]
vendor/sabre/event/phpunit.xml.dist [new file with mode: 0644]
vendor/sabre/http/.gitignore [new file with mode: 0644]
vendor/sabre/http/.travis.yml [new file with mode: 0644]
vendor/sabre/http/CHANGELOG.md [new file with mode: 0644]
vendor/sabre/http/LICENSE [new file with mode: 0644]
vendor/sabre/http/README.md [new file with mode: 0644]
vendor/sabre/http/bin/.empty [new file with mode: 0644]
vendor/sabre/http/composer.json [new file with mode: 0644]
vendor/sabre/http/examples/asyncclient.php [new file with mode: 0644]
vendor/sabre/http/examples/basicauth.php [new file with mode: 0644]
vendor/sabre/http/examples/client.php [new file with mode: 0644]
vendor/sabre/http/examples/digestauth.php [new file with mode: 0644]
vendor/sabre/http/examples/reverseproxy.php [new file with mode: 0644]
vendor/sabre/http/examples/stringify.php [new file with mode: 0644]
vendor/sabre/http/lib/Auth/AWS.php [new file with mode: 0644]
vendor/sabre/http/lib/Auth/AbstractAuth.php [new file with mode: 0644]
vendor/sabre/http/lib/Auth/Basic.php [new file with mode: 0644]
vendor/sabre/http/lib/Auth/Bearer.php [new file with mode: 0644]
vendor/sabre/http/lib/Auth/Digest.php [new file with mode: 0644]
vendor/sabre/http/lib/Client.php [new file with mode: 0644]
vendor/sabre/http/lib/ClientException.php [new file with mode: 0644]
vendor/sabre/http/lib/ClientHttpException.php [new file with mode: 0644]
vendor/sabre/http/lib/HttpException.php [new file with mode: 0644]
vendor/sabre/http/lib/Message.php [new file with mode: 0644]
vendor/sabre/http/lib/MessageDecoratorTrait.php [new file with mode: 0644]
vendor/sabre/http/lib/MessageInterface.php [new file with mode: 0644]
vendor/sabre/http/lib/Request.php [new file with mode: 0644]
vendor/sabre/http/lib/RequestDecorator.php [new file with mode: 0644]
vendor/sabre/http/lib/RequestInterface.php [new file with mode: 0644]
vendor/sabre/http/lib/Response.php [new file with mode: 0644]
vendor/sabre/http/lib/ResponseDecorator.php [new file with mode: 0644]
vendor/sabre/http/lib/ResponseInterface.php [new file with mode: 0644]
vendor/sabre/http/lib/Sapi.php [new file with mode: 0644]
vendor/sabre/http/lib/URLUtil.php [new file with mode: 0644]
vendor/sabre/http/lib/Util.php [new file with mode: 0644]
vendor/sabre/http/lib/Version.php [new file with mode: 0644]
vendor/sabre/http/lib/functions.php [new file with mode: 0644]
vendor/sabre/uri/.gitignore [new file with mode: 0644]
vendor/sabre/uri/.travis.yml [new file with mode: 0644]
vendor/sabre/uri/CHANGELOG.md [new file with mode: 0644]
vendor/sabre/uri/LICENSE [new file with mode: 0644]
vendor/sabre/uri/README.md [new file with mode: 0644]
vendor/sabre/uri/composer.json [new file with mode: 0644]
vendor/sabre/uri/lib/InvalidUriException.php [new file with mode: 0644]
vendor/sabre/uri/lib/Version.php [new file with mode: 0644]
vendor/sabre/uri/lib/functions.php [new file with mode: 0644]
vendor/sabre/vobject/.gitignore [new file with mode: 0644]
vendor/sabre/vobject/.travis.yml [new file with mode: 0644]
vendor/sabre/vobject/CHANGELOG.md [new file with mode: 0644]
vendor/sabre/vobject/LICENSE [new file with mode: 0644]
vendor/sabre/vobject/README.md [new file with mode: 0644]
vendor/sabre/vobject/bin/bench.php [new file with mode: 0644]
vendor/sabre/vobject/bin/bench_freebusygenerator.php [new file with mode: 0644]
vendor/sabre/vobject/bin/bench_manipulatevcard.php [new file with mode: 0644]
vendor/sabre/vobject/bin/fetch_windows_zones.php [new file with mode: 0644]
vendor/sabre/vobject/bin/generate_vcards [new file with mode: 0644]
vendor/sabre/vobject/bin/generateicalendardata.php [new file with mode: 0644]
vendor/sabre/vobject/bin/mergeduplicates.php [new file with mode: 0644]
vendor/sabre/vobject/bin/rrulebench.php [new file with mode: 0644]
vendor/sabre/vobject/bin/vobject [new file with mode: 0644]
vendor/sabre/vobject/composer.json [new file with mode: 0644]
vendor/sabre/vobject/lib/BirthdayCalendarGenerator.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Cli.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Component.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Component/Available.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Component/VAlarm.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Component/VAvailability.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Component/VCalendar.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Component/VCard.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Component/VEvent.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Component/VFreeBusy.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Component/VJournal.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Component/VTimeZone.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Component/VTodo.php [new file with mode: 0644]
vendor/sabre/vobject/lib/DateTimeParser.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Document.php [new file with mode: 0644]
vendor/sabre/vobject/lib/ElementList.php [new file with mode: 0644]
vendor/sabre/vobject/lib/EofException.php [new file with mode: 0644]
vendor/sabre/vobject/lib/FreeBusyData.php [new file with mode: 0644]
vendor/sabre/vobject/lib/FreeBusyGenerator.php [new file with mode: 0644]
vendor/sabre/vobject/lib/ITip/Broker.php [new file with mode: 0644]
vendor/sabre/vobject/lib/ITip/ITipException.php [new file with mode: 0644]
vendor/sabre/vobject/lib/ITip/Message.php [new file with mode: 0644]
vendor/sabre/vobject/lib/ITip/SameOrganizerForAllComponentsException.php [new file with mode: 0644]
vendor/sabre/vobject/lib/InvalidDataException.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Node.php [new file with mode: 0644]
vendor/sabre/vobject/lib/PHPUnitAssertions.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Parameter.php [new file with mode: 0644]
vendor/sabre/vobject/lib/ParseException.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Parser/Json.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Parser/MimeDir.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Parser/Parser.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Parser/XML.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Parser/XML/Element/KeyValue.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/Binary.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/Boolean.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/FlatText.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/FloatValue.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/ICalendar/CalAddress.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/ICalendar/Date.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/ICalendar/Duration.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/ICalendar/Period.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/ICalendar/Recur.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/IntegerValue.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/Text.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/Time.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/Unknown.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/Uri.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/UtcOffset.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/VCard/Date.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/VCard/DateAndOrTime.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/VCard/DateTime.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/VCard/LanguageTag.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Property/VCard/TimeStamp.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Reader.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Recur/EventIterator.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Recur/MaxInstancesExceededException.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Recur/NoInstancesException.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Recur/RDateIterator.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Recur/RRuleIterator.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Settings.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Splitter/ICalendar.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Splitter/SplitterInterface.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Splitter/VCard.php [new file with mode: 0644]
vendor/sabre/vobject/lib/StringUtil.php [new file with mode: 0644]
vendor/sabre/vobject/lib/TimeZoneUtil.php [new file with mode: 0644]
vendor/sabre/vobject/lib/UUIDUtil.php [new file with mode: 0644]
vendor/sabre/vobject/lib/VCardConverter.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Version.php [new file with mode: 0644]
vendor/sabre/vobject/lib/Writer.php [new file with mode: 0644]
vendor/sabre/vobject/lib/timezonedata/exchangezones.php [new file with mode: 0644]
vendor/sabre/vobject/lib/timezonedata/lotuszones.php [new file with mode: 0644]
vendor/sabre/vobject/lib/timezonedata/php-bc.php [new file with mode: 0644]
vendor/sabre/vobject/lib/timezonedata/php-workaround.php [new file with mode: 0644]
vendor/sabre/vobject/lib/timezonedata/windowszones.php [new file with mode: 0644]
vendor/sabre/vobject/resources/schema/xcal.rng [new file with mode: 0644]
vendor/sabre/vobject/resources/schema/xcard.rng [new file with mode: 0644]
vendor/sabre/xml/.gitignore [new file with mode: 0644]
vendor/sabre/xml/.travis.yml [new file with mode: 0644]
vendor/sabre/xml/CHANGELOG.md [new file with mode: 0644]
vendor/sabre/xml/LICENSE [new file with mode: 0644]
vendor/sabre/xml/README.md [new file with mode: 0644]
vendor/sabre/xml/bin/.empty [new file with mode: 0644]
vendor/sabre/xml/composer.json [new file with mode: 0644]
vendor/sabre/xml/lib/ContextStackTrait.php [new file with mode: 0644]
vendor/sabre/xml/lib/Deserializer/functions.php [new file with mode: 0644]
vendor/sabre/xml/lib/Element.php [new file with mode: 0644]
vendor/sabre/xml/lib/Element/Base.php [new file with mode: 0644]
vendor/sabre/xml/lib/Element/Cdata.php [new file with mode: 0644]
vendor/sabre/xml/lib/Element/Elements.php [new file with mode: 0644]
vendor/sabre/xml/lib/Element/KeyValue.php [new file with mode: 0644]
vendor/sabre/xml/lib/Element/Uri.php [new file with mode: 0644]
vendor/sabre/xml/lib/Element/XmlFragment.php [new file with mode: 0644]
vendor/sabre/xml/lib/LibXMLException.php [new file with mode: 0644]
vendor/sabre/xml/lib/ParseException.php [new file with mode: 0644]
vendor/sabre/xml/lib/Reader.php [new file with mode: 0644]
vendor/sabre/xml/lib/Serializer/functions.php [new file with mode: 0644]
vendor/sabre/xml/lib/Service.php [new file with mode: 0644]
vendor/sabre/xml/lib/Version.php [new file with mode: 0644]
vendor/sabre/xml/lib/Writer.php [new file with mode: 0644]
vendor/sabre/xml/lib/XmlDeserializable.php [new file with mode: 0644]
vendor/sabre/xml/lib/XmlSerializable.php [new file with mode: 0644]

diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644 (file)
index 0000000..0bccc99
--- /dev/null
@@ -0,0 +1,2378 @@
+ChangeLog
+=========
+
+3.2.2 (2017-02-14)
+------------------
+
+* #943: Fix CardDAV XML reporting bug, which was affecting several CardDAV
+  clients. Bug was introduced in 3.2.1.
+* The zip release ships with [sabre/vobject 4.1.2][vobj],
+  [sabre/http 4.2.2][http], [sabre/event 3.0.0][evnt],
+  [sabre/uri 1.2.0][uri] and [sabre/xml 1.5.0][xml].
+
+
+3.2.1 (2017-01-28)
+------------------
+
+* #877: Fix for syncing large calendars when using the Sqlite PDO backend.
+  (@theseer).
+* #889 Added support for filtering vCard properties in the addressbook-query
+  REPORT (@DeepDiver1975).
+* The zip release ships with [sabre/vobject 4.1.2][vobj],
+  [sabre/http 4.2.2][http], [sabre/event 3.0.0][evnt],
+  [sabre/uri 1.2.0][uri] and [sabre/xml 1.5.0][xml].
+
+
+3.2.0 (2016-06-27)
+------------------
+
+* The default ACL rules allow an unauthenticated user to read information
+  about nodes that don't have their own ACL defined. This was a security
+  problem.
+* The zip release ships with [sabre/vobject 4.1.0][vobj],
+  [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt],
+  [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.2][xml].
+
+
+3.2.0-beta1 (2016-05-20)
+------------------------
+
+* #833: Calendars throw exceptions when the sharing plugin is not enabled.
+* #834: Return vCards exactly as they were stored if we don't need to convert
+  in between versions.
+* The zip release ships with [sabre/vobject 4.1.0][vobj],
+  [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt],
+  [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.1][xml].
+
+
+3.2.0-alpha1 (2016-05-09)
+-------------------------
+
+* Database changes for CalDAV. If you are using the CalDAV PDO backends, you
+  must migrate. Run `./bin/migrateto32.php` for more info.
+* Support for WebDAV Resource Sharing, an upcoming standard.
+* Added support for sharing in the CalDAV PDO backend! Users can now invite
+  others to their calendar and give them read/read-write access!
+* #397: Support for PSR-3. You can now log exceptions with your favourite
+  psr3-compatible logging tool.
+* #825: Actual proper, tested support for PostgreSQL. We require version 9.5.
+* Removed database migration script for sabre/dav 1.7. To update from that
+  version you now first need to update to sabre/dav 3.1.
+* Removed deprecated function: `Sabre\DAV\Auth\Plugin::getCurrentUser()`.
+* #774: Fixes for getting free disk space on Windows.
+* #803: Major changes in the sharing API. If you were using an old sabre/dav
+  sharing api, head to the website for more detailed migration notes.
+* #657: Support for optional auth using `{DAV:}unauthorized` and `{DAV:}all`
+  privileges. This allows you to assign a privilege to a resource, allowing
+  non-authenticated users to access it. For instance, this could allow you
+  to create a public read-only collection.
+* #812 #814: ICS/VCF exporter now includes a more useful filename in its
+  `Content-Disposition` header. (@Xenopathic).
+* #801: BC break: If you were using the `Href` object before, it's behavior
+  now changed a bit, and `LocalHref` was added to replace the old, default
+  behavior of `Href`. See the migration doc for more info.
+* Removed `Sabre\DAVACL\Plugin::$allowAccessToNodesWithoutACL` setting.
+  Instead, you can provide a set of default ACL rules with
+  `Sabre\DAVACL\Plugin::setDefaultAcl()`.
+* Introduced `Sabre\DAVACL\ACLTrait` which contains a default implementation
+  of `Sabre\DAV\IACL` with some sane defaults. We're using this trait all over
+  the place now, reducing the amount of boilerplate.
+* Plugins can now control the "Supported Privilege Set".
+* Added Sharing, ICSExport and VCFExport plugins to `groupwareserver.php`
+  example.
+* The `{DAV:}all` privilege is now no longer abstract, so it can be assigned
+  directly. We're using the `{DAV:}all` privilege now in a lot of cases where
+  we before assigned both `{DAV:}read` and `{DAV:}write`.
+* Resources that are not collections no longer support the `{DAV:}bind` and
+  `{DAV:}unbind` privileges.
+* Corrected the CalDAV-scheduling related privileges.
+* Doing an `UNLOCK` no longer requires the `{DAV:}write-content` privilege.
+* Added a new `getPrincipalByUri` plugin event. Allowing plugins to request
+  quickly where a principal lives on a server.
+* Renamed `phpunit.xml` to `phpunit.xml.dist` to make local modifications easy.
+* Functionality from `IShareableCalendar` is merged into `ISharedCalendar`.
+* #751: Fixed XML responses from failing `MKCOL` requests.
+* #600: Support for `principal-match` ACL `REPORT`.
+* #599: Support for `acl-principal-prop-set` ACL `REPORT`.
+* #798: Added an index on `firstoccurence` field in MySQL CalDAV backend. This
+  should speed up common calendar-query requests.
+* #759: DAV\Client is now able to actually correctly resolve relative urls.
+* #671: We are no longer checking the `read-free-busy` privilege on individual
+  calendars during freebusy operations in the scheduling plugin. Instead, we
+  check the `schedule-query-freebusy` privilege on the target users' inbox,
+  which validates access for the entire account, per the spec.
+* The zip release ships with [sabre/vobject 4.1.0][vobj],
+  [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt],
+  [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.1][xml].
+
+
+3.1.5 (????-??-??)
+------------------
+
+* Fixed: Creating a new calendar on some MySQL configurations caused an error.
+* #889 Added support for filtering vCard properties in the addressbook-query
+  REPORT (@DeepDiver1975).
+
+
+
+3.1.4 (2016-05-28)
+------------------
+
+* #834: Backport from `master`: Return vCards exactly as they were stored if
+  we don't need to convert in between versions. This should speed up many
+  large addressbook syncs sometimes up to 50%.
+* The zip release ships with [sabre/vobject 4.1.0][vobj],
+  [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt],
+  [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.2][xml].
+
+
+3.1.3 (2016-04-06)
+------------------
+
+* Set minimum libxml version to 2.7.0 in `composer.json`.
+* #805: It wasn't possible to create calendars that hold events, journals and
+  todos using MySQL, because the `components` column was 1 byte too small.
+* The zip release ships with [sabre/vobject 4.1.0][vobj],
+  [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt],
+  [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.1][xml].
+
+
+3.1.2 (2016-03-12)
+------------------
+
+* #784: Sync logs for address books were not correctly cleaned up after
+  deleting them.
+* #787: Cannot use non-seekable stream-wrappers with range requests.
+* Faster XML parsing and generating due to sabre/xml update.
+* #793: The Sqlite schema is now more strict and more similar to the MySQL
+  schema. This solves a problem within Baikal.
+* The zip release ships with [sabre/vobject 4.0.3][vobj],
+  [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt],
+  [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.1][xml].
+
+
+3.1.1 (2016-01-25)
+------------------
+
+* #755: The brower plugin and some operations would break when scheduling and
+  delegation would both be enabled.
+* #757: A bunch of unittest improvements (@jakobsack).
+* The zip release ships with [sabre/vobject 4.0.2][vobj],
+  [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.3.0][xml].
+
+
+3.1.0 (2016-01-06)
+------------------
+
+* Better error message when the browser plugin is not enabled.
+* Added a super minimal server example.
+* #730: Switched all mysql tables to `utf8mb4` character set, allowing you to
+  use emoji in some tables where you couldn't before.
+* #710: Provide an Auth backend that acts as a helper for people implementing
+  OAuth2 Bearer token. (@fkooman).
+* #729: Not all calls to `Sabre\DAV\Tree::getChildren()` were properly cached.
+* #727: Added another workaround to make CalDAV work for Windows 10 clients.
+* #742: Fixes to make sure that vobject 4 is correctly supported.
+* #726: Better error reporting in `Client::propPatch`. We're now throwing
+  exceptions.
+* #608: When a HTTP error is triggered during `Client:propFind`, we're now
+  throwing `Sabre\HTTP\ClientHttpException` instead of `Sabre\DAV\Exception`.
+  This new exception contains a LOT more information about the problem.
+* #721: Events are now handled in the correct order for `COPY` requests.
+  Before this subtle bugs could appear that could cause data-loss.
+* #747: Now throwing exceptions and setting the HTTP status to 500 in subtle
+  cases where no other plugin set a correct HTTP status.
+* #686: Corrected PDO principal backend's findByURI for email addresses that
+  don't match the exact capitalization.
+* #512: The client now has it's own `User-Agent`.
+* #720: Some browser improvements.
+* The zip release ships with [sabre/vobject 4.0.1][vobj],
+  [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.3.0][xml].
+
+
+3.1.0-alpha2 (2015-09-05)
+-------------------------
+
+* Massive calendars and addressbooks should see a big drop in peak memory
+  usage.
+* Fixed a privilege bug in the availability system.
+* #697: Added a "tableName" member to the PropertyStorage PDO backend. (@Frzk).
+* #699: PostgreSQL fix for the Locks PDO backend. (@TCKnet)
+* Removed the `simplefsserver.php` example file. It's not simple enough.
+* #703: PropPatch in client is not correctly encoded.
+* #709: Throw exception when running into empty
+  `supported-calendar-component-set`.
+* #711: Don't trigger deserializers for empty elements in `{DAV:}prop`. This
+  fixes issues when using sabre/dav as a client.
+* The zip release ships with [sabre/vobject 4.0.0-alpha2][vobj],
+  [sabre/http 4.1.0][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.2.0][xml].
+
+
+3.1.0-alpha1 (2015-07-19)
+-------------------------
+
+* Now requires PHP 5.5
+* Upgraded to vobject 4, which is a lot faster.
+* Support for PHP 7.
+* #690: Support for `calendar-availability`, draft 05.
+  [reference][calendar-availability].
+* #691: Workaround for broken Windows Phone client.
+* The zip release ships with [sabre/vobject 4.0.0-alpha1][vobj],
+  [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.1.0][xml].
+
+
+3.0.10 (2016-??-??)
+------------------
+
+* #889 Added support for filtering vCard properties in the addressbook-query
+  REPORT (@DeepDiver1975).
+
+
+3.0.9 (2016-04-06)
+------------------
+
+* Set minimum libxml version to 2.7.0 in `composer.json`.
+* #727: Added another workaround to make CalDAV work for Windows 10 clients.
+* #805: It wasn't possible to create calendars that hold events, journals and
+  todos using MySQL, because the `components` column was 1 byte too small.
+* The zip release ships with [sabre/vobject 3.5.1][vobj],
+  [sabre/http 4.2.1][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.1][xml].
+
+
+3.0.8 (2016-03-12)
+------------------
+
+* #784: Sync logs for address books were not correctly cleaned up after
+  deleting them.
+* #787: Cannot use non-seekable stream-wrappers with range requests.
+* Faster XML parsing and generating due to sabre/xml update.
+* The zip release ships with [sabre/vobject 3.5.0][vobj],
+  [sabre/http 4.2.1][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.1][xml].
+
+
+3.0.7 (2016-01-12)
+------------------
+
+* #752: PHP 7 support for 3.0 branch. (@DeepDiver1975)
+* The zip release ships with [sabre/vobject 3.5.0][vobj],
+  [sabre/http 4.2.1][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.3.0][xml].
+
+
+3.0.6 (2016-01-04)
+------------------
+
+* #730: Switched all mysql tables to `utf8mb4` character set, allowing you to
+  use emoji in some tables where you couldn't before.
+* #729: Not all calls to `Sabre\DAV\Tree::getChildren()` were properly cached.
+* #734: Return `418 I'm a Teapot` when generating a multistatus response that
+  has resources with no returned properties.
+* #740: Bugs in `migrate20.php` script.
+* The zip release ships with [sabre/vobject 3.4.8][vobj],
+  [sabre/http 4.1.0][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.3.0][xml].
+
+
+3.0.5 (2015-09-15)
+------------------
+
+* #704: Fixed broken uri encoding in multistatus responses. This affected
+  at least CyberDuck, but probably also others.
+* The zip release ships with [sabre/vobject 3.4.7][vobj],
+* The zip release ships with [sabre/vobject 3.4.7][vobj],
+  [sabre/http 4.1.0][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.2.0][xml].
+
+
+3.0.4 (2015-09-06)
+------------------
+
+* #703: PropPatch in client is not correctly encoded.
+* #709: Throw exception when running into empty
+  `supported-calendar-component-set`.
+* #711: Don't trigger deserializers for empty elements in `{DAV:}prop`. This
+  fixes issues when using sabre/dav as a client.
+* #705: A `MOVE` request that gets prevented from deleting the source resource
+  will still remove the target resource. Now all events are triggered before
+  any destructive operations.
+* The zip release ships with [sabre/vobject 3.4.7][vobj],
+  [sabre/http 4.1.0][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.2.0][xml].
+
+
+3.0.3 (2015-08-06)
+------------------
+
+* #700: Digest Auth fails on `HEAD` requests.
+* Fixed example files to no longer use now-deprecated realm argument.
+* The zip release ships with [sabre/vobject 3.4.6][vobj],
+  [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.1.0][xml].
+
+
+3.0.2 (2015-07-21)
+------------------
+
+* #657: Migration script would break when coming a cross an iCalendar object
+  with no UID.
+* #691: Workaround for broken Windows Phone client.
+* Fixed a whole bunch of incorrect php docblocks.
+* The zip release ships with [sabre/vobject 3.4.5][vobj],
+  [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.1.0][xml].
+
+
+3.0.1 (2015-07-02)
+------------------
+
+* #674: Postgres sql file fixes. (@davesouthey)
+* #677: Resources with the name '0' would not get retrieved when using
+  `Depth: infinity` in a `PROPFIND` request.
+* #680: Fix 'autoprefixing' of dead `{DAV:}href` properties.
+* #675: NTLM support in DAV\Client. (@k42b3)
+* The zip release ships with [sabre/vobject 3.4.5][vobj],
+  [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.1.0][xml].
+
+
+3.0.0 (2015-06-02)
+------------------
+
+* No changes since last beta.
+* The zip release ships with [sabre/vobject 3.4.5][vobj],
+  [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.0.0][xml].
+
+
+3.0.0-beta3 (2015-05-29)
+------------------------
+
+* Fixed deserializing href properties with no value.
+* Fixed deserializing `{DAV:}propstat` without a `{DAV:}prop`.
+* #668: More information about vcf-export-plugin in browser plugin.
+* #669: Add export button to browser plugin for address books. (@mgee)
+* #670: multiget report hrefs were not decoded.
+* The zip release ships with [sabre/vobject 3.4.4][vobj],
+  [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.0.0][xml].
+
+
+3.0.0-beta2 (2015-05-27)
+------------------------
+
+* A node's properties should not overwrite properties that were already set.
+* Some uris were not correctly encoded in notifications.
+* The zip release ships with [sabre/vobject 3.4.4][vobj],
+  [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.0.0][xml].
+
+
+3.0.0-beta1 (2015-05-25)
+------------------------
+
+* `migrate22.php` is now called `migrate30.php`.
+* Using php-cs-fixer for automated coding standards enforcement and fixing.
+* #660: principals could break html output.
+* #662: Fixed several bugs in the `share` request parser.
+* #665: Fix a bug in serialization of complex properties in the proppatch
+  request in the client.
+* #666: expand-property report did not correctly prepend the base uri when
+  generating uris, this caused delegation to break.
+* #659: Don't throw errors when when etag-related checks are done on
+  collections.
+* Fully supporting the updated `Prefer` header syntax, as defined in
+  [rfc7240][rfc7240].
+* The zip release ships with [sabre/vobject 3.4.3][vobj],
+  [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 1.0.0][xml].
+
+
+3.0.0-alpha1 (2015-05-19)
+-------------------------
+
+* It's now possible to get all property information from files using the
+  browser plugin.
+* Browser plugin will now show a 'calendar export' button when the
+  ics-export plugin is enabled.
+* Some nodes that by default showed the current time as their last
+  modification time, now no longer has a last modification time.
+* CardDAV namespace was missing from default namespaceMap.
+* #646: Properties can now control their own HTML output in the browser plugin.
+* #646: Nicer HTML output for the `{DAV:}acl` property.
+* Browser plugin no longer shows a few properties that take up a lot of space,
+  but are likely not really interesting for most users.
+* #654: Added a collection, `Sabre\DAVACL\FS\HomeCollection` for automatically
+  creating a private home collection per-user.
+* Changed all MySQL columns from `VARCHAR` to `VARBINARY` where possible.
+* Improved older migration scripts a bit to allow easier testing.
+* The zip release ships with [sabre/vobject 3.4.3][vobj],
+  [sabre/http 4.0.0-alpha3][http], [sabre/event 2.0.2][evnt],
+  [sabre/uri 1.0.1][uri] and [sabre/xml 0.4.3][xml].
+
+
+2.2.0-alpha4 (2015-04-13)
+-------------------------
+
+* Complete rewrite of the XML system. We now use our own [sabre/xml][xml],
+  which has a much smarter XML Reader and Writer.
+* BC Break: It's no longer possible to instantiate the Locks plugin without
+  a locks backend. I'm not sure why this ever made sense.
+* Simplified the Locking system and fixed a bug related to if tokens checking
+  locks unrelated to the current request.
+* `FSExt` Directory and File no longer do custom property storage. This
+  functionality is already covered pretty well by the `PropertyStorage` plugin,
+  so please switch.
+* Renamed `Sabre\CardDAV\UserAddressBooks` to `Sabre\CardDAV\AddressBookHome`
+  to be more consistent with `CalendarHome` as well as the CardDAV
+  specification.
+* `Sabre\DAV\IExtendedCollection` now receives a `Sabre\DAV\MkCol` object as
+  its second argument, and no longer receives seperate properties and
+  resourcetype arguments.
+* `MKCOL` now integrates better with propertystorage plugins.
+* #623: Remove need of temporary files when working with Range requests.
+  (@dratini0)
+* The zip release ships with [sabre/vobject 3.4.2][vobj],
+  [sabre/http 4.0.0-alpha1][http], [sabre/event 2.0.1][evnt],
+  [sabre/uri 1.0.0][uri] and [sabre/xml 0.4.3][xml].
+
+
+2.2.0-alpha3 (2015-02-25)
+-------------------------
+
+* Contains all the changes introduced between 2.1.2 and 2.1.3.
+* The zip release ships with [sabre/vobject 3.4.2][vobj],
+  [sabre/http 4.0.0-alpha1][http], [sabre/event 2.0.1][evnt] and
+  [sabre/uri 1.0.0][uri].
+
+
+2.2.0-alpha2 (2015-01-09)
+-------------------------
+
+* Renamed `Sabre\DAV\Auth\Backend\BackendInterface::requireAuth` to
+  `challenge`, which is a more correct and better sounding name.
+* The zip release ships with [sabre/vobject 3.3.5][vobj],
+  [sabre/http 3.0.4][http], [sabre/event 2.0.1][evnt].
+
+
+2.2.0-alpha1 (2014-12-10)
+-------------------------
+
+* The browser plugin now has a new page with information about your sabredav
+  server, and shows information about every plugin that's loaded in the
+  system.
+* #191: The Authentication system can now support multiple authentication
+  backends.
+* Removed: all `$tableName` arguments from every PDO backend. This was already
+  deprecated, but has now been fully removed. All of these have been replaced
+  with public properties.
+* Deleted several classes that were already deprecated much earlier:
+  * `Sabre\CalDAV\CalendarRootNode`
+  * `Sabre\CalDAV\UserCalendars`
+  * `Sabre\DAV\Exception\FileNotFound`
+  * `Sabre\DAV\Locks\Backend\FS`
+  * `Sabre\DAV\PartialUpdate\IFile`
+  * `Sabre\DAV\URLUtil`
+* Removed: `Sabre\DAV\Client::addTrustedCertificates` and
+  `Sabre\DAV\Client::setVerifyPeer`.
+* Removed: `Sabre\DAV\Plugin::getPlugin()` can now no longer return plugins
+  based on its class name.
+* Removed: `Sabre\DAVACL\Plugin::getPrincipalByEmail()`.
+* #560: GuessContentType plugin will now set content-type to
+  `application/octet-stream` if a better content-type could not be determined.
+* #568: Added a `componentType` argument to `ICSExportPlugin`, allowing you to
+  specifically fetch `VEVENT`, `VTODO` or `VJOURNAL`.
+* #582: Authentication backend interface changed to be stateless. If you
+  implemented your own authentication backend, make sure you upgrade your class
+  to the latest API!
+* #582: `Sabre\DAV\Auth\Plugin::getCurrentUser()` is now deprecated. Use
+  `Sabre\DAV\Auth\Plugin::getCurrentPrincipal()` instead.
+* #193: Fix `Sabre\DAV\FSExt\Directory::getQuotaInfo()` on windows.
+
+
+2.1.11 (2016-10-06)
+-------------------
+
+* #805: It wasn't possible to create calendars that hold events, journals and
+  todos using MySQL, because the `components` column was 1 byte too small.
+* The zip release ships with [sabre/vobject 3.5.3][vobj],
+  [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt].
+
+
+2.1.10 (2016-03-10)
+-------------------
+
+* #784: Sync logs for address books were not correctly cleaned up after
+  deleting them.
+* The zip release ships with [sabre/vobject 3.5.0][vobj],
+  [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt].
+
+
+2.1.9 (2016-01-25)
+------------------
+
+* #674: PHP7 support (@DeepDiver1975).
+* The zip release ships with [sabre/vobject 3.5.0][vobj],
+  [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt].
+
+
+2.1.8 (2016-01-04)
+------------------
+
+* #729: Fixed a caching problem in the Tree object.
+* #740: Bugs in `migrate20.php` script.
+* The zip release ships with [sabre/vobject 3.4.8][vobj],
+  [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt].
+
+
+2.1.7 (2015-09-05)
+------------------
+
+* #705: A `MOVE` request that gets prevented from deleting the source resource
+  will still remove the target resource. Now all events are triggered before
+  any destructive operations.
+* The zip release ships with [sabre/vobject 3.4.7][vobj],
+  [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt].
+
+
+2.1.6 (2015-07-21)
+------------------
+
+* #657: Migration script would break when coming a cross an iCalendar object
+  with no UID.
+* #691: Workaround for broken Windows Phone client.
+* The zip release ships with [sabre/vobject 3.4.5][vobj],
+  [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt].
+
+
+2.1.5 (2015-07-11)
+------------------
+
+* #677: Resources with the name '0' would not get retrieved when using
+  `Depth: infinity` in a `PROPFIND` request.
+* The zip release ships with [sabre/vobject 3.4.5][vobj],
+  [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt].
+
+
+2.1.4 (2015-05-25)
+------------------
+
+* #651: Double-encoded path in the browser plugin. Should fix a few broken
+  links in some setups.
+* #650: Correctly cleaning up change info after deleting calendars (@ErrOrnAmE).
+* #658: Updating `schedule-calendar-default-URL` does not work well, so we're
+  disabling it until there's a better fix.
+* The zip release ships with [sabre/vobject 3.4.3][vobj],
+  [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt].
+
+
+2.1.3 (2015-02-25)
+------------------
+
+* #586: `SCHEDULE-STATUS` should not contain a reason-phrase.
+* #539: Fixed a bug related to scheduling in shared calendars.
+* #595: Support for calendar-timezone in iCalendar exports.
+* #581: findByUri would send empty prefixes to the principal backend (@soydeedo)
+* #611: Escaping a bit more HTML output in the browser plugin. (@LukasReschke)
+* #610: Don't allow discovery of arbitrary files using `..` in the browser
+  plugin (@LukasReschke).
+* Browser plugin now shows quota properties.
+* #612: PropertyStorage didn't delete properties from nodes when a node's
+  parents get deleted.
+* #581: Fixed problems related to finding attendee information during
+  scheduling.
+* The zip release ships with [sabre/vobject 3.4.2][vobj],
+  [sabre/http 3.0.4][http], and [sabre/event 2.0.1][evnt].
+
+
+2.1.2 (2014-12-10)
+------------------
+
+* #566: Another issue related to the migration script, which would cause
+  scheduling to not work well for events that were already added before the
+  migration.
+* #567: Doing freebusy requests on accounts that had 0 calendars would throw
+  a `E_NOTICE`.
+* #572: `HEAD` requests trigger a PHP warning.
+* #579: Browser plugin can throw exception for a few resourcetypes that didn't
+  have an icon defined.
+* The zip release ships with [sabre/vobject 3.3.4][vobj],
+  [sabre/http 3.0.4][http], and [sabre/event 2.0.1][evnt].
+
+
+2.1.1 (2014-11-22)
+------------------
+
+* #561: IMip Plugin didn't strip mailto: from email addresses.
+* #566: Migration process had 2 problems related to adding the `uid` field
+  to the `calendarobjects` table.
+* The zip release ships with [sabre/vobject 3.3.4][vobj],
+  [sabre/http 3.0.2][http], and [sabre/event 2.0.1][evnt].
+
+
+2.1.0 (2014-11-19)
+------------------
+
+* #541: CalDAV PDO backend didn't respect overridden PDO table names.
+* #550: Scheduling invites are no longer delivered into shared calendars.
+* #554: `calendar-multiget` `REPORT` did not work on inbox items.
+* #555: The `calendar-timezone` property is now respected for floating times
+  and all-day events in the `calendar-query`, `calendar-multiget` and
+  `free-busy-query` REPORTs.
+* #555: The `calendar-timezone` property is also respected for scheduling
+  free-busy requests.
+* #547: CalDAV system too aggressively 'corrects' incoming iCalendar data, and
+  as a result doesn't return an etag for common cases.
+* The zip release ships with [sabre/vobject 3.3.4][vobj],
+  [sabre/http 3.0.2][http], and [sabre/event 2.0.1][evnt].
+
+
+2.1.0-alpha2 (2014-10-23)
+-------------------------
+
+* Added: calendar-user-address-set to default principal search properties
+  list. This should fix iOS attendee autocomplete support.
+* Changed: Moved all 'notifications' functionality from `Sabre\CalDAV\Plugin`
+  to a new plugin: `Sabre\CalDAV\Notifications\Plugin`. If you want to use
+  notifications-related functionality, just add this plugin.
+* Changed: Accessing the caldav inbox, outbox or notification collection no
+  longer triggers getCalendarsForUser() on backends.
+* #533: New invites are no longer delivered to taks-only calendars.
+* #538: Added `calendarObjectChange` event.
+* Scheduling speedups.
+* #539: added `afterResponse` event. (@joserobleda)
+* Deprecated: All the "tableName" constructor arguments for all the PDO
+  backends are now deprecated. They still work, but will be removed in the
+  next major sabredav version. Every argument that is now deprecated can now
+  be accessed as a public property on the respective backends.
+* #529: Added getCalendarObjectByUID to PDO backend, speeding up scheduling
+  operations on large calendars.
+* The zip release ships with [sabre/vobject 3.3.3][vobj],
+  [sabre/http 3.0.2][http], and [sabre/event 2.0.1][evnt].
+
+
+2.1.0-alpha1 (2014-09-23)
+-------------------------
+
+* Added: Support for [rfc6638][rfc6638], also known as CalDAV Scheduling.
+* Added: Automatically converting between vCard 3, 4 and jCard using the
+  `Accept:` header, in CardDAV reports, and automatically converting from
+  jCard to vCard upon `PUT`. It's important to note that your backends _may_
+  now receive both vCard 3.0 and 4.0.
+* Added: #444. Collections can now opt-in to support high-speed `MOVE`.
+* Changed: PropertyStorage backends now have a `move` method.
+* Added: `beforeMove`, and `afterMove` events.
+* Changed: A few database changes for the CalDAV PDO backend. Make sure you
+  run `bin/migrate21.php` to upgrade your database schema.
+* Changed: CalDAV backends have a new method: `getCalendarObjectByUID`. This
+  method MUST be implemented by all backends, but the `AbstractBackend` has a
+  simple default implementation for this.
+* Changed: `Sabre\CalDAV\UserCalendars` has been renamed to
+  `Sabre\CalDAV\CalendarHome`.
+* Changed: `Sabre\CalDAV\CalendarRootNode` has been renamed to
+  `Sabre\CalDAV\CalendarRoot`.
+* Changed: The IMipHandler has been completely removed. With CalDAV scheduling
+  support, it is no longer needed. It's functionality has been replaced by
+  `Sabre\CalDAV\Schedule\IMipPlugin`, which can now send emails for clients
+  other than iCal.
+* Removed: `Sabre\DAV\ObjectTree` and `Sabre\DAV\Tree\FileSystem`. All this
+  functionality has been merged into `Sabre\DAV\Tree`.
+* Changed: PrincipalBackend now has a findByUri method.
+* Changed: `PrincipalBackend::searchPrincipals` has a new optional `test`
+  argument.
+* Added: Support for the `{http://calendarserver.org/ns/}email-address-set`
+  property.
+* #460: PropertyStorage must move properties during `MOVE` requests.
+* Changed: Restructured the zip distribution to be a little bit more lean
+  and consistent.
+* #524: Full support for the `test="anyof"` attribute in principal-search
+  `REPORT`.
+* #472: Always returning lock tokens in the lockdiscovery property.
+* Directory entries in the Browser plugin are sorted by type and name.
+  (@aklomp)
+* #486: It's now possible to return additional properties when an 'allprop'
+  PROPFIND request is being done. (@aklomp)
+* Changed: Now return HTTP errors when an addressbook-query REPORT is done
+  on a uri that's not a vcard. This should help with debugging this common
+  mistake.
+* Changed: `PUT` requests with a `Content-Range` header now emit a 400 status
+  instead of 501, as per RFC7231.
+* Added: Browser plugin can now display the contents of the
+  `{DAV:}supported-privilege-set` property.
+* Added: Now reporting `CALDAV:max-resource-size`, but we're not actively
+  restricting it yet.
+* Changed: CalDAV plugin is now responsible for reporting
+  `CALDAV:supported-collation-set` and `CALDAV:supported-calendar-data`
+  properties.
+* Added: Now reporting `CARDDAV:max-resource-size`, but we're not actively
+  restricting it yet.
+* Added: Support for `CARDDAV:supported-collation-set`.
+* Changed: CardDAV plugin is now responsible for reporting
+  `CARDDAV:supported-address-data`. This functionality has been removed from
+  the CardDAV PDO backend.
+* When a REPORT is not supported, we now emit HTTP error 415, instead of 403.
+* #348: `HEAD` requests now work wherever `GET` also works.
+* Changed: Lower priority for the iMip plugins `schedule` event listener.
+* Added: #523 Custom CalDAV backends can now mark any calendar as read-only.
+* The zip release ships with [sabre/vobject 3.3.3][vobj],
+  [sabre/http 3.0.0][http], and [sabre/event 2.0.0][evnt].
+
+
+2.0.9 (2015-09-04)
+------------------
+
+* #705: A `MOVE` request that gets prevented from deleting the source resource
+  will still remove the target resource. Now all events are triggered before
+  any destructive operations.
+* The zip release ships with [sabre/vobject 3.4.6][vobj],
+  [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt].
+
+
+
+2.0.8 (2015-07-11)
+------------------
+
+* #677: Resources with the name '0' would not get retrieved when using
+  `Depth: infinity` in a `PROPFIND` request.
+* The zip release ships with [sabre/vobject 3.3.5][vobj],
+  [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt].
+
+
+2.0.7 (2015-05-25)
+------------------
+
+* #650: Correctly cleaning up change info after deleting calendars (@ErrOrnAmE).
+* The zip release ships with [sabre/vobject 3.3.4][vobj],
+  [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt].
+
+
+2.0.6 (2014-12-10)
+------------------
+
+* Added `Sabre\CalDAV\CalendarRoot` as an alias for
+  `Sabre\CalDAV\CalendarRootNode`. The latter is going to be deprecated in 2.1,
+  so this makes it slightly easier to write code that works in both branches.
+* #497: Making sure we're initializing the sync-token field with a value after
+  migration.
+* The zip release ships with [sabre/vobject 3.3.4][vobj],
+  [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt].
+
+
+2.0.5 (2014-10-14)
+------------------
+
+* #514: CalDAV PDO backend didn't work when overriding the 'calendar changes'
+  database table name.
+* #515: 304 status code was not being sent when checking preconditions.
+* The zip release ships with [sabre/vobject 3.3.3][vobj],
+  [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt].
+
+
+2.0.4 (2014-08-27)
+------------------
+
+* #483: typo in calendars creation for PostgreSQL.
+* #487: Locks are now automatically removed after a node has been deleted.
+* #496: Improve CalDAV and CardDAV sync when there is no webdav-sync support.
+* Added: Automatically mapping internal sync-tokens to getctag.
+* The zip release ships with [sabre/vobject 3.3.1][vobj],
+  [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt].
+
+
+2.0.3 (2014-07-14)
+------------------
+
+* #474: Fixed PropertyStorage `pathFilter()`.
+* #476: CSP policy incorrect, causing stylesheets to not load in the browser
+  plugin.
+* #475: Href properties in the browser plugin sometimes included a backslash.
+* #478: `TooMuchMatches` exception never worked. This was fixed, and we also
+  took this opportunity to rename it to `TooManyMatches`.
+* The zip release ships with [sabre/vobject 3.2.4][vobj],
+  [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt].
+
+
+2.0.2 (2014-06-12)
+------------------
+
+* #470: Fixed compatibility with PHP < 5.4.14.
+* #467: Fixed a problem in `examples/calendarserver.php`.
+* #466: All the postgresql sample files have been updated.
+* Fixed: An error would be thrown if a client did a propfind on a node the
+  user didn't have access to.
+* Removed: Old and broken example code from the `examples/` directory.
+* The zip release ships with [sabre/vobject 3.2.3][vobj],
+  [sabre/http 2.0.3][http], and [sabre/event 1.0.1][evnt].
+
+
+2.0.1 (2014-05-28)
+------------------
+
+* #459: PROPFIND requests on Files with no Depth header would return a fatal
+  error.
+* #464: A PROPFIND allprops request should not return properties with status
+  404.
+* The zip release ships with [sabre/vobject 3.2.2][vobj],
+  [sabre/http 2.0.3][http], and [sabre/event 1.0.0][evnt].
+
+
+2.0.0 (2014-05-22)
+------------------
+
+* The zip release ships with [sabre/vobject 3.2.2][vobj],
+  [sabre/http 2.0.3][http], and [sabre/event 1.0.0][evnt].
+* Fixed: #456: Issue in sqlite migration script.
+* Updated: MySQL database schema optimized by using more efficient column types.
+* Cleaned up browser design.
+
+
+2.0.0-beta1 (2014-05-15)
+-------------------------
+
+* The zip release ships with [sabre/vobject 3.2.2][vobj],
+  [sabre/http 2.0.3][http], and [sabre/event 1.0.0][evnt].
+* BC Break: Property updating and fetching got refactored. Read the [migration
+  document][mi20] for more information. This allows for creation of a generic
+  property storage, and other property-related functionality that was not
+  possible before.
+* BC Break: Removed `propertyUpdate`, `beforeGetProperties` and
+  `afterGetProperties` events.
+* Fixed: #413: Memory optimizations for the CardDAV PDO backend.
+* Updated: Brand new browser plugin with more debugging features and a design
+  that is slightly less painful.
+* Added: Support for the `{DAV:}supported-method-set` property server-wide.
+* Making it easier for implementors to override how the CardDAV addressbook
+  home is located.
+* Fixed: Issue #422 Preconditions were not being set on PUT on non-existent
+  files. Not really a chance for data-loss, but incorrect nevertheless.
+* Fixed: Issue #428: Etag check with `If:` fails if the target is a collection.
+* Fixed: Issues #430, #431, #433: Locks plugin didn't not properly release
+  filesystem based locks.
+* Fixed: #443. Support for creating new calendar subscriptions for OS X 10.9.2
+  and up.
+* Removed: `Sabre\DAV\Server::NODE_*` constants.
+* Moved all precondition checking into a central place, instead of having to
+  think about it on a per-method basis.
+* jCal transformation for calendar-query REPORT now works again.
+* Switched to PSR-4
+* Fixed: #175. Returning ETag header upon a failed `If-Match` or
+  `If-None-Match` check.
+* Removed: `lib/Sabre/autoload.php`. Use `vendor/autoload.php` instead.
+* Removed: all the rfc documentation from the sabre/dav source. This made the
+  package needlessly larger.
+* Updated: Issue #439. Lots of updates in PATCH support. The
+  Sabre_DAV_PartialUpdate_IFile interface is now deprecated and will be
+  removed in a future version.
+* Added: `Sabre\DAV\Exception\LengthRequired`.
+
+1.9.0-alpha2 (2014-01-14)
+-------------------------
+
+* The zip release ships with sabre/vobject 3.1.3, sabre/http 2.0.1, and
+  sabre/event 1.0.0.
+* Added: Browser can now inspect any node, if ?sabreaction=browser is appended.
+* Fixed: Issue #178. Support for multiple items in the Timeout header.
+* Fixed: Issue #382. Stricter checking if calendar-query is allowed to run.
+* Added: Depth: Infinity support for PROPFIND request. Thanks Thomas Müller and
+  Markus Goetz.
+
+
+1.9.0-alpha1 (2013-11-07)
+-------------------------
+
+* The zip release ships with sabre/vobject 3.1.3, sabre/http 2.0.0alpha5, and
+  sabre/event 1.0.0.
+* BC Break: The CardDAV and CalDAV BackendInterface each have a new method:
+  getMultipleCards and getMultipleCalendarObjects. The Abstract and PDO backends
+  have default implementations, but if you implement that interface directly,
+  this method is now required.
+* BC Break: XML property classes now receive an extra argument in their
+  unserialize method ($propertyMap). This allows for recursively parsing
+  properties, if needed.
+* BC Break: Now using sabre/event for event emitting/subscription. For plugin
+  authors this means Server::subscribeEvent is now Server::on, and
+  Server::broadcastEvent is now Server::emit.
+* BC Break: Almost all core functionality moved into a CorePlugin.
+* BC Break: Most events triggered by the server got an overhaul.
+* Changed: Sabre\HTTP now moved into a dedicated sabre/http package.
+* Added: Support for WebDAV-sync (rfc6578).
+* Added: Support for caldav-subscriptions, which is an easy way for caldav
+  clients to manage a list of subscriptions on the server.
+* Added: Support for emitting and receiving jCal instead of iCalendar for
+  CalDAV.
+* Added: BasicCallback authenticaton backend, for creating simple authentication
+  systems without having to define any classes.
+* Added: A $transactionType property on the server class. This can be used for
+  logging and performance measuring purposes.
+* Fixed: If event handlers modify the request body from a PUT request, an ETag
+  is no longer sent back.
+* Added: Sabre\DAV\IMultiGet to optimize requests that retrieve information
+  about lists of resources.
+* Added: MultiGet support to default CalDAV and CardDAV backends, speeding up
+  the multiget and sync reports quite a bit!
+* Added: ICSExportPlugin can now generate jCal, filter on time-ranges and expand
+  recurrences.
+* Fixed: Read-only access to calendars still allows the sharee to modify basic
+  calendar properties, such as the displayname and color.
+* Changed: The default supportedPrivilegeSet has changed. Most privileges are no
+  longer marked as abstract.
+* Changed: More elegant ACL management for CalendarObject and Card nodes.
+* Added: Browser plugin now marks a carddav directory as type Directory, and a
+  shared calendar as 'Shared'.
+* Added: When debugExceptions is turned on, all previous exceptions are also
+  traversed.
+* Removed: Got rid of the Version classes for CalDAV, CardDAV, HTTP, and DAVACL.
+  Now that there's no separate packages anymore, this makes a bit more sense.
+* Added: Generalized the multistatus response parser a bit more, for better
+  re-use.
+* Added: Sabre\DAV\Client now has support for complex properties for PROPPATCH.
+  (Issue #299).
+* Added: Sabre\DAV\Client has support for gzip and deflate encoding.
+* Added: Sabre\DAV\Client now has support for sending objects as streams.
+* Added: Deserializer for {DAV:}current-user-privilege-set.
+* Added: Addressbooks or backends can now specify custom acl rules when creating
+  cards.
+* Added: The ability for plugins to validate custom tokens in If: headers.
+* Changed: Completely refactored the Lock plugin to deal with the new If: header
+  system.
+* Added: Checking preconditions for MOVE, COPY, DELETE and PROPPATCH methods.
+* Added: has() method on DAV\Property\SupportedReportSet.
+* Added: If header now gets checked (with ETag) all the time. Before the dealing
+  with the If-header was a responsibility of the Locking plugin.
+* Fixed: Outbox access for delegates.
+* Added: Issue 333: It's now possible to override the calendar-home in the
+  CalDAV plugin.
+* Added: A negotiateContentType to HTTP\Request. A convenience method.
+* Fixed: Issue 349: Denying copying or moving a resource into it's own subtree.
+* Fixed: SabreDAV catches every exception again.
+* Added: Issue #358, adding a component=vevent parameter to the content-types
+  for calendar objects, if the caldav backend provides this info.
+
+
+1.8.12-stable (2015-01-21)
+--------------------------
+
+* The zip release ships with sabre/vobject 2.1.7.
+* #568: Support empty usernames and passwords in basic auth.
+
+
+1.8.11 (2014-12-10)
+-------------------
+
+* The zip release ships with sabre/vobject 2.1.6.
+* Updated: MySQL database schema optimized by using more efficient column types.
+* #516: The DAV client will now only redirect to HTTP and HTTPS urls.
+
+
+1.8.10 (2014-05-15)
+-------------------
+
+* The zip release ships with sabre/vobject 2.1.4.
+* includes changes from version 1.7.12.
+
+
+1.8.9 (2014-02-26)
+------------------
+
+* The zip release ships with sabre/vobject 2.1.3.
+* includes changes from version 1.7.11.
+
+
+1.8.8 (2014-02-09)
+------------------
+
+* includes changes from version 1.7.10.
+* The zip release ships with sabre/vobject 2.1.3.
+
+1.8.7 (2013-10-02)
+------------------
+
+* the zip release ships with sabre/vobject 2.1.3.
+* includes changes from version 1.7.9.
+
+
+1.8.6 (2013-06-18)
+------------------
+
+* The zip release ships with sabre/vobject 2.1.0.
+* Includes changes from version 1.7.8.
+
+
+1.8.5 (2013-04-11)
+------------------
+
+* The zip release ships with sabre/vobject 2.0.7.
+* Includes changes from version 1.7.7.
+
+
+1.8.4 (2013-04-08)
+------------------
+
+* The zip release ships with sabre/vobject 2.0.7.
+* Includes changes from version 1.7.6.
+
+
+1.8.3 (2013-03-01)
+------------------
+
+* The zip release ships with sabre/vobject 2.0.6.
+* Includes changes from version 1.7.5.
+* Fixed: organizer email-address for shared calendars is now prefixed with
+  mailto:, as it should.
+
+
+1.8.2 (2013-01-19)
+------------------
+
+* The zip release ships with sabre/vobject 2.0.5.
+* Includes changes from version 1.7.4.
+
+
+1.8.1 (2012-12-01)
+------------------
+
+* The zip release ships with sabre/vobject 2.0.5.
+* Includes changes from version 1.7.3.
+* Fixed: Typo in 1.7 migration script caused it to fail.
+
+
+1.8.0 (2012-11-08)
+------------------
+
+* The zip release ships with sabre/vobject 2.0.5.
+* BC Break: Moved the entire codebase to PHP namespaces.
+* BC Break: Every backend package (CalDAV, CardDAV, Auth, Locks, Principals) now
+  has consistent naming conventions. There's a BackendInterface, and an
+  AbstractBackend class.
+* BC Break: Changed a bunch of constructor signatures in the CalDAV package, to
+  reduce dependencies on the ACL package.
+* BC Break: Sabre_CalDAV_ISharedCalendar now also has a getShares method, so
+  sharees can figure out who is also on a shared calendar.
+* Added: Sabre_DAVACL_IPrincipalCollection interface, to advertise support for
+  principal-property-search on any node.
+* Added: Simple console script to fire up a fileserver in the current directory
+  using PHP 5.4's built-in webserver.
+* Added: Sharee's can now also read out the list of invites for a shared
+  calendar.
+* Added: The Proxy principal classes now both implement an interface, for
+  greater flexibility.
+
+
+1.7.13 (2014-07-28)
+-------------------
+
+* The zip release ships with sabre/vobject 2.1.4.
+* Changed: Removed phing and went with a custom build script for now.
+
+
+1.7.12 (2014-05-15)
+-------------------
+
+* The zip release ships with sabre/vobject 2.1.4.
+* Updated: Issue #439. Lots of updates in PATCH support. The
+  Sabre_DAV_PartialUpdate_IFile interface is now deprecated and will be removed
+  in a future version.
+* Fixed: Restoring old setting after changing libxml_disable_entity_loader.
+* Fixed: Issue #422: Preconditions were not being set on PUT on non-existent
+  files. Not really a chance for data-loss, but incorrect nevertheless.
+* Fixed: Issue #427: Now checking preconditions on DELETE requests.
+* Fixed: Issue #428: Etag check with If: fails if the target is a collection.
+* Fixed: Issue #393: PATCH request with missing end-range was handled
+  incorrectly.
+* Added: Sabre_DAV_Exception_LengthRequired to omit 411 errors.
+
+
+1.7.11 (2014-02-26)
+-------------------
+
+* The zip release ships with sabre/vobject 2.1.3.
+* Fixed: Issue #407: large downloads failed.
+* Fixed: Issue #414: XXE security problem on older PHP versions.
+
+
+1.7.10 (2014-02-09)
+-------------------
+
+* Fixed: Issue #374: Don't urlescape colon (:) when it's not required.
+* Fixed: Potential security vulnerability in the http client.
+
+
+1.7.9 (2013-10-02)
+------------------
+
+* The zip release ships with sabre/vobject 2.1.3.
+* Fixed: Issue #365. Incorrect output when principal urls have spaces in them.
+* Added: Issue #367: Automatically adding a UID to vcards that don't have them.
+
+
+1.7.8 (2013-06-17)
+------------------
+
+* The zip release ships with sabre/vobject 2.1.0.
+* Changed: Sabre\DAV\Client::verifyPeer is now a protected property (instead of
+  private).
+* Fixed: Text was incorrectly escaped in the Href and HrefList properties,
+  disallowing urls with ampersands (&) in them.
+* Added: deserializer for Sabre\DAVACL\Property\CurrentUserPrivilegeSet.
+* Fixed: Issue 335: Client only deserializes properties with status 200.
+* Fixed: Issue 341: Escaping xml in 423 Locked error responses.
+* Added: Issue 339: beforeGetPropertiesForPath event.
+
+
+1.7.7 (2013-04-11)
+------------------
+
+* The zip release ships with sabre/vobject 2.0.7.
+* Fixed: Assets in the browser plugins were not being served on windows
+  machines.
+
+
+1.7.6 (2013-04-08)
+------------------
+
+* The zip release ships with sabre/vobject 2.0.7.
+* Fixed: vcardurl in database schema can now hold 255 characters instead of 80
+  (which is often way to small).
+* Fixed: The browser plugin potentially allowed people to open any arbitrary
+  file on windows servers (CVE-2013-1939).
+
+
+1.7.5 (2013-03-01)
+------------------
+
+* The zip release ships with sabre/vobject 2.0.6.
+* Change: No longer advertising support for 4.0 vcards. iOS and OS X address
+  book don't handle this well, and just advertising 3.0 support seems like the
+  most logical course of action.
+* Added: ->setVerifyPeers to Sabre_DAV_Client (greatly resisting against it,
+  don't use this..).
+
+
+1.7.4 (2013-01-19)
+------------------
+
+* The zip release ships with sabre/vobject 2.0.5.
+* Changed: To be compatible with MS Office 2011 for Mac, a workaround was
+  removed that was added to support old versions of Windows XP (pre-SP3).
+  Indeed! We needed a crazy workaround to work with one MS product in the past,
+  and we can't keep that workaround to be compatible with another MS product.
+* Fixed: expand-properties REPORT had incorrect values for the href element.
+* Fixed: Range requests now work for non-seekable streams. (Thanks Alfred
+  Klomp).
+* Fixed: Changed serialization of {DAV:}getlastmodified and {DAV:}supportedlock
+  to improve compatibility with MS Office 2011 for Mac.
+* Changed: reverted the automatic translation of 'DAV:' xml namespaces to
+  'urn:DAV' when parsing files. Issues were reported with libxml 2.6.32, on a
+  relatively recent debian release, so we'll wait till 2015 to take this one out
+  again.
+* Added: Sabre_DAV_Exception_ServiceUnavailable, for emitting 503's.
+
+
+1.7.3 (2012-12-01)
+------------------
+
+* The zip release ships with sabre/vobject 2.0.5.
+* Fixed: Removing double slashes from getPropertiesForPath.
+* Change: Marked a few more properties in the CardDAV as protected, instead of
+  private.
+* Fixed: SharingPlugin now plays nicer with other plugins with similar
+  functionality.
+* Fixed: Issue 174. Sending back HTTP/1.0 for requests with this version.
+
+
+1.7.2 (2012-11-08)
+------------------
+
+* The zip release ships with sabre/vobject 2.0.5.
+* Added: ACL plugin advertises support for 'calendarserver-principal-
+  property-search'.
+* Fixed: [#153] Allowing for relative http principals in iMip requests.
+* Added: Support for cs:first-name and cs:last-name properties in sharing
+  invites.
+* Fixed: Made a bunch of properties protected, where they were private before.
+* Added: Some non-standard properties for sharing to improve compatibility.
+* Fixed: some bugfixes in postgres sql script.
+* Fixed: When requesting some properties using PROPFIND, they could show up as
+  both '200 Ok' and '403 Forbidden'.
+* Fixed: calendar-proxy principals were not checked for deeper principal
+  membership than 1 level.
+* Fixed: setGroupMemberSet argument now correctly receives relative principal
+  urls, instead of the absolute ones.
+* Fixed: Server class will filter out any bonus properties if any extra were
+  returned. This means the implementor of the IProperty class can be a bit
+  lazier when implementing. Note: bug numbers after this line refer to Google
+  Code tickets. We're using github now.
+
+
+1.7.1 (2012-10-07)
+------------------
+
+* Fixed: include path problem in the migration script.
+
+
+1.7.0 (2012-10-06)
+------------------
+
+* BC Break: The calendarobjects database table has a bunch of new fields, and a
+  migration script is required to ensure everything will keep working. Read the
+  wiki for more details.
+* BC Break: The ICalendar interface now has a new method: calendarQuery.
+* BC Break: In this version a number of classes have been deleted, that have
+  been previously deprecated. Namely: - Sabre_DAV_Directory (now:
+  Sabre_DAV_Collection) - Sabre_DAV_SimpleDirectory (now:
+  Sabre_DAV_SimpleCollection)
+* BC Break: Sabre_CalDAV_Schedule_IMip::sendMessage now has an extra argument.
+  If you extended this class, you should fix this method. It's only used for
+  informational purposes.
+* BC Break: The DAV: namespace is no longer converted to urn:DAV. This was a
+  workaround for a bug in older PHP versions (pre-5.3).
+* Removed: Sabre.includes.php was deprecated, and is now removed.
+* Removed: Sabre_CalDAV_Server was deprecated, and is now removed. Please use
+  Sabre_DAV_Server and check the examples in the examples/ directory.
+* Changed: The Sabre_VObject library now spawned into it's own project! The
+  VObject library is still included in the SabreDAV zip package.
+* Added: Experimental interfaces to allow implementation of caldav-sharing. Note
+  that no implementation is provided yet, just the api hooks.
+* Added: Free-busy reporting compliant with the caldav-scheduling standard. This
+  allows iCal and other clients to fetch other users' free-busy data.
+* Added: Experimental NotificationSupport interface to add caldav notifications.
+* Added: VCF Export plugin. If enabled, it can generate an export of an entire
+  addressbook.
+* Added: Support for PATCH using a SabreDAV format, to live-patch files.
+* Added: Support for Prefer: return-minimal and Brief: t headers for PROPFIND
+  and PROPPATCH requests.
+* Changed: Responsibility for dealing with the calendar-query is now moved from
+  the CalDAV plugin to the CalDAV backends. This allows for heavy optimizations.
+* Changed: The CalDAV PDO backend is now a lot faster for common calendar
+  queries.
+* Changed: We are now using the composer autoloader.
+* Changed: The CalDAV backend now all implement an interface.
+* Changed: Instead of Sabre_DAV_Property, Sabre_DAV_PropertyInterface is now the
+  basis of every property class.
+* Update: Caching results for principal lookups. This should cut down queries
+  and performance for a number of heavy requests.
+* Update: ObjectTree caches lookups much more aggresively, which will help
+  especially speeding up a bunch of REPORT queries.
+* Added: Support for the schedule-calendar-transp property.
+* Fixed: Marking both the text/calendar and text/x-vcard as UTF-8 encoded.
+* Fixed: Workaround for the SOGO connector, as it doesn't understand receiving
+  "text/x-vcard; charset=utf-8" for a contenttype.
+* Added: Sabre_DAV_Client now throws more specific exceptions in cases where we
+  already has an exception class.
+* Added: Sabre_DAV_PartialUpdate. This plugin allows you to use the PATCH method
+  to update parts of a file.
+* Added: Tons of timezone name mappings for Microsoft Exchange.
+* Added: Support for an 'exception' event in the server class.
+* Fixed: Uploaded VCards without a UID are now rejected. (thanks Dominik!)
+* Fixed: Rejecting calendar objects if they are not in the
+  supported-calendar-component list. (thanks Armin!)
+* Fixed: Issue 219: serialize() now reorders correctly.
+* Fixed: Sabre_DAV_XMLUtil no longer returns empty $dom->childNodes if there is
+  whitespace in $dom.
+* Fixed: Returning 409 Conflict instead of 500 when an attempt is made to create
+  a file as a child of something that's not a collection.
+* Fixed: Issue 237: xml-encoding values in SabreDAV error responses.
+* Fixed: Returning 403, instead of 501 when an unknown REPORT is requested.
+* Fixed: Postfixing slash on {DAV:}owner properties.
+* Fixed: Several embarrassing spelling mistakes in docblocks.
+
+
+1.6.10 (2013-06-17)
+-------------------
+
+* Fixed: Text was incorrectly escaped in the Href and HrefList properties,
+  disallowing urls with ampersands (&) in them.
+* Fixed: Issue 341: Escaping xml in 423 Locked error responses.
+
+
+1.6.9 (2013-04-11)
+------------------
+
+* Fixed: Assets in the browser plugins were not being served on windows
+  machines.
+
+
+1.6.8 (2013-04-08)
+------------------
+
+* Fixed: vcardurl in database schema can now hold 255 characters instead of 80
+  (which is often way to small).
+* Fixed: The browser plugin potentially allowed people to open any arbitrary
+  file on windows servers. (CVE-2013-1939).
+
+
+1.6.7 (2013-03-01)
+------------------
+
+* Change: No longer advertising support for 4.0 vcards. iOS and OS X address
+  book don't handle this well, and just advertising 3.0 support seems like the
+  most logical course of action.
+* Added: ->setVerifyPeers to Sabre_DAV_Client (greatly resisting against it,
+  don't use this..).
+
+
+1.6.6 (2013-01-19)
+------------------
+
+* Fixed: Backported a fix for broken XML serialization in error responses.
+  (Thanks @DeepDiver1975!)
+
+
+1.6.5 (2012-10-04)
+------------------
+
+* Fixed: Workaround for line-ending bug OS X 10.8 addressbook has.
+* Added: Ability to allow users to set SSL certificates for the Client class.
+  (Thanks schiesbn!).
+* Fixed: Directory indexes with lots of nodes should be a lot faster.
+* Fixed: Issue 235: E_NOTICE thrown when doing a propfind request with
+  Sabre_DAV_Client, and no valid properties are returned.
+* Fixed: Issue with filtering on alarms in tasks.
+
+
+1.6.4 (2012-08-02)
+------------------
+
+* Fixed: Issue 220: Calendar-query filters may fail when filtering on alarms, if
+  an overridden event has it's alarm removed.
+* Fixed: Compatibility for OS/X 10.8 iCal in the IMipHandler.
+* Fixed: Issue 222: beforeWriteContent shouldn't be called for lock requests.
+* Fixed: Problem with POST requests to the outbox if mailto: was not lower
+  cased.
+* Fixed: Yearly recurrence rule expansion on leap-days no behaves correctly.
+* Fixed: Correctly checking if recurring, all-day events with no dtstart fall in
+  a timerange if the start of the time-range exceeds the start of the instance
+  of an event, but not the end.
+* Fixed: All-day recurring events wouldn't match if an occurence ended exactly
+  on the start of a time-range.
+* Fixed: HTTP basic auth did not correctly deal with passwords containing colons
+  on some servers.
+* Fixed: Issue 228: DTEND is now non-inclusive for all-day events in the
+  calendar-query REPORT and free-busy calculations.
+
+
+1.6.3 (2012-06-12)
+------------------
+
+* Added: It's now possible to specify in Sabre_DAV_Client which type of
+  authentication is to be used.
+* Fixed: Issue 206: Sabre_DAV_Client PUT requests are fixed.
+* Fixed: Issue 205: Parsing an iCalendar 0-second date interval.
+* Fixed: Issue 112: Stronger validation of iCalendar objects. Now making sure
+  every iCalendar object only contains 1 component, and disallowing vcards,
+  forcing every component to have a UID.
+* Fixed: Basic validation for vcards in the CardDAV plugin.
+* Fixed: Issue 213: Workaround for an Evolution bug, that prevented it from
+  updating events.
+* Fixed: Issue 211: A time-limit query on a non-relative alarm trigger in a
+  recurring event could result in an endless loop.
+* Fixed: All uri fields are now a maximum of 200 characters. The Bynari outlook
+  plugin used much longer strings so this should improve compatibility.
+* Fixed: Added a workaround for a bug in KDE 4.8.2 contact syncing. See
+  https://bugs.kde.org/show_bug.cgi?id=300047
+* Fixed: Issue 217: Sabre_DAV_Tree_FileSystem was pretty broken.
+
+
+1.6.2 (2012-04-16)
+------------------
+
+* Fixed: Sabre_VObject_Node::$parent should have been public.
+* Fixed: Recurrence rules of events are now taken into consideration when doing
+  time-range queries on alarms.
+* Fixed: Added a workaround for the fact that php's DateInterval cannot parse
+  weeks and days at the same time.
+* Added: Sabre_DAV_Server::$exposeVersion, allowing you to hide SabreDAV's
+  version number from various outputs.
+* Fixed: DTSTART values would be incorrect when expanding events.
+* Fixed: DTSTART and DTEND would be incorrect for expansion of WEEKLY BYDAY
+  recurrences.
+* Fixed: Issue 203: A problem with overridden events hitting the exact date and
+  time of a subsequent event in the recurrence set.
+* Fixed: There was a problem with recurrence rules, for example the 5th tuesday
+  of the month, if this day did not exist.
+* Added: New HTTP status codes from draft-nottingham-http-new-status-04.
+
+
+1.6.1 (2012-03-05)
+------------------
+
+* Added: createFile and put() can now return an ETag.
+* Added: Sending back an ETag on for operations on CardDAV backends. This should
+  help with OS X 10.6 Addressbook compatibility.
+* Fixed: Fixed a bug where an infinite loop could occur in the recurrence
+  iterator if the recurrence was YEARLY, with a BYMONTH rule, and either BYDAY
+  or BYMONTHDAY match the first day of the month.
+* Fixed: Events that are excluded using EXDATE are still counted in the COUNT=
+  parameter in the RRULE property.
+* Added: Support for time-range filters on VALARM components.
+* Fixed: Correctly filtering all-day events.
+* Fixed: Sending back correct mimetypes from the browser plugin (thanks
+  Jürgen).
+* Fixed: Issue 195: Sabre_CardDAV pear package had an incorrect dependency.
+* Fixed: Calendardata would be destroyed when performing a MOVE request.
+
+
+1.6.0 (2012-02-22)
+------------------
+
+* BC Break: Now requires PHP 5.3
+* BC Break: Any node that implemented Sabre_DAVACL_IACL must now also implement
+  the getSupportedPrivilegeSet method. See website for details.
+* BC Break: Moved functions from Sabre_CalDAV_XMLUtil to
+  Sabre_VObject_DateTimeParser.
+* BC Break: The Sabre_DAVACL_IPrincipalCollection now has two new methods:
+  'searchPrincipals' and 'updatePrincipal'.
+* BC Break: Sabre_DAV_ILockable is removed and all related per-node locking
+  functionality.
+* BC Break: Sabre_DAV_Exception_FileNotFound is now deprecated in favor of
+  Sabre_DAV_Exception_NotFound. The former will be removed in a later version.
+* BC Break: Removed Sabre_CalDAV_ICalendarUtil, use Sabre_VObject instead.
+* BC Break: Sabre_CalDAV_Server is now deprecated, check out the documentation
+  on how to setup a caldav server with just Sabre_DAV_Server.
+* BC Break: Default Principals PDO backend now needs a new field in the
+  'principals' table. See the website for details.
+* Added: Ability to create new calendars and addressbooks from within the
+  browser plugin.
+* Added: Browser plugin: icons for various nodes.
+* Added: Support for FREEBUSY reports!
+* Added: Support for creating principals with admin-level privileges.
+* Added: Possibility to let server send out invitation emails on behalf of
+  CalDAV client, using Sabre_CalDAV_Schedule_IMip.
+* Changed: beforeCreateFile event now passes data argument by reference.
+* Changed: The 'propertyMap' property from Sabre_VObject_Reader, must now be
+  specified in Sabre_VObject_Property::$classMap.
+* Added: Ability for plugins to tell the ACL plugin which principal plugins are
+  searchable.
+* Added: [DAVACL] Per-node overriding of supported privileges. This allows for
+  custom privileges where needed.
+* Added: [DAVACL] Public 'principalSearch' method on the DAVACL plugin, which
+  allows for easy searching for principals, based on their properties.
+* Added: Sabre_VObject_Component::getComponents() to return a list of only
+  components and not properties.
+* Added: An includes.php file in every sub-package (CalDAV, CardDAV, DAV,
+  DAVACL, HTTP, VObject) as an alternative to the autoloader. This often works
+  much faster.
+* Added: Support for the 'Me card', which allows Addressbook.app users specify
+  which vcard is their own.
+* Added: Support for updating principal properties in the DAVACL principal
+  backends.
+* Changed: Major refactoring in the calendar-query REPORT code. Should make
+  things more flexible and correct.
+* Changed: The calendar-proxy-[read|write] principals will now only appear in
+  the tree, if they actually exist in the Principal backend. This should reduce
+  some problems people have been having with this.
+* Changed: Sabre_VObject_Element_* classes are now renamed to
+  Sabre_VObject_Property. Old classes are retained for backwards compatibility,
+  but this will be removed in the future.
+* Added: Sabre_VObject_FreeBusyGenerator to generate free-busy reports based on
+  lists of events.
+* Added: Sabre_VObject_RecurrenceIterator to find all the dates and times for
+  recurring events.
+* Fixed: Issue 97: Correctly handling RRULE for the calendar-query REPORT.
+* Fixed: Issue 154: Encoding of VObject parameters with no value was incorrect.
+* Added: Support for {DAV:}acl-restrictions property from RFC3744.
+* Added: The contentlength for calendar objects can now be supplied by a CalDAV
+  backend, allowing for more optimizations.
+* Fixed: Much faster implementation of Sabre_DAV_URLUtil::encodePath.
+* Fixed: {DAV:}getcontentlength may now be not specified.
+* Fixed: Issue 66: Using rawurldecode instead of urldecode to decode paths from
+  clients. This means that + will now be treated as a literal rather than a
+  space, and this should improve compatibility with the Windows built-in client.
+* Added: Sabre_DAV_Exception_PaymentRequired exception, to emit HTTP 402 status
+  codes.
+* Added: Some mysql unique constraints to example files.
+* Fixed: Correctly formatting HTTP dates.
+* Fixed: Issue 94: Sending back Last-Modified header for 304 responses.
+* Added: Sabre_VObject_Component_VEvent, Sabre_VObject_Component_VJournal,
+  Sabre_VObject_Component_VTodo and Sabre_VObject_Component_VCalendar.
+* Changed: Properties are now also automatically mapped to their appropriate
+  classes, if they are created using the add() or __set() methods.
+* Changed: Cloning VObject objects now clones the entire tree, rather than just
+  the default shallow copy.
+* Added: Support for recurrence expansion in the CALDAV:calendar-multiget and
+  CALDAV:calendar-query REPORTS.
+* Changed: CalDAV PDO backend now sorts calendars based on the internal
+  'calendarorder' field.
+* Added: Issue 181: Carddav backends may no optionally not supply the carddata
+  in getCards, if etag and size are specified. This may speed up certain
+  requests.
+* Added: More arguments to beforeWriteContent and beforeCreateFile (see
+  WritingPlugins wiki document).
+* Added: Hook for iCalendar validation. This allows us to validate iCalendar
+  objects when they're uploaded. At the moment we're just validating syntax.
+* Added: VObject now support Windows Timezone names correctly (thanks mrpace2).
+* Added: If a timezonename could not be detected, we fall back on the default
+  PHP timezone.
+* Added: Now a Composer package (thanks willdurand).
+* Fixed: Support for \N as a newline character in the VObject reader.
+* Added: afterWriteContent, afterCreateFile and afterUnbind events.
+* Added: Postgresql example files. Not part of the unittests though, so use at
+  your own risk.
+* Fixed: Issue 182: Removed backticks from sql queries, so it will work with
+  Postgres.
+
+
+1.5.9 (2012-04-16)
+------------------
+
+* Fixed: Issue with parsing timezone identifiers that were surrounded by quotes.
+  (Fixes emClient compatibility).
+
+
+1.5.8 (2012-02-22)
+------------------
+
+* Fixed: Issue 95: Another timezone parsing issue, this time in calendar-query.
+
+
+1.5.7 (2012-02-19)
+------------------
+
+* Fixed: VObject properties are now always encoded before components.
+* Fixed: Sabre_DAVACL had issues with multiple levels of privilege aggregration.
+* Changed: Added 'GuessContentType' plugin to fileserver.php example.
+* Fixed: The Browser plugin will now trigger the correct events when creating
+  files.
+* Fixed: The ICSExportPlugin now considers ACL's.
+* Added: Made it optional to supply carddata from an Addressbook backend when
+  requesting getCards. This can make some operations much faster, and could
+  result in much lower memory use.
+* Fixed: Issue 187: Sabre_DAV_UUIDUtil was missing from includes file.
+* Fixed: Issue 191: beforeUnlock was triggered twice.
+
+
+1.5.6 (2012-01-07)
+------------------
+
+* Fixed: Issue 174: VObject could break UTF-8 characters.
+* Fixed: pear package installation issues.
+
+
+1.5.5 (2011-12-16)
+------------------
+
+* Fixed: CalDAV time-range filter workaround for recurring events.
+* Fixed: Bug in Sabre_DAV_Locks_Backend_File that didn't allow multiple files to
+  be locked at the same time.
+
+
+1.5.4 (2011-10-28)
+------------------
+
+* Fixed: GuessContentType plugin now supports mixed case file extensions.
+* Fixed: DATE-TIME encoding was wrong in VObject. (we used 'DATETIME').
+* Changed: Sending back HTTP 204 after a PUT request on an existing resource
+  instead of HTTP 200. This should fix Evolution CardDAV client compatibility.
+* Fixed: Issue 95: Parsing X-LIC-LOCATION if it's available.
+* Added: All VObject elements now have a reference to their parent node.
+
+
+1.5.3 (2011-09-28)
+------------------
+
+* Fixed: Sabre_DAV_Collection was missing from the includes file.
+* Fixed: Issue 152. iOS 1.4.2 apparantly requires HTTP/1.1 200 OK to be in
+  uppercase.
+* Fixed: Issue 153: Support for files with mixed newline styles in
+  Sabre_VObject.
+* Fixed: Issue 159: Automatically converting any vcard and icalendardata to
+  UTF-8.
+* Added: Sabre_DAV_SimpleFile class for easy static file creation.
+* Added: Issue 158: Support for the CARDDAV:supported-address-data property.
+
+
+1.5.2 (2011-09-21)
+------------------
+
+* Fixed: carddata and calendardata MySQL fields are now of type 'mediumblob'.
+  'TEXT' was too small sometimes to hold all the data.
+* Fixed: {DAV:}supported-report-set is now correctly reporting the reports for
+  IAddressBook.
+* Added: Sabre_VObject_Property::add() to add duplicate parameters to
+  properties.
+* Added: Issue 151: Sabre_CalDAV_ICalendar and Sabre_CalDAV_ICalendarObject
+  interfaces.
+* Fixed: Issue 140: Not returning 201 Created if an event cancelled the creation
+  of a file.
+* Fixed: Issue 150: Faster URLUtil::encodePath() implementation.
+* Fixed: Issue 144: Browser plugin could interfere with
+  TemporaryFileFilterPlugin if it was loaded first.
+* Added: It's not possible to specify more 'alternate uris' in principal
+  backends.
+
+
+1.5.1 (2011-08-24)
+------------------
+
+* Fixed: Issue 137. Hiding action interface in HTML browser for non-collections.
+* Fixed: addressbook-query is now correctly returned from the
+  {DAV:}supported-report-set property.
+* Fixed: Issue 142: Bugs in groupwareserver.php example.
+* Fixed: Issue 139: Rejecting PUT requests with Content-Range.
+
+
+1.5.0 (2011-08-12)
+------------------
+
+* Added: CardDAV support.
+* Added: An experimental WebDAV client.
+* Added: MIME-Directory grouping support in the VObject library. This is very
+  useful for people attempting to parse vcards.
+* BC Break: Adding parameters with the VObject libraries now overwrites the
+  previous parameter, rather than just add it. This makes more sense for 99% of
+  the cases.
+* BC Break: lib/Sabre.autoload.php is now removed in favor of
+  lib/Sabre/autoload.php.
+* Deprecated: Sabre_DAV_Directory is now deprecated and will be removed in a
+  future version. Use Sabre_DAV_Collection instead.
+* Deprecated: Sabre_DAV_SimpleDirectory is now deprecated and will be removed in
+  a future version. Use Sabre_DAV_SimpleCollection instead.
+* Fixed: Problem with overriding tablenames for the CalDAV backend.
+* Added: Clark-notation parser to XML utility.
+* Added: unset() support to VObject components.
+* Fixed: Refactored CalDAV property fetching to be faster and simpler.
+* Added: Central string-matcher for CalDAV and CardDAV plugins.
+* Added: i;unicode-casemap support
+* Fixed: VObject bug: wouldn't parse parameters if they weren't specified in
+  uppercase.
+* Fixed: VObject bug: Parameters now behave more like Properties.
+* Fixed: VObject bug: Parameters with no value are now correctly parsed.
+* Changed: If calendars don't specify which components they allow, 'all'
+  components are assumed (e.g.: VEVENT, VTODO, VJOURNAL).
+* Changed: Browser plugin now uses POST variable 'sabreAction' instead of
+  'action' to reduce the chance of collisions.
+
+
+1.4.4 (2011-07-07)
+------------------
+
+* Fixed: Issue 131: Custom CalDAV backends could break in certain cases.
+* Added: The option to override the default tablename all PDO backends use.
+  (Issue 60).
+* Fixed: Issue 124: 'File' authentication backend now takes realm into
+  consideration.
+* Fixed: Sabre_DAV_Property_HrefList now properly deserializes. This allows
+  users to update the {DAV:}group-member-set property.
+* Added: Helper functions for DateTime-values in Sabre_VObject package.
+* Added: VObject library can now automatically map iCalendar properties to
+  custom classes.
+
+
+1.4.3 (2011-04-25)
+------------------
+
+* Fixed: Issue 123: Added workaround for Windows 7 UNLOCK bug.
+* Fixed: datatype of lastmodified field in mysql.calendars.sql. Please change
+  the DATETIME field to an INT to ensure this field will work correctly.
+* Change: Sabre_DAV_Property_Principal is now renamed to
+  Sabre_DAVACL_Property_Principal.
+* Added: API level support for ACL HTTP method.
+* Fixed: Bug in serializing {DAV:}acl property.
+* Added: deserializer for {DAV:}resourcetype property.
+* Added: deserializer for {DAV:}acl property.
+* Added: deserializer for {DAV:}principal property.
+
+
+1.4.2-beta (2011-04-01)
+-----------------------
+
+* Added: It's not possible to disable listing of nodes that are denied read
+  access by ACL.
+* Fixed: Changed a few properties in CalDAV classes from private to protected.
+* Fixed: Issue 119: Terrible things could happen when relying on guessBaseUri,
+  the server was running on the root of the domain and a user tried to access a
+  file ending in .php. This is a slight BC break.
+* Fixed: Issue 118: Lock tokens in If headers without a uri should be treated as
+  the request uri, not 'all relevant uri's.
+* Fixed: Issue 120: PDO backend was incorrectly fetching too much locks in cases
+  where there were similar named locked files in a directory.
+
+
+1.4.1-beta (2011-02-26)
+-----------------------
+
+* Fixed: Sabre_DAV_Locks_Backend_PDO returned too many locks.
+* Fixed: Sabre_HTTP_Request::getHeader didn't return Content-Type when running
+  on apache, so a few workarounds were added.
+* Change: Slightly changed CalDAV Backend API's, to allow for heavy
+  optimizations. This is non-bc breaking.
+
+
+1.4.0-beta (2011-02-12)
+-----------------------
+
+* Added: Partly RFC3744 ACL support.
+* Added: Calendar-delegation (caldav-proxy) support.
+* BC break: In order to fix Issue 99, a new argument had to be added to
+  Sabre_DAV_Locks_Backend_*::getLocks classes. Consult the classes for details.
+* Deprecated: Sabre_DAV_Locks_Backend_FS is now deprecated and will be removed
+  in a later version. Use PDO or the new File class instead.
+* Deprecated: The Sabre_CalDAV_ICalendarUtil class is now marked deprecated, and
+  will be removed in a future version. Please use Sabre_VObject instead.
+* Removed: All principal-related functionality has been removed from the
+  Sabre_DAV_Auth_Plugin, and moved to the Sabre_DAVACL_Plugin.
+* Added: VObject library, for easy vcard/icalendar parsing using a natural
+  interface.
+* Added: Ability to automatically generate full .ics feeds off calendars. To
+  use: Add the Sabre_CalDAV_ICSExportPlugin, and add ?export to your calendar
+  url.
+* Added: Plugins can now specify a pluginname, for easy access using
+  Sabre_DAV_Server::getPlugin().
+* Added: beforeGetProperties event.
+* Added: updateProperties event.
+* Added: Principal listings and calendar-access can now be done privately,
+  disallowing users from accessing or modifying other users' data.
+* Added: You can now pass arrays to the Sabre_DAV_Server constructor. If it's an
+  array with node-objects, a Root collection will automatically be created, and
+  the nodes are used as top-level children.
+* Added: The principal base uri is now customizable. It used to be hardcoded to
+  'principals/[user]'.
+* Added: getSupportedReportSet method in ServerPlugin class. This allows you to
+  easily specify which reports you're implementing.
+* Added: A '..' link to the HTML browser.
+* Fixed: Issue 99: Locks on child elements were ignored when their parent nodes
+  were deleted.
+* Fixed: Issue 90: lockdiscovery property and LOCK response now include a
+  {DAV}lockroot element.
+* Fixed: Issue 96: support for 'default' collation in CalDAV text-match filters.
+* Fixed: Issue 102: Ensuring that copy and move with identical source and
+  destination uri's fails.
+* Fixed: Issue 105: Supporting MKCALENDAR with no body.
+* Fixed: Issue 109: Small fixes in Sabre_HTTP_Util.
+* Fixed: Issue 111: Properly catching the ownername in a lock (if it's a string)
+* Fixed: Sabre_DAV_ObjectTree::nodeExist always returned false for the root
+  node.
+* Added: Global way to easily supply new resourcetypes for certain node classes.
+* Fixed: Issue 59: Allowing the user to override the authentication realm in
+  Sabre_CalDAV_Server.
+* Update: Issue 97: Looser time-range checking if there's a recurrence rule in
+  an event. This fixes 'missing recurring events'.
+
+
+1.3.0 (2010-10-14)
+------------------
+
+* Added: childExists method to Sabre_DAV_ICollection. This is an api break, so
+  if you implement Sabre_DAV_ICollection directly, add the method.
+* Changed: Almost all HTTP method implementations now take a uri argument,
+  including events. This allows for internal rerouting of certain calls. If you
+  have custom plugins, make sure they use this argument. If they don't, they
+  will likely still work, but it might get in the way of future changes.
+* Changed: All getETag methods MUST now surround the etag with double-quotes.
+  This was a mistake made in all previous SabreDAV versions. If you don't do
+  this, any If-Match, If-None-Match and If: headers using Etags will work
+  incorrectly. (Issue 85).
+* Added: Sabre_DAV_Auth_Backend_AbstractBasic class, which can be used to easily
+  implement basic authentication.
+* Removed: Sabre_DAV_PermissionDenied class. Use Sabre_DAV_Forbidden instead.
+* Removed: Sabre_DAV_IDirectory interface, use Sabre_DAV_ICollection instead.
+* Added: Browser plugin now uses {DAV:}displayname if this property is
+  available.
+* Added: Cache layer in the ObjectTree.
+* Added: Tree classes now have a delete and getChildren method.
+* Fixed: If-Modified-Since and If-Unmodified-Since would be incorrect if the
+  date is an exact match.
+* Fixed: Support for multiple ETags in If-Match and If-None-Match headers.
+* Fixed: Improved baseUrl handling.
+* Fixed: Issue 67: Non-seekable stream support in ::put()/::get().
+* Fixed: Issue 65: Invalid dates are now ignored.
+* Updated: Refactoring in Sabre_CalDAV to make everything a bit more ledgable.
+* Fixed: Issue 88, Issue 89: Fixed compatibility for running SabreDAV on
+  Windows.
+* Fixed: Issue 86: Fixed Content-Range top-boundary from 'file size' to 'file
+  size'-1.
+
+
+1.2.5 (2010-08-18)
+------------------
+
+* Fixed: Issue 73: guessBaseUrl fails for some servers.
+* Fixed: Issue 67: SabreDAV works better with non-seekable streams.
+* Fixed: If-Modified-Since and If-Unmodified-Since would be incorrect if
+  the date is an exact match.
+
+
+1.2.4 (2010-07-13)
+------------------
+
+* Fixed: Issue 62: Guessing baseUrl fails when url contains a query-string.
+* Added: Apache configuration sample for CGI/FastCGI setups.
+* Fixed: Issue 64: Only returning calendar-data when it was actually requested.
+
+
+1.2.3 (2010-06-26)
+------------------
+
+* Fixed: Issue 57: Supporting quotes around etags in If-Match and If-None-Match
+
+
+1.2.2 (2010-06-21)
+------------------
+
+* Updated: SabreDAV now attempts to guess the BaseURI if it's not set.
+* Updated: Better compatibility with BitKinex
+* Fixed: Issue 56: Incorrect behaviour for If-None-Match headers and GET
+  requests.
+* Fixed: Issue with certain encoded paths in Browser Plugin.
+
+
+1.2.1 (2010-06-07)
+------------------
+
+* Fixed: Issue 50, patch by Mattijs Hoitink.
+* Fixed: Issue 51, Adding windows 7 lockfiles to TemporaryFileFilter.
+* Fixed: Issue 38, Allowing custom filters to be added to TemporaryFileFilter.
+* Fixed: Issue 53, ETags in the If: header were always failing. This behaviour
+  is now corrected.
+* Added: Apache Authentication backend, in case authentication through .htaccess
+  is desired.
+* Updated: Small improvements to example files.
+
+
+1.2.0 (2010-05-24)
+------------------
+
+* Fixed: Browser plugin now displays international characters.
+* Changed: More properties in CalDAV classes are now protected instead of
+  private.
+
+
+1.2.0beta3 (2010-05-14)
+-----------------------
+
+* Fixed: Custom properties were not properly sent back for allprops requests.
+* Fixed: Issue 49, incorrect parsing of PROPPATCH, affecting Office 2007.
+* Changed: Removed CalDAV items from includes.php, and added a few missing ones.
+
+
+1.2.0beta2 (2010-05-04)
+-----------------------
+
+* Fixed: Issue 46: Fatal error for some non-existent nodes.
+* Updated: some example sql to include email address.
+* Added: 208 and 508 statuscodes from RFC5842.
+* Added: Apache2 configuration examples
+
+
+1.2.0beta1 (2010-04-28)
+-----------------------
+
+* Fixed: redundant namespace declaration in resourcetypes.
+* Fixed: 2 locking bugs triggered by litmus when no Sabre_DAV_ILockable
+  interface is used.
+* Changed: using http://sabredav.org/ns for all custom xml properties.
+* Added: email address property to principals.
+* Updated: CalendarObject validation.
+
+
+1.2.0alpha4 (2010-04-24)
+------------------------
+
+* Added: Support for If-Range, If-Match, If-None-Match, If-Modified-Since,
+  If-Unmodified-Since.
+* Changed: Brand new build system. Functionality is split up between Sabre,
+  Sabre_HTTP, Sabre_DAV and Sabre_CalDAV packages. In addition to that a new
+  non-pear package will be created with all this functionality combined.
+* Changed: Autoloader moved to Sabre/autoload.php.
+* Changed: The Allow: header is now more accurate, with appropriate HTTP methods
+  per uri.
+* Changed: Now throwing back Sabre_DAV_Exception_MethodNotAllowed on a few
+  places where Sabre_DAV_Exception_NotImplemented was used.
+
+
+1.2.0alpha3 (2010-04-20)
+------------------------
+
+* Update: Complete rewrite of property updating. Now easier to use and atomic.
+* Fixed: Issue 16, automatically adding trailing / to baseUri.
+* Added: text/plain is used for .txt files in GuessContentType plugin.
+* Added: support for principal-property-search and principal-search-property-set
+  reports.
+* Added: Issue 31: Hiding exception information by default. Can be turned on
+  with the Sabre_DAV_Server::$debugExceptions property.
+
+
+1.2.0alpha2 (2010-04-08)
+------------------------
+
+* Added: Calendars are now private and can only be read by the owner.
+* Fixed: double namespace declaration in multistatus responses.
+* Added: MySQL database dumps. MySQL is now also supported next to SQLite.
+* Added: expand-properties REPORT from RFC 3253.
+* Added: Sabre_DAV_Property_IHref interface for properties exposing urls.
+* Added: Issue 25: Throwing error on broken Finder behaviour.
+* Changed: Authentication backend is now aware of current user.
+
+
+1.2.0alpha1 (2010-03-31)
+------------------------
+
+* Fixed: Issue 26: Workaround for broken GVFS behaviour with encoded special
+  characters.
+* Fixed: Issue 34: Incorrect Lock-Token response header for LOCK. Fixes Office
+  2010 compatibility.
+* Added: Issue 35: SabreDAV version to header to OPTIONS response to ease
+  debugging.
+* Fixed: Issue 36: Incorrect variable name, throwing error in some requests.
+* Fixed: Issue 37: Incorrect smultron regex in temporary filefilter.
+* Fixed: Issue 33: Converting ISO-8859-1 characters to UTF-8.
+* Fixed: Issue 39 & Issue 40: Basename fails on non-utf-8 locales.
+* Added: More unittests.
+* Added: SabreDAV version to all error responses.
+* Added: URLUtil class for decoding urls.
+* Changed: Now using pear.sabredav.org pear channel.
+* Changed: Sabre_DAV_Server::getCopyAndMoveInfo is now a public method.
+
+
+1.1.2-alpha (2010-03-18)
+------------------------
+
+* Added: RFC5397 - current-user-principal support.
+* Fixed: Issue 27: encoding entities in property responses.
+* Added: naturalselection script now allows the user to specify a 'minimum
+  number of bytes' for deletion. This should reduce load due to less crawling
+* Added: Full support for the calendar-query report.
+* Added: More unittests.
+* Added: Support for complex property deserialization through the static
+  ::unserialize() method.
+* Added: Support for modifying calendar-component-set
+* Fixed: Issue 29: Added TIMEOUT_INFINITE constant
+
+
+1.1.1-alpha (2010-03-11)
+------------------------
+
+* Added: RFC5689 - Extended MKCOL support.
+* Fixed: Evolution support for CalDAV.
+* Fixed: PDO-locks backend was pretty much completely broken. This is 100%
+  unittested now.
+* Added: support for ctags.
+* Fixed: Comma's between HTTP methods in 'Allow' method.
+* Changed: default argument for Sabre_DAV_Locks_Backend_FS. This means a
+  datadirectory must always be specified from now on.
+* Changed: Moved Sabre_DAV_Server::parseProps to
+  Sabre_DAV_XMLUtil::parseProperties.
+* Changed: Sabre_DAV_IDirectory is now Sabre_DAV_ICollection.
+* Changed: Sabre_DAV_Exception_PermissionDenied is now
+  Sabre_DAV_Exception_Forbidden.
+* Changed: Sabre_CalDAV_ICalendarCollection is removed.
+* Added: Sabre_DAV_IExtendedCollection.
+* Added: Many more unittests.
+* Added: support for calendar-timezone property.
+
+
+1.1.0-alpha (2010-03-01)
+------------------------
+
+* Note: This version is forked from version 1.0.5, so release dates may be out
+  of order.
+* Added: CalDAV - RFC 4791
+* Removed: Sabre_PHP_Exception. PHP has a built-in ErrorException for this.
+* Added: PDO authentication backend.
+* Added: Example sql for auth, caldav, locks for sqlite.
+* Added: Sabre_DAV_Browser_GuessContentType plugin
+* Changed: Authentication plugin refactored, making it possible to implement
+  non-digest authentication.
+* Fixed: Better error display in browser plugin.
+* Added: Support for {DAV:}supported-report-set
+* Added: XML utility class with helper functions for the WebDAV protocol.
+* Added: Tons of unittests
+* Added: PrincipalCollection and Principal classes
+* Added: Sabre_DAV_Server::getProperties for easy property retrieval
+* Changed: {DAV:}resourceType defaults to 0
+* Changed: Any non-null resourceType now gets a / appended to the href value.
+  Before this was just for {DAV:}collection's, but this is now also the case for
+  for example {DAV:}principal.
+* Changed: The Href property class can now optionally create non-relative uri's.
+* Changed: Sabre_HTTP_Response now returns false if headers are already sent and
+  header-methods are called.
+* Fixed: Issue 19: HEAD requests on Collections
+* Fixed: Issue 21: Typo in Sabre_DAV_Property_Response
+* Fixed: Issue 18: Doesn't work with Evolution Contacts
+
+
+1.0.15 (2010-05-28)
+-------------------
+
+* Added: Issue 31: Hiding exception information by default. Can be turned on
+  with the Sabre_DAV_Server::$debugExceptions property.
+* Added: Moved autoload from lib/ to lib/Sabre/autoload.php. This is also the
+  case in the upcoming 1.2.0, so it will improve future compatibility.
+
+
+1.0.14 (2010-04-15)
+-------------------
+
+* Fixed: double namespace declaration in multistatus responses.
+
+
+1.0.13 (2010-03-30)
+-------------------
+
+* Fixed: Issue 40: Last references to basename/dirname
+
+
+1.0.12 (2010-03-30)
+-------------------
+
+* Fixed: Issue 37: Incorrect smultron regex in temporary filefilter.
+* Fixed: Issue 26: Workaround for broken GVFS behaviour with encoded special
+  characters.
+* Fixed: Issue 33: Converting ISO-8859-1 characters to UTF-8.
+* Fixed: Issue 39: Basename fails on non-utf-8 locales.
+* Added: More unittests.
+* Added: SabreDAV version to all error responses.
+* Added: URLUtil class for decoding urls.
+* Updated: Now using pear.sabredav.org pear channel.
+
+
+1.0.11 (2010-03-23)
+-------------------
+
+* Non-public release. This release is identical to 1.0.10, but it is used to
+  test releasing packages to pear.sabredav.org.
+
+
+1.0.10 (2010-03-22)
+-------------------
+
+* Fixed: Issue 34: Invalid Lock-Token header response.
+* Added: Issue 35: Adding SabreDAV version to HTTP OPTIONS responses.
+
+
+1.0.9 (2010-03-19)
+------------------
+
+* Fixed: Issue 27: Entities not being encoded in PROPFIND responses.
+* Fixed: Issue 29: Added missing TIMEOUT_INFINITE constant.
+
+
+1.0.8 (2010-03-03)
+------------------
+
+* Fixed: Issue 21: typos causing errors
+* Fixed: Issue 23: Comma's between methods in Allow header.
+* Added: Sabre_DAV_ICollection interface, to aid in future compatibility.
+* Added: Sabre_DAV_Exception_Forbidden exception. This will replace
+  Sabre_DAV_Exception_PermissionDenied in the future, and can already be used to
+  ensure future compatibility.
+
+
+1.0.7 (2010-02-24)
+------------------
+
+* Fixed: Issue 19 regression for MS Office
+
+
+1.0.6 (2010-02-23)
+------------------
+
+* Fixed: Issue 19: HEAD requests on Collections
+
+
+1.0.5 (2010-01-22)
+------------------
+
+* Fixed: Fatal error when a malformed url was used for unlocking, in conjuction
+  with Sabre.autoload.php due to a incorrect filename.
+* Fixed: Improved unittests and build system
+
+
+1.0.4 (2010-01-11)
+------------------
+
+* Fixed: needed 2 different releases. One for googlecode and one for pearfarm.
+  This is to retain the old method to install SabreDAV until pearfarm becomes
+  the standard installation method.
+
+
+1.0.3 (2010-01-11)
+------------------
+
+* Added: RFC4709 support (davmount)
+* Added: 6 unittests
+* Added: naturalselection. A tool to keep cache directories below a specified
+  theshold.
+* Changed: Now using pearfarm.org channel server.
+
+
+1.0.1 (2009-12-22)
+------------------
+
+* Fixed: Issue 15: typos in examples
+* Fixed: Minor pear installation issues
+
+
+1.0.0 (2009-11-02)
+------------------
+
+* Added: SimpleDirectory class. This class allows creating static directory
+  structures with ease.
+* Changed: Custom complex properties and exceptions now get an instance of
+  Sabre_DAV_Server as their first argument in serialize()
+* Changed: Href complex property now prepends server's baseUri
+* Changed: delete before an overwriting copy/move is now handles by server class
+  instead of tree classes
+* Changed: events must now explicitly return false to stop execution. Before,
+  execution would be stopped by anything loosely evaluating to false.
+* Changed: the getPropertiesForPath method now takes a different set of
+  arguments, and returns a different response. This allows plugin developers to
+  return statuses for properties other than 200 and 404. The hrefs are now also
+  always calculated relative to the baseUri, and not the uri of the request.
+* Changed: generatePropFindResponse is renamed to generateMultiStatus, and now
+  takes a list of properties similar to the response of getPropertiesForPath.
+  This was also needed to improve flexibility for plugin development.
+* Changed: Auth plugins are no longer included. They were not yet stable
+  quality, so they will probably be reintroduced in a later version.
+* Changed: PROPPATCH also used generateMultiStatus now.
+* Removed: unknownProperties event. This is replaced by the afterGetProperties
+  event, which should provide more flexibility.
+* Fixed: Only calling getSize() on IFile instances in httpHead()
+* Added: beforeBind event. This is invoked upon file or directory creation
+* Added: beforeWriteContent event, this is invoked by PUT and LOCK on an
+  existing resource.
+* Added: beforeUnbind event. This is invoked right before deletion of any
+  resource.
+* Added: afterGetProperties event. This event can be used to make modifications
+  to property responses.
+* Added: beforeLock and beforeUnlock events.
+* Added: afterBind event.
+* Fixed: Copy and Move could fail in the root directory. This is now fixed.
+* Added: Plugins can now be retrieved by their classname. This is useful for
+  inter-plugin communication.
+* Added: The Auth backend can now return usernames and user-id's.
+* Added: The Auth backend got a getUsers method
+* Added: Sabre_DAV_FSExt_Directory now returns quota info
+
+
+0.12.1-beta (2009-09-11)
+------------------------
+
+* Fixed: UNLOCK bug. Unlock didn't work at all
+
+
+0.12-beta (2009-09-10)
+----------------------
+
+* Updated: Browser plugin now shows multiple {DAV:}resourcetype values if
+  available.
+* Added: Experimental PDO backend for Locks Manager
+* Fixed: Sending Content-Length: 0 for every empty response. This improves NGinx
+  compatibility.
+* Fixed: Last modification time is reported in UTC timezone. This improves
+  Finder compatibility.
+
+
+0.11-beta (2009-08-11)
+----------------------
+
+* Updated: Now in Beta
+* Updated: Pear package no longer includes docs/ directory. These just contained
+  rfc's, which are publicly available. This reduces the package from ~800k to
+  ~60k
+* Added: generatePropfindResponse now takes a baseUri argument
+* Added: ResourceType property can now contain multiple resourcetypes.
+* Fixed: Issue 13.
+
+
+0.10-alpha (2009-08-03)
+-----------------------
+
+* Added: Plugin to automatically map GET requests to non-files to PROPFIND
+  (Sabre_DAV_Browser_MapGetToPropFind). This should allow easier debugging of
+  complicated WebDAV setups.
+* Added: Sabre_DAV_Property_Href class. For future use.
+* Added: Ability to choose to use auth-int, auth or both for HTTP Digest
+  authentication. (Issue 11)
+* Changed: Made more methods in Sabre_DAV_Server public.
+* Fixed: TemporaryFileFilter plugin now intercepts HTTP LOCK requests to
+  non-existent files. (Issue 12)
+* Added: Central list of defined xml namespace prefixes. This can reduce
+  Bandwidth and legibility for xml bodies with user-defined namespaces.
+* Added: now a PEAR-compatible package again, thanks to Michael Gauthier
+* Changed: moved default copy and move logic from ObjectTree to Tree class
+
+0.9a-alpha (2009-07-21)
+----------------------
+
+* Fixed: Broken release
+
+0.9-alpha (2009-07-21)
+----------------------
+
+* Changed: Major refactoring, removed most of the logic from the Tree objects.
+  The Server class now directly works with the INode, IFile and IDirectory
+  objects. If you created your own Tree objects, this will most likely break in
+  this release.
+* Changed: Moved all the Locking logic from the Tree and Server classes into a
+  separate plugin.
+* Changed: TemporaryFileFilter is now a plugin.
+* Added: Comes with an autoloader script. This can be used instead of the
+  includer script, and is preferred by some people.
+* Added: AWS Authentication class.
+* Added: simpleserversetup.py script. This will quickly get a fileserver up and
+  running.
+* Added: When subscribing to events, it is now possible to supply a priority.
+  This is for example needed to ensure that the Authentication Plugin is used
+  before any other Plugin.
+* Added: 22 new tests.
+* Added: Users-manager plugin for .htdigest files. Experimental and subject to
+  change.
+* Added: RFC 2324 HTTP 418 status code
+* Fixed: Exclusive locks could in some cases be picked up as shared locks
+* Fixed: Digest auth for non-apache servers had a bug (still not actually tested
+  this well).
+
+
+0.8-alpha (2009-05-30)
+----------------------
+
+* Changed: Renamed all exceptions! This is a compatibility break. Every
+  Exception now follows Sabre_DAV_Exception_FileNotFound convention instead of
+  Sabre_DAV_FileNotFoundException.
+* Added: Browser plugin now allows uploading and creating directories straight
+  from the browser.
+* Added: 12 more unittests
+* Fixed: Locking bug, which became prevalent on Windows Vista.
+* Fixed: Netdrive support
+* Fixed: TemporaryFileFilter filtered out too many files. Fixed some of the
+  regexes.
+* Fixed: Added README and ChangeLog to package
+
+
+0.7-alpha (2009-03-29)
+----------------------
+
+* Added: System to return complex properties from PROPFIND.
+* Added: support for {DAV:}supportedlock.
+* Added: support for {DAV:}lockdiscovery.
+* Added: 6 new tests.
+* Added: New plugin system.
+* Added: Simple HTML directory plugin, for browser access.
+* Added: Server class now sends back standard pre-condition error xml bodies.
+  This was new since RFC4918.
+* Added: Sabre_DAV_Tree_Aggregate, which can 'host' multiple Tree objects into
+  one.
+* Added: simple basis for HTTP REPORT method. This method is not used yet, but
+  can be used by plugins to add reports.
+* Changed: ->getSize is only called for files, no longer for collections. r303
+* Changed: Sabre_DAV_FilterTree is now Sabre_DAV_Tree_Filter
+* Changed: Sabre_DAV_TemporaryFileFilter is now called
+  Sabre_DAV_Tree_TemporaryFileFilter.
+* Changed: removed functions (get(/set)HTTPRequest(/Response)) from Server
+  class, and using a public property instead.
+* Fixed: bug related to parsing proppatch and propfind requests. Didn't show up
+  in most clients, but it needed fixing regardless. (r255)
+* Fixed: auth-int is now properly supported within HTTP Digest.
+* Fixed: Using application/xml for a mimetype vs. text/xml as per RFC4918 sec
+  8.2.
+* Fixed: TemporaryFileFilter now lets through GET's if they actually exist on
+  the backend. (r274)
+* Fixed: Some methods didn't get passed through in the FilterTree (r283).
+* Fixed: LockManager is now slightly more complex, Tree classes slightly less.
+  (r287)
+
+
+0.6-alpha (2009-02-16)
+----------------------
+
+* Added: Now uses streams for files, instead of strings. This means it won't
+  require to hold entire files in memory, which can be an issue if you're
+  dealing with big files. Note that this breaks compatibility for put() and
+  createFile methods.
+* Added: HTTP Digest Authentication helper class.
+* Added: Support for HTTP Range header
+* Added: Support for ETags within If: headers
+* Added: The API can now return ETags and override the default Content-Type
+* Added: starting with basic framework for unittesting, using PHPUnit.
+* Added: 49 unittests.
+* Added: Abstraction for the HTTP request.
+* Updated: Using Clark Notation for tags in properties. This means tags are
+  serialized as {namespace}tagName instead of namespace#tagName
+* Fixed: HTTP_BasicAuth class now works as expected.
+* Fixed: DAV_Server uses / for a default baseUrl.
+* Fixed: Last modification date is no longer ignored in PROPFIND.
+* Fixed: PROPFIND now sends back information about the requestUri even when
+  "Depth: 1" is specified.
+
+
+0.5-alpha (2009-01-14)
+----------------------
+
+* Added: Added a very simple example for implementing a mapping to PHP file
+  streams. This should allow easy implementation of for example a WebDAV to FTP
+  proxy.
+* Added: HTTP Basic Authentication helper class.
+* Added: Sabre_HTTP_Response class. This centralizes HTTP operations and will be
+  a start towards the creating of a testing framework.
+* Updated: Backwards compatibility break: all require_once() statements are
+  removed from all the files. It is now recommended to use autoloading of
+  classes, or just including lib/Sabre.includes.php. This fix was made to allow
+  easier integration into applications not using this standard inclusion model.
+* Updated: Better in-file documentation.
+* Updated: Sabre_DAV_Tree can now work with Sabre_DAV_LockManager.
+* Updated: Fixes a shared-lock bug.
+* Updated: Removed ?> from the bottom of each php file.
+* Updated: Split up some operations from Sabre_DAV_Server to
+  Sabre_HTTP_Response.
+* Fixed: examples are now actually included in the pear package.
+
+
+0.4-alpha (2008-11-05)
+----------------------
+
+* Passes all litmus tests!
+* Added: more examples
+* Added: Custom property support
+* Added: Shared lock support
+* Added: Depth support to locks
+* Added: Locking on unmapped urls (non-existent nodes)
+* Fixed: Advertising as WebDAV class 3 support
+
+
+0.3-alpha (2008-06-29)
+----------------------
+
+* Fully working in MS Windows clients.
+* Added: temporary file filter: support for smultron files.
+* Added: Phing build scripts
+* Added: PEAR package
+* Fixed: MOVE bug identified using finder.
+* Fixed: Using gzuncompress instead of gzdecode in the temporary file filter.
+  This seems more common.
+
+
+0.2-alpha (2008-05-27)
+----------------------
+
+* Somewhat working in Windows clients
+* Added: Working PROPPATCH method (doesn't support custom properties yet)
+* Added: Temporary filename handling system
+* Added: Sabre_DAV_IQuota to return quota information
+* Added: PROPFIND now reads the request body and only supplies the requested
+  properties
+
+
+0.1-alpha (2008-04-04)
+----------------------
+
+* First release!
+* Passes litmus: basic, http and copymove test.
+* Fully working in Finder and DavFS2.
+
+Project started: 2007-12-13
+
+[vobj]: http://sabre.io/vobject/
+[evnt]: http://sabre.io/event/
+[http]: http://sabre.io/http/
+[uri]: http://sabre.io/uri/
+[xml]: http://sabre.io/xml/
+[mi20]: http://sabre.io/dav/upgrade/1.8-to-2.0/
+[rfc6638]: http://tools.ietf.org/html/rfc6638 "CalDAV Scheduling"
+[rfc7240]: http://tools.ietf.org/html/rfc7240
+[calendar-availability]: https://tools.ietf.org/html/draft-daboo-calendar-availability-05
diff --git a/Documentation/Changelog/1-1-0.rst b/Documentation/Changelog/1-1-0.rst
new file mode 100644 (file)
index 0000000..970810f
--- /dev/null
@@ -0,0 +1,11 @@
+
+1.1.0 - TYPO3 LTS 7, LTS 8
+--------------------------------
+
+::
+
+       * Bug           - Changes for TYPO3 LTS 7
+       * Feature   - included sabredav version 3.2.2
+
+
+
diff --git a/LICENSE b/LICENSE
old mode 100755 (executable)
new mode 100644 (file)
index 1eba437..fd3539e
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,4 @@
-Copyright (C) 2007-2010 Rooftop Solutions.
-Copyright (C) 2007-2009 FileMobile inc.
+Copyright (C) 2007-2016 fruux GmbH (https://fruux.com/).
 
 All rights reserved.
 
@@ -11,18 +10,18 @@ are permitted provided that the following conditions are met:
     * Redistributions in binary form must reproduce the above copyright notice,
       this list of conditions and the following disclaimer in the documentation
       and/or other materials provided with the distribution.
-    * Neither the name of the SabreDAV nor the names of its contributors
-      may be used to endorse or promote products derived from this software 
+    * Neither the name of SabreDAV nor the names of its contributors
+      may be used to endorse or promote products derived from this software
       without specific prior written permission.
-     
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
-    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
-    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
-    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..86a0fe9
--- /dev/null
+++ b/README.md
@@ -0,0 +1,38 @@
+![sabre's logo](http://sabre.io/img/logo.png) sabre/dav
+=======================================================
+
+Introduction
+------------
+
+sabre/dav is the most popular WebDAV framework for PHP. Use it to create WebDAV, CalDAV and CardDAV servers.
+
+Full documentation can be found on the website:
+
+http://sabre.io/
+
+
+Build status
+------------
+
+| branch       | status | minimum PHP version |
+| ------------ | ------ | ------------------- |
+| master       | [![Build Status](https://travis-ci.org/fruux/sabre-dav.svg?branch=master)](https://travis-ci.org/fruux/sabre-dav) | PHP 5.5 |
+| 3.1          | [![Build Status](https://travis-ci.org/fruux/sabre-dav.svg?branch=3.0)](https://travis-ci.org/fruux/sabre-dav) | PHP 5.5 |
+| 3.0          | [![Build Status](https://travis-ci.org/fruux/sabre-dav.svg?branch=3.0)](https://travis-ci.org/fruux/sabre-dav) | PHP 5.4 |
+| 2.1          | [![Build Status](https://travis-ci.org/fruux/sabre-dav.svg?branch=2.1)](https://travis-ci.org/fruux/sabre-dav) | PHP 5.4 |
+| 2.0          | [![Build Status](https://travis-ci.org/fruux/sabre-dav.svg?branch=2.0)](https://travis-ci.org/fruux/sabre-dav) | PHP 5.4 |
+| 1.8          | [![Build Status](https://travis-ci.org/fruux/sabre-dav.svg?branch=1.8)](https://travis-ci.org/fruux/sabre-dav) | PHP 5.3 |
+| 1.7          | [![Build Status](https://travis-ci.org/fruux/sabre-dav.svg?branch=1.7)](https://travis-ci.org/fruux/sabre-dav) | PHP 5.3 |
+| 1.6          | [![Build Status](https://travis-ci.org/fruux/sabre-dav.svg?branch=1.6)](https://travis-ci.org/fruux/sabre-dav) | PHP 5.3 |
+
+Documentation
+-------------
+
+* [Introduction](http://sabre.io/dav/).
+* [Installation](http://sabre.io/dav/install/).
+
+
+Made at fruux
+-------------
+
+SabreDAV is being developed by [fruux](https://fruux.com/). Drop us a line for commercial services or enterprise support.
diff --git a/bin/generate_vcards b/bin/generate_vcards
new file mode 100755 (executable)
index 0000000..4663c3c
--- /dev/null
@@ -0,0 +1,241 @@
+#!/usr/bin/env php
+<?php
+
+namespace Sabre\VObject;
+
+// This sucks.. we have to try to find the composer autoloader. But chances
+// are, we can't find it this way. So we'll do our bestest
+$paths = [
+    __DIR__ . '/../vendor/autoload.php',  // In case vobject is cloned directly
+    __DIR__ . '/../../../autoload.php',   // In case vobject is a composer dependency.
+];
+
+foreach($paths as $path) {
+    if (file_exists($path)) {
+        include $path;
+        break;
+    }
+}
+
+if (!class_exists('Sabre\\VObject\\Version')) {
+    fwrite(STDERR, "Composer autoloader could not be properly loaded.\n");
+    die(1);
+}
+
+if ($argc < 2) {
+
+    $version = Version::VERSION;
+
+    $help = <<<HI
+sabre/vobject $version
+Usage:
+    generate_vcards [count]
+
+Options:
+    count   The number of random vcards to generate
+
+Examples:
+    generate_vcards 1000 > testdata.vcf
+
+HI;
+
+    fwrite(STDERR, $help);
+    exit(2);
+}
+
+$count = (int)$argv[1];
+if ($count < 1) {
+    fwrite(STDERR, "Count must be at least 1\n");
+    exit(2);
+}
+
+fwrite(STDERR, "sabre/vobject " . Version::VERSION . "\n");
+fwrite(STDERR, "Generating " . $count . " vcards in vCard 4.0 format\n");
+
+/**
+ * The following list is just some random data we compiled from various
+ * sources online.
+ *
+ * Very little thought went into compiling this list, and certainly nothing
+ * political or ethical.
+ *
+ * We would _love_ more additions to this to add more variation to this list.
+ *
+ * Send us PR's and don't be shy adding your own first and last name for fun.
+ */
+
+$sets = array(
+    "nl" => array(
+        "country" => "Netherlands",
+        "boys" => array(
+            "Anno",
+            "Bram",
+            "Daan",
+            "Evert",
+            "Finn",
+            "Jayden",
+            "Jens",
+            "Jesse",
+            "Levi",
+            "Lucas",
+            "Luuk",
+            "Milan",
+            "René",
+            "Sem",
+            "Sibrand",
+            "Willem",
+        ),
+        "girls" => array(
+            "Celia",
+            "Emma",
+            "Fenna",
+            "Geke",
+            "Inge",
+            "Julia",
+            "Lisa",
+            "Lotte",
+            "Mila",
+            "Sara",
+            "Sophie",
+            "Tess",
+            "Zoë",
+        ),
+        "last" => array(
+            "Bakker",
+            "Bos",
+            "De Boer",
+            "De Groot",
+            "De Jong",
+            "De Vries",
+            "Jansen",
+            "Janssen",
+            "Meyer",
+            "Mulder",
+            "Peters",
+            "Smit",
+            "Van Dijk",
+            "Van den Berg",
+            "Visser",
+            "Vos",
+        ),
+    ),
+    "us" => array(
+        "country" => "United States",
+        "boys" => array(
+            "Aiden",
+            "Alexander",
+            "Charles",
+            "David",
+            "Ethan",
+            "Jacob",
+            "James",
+            "Jayden",
+            "John",
+            "Joseph",
+            "Liam",
+            "Mason",
+            "Michael",
+            "Noah",
+            "Richard",
+            "Robert",
+            "Thomas",
+            "William",
+        ),
+        "girls" => array(
+            "Ava",
+            "Barbara",
+            "Chloe",
+            "Dorothy",
+            "Elizabeth",
+            "Emily",
+            "Emma",
+            "Isabella",
+            "Jennifer",
+            "Lily",
+            "Linda",
+            "Margaret",
+            "Maria",
+            "Mary",
+            "Mia",
+            "Olivia",
+            "Patricia",
+            "Roxy",
+            "Sophia",
+            "Susan",
+            "Zoe",
+        ),
+        "last" => array(
+            "Smith",
+            "Johnson",
+            "Williams",
+            "Jones",
+            "Brown",
+            "Davis",
+            "Miller",
+            "Wilson",
+            "Moore",
+            "Taylor",
+            "Anderson",
+            "Thomas",
+            "Jackson",
+            "White",
+            "Harris",
+            "Martin",
+            "Thompson",
+            "Garcia",
+            "Martinez",
+            "Robinson",
+        ),
+    ),
+);
+
+$current = 0;
+
+$r = function($arr) {
+
+    return $arr[mt_rand(0,count($arr)-1)];
+
+};
+
+$bdayStart = strtotime('-85 years');
+$bdayEnd = strtotime('-20 years');
+
+while($current < $count) {
+
+    $current++;
+    fwrite(STDERR, "\033[100D$current/$count");
+
+    $country = array_rand($sets);
+    $gender = mt_rand(0,1)?'girls':'boys';
+
+    $vcard = new Component\VCard(array(
+        'VERSION' => '4.0',
+        'FN' => $r($sets[$country][$gender]) . ' ' . $r($sets[$country]['last']),
+        'UID' => UUIDUtil::getUUID(),
+    ));
+
+    $bdayRatio = mt_rand(0,9);
+
+    if($bdayRatio < 2) {
+        // 20% has a birthday property with a full date
+        $dt = new \DateTime('@' . mt_rand($bdayStart, $bdayEnd));
+        $vcard->add('BDAY', $dt->format('Ymd'));
+
+    } elseif ($bdayRatio < 3) {
+        // 10% we only know the month and date of
+        $dt = new \DateTime('@' . mt_rand($bdayStart, $bdayEnd));
+        $vcard->add('BDAY', '--' . $dt->format('md'));
+    }
+    if ($result = $vcard->validate()) {
+        ob_start();
+        echo "\nWe produced an invalid vcard somehow!\n";
+        foreach($result as $message) {
+            echo "  " . $message['message'] . "\n";
+        }
+        fwrite(STDERR, ob_get_clean());
+    }
+    echo $vcard->serialize();
+
+}
+
+fwrite(STDERR,"\nDone.\n");
diff --git a/bin/naturalselection b/bin/naturalselection
new file mode 100755 (executable)
index 0000000..7e20439
--- /dev/null
@@ -0,0 +1,140 @@
+#!/usr/bin/env python
+
+#
+# Copyright (c) 2009-2010 Evert Pot
+# All rights reserved.
+# http://www.rooftopsolutions.nl/
+#
+# This utility is distributed along with SabreDAV
+# license: http://sabre.io/license/ Modified BSD License
+
+import os
+from optparse import OptionParser
+import time
+
+def getfreespace(path):
+    stat = os.statvfs(path)
+    return stat.f_frsize * stat.f_bavail
+
+def getbytesleft(path,threshold):
+    return getfreespace(path)-threshold
+
+def run(cacheDir, threshold, sleep=5, simulate=False, min_erase = 0):
+
+    bytes = getbytesleft(cacheDir,threshold)
+    if (bytes>0):
+        print "Bytes to go before we hit threshold:", bytes
+    else:
+        print "Threshold exceeded with:", -bytes, "bytes"
+        dir = os.listdir(cacheDir)
+        dir2 = []
+        for file in dir:
+            path = cacheDir + '/' + file
+            dir2.append({
+                "path" : path,
+                "atime": os.stat(path).st_atime,
+                "size" : os.stat(path).st_size
+            })
+
+        dir2.sort(lambda x,y: int(x["atime"]-y["atime"]))
+
+        filesunlinked = 0
+        gainedspace = 0
+
+        # Left is the amount of bytes that need to be freed up
+        # The default is the 'min_erase setting'
+        left = min_erase
+
+        # If the min_erase setting is lower than the amount of bytes over
+        # the threshold, we use that number instead.
+        if left < -bytes :
+            left = -bytes
+
+        print "Need to delete at least:", left;
+
+        for file in dir2:
+
+            # Only deleting files if we're not simulating
+            if not simulate: os.unlink(file["path"])
+            left = int(left - file["size"])
+            gainedspace = gainedspace + file["size"]
+            filesunlinked = filesunlinked + 1
+
+            if(left<0):
+                break
+
+        print "%d files deleted (%d bytes)" % (filesunlinked, gainedspace)
+
+
+    time.sleep(sleep)
+
+
+
+def main():
+    parser = OptionParser(
+        version="naturalselection v0.3",
+        description="Cache directory manager. Deletes cache entries based on accesstime and free space thresholds.\n" +
+            "This utility is distributed alongside SabreDAV.",
+        usage="usage: %prog [options] cacheDirectory",
+    )
+    parser.add_option(
+        '-s',
+        dest="simulate",
+        action="store_true",
+        help="Don't actually make changes, but just simulate the behaviour",
+    )
+    parser.add_option(
+        '-r','--runs',
+        help="How many times to check before exiting. -1 is infinite, which is the default",
+        type="int",
+        dest="runs",
+        default=-1
+    )
+    parser.add_option(
+        '-n','--interval',
+        help="Sleep time in seconds (default = 5)",
+        type="int",
+        dest="sleep",
+        default=5
+    )
+    parser.add_option(
+        '-l','--threshold',
+        help="Threshold in bytes (default = 10737418240, which is 10GB)",
+        type="int",
+        dest="threshold",
+        default=10737418240
+    )
+    parser.add_option(
+        '-m', '--min-erase',
+        help="Minimum number of bytes to erase when the threshold is reached. " +
+            "Setting this option higher will reduce the number of times the cache directory will need to be scanned. " +
+            "(the default is 1073741824, which is 1GB.)",
+        type="int",
+        dest="min_erase",
+        default=1073741824
+    )
+
+    options,args = parser.parse_args()
+    if len(args)<1:
+        parser.error("This utility requires at least 1 argument")
+    cacheDir = args[0]
+
+    print "Natural Selection"
+    print "Cache directory:", cacheDir
+    free = getfreespace(cacheDir);
+    print "Current free disk space:", free
+
+    runs = options.runs;
+    while runs!=0 :
+        run(
+            cacheDir,
+            sleep=options.sleep,
+            simulate=options.simulate,
+            threshold=options.threshold,
+            min_erase=options.min_erase
+        )
+        if runs>0:
+            runs = runs - 1
+
+if __name__ == '__main__' :
+    main()
diff --git a/bin/sabredav b/bin/sabredav
new file mode 100755 (executable)
index 0000000..032371b
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+php -S 0.0.0.0:8080 `dirname $0`/sabredav.php
diff --git a/bin/vobject b/bin/vobject
new file mode 100755 (executable)
index 0000000..2aca7e7
--- /dev/null
@@ -0,0 +1,27 @@
+#!/usr/bin/env php
+<?php
+
+namespace Sabre\VObject;
+
+// This sucks.. we have to try to find the composer autoloader. But chances
+// are, we can't find it this way. So we'll do our bestest
+$paths = [
+    __DIR__ . '/../vendor/autoload.php',  // In case vobject is cloned directly
+    __DIR__ . '/../../../autoload.php',   // In case vobject is a composer dependency.
+];
+
+foreach($paths as $path) {
+    if (file_exists($path)) {
+        include $path;
+        break;
+    }
+}
+
+if (!class_exists('Sabre\\VObject\\Version')) {
+    fwrite(STDERR, "Composer autoloader could not be loaded.\n");
+    die(1);
+}
+
+$cli = new Cli();
+exit($cli->main($argv));
+
index 797eb99..0cd9b28 100755 (executable)
@@ -1,5 +1,4 @@
 <?php
-
 $debug = FALSE;
 if ($debug) {
     ini_set("display_errors", 1);
@@ -26,23 +25,69 @@ $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 // Mapping PHP errors to exceptions
 // function exception_error_handler($errno, $errstr, $errfile, $errline)
 // {
-//     throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
+// throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
 // }
 // set_error_handler("exception_error_handler");
 
 // Files we need
-// require_once PATH_typo3conf.'/ext/caldav/lib/Sabre/autoload.php';
+require_once PATH_typo3conf.'/ext/caldav/vendor/autoload.php';
 
 // The object tree needs in turn to be passed to the server class
 $server = new Sabre_CalDAV_TYPO3Server($pdo);
 
-if (isset($baseUri)) {
-    $server->setBaseUri($baseUri);
-}
 
 // Support for html frontend
 $browser = new Sabre_DAV_Browser_Plugin();
 $server->addPlugin($browser);
 
+// ************
+
+// Backends
+$authBackend = new Sabre\DAV\Auth\Backend\TYPO3($pdo);
+$calendarBackend = new Sabre\CalDAV\Backend\TYPO3($pdo);
+$principalBackend = new Sabre\DAVACL\PrincipalBackend\TYPO3($pdo);
+
+// Directory structure
+$tree = [
+    new Sabre\CalDAV\Principal\Collection($principalBackend),
+    new Sabre\CalDAV\CalendarRoot($principalBackend, $calendarBackend)
+];
+
+$server = new Sabre\DAV\Server($tree);
+
+if (!isset($baseUri)) {
+    $basename = pathinfo(PATH_site)['basename'];
+    $baseUri = '/'.substr(PATH_thisScript, strpos(PATH_thisScript, $basename));
+}
+$server->setBaseUri($baseUri);
+
+/* Server Plugins */
+$authPlugin = new Sabre\DAV\Auth\Plugin($authBackend);
+$server->addPlugin($authPlugin);
+
+$aclPlugin = new Sabre\DAVACL\Plugin();
+$server->addPlugin($aclPlugin);
+
+/* CalDAV support */
+$caldavPlugin = new Sabre\CalDAV\Plugin();
+$server->addPlugin($caldavPlugin);
+
+/* Calendar subscription support */
+$server->addPlugin(new Sabre\CalDAV\Subscriptions\Plugin());
+
+/* Calendar scheduling support */
+//$server->addPlugin(new Sabre\CalDAV\Schedule\Plugin());
+
+/* WebDAV-Sync plugin */
+$server->addPlugin(new Sabre\DAV\Sync\Plugin());
+
+/* CalDAV Sharing support */
+$server->addPlugin(new Sabre\DAV\Sharing\Plugin());
+$server->addPlugin(new Sabre\CalDAV\SharingPlugin());
+
+// Support for html frontend
+$browser = new Sabre\DAV\Browser\Plugin();
+$server->addPlugin($browser);
+
 // And off we go!
 $server->exec();
index 45601b6..48fcd06 100644 (file)
@@ -1,2 +1,4 @@
 # cat=basic/enable/10; type=text; label= Configure the PIDs containing the fe_users for authentication.
-pids = 4
\ No newline at end of file
+pids = 4
+# cat=basic/enable/20; type=text; label= The number of days events should be shown from the past.
+archiveDays = 7
\ No newline at end of file
index 8a36b3f..42b58dc 100755 (executable)
@@ -17,7 +17,7 @@ $EM_CONF [$_EXTKEY] = array (
                'description' => 'Extends Calendar Base with CalDAV functionality.',
                'category' => 'plugin',
                'shy' => 0,
-               'version' => '1.0.2',
+               'version' => '1.1.0-dev',
                'loadOrder' => '',
                'state' => 'stable',
                'uploadfolder' => 0,
@@ -27,7 +27,7 @@ $EM_CONF [$_EXTKEY] = array (
                'author_company' => '',
                'constraints' => array (
                                'depends' => array (
-                                               'typo3' => '6.1.0-8.9.99',
+                                               'typo3' => '7.6.0-8.9.99',
                                                'cal' => '1.11.0-'
                                )
                )
diff --git a/lib/ChangeLog b/lib/ChangeLog
deleted file mode 100644 (file)
index df57f26..0000000
+++ /dev/null
@@ -1,440 +0,0 @@
-1.3.0 (2010-10-14)
-       * Added: childExists method to Sabre_DAV_ICollection. This is an api
-         break, so if you implement Sabre_DAV_ICollection directly, add the method.
-       * Changed: Almost all HTTP method implementations now take a uri argument,
-         including events. This allows for internal rerouting of certain calls.
-         If you have custom plugins, make sure they use this argument. If they
-         don't, they will likely still work, but it might get in the way of
-         future changes.
-       * Changed: All getETag methods MUST now surround the etag with
-         double-quotes. This was a mistake made in all previous SabreDAV
-         versions. If you don't do this, any If-Match, If-None-Match and If:
-         headers using Etags will work incorrectly. (Issue 85). 
-       * Added: Sabre_DAV_Auth_Backend_AbstractBasic class, which can be used to
-         easily implement basic authentication.
-       * Removed: Sabre_DAV_PermissionDenied class. Use Sabre_DAV_Forbidden
-         instead.
-       * Removed: Sabre_DAV_IDirectory interface, use Sabre_DAV_ICollection
-         instead. 
-       * Added: Browser plugin now uses {DAV:}displayname if this property is
-         available.
-       * Added: Cache layer in the ObjectTree.
-       * Added: Tree classes now have a delete and getChildren method.
-       * Fixed: If-Modified-Since and If-Unmodified-Since would be incorrect if
-         the date is an exact match.
-       * Fixed: Support for multiple ETags in If-Match and If-None-Match headers.
-       * Fixed: Improved baseUrl handling.
-       * Fixed: Issue 67: Non-seekable stream support in ::put()/::get().
-       * Fixed: Issue 65: Invalid dates are now ignored.
-       * Updated: Refactoring in Sabre_CalDAV to make everything a bit more
-         ledgable.
-       * Fixed: Issue 88, Issue 89: Fixed compatibility for running SabreDAV on 
-          Windows.
-       * Fixed: Issue 86: Fixed Content-Range top-boundary from 'file size' to
-         'file size'-1. 
-
-1.2.4 (2010-07-13)
-       * Fixed: Issue 62: Guessing baseUrl fails when url contains a
-         query-string.
-       * Added: Apache configuration sample for CGI/FastCGI setups.
-       * Fixed: Issue 64: Only returning calendar-data when it was actually
-         requested.
-
-1.2.3 (2010-06-26)
-       * Fixed: Issue 57: Supporting quotes around etags in If-Match and
-         If-None-Match
-
-1.2.2 (2010-06-21)
-       * Updated: SabreDAV now attempts to guess the BaseURI if it's not set.
-       * Updated: Better compatibility with BitKinex
-       * Fixed: Issue 56: Incorrect behaviour for If-None-Match headers and GET
-         requests.
-       * Fixed: Issue with certain encoded paths in Browser Plugin.
-
-1.2.1 (2010-06-07)
-       * Fixed: Issue 50, patch by Mattijs Hoitink.
-       * Fixed: Issue 51, Adding windows 7 lockfiles to TemporaryFileFilter.
-       * Fixed: Issue 38, Allowing custom filters to be added to
-         TemporaryFileFilter.
-       * Fixed: Issue 53, ETags in the If: header were always failing. This
-         behaviour is now corrected.
-       * Added: Apache Authentication backend, in case authentication through
-         .htaccess is desired.
-       * Updated: Small improvements to example files.
-
-1.2.0 (2010-05-24)
-       * Fixed: Browser plugin now displays international characters.
-       * Changed: More properties in CalDAV classes are now protected instead of
-         private.
-
-1.2.0beta3 (2010-05-14)
-       * Fixed: Custom properties were not propertly sent back for allprops
-         requests.
-       * Fixed: Issue 49, incorrect parsing of PROPPATCH, affecting Office 2007.
-       * Changed: Removed CalDAV items from includes.php, and added a few missing
-         ones.
-
-1.2.0beta2 (2010-05-04)
-       * Fixed: Issue 46: Fatal error for some non-existant nodes.
-       * Updated: some example sql to include email address.
-       * Added: 208 and 508 statuscodes from RFC5842.
-       * Added: Apache2 configuration examples
-
-1.2.0beta1 (2010-04-28)
-       * Fixed: redundant namespace declaration in resourcetypes.
-       * Fixed: 2 locking bugs triggered by litmus when no Sabre_DAV_ILockable
-         interface is used.
-       * Changed: using http://sabredav.org/ns for all custom xml properties.
-       * Added: email address property to principals.
-       * Updated: CalendarObject validation.
-
-1.2.0alpha4 (2010-04-24)
-       * Added: Support for If-Range, If-Match, If-None-Match, If-Modified-Since,
-         If-Unmodified-Since.
-       * Changed: Brand new build system. Functionality is split up between
-         Sabre, Sabre_HTTP, Sabre_DAV and Sabre_CalDAV packages. In addition to
-         that a new non-pear package will be created with all this functionality
-         combined.
-       * Changed: Autoloader moved to Sabre/autoload.php.
-       * Changed: The Allow: header is now more accurate, with appropriate HTTP
-         methods per uri. 
-       * Changed: Now throwing back Sabre_DAV_Exception_MethodNotAllowed on a few
-         places where Sabre_DAV_Exception_NotImplemented was used.
-
-1.2.0alpha3 (2010-04-20)
-       * Update: Complete rewrite of property updating. Now easier to use and 
-         atomic.
-       * Fixed: Issue 16, automatically adding trailing / to baseUri.
-       * Added: text/plain is used for .txt files in GuessContentType plugin.
-       * Added: support for principal-property-search and
-         principal-search-property-set reports.
-       * Added: Issue 31: Hiding exception information by default. Can be turned
-         on with the Sabre_DAV_Server::$debugExceptions property.
-
-1.2.0alpha2 (2010-04-08)
-       * Added: Calendars are now private and can only be read by the owner.
-       * Fixed: double namespace declaration in multistatus responses.
-       * Added: MySQL database dumps. MySQL is now also supported next to SQLite. 
-       * Added: expand-properties REPORT from RFC 3253.
-       * Added: Sabre_DAV_Property_IHref interface for properties exposing urls.
-       * Added: Issue 25: Throwing error on broken Finder behaviour.
-       * Changed: Authentication backend is now aware of current user.
-
-1.2.0alpha1 (2010-03-31)
-       * Fixed: Issue 26: Workaround for broken GVFS behaviour with encoded
-         special characters.
-       * Fixed: Issue 34: Incorrect Lock-Token response header for LOCK. Fixes
-         Office 2010 compatibility.
-       * Added: Issue 35: SabreDAV version to header to OPTIONS response to ease
-         debugging.
-       * Fixed: Issue 36: Incorrect variable name, throwing error in some
-         requests.
-       * Fixed: Issue 37: Incorrect smultron regex in temporary filefilter.
-       * Fixed: Issue 33: Converting ISO-8859-1 characters to UTF-8.
-       * Fixed: Issue 39 & Issue 40: Basename fails on non-utf-8 locales. 
-       * Added: More unittests.
-       * Added: SabreDAV version to all error responses.
-       * Added: URLUtil class for decoding urls.
-       * Changed: Now using pear.sabredav.org pear channel.
-       * Changed: Sabre_DAV_Server::getCopyAndMoveInfo is now a public method.
-
-1.1.2-alpha (2010-03-18)
-       * Added: RFC5397 - current-user-principal support.
-       * Fixed: Issue 27: encoding entities in property responses.
-       * Added: naturalselection script now allows the user to specify a 'minimum
-         number of bytes' for deletion. This should reduce load due to less
-         crawling
-       * Added: Full support for the calendar-query report.
-       * Added: More unittests.
-       * Added: Support for complex property deserialization through the static 
-         ::unserialize() method.
-       * Added: Support for modifying calendar-component-set
-       * Fixed: Issue 29: Added TIMEOUT_INFINITE constant
-
-1.1.1-alpha (2010-03-11)
-       * Added: RFC5689 - Extended MKCOL support.
-       * Fixed: Evolution support for CalDAV.
-       * Fixed: PDO-locks backend was pretty much completely broken. This is 
-         100% unittested now.
-       * Added: support for ctags.
-       * Fixed: Comma's between HTTP methods in 'Allow' method.
-       * Changed: default argument for Sabre_DAV_Locks_Backend_FS. This means a
-         datadirectory must always be specified from now on.
-       * Changed: Moved Sabre_DAV_Server::parseProps to
-         Sabre_DAV_XMLUtil::parseProperties.
-       * Changed: Sabre_DAV_IDirectory is now Sabre_DAV_ICollection.
-       * Changed: Sabre_DAV_Exception_PermissionDenied is now
-         Sabre_DAV_Exception_Forbidden.
-       * Changed: Sabre_CalDAV_ICalendarCollection is removed.
-       * Added: Sabre_DAV_IExtendedCollection.
-       * Added: Many more unittests.
-       * Added: support for calendar-timezone property.
-
-1.1.0-alpha (2010-03-01)
-       * Added: CalDAV - RFC 4791
-       * Removed: Sabre_PHP_Exception. PHP has a built-in ErrorException for
-         this.
-       * Added: PDO authentication backend.
-       * Added: Example sql for auth, caldav, locks for sqlite.
-       * Added: Sabre_DAV_Browser_GuessContentType plugin
-       * Changed: Authentication plugin refactored, making it possible to
-         implement non-digest authentication.
-       * Fixed: Better error display in browser plugin.
-       * Added: Support for {DAV:}supported-report-set 
-       * Added: XML utility class with helper functions for the WebDAV protocol.
-       * Added: Tons of unittests
-       * Added: PrincipalCollection and Principal classes
-       * Added: Sabre_DAV_Server::getProperties for easy property retrieval
-       * Changed: {DAV:}resourceType defaults to 0
-       * Changed: Any non-null resourceType now gets a / appended to the href
-         value. Before this was just for {DAV:}collection's, but this is now also
-         the case for for example {DAV:}principal.
-       * Changed: The Href property class can now optionally create non-relative
-         uri's.
-       * Changed: Sabre_HTTP_Response now returns false if headers are already
-         sent and header-methods are called.
-       * Fixed: Issue 19: HEAD requests on Collections
-       * Fixed: Issue 21: Typo in Sabre_DAV_Property_Response
-       * Fixed: Issue 18: Doesn't work with Evolution Contacts
-
-1.0.5-stable (2010-01-22)
-       * Fixed: Fatal error when a malformed url was used for unlocking, in
-         conjuction with Sabre.autoload.php due to a incorrect filename.
-       * Fixed: Improved unittests and build system 
-
-1.0.4-stable (2010-01-11)
-       * Fixed: needed 2 different releases. One for googlecode and one for
-         pearfarm. This is to retain the old method to install SabreDAV until
-         pearfarm becomes the standard installation method.
-
-1.0.3-stable (2010-01-11)
-       * Added: RFC4709 support (davmount)
-       * Added: 6 unittests
-       * Added: naturalselection. A tool to keep cache directories below a
-         specified theshold.
-       * Changed: Now using pearfarm.org channel server.
-
-1.0.1-stable (2009-12-22)
-       * Fixed: Issue 15: typos in examples
-       * Fixed: Minor pear installation issues
-
-1.0.0-stable (2009-11-02)
-       * Added: SimpleDirectory class. This class allows creating static
-         directory structures with ease.
-       * Changed: Custom complex properties and exceptions now get an instance of
-         Sabre_DAV_Server as their first argument in serialize()
-       * Changed: Href complex property now prepends server's baseUri
-       * Changed: delete before an overwriting copy/move is now handles by server
-         class instead of tree classes
-       * Changed: events must now explicitly return false to stop execution.
-         Before, execution would be stopped by anything loosely evaluating to
-         false.
-       * Changed: the getPropertiesForPath method now takes a different set of
-         arguments, and returns a different response. This allows plugin
-         developers to return statuses for properties other than 200 and 404. The
-         hrefs are now also always calculated relative to the baseUri, and not
-         the uri of the request.
-       * Changed: generatePropFindResponse is renamed to generateMultiStatus, and
-         now takes a list of properties similar to the response of
-         getPropertiesForPath. This was also needed to improve flexibility for
-         plugin development.
-       * Changed: Auth plugins are no longer included. They were not yet stable
-         quality, so they will probably be reintroduced in a later version.
-       * Changed: PROPPATCH also used generateMultiStatus now.
-       * Removed: unknownProperties event. This is replaced by the
-         afterGetProperties event, which should provide more flexibility. 
-       * Fixed: Only calling getSize() on IFile instances in httpHead()
-       * Added: beforeBind event. This is invoked upon file or directory creation
-       * Added: beforeWriteContent event, this is invoked by PUT and LOCK on an
-         existing resource.
-       * Added: beforeUnbind event. This is invoked right before deletion of any
-         resource.
-       * Added: afterGetProperties event. This event can be used to make
-         modifications to property responses.
-       * Added: beforeLock and beforeUnlock events.
-       * Added: afterBind event.
-       * Fixed: Copy and Move could fail in the root directory. This is now
-         fixed.
-       * Added: Plugins can now be retrieved by their classname. This is useful
-         for inter-plugin communication.
-       * Added: The Auth backend can now return usernames and user-id's.
-       * Added: The Auth backend got a getUsers method
-       * Added: Sabre_DAV_FSExt_Directory now returns quota info
-
-0.12.1-beta (2009-09-11)
-       * Fixed: UNLOCK bug. Unlock didn't work at all
-
-0.12-beta (2009-09-10)
-       * Updated: Browser plugin now shows multiple {DAV:}resourcetype values
-         if available.
-       * Added: Experimental PDO backend for Locks Manager
-       * Fixed: Sending Content-Length: 0 for every empty response. This
-         improves NGinx compatibility.
-       * Fixed: Last modification time is reported in UTC timezone. This improves
-         Finder compatibility.
-
-0.11-beta (2009-08-11)
-       * Updated: Now in Beta
-       * Updated: Pear package no longer includes docs/ directory. These just
-         contained rfc's, which are publically available. This reduces the
-         package from ~800k to ~60k
-       * Added: generatePropfindResponse now takes a baseUri argument
-       * Added: ResourceType property can now contain multiple resourcetypes.
-       * Fixed: Issue 13. 
-
-0.10-alpha (2009-08-03)
-       * Added: Plugin to automatically map GET requests to non-files to
-         PROPFIND (Sabre_DAV_Browser_MapGetToPropFind). This should allow 
-         easier debugging of complicated WebDAV setups.
-       * Added: Sabre_DAV_Property_Href class. For future use.
-       * Added: Ability to choose to use auth-int, auth or both for HTTP Digest
-         authentication. (Issue 11)
-       * Changed: Made more methods in Sabre_DAV_Server public.
-       * Fixed: TemporaryFileFilter plugin now intercepts HTTP LOCK requests
-         to non-existant files. (Issue 12)
-       * Added: Central list of defined xml namespace prefixes. This can reduce
-         Bandwidth and legibility for xml bodies with user-defined namespaces.
-       * Added: now a PEAR-compatible package again, thanks to Michael Gauthier
-       * Changed: moved default copy and move logic from ObjectTree to Tree class
-
-0.9-alpha (2009-07-21)
-       * Changed: Major refactoring, removed most of the logic from the Tree
-         objects. The Server class now directly works with the INode, IFile
-         and IDirectory objects. If you created your own Tree objects,
-         this will most likely break in this release.
-       * Changed: Moved all the Locking logic from the Tree and Server classes
-         into a separate plugin.
-       * Changed: TemporaryFileFilter is now a plugin.
-       * Added: Comes with an autoloader script. This can be used instead of
-         the includer script, and is preferered by some people.
-       * Added: AWS Authentication class.
-       * Added: simpleserversetup.py script. This will quickly get a fileserver
-         up and running.
-       * Added: When subscribing to events, it is now possible to supply a
-         priority. This is for example needed to ensure that the Authentication
-         Plugin is used before any other Plugin.
-       * Added: 22 new tests.
-       * Added: Users-manager plugin for .htdigest files. Experimental and
-         subject to change.
-       * Added: RFC 2324 HTTP 418 status code
-       * Fixed: Exclusive locks could in some cases be picked up as shared locks
-       * Fixed: Digest auth for non-apache servers had a bug (still not actually
-         tested this well).
-
-0.8-alpha (2009-05-30)
-       * Changed: Renamed all exceptions! This is a compatibility break. Every
-         Exception now follows Sabre_DAV_Exception_FileNotFound convention
-         instead of Sabre_DAV_FileNotFoundException.
-       * Added: Browser plugin now allows uploading and creating directories
-         straight from the browser.
-       * Added: 12 more unittests
-       * Fixed: Locking bug, which became prevalent on Windows Vista.
-       * Fixed: Netdrive support
-       * Fixed: TemporaryFileFilter filtered out too many files. Fixed some
-         of the regexes.
-       * Fixed: Added README and ChangeLog to package
-
-0.7-alpha (2009-03-29)
-       * Added: System to return complex properties from PROPFIND.
-       * Added: support for {DAV:}supportedlock.
-       * Added: support for {DAV:}lockdiscovery.
-       * Added: 6 new tests.
-       * Added: New plugin system.
-       * Added: Simple HTML directory plugin, for browser access.
-       * Added: Server class now sends back standard pre-condition error xml
-       bodies. This was new since RFC4918.
-       * Added: Sabre_DAV_Tree_Aggregrate, which can 'host' multiple Tree objects
-       into one.
-       * Added: simple basis for HTTP REPORT method. This method is not used yet,
-       but can be used by plugins to add reports.
-       * Changed: ->getSize is only called for files, no longer for collections.
-       r303
-       * Changed: Sabre_DAV_FilterTree is now Sabre_DAV_Tree_Filter
-       * Changed: Sabre_DAV_TemporaryFileFilter is now called
-       Sabre_DAV_Tree_TemporaryFileFilter.
-       * Changed: removed functions (get(/set)HTTPRequest(/Response)) from Server
-       class, and using a public property instead.
-       * Fixed: bug related to parsing proppatch and propfind requests. Didn't
-       show up in most clients, but it needed fixing regardless. (r255)
-       * Fixed: auth-int is now properly supported within HTTP Digest.
-       * Fixed: Using application/xml for a mimetype vs. text/xml as per RFC4918
-       sec 8.2.
-       * Fixed: TemporaryFileFilter now lets through GET's if they actually
-       exist on the backend. (r274)
-       * FIxed: Some methods didn't get passed through in the FilterTree (r283).
-       * Fixed: LockManager is now slightly more complex, Tree classes slightly
-       less. (r287)
-
-0.6-alpha (2009-02-16)
-       * Added: Now uses streams for files, instead of strings.
-         This means it won't require to hold entire files in memory, which can be
-         an issue if you're dealing with big files. Note that this breaks 
-         compatibility for put() and createFile methods.
-       * Added: HTTP Digest Authentication helper class.
-       * Added: Support for HTTP Range header
-       * Added: Support for ETags within If: headers
-       * Added: The API can now return ETags and override the default Content-Type
-       * Added: starting with basic framework for unittesting, using PHPUnit.
-       * Added: 49 unittests.
-       * Added: Abstraction for the HTTP request.
-       * Updated: Using Clark Notation for tags in properties. This means tags
-       are serialized as {namespace}tagName instead of namespace#tagName
-       * Fixed: HTTP_BasicAuth class now works as expected.
-       * Fixed: DAV_Server uses / for a default baseUrl.
-       * Fixed: Last modification date is no longer ignored in PROPFIND.
-       * Fixed: PROPFIND now sends back information about the requestUri even
-         when "Depth: 1" is specified.
-
-0.5-alpha (2009-01-14)
-       * Added: Added a very simple example for implementing a mapping to PHP
-         file streams. This should allow easy implementation of for example a
-         WebDAV to FTP proxy.
-       * Added: HTTP Basic Authentication helper class.
-       * Added: Sabre_HTTP_Reponse class. This centralizes HTTP operations and
-         will be a start towards the creating of a testing framework.
-       * Updated: Backwards compatibility break: all require_once() statements
-         are removed
-         from all the files. It is now recommended to use autoloading of 
-         classes, or just including lib/Sabre.includes.php. This fix was made
-         to allow easier integration into applications not using this standard
-         inclusion model.
-       * Updated: Better in-file documentation.
-       * Updated: Sabre_DAV_Tree can now work with Sabre_DAV_LockManager.
-       * Updated: Fixes a shared-lock bug.
-       * Updated: Removed ?> from the bottom of each php file.
-       * Updated: Split up some operations from Sabre_DAV_Server to
-         Sabre_HTTP_Response.
-       * Fixed: examples are now actually included in the pear package.
-
-0.4-alpha (2008-11-05)
-       * Passes all litmus tests!
-       * Added: more examples
-       * Added: Custom property support
-       * Added: Shared lock support
-       * Added: Depth support to locks
-       * Added: Locking on unmapped urls (non-existant nodes)
-       * Fixed: Advertising as WebDAV class 3 support
-
-0.3-alpha (2008-06-29) 
-       * Fully working in MS Windows clients.
-       * Added: temporary file filter: support for smultron files.
-       * Added: Phing build scripts 
-       * Added: PEAR package 
-       * Fixed: MOVE bug identied using finder.
-       * Fixed: Using gzuncompress instead of gzdecode in the temporary file
-         filter. This seems more common.
-
-0.2-alpha (2008-05-27) 
-       * Somewhat working in Windows clients 
-       * Added: Working PROPPATCH method (doesn't support custom properties yet)
-       * Added: Temporary filename handling system 
-       * Added: Sabre_DAV_IQuota to return quota information
-       * Added: PROPFIND now reads the request body and only supplies the
-         requested properties
-
-0.1-alpha (2008-04-04)
-       * First release!
-       * Passes litmus: basic, http and copymove test.
-       * Fully working in Finder and DavFSv2
-
-Project started: 2007-12-13
diff --git a/lib/Sabre.includes.php b/lib/Sabre.includes.php
deleted file mode 100755 (executable)
index c4b9369..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-/**
- * Library include file
- *
- * This file contains all includes to the rest of the SabreDAV library
- * Make sure the lib/ directory is in PHP's include_path
- *
- * @package Sabre
- * @subpackage DAV
- * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/) 
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
-
-/* Utilities */
-include 'Sabre/HTTP/Util.php';
-include 'Sabre/HTTP/Response.php';
-include 'Sabre/HTTP/Request.php';
-include 'Sabre/HTTP/AbstractAuth.php';
-include 'Sabre/HTTP/BasicAuth.php';
-include 'Sabre/HTTP/DigestAuth.php';
-include 'Sabre/HTTP/AWSAuth.php';
-
-/* Version */
-include 'Sabre/DAV/Version.php';
-include 'Sabre/HTTP/Version.php';
-
-/* Exceptions */
-include 'Sabre/DAV/Exception.php';
-include 'Sabre/DAV/Exception/BadRequest.php';
-include 'Sabre/DAV/Exception/Conflict.php';
-include 'Sabre/DAV/Exception/FileNotFound.php';
-include 'Sabre/DAV/Exception/InsufficientStorage.php';
-include 'Sabre/DAV/Exception/Locked.php';
-include 'Sabre/DAV/Exception/LockTokenMatchesRequestUri.php';
-include 'Sabre/DAV/Exception/MethodNotAllowed.php';
-include 'Sabre/DAV/Exception/NotImplemented.php';
-include 'Sabre/DAV/Exception/Forbidden.php';
-include 'Sabre/DAV/Exception/PreconditionFailed.php';
-include 'Sabre/DAV/Exception/RequestedRangeNotSatisfiable.php';
-include 'Sabre/DAV/Exception/UnsupportedMediaType.php';
-include 'Sabre/DAV/Exception/NotAuthenticated.php';
-
-include 'Sabre/DAV/Exception/ConflictingLock.php';
-include 'Sabre/DAV/Exception/ReportNotImplemented.php';
-include 'Sabre/DAV/Exception/InvalidResourceType.php';
-
-/* Properties */
-include 'Sabre/DAV/Property.php';
-include 'Sabre/DAV/Property/GetLastModified.php';
-include 'Sabre/DAV/Property/ResourceType.php';
-include 'Sabre/DAV/Property/SupportedLock.php';
-include 'Sabre/DAV/Property/LockDiscovery.php';
-include 'Sabre/DAV/Property/IHref.php';
-include 'Sabre/DAV/Property/Href.php';
-include 'Sabre/DAV/Property/HrefList.php';
-include 'Sabre/DAV/Property/SupportedReportSet.php';
-include 'Sabre/DAV/Property/Response.php';
-include 'Sabre/DAV/Property/ResponseList.php';
-
-/* Node interfaces */
-include 'Sabre/DAV/INode.php';
-include 'Sabre/DAV/IFile.php';
-include 'Sabre/DAV/ICollection.php';
-include 'Sabre/DAV/IProperties.php';
-include 'Sabre/DAV/ILockable.php';
-include 'Sabre/DAV/IQuota.php';
-include 'Sabre/DAV/IExtendedCollection.php';
-
-/* Node abstract implementations */
-include 'Sabre/DAV/Node.php';
-include 'Sabre/DAV/File.php';
-include 'Sabre/DAV/Collection.php';
-include 'Sabre/DAV/Directory.php';
-
-/* Utilities */
-include 'Sabre/DAV/SimpleCollection.php';
-include 'Sabre/DAV/SimpleDirectory.php';
-include 'Sabre/DAV/XMLUtil.php';
-include 'Sabre/DAV/URLUtil.php';
-
-/* Filesystem implementation */
-include 'Sabre/DAV/FS/Node.php';
-include 'Sabre/DAV/FS/File.php';
-include 'Sabre/DAV/FS/Directory.php';
-
-/* Advanced filesystem implementation */
-include 'Sabre/DAV/FSExt/Node.php';
-include 'Sabre/DAV/FSExt/File.php';
-include 'Sabre/DAV/FSExt/Directory.php';
-
-/* Trees */
-include 'Sabre/DAV/Tree.php';
-include 'Sabre/DAV/ObjectTree.php';
-include 'Sabre/DAV/Tree/Filesystem.php';
-
-/* Server */
-include 'Sabre/DAV/Server.php';
-include 'Sabre/DAV/ServerPlugin.php';
-
-/* Browser */
-include 'Sabre/DAV/Browser/Plugin.php';
-include 'Sabre/DAV/Browser/MapGetToPropFind.php';
-include 'Sabre/DAV/Browser/GuessContentType.php';
-
-/* Locks */
-include 'Sabre/DAV/Locks/LockInfo.php';
-include 'Sabre/DAV/Locks/Plugin.php';
-include 'Sabre/DAV/Locks/Backend/Abstract.php';
-include 'Sabre/DAV/Locks/Backend/FS.php';
-include 'Sabre/DAV/Locks/Backend/PDO.php';
-
-/* Temporary File Filter plugin */
-include 'Sabre/DAV/TemporaryFileFilterPlugin.php';
-
-/* Authentication plugin */
-include 'Sabre/DAV/Auth/Plugin.php';
-include 'Sabre/DAV/Auth/IBackend.php';
-include 'Sabre/DAV/Auth/Backend/AbstractDigest.php';
-include 'Sabre/DAV/Auth/Backend/AbstractBasic.php';
-include 'Sabre/DAV/Auth/Backend/File.php';
-include 'Sabre/DAV/Auth/Backend/PDO.php';
-
-/* DavMount plugin */
-include 'Sabre/DAV/Mount/Plugin.php';
-
diff --git a/lib/Sabre/CalDAV/Backend/Abstract.php b/lib/Sabre/CalDAV/Backend/Abstract.php
deleted file mode 100755 (executable)
index bf1274e..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-<?php
-
-/**
- * Abstract Calendaring backend. Extend this class to create your own backends.
- * 
- * @package Sabre
- * @subpackage CalDAV
- * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/) 
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
-abstract class Sabre_CalDAV_Backend_Abstract {
-
-    /**
-     * Returns a list of calendars for a principal.
-     *
-     * Every project is an array with the following keys:
-     *  * id, a unique id that will be used by other functions to modify the
-     *    calendar. This can be the same as the uri or a database key.
-     *  * uri, which the basename of the uri with which the calendar is 
-     *    accessed.
-     *  * principalUri. The owner of the calendar. Almost always the same as
-     *    principalUri passed to this method.
-     *
-     * Furthermore it can contain webdav properties in clark notation. A very
-     * common one is '{DAV:}displayname'. 
-     *
-     * @param string $principalUri 
-     * @return array 
-     */
-    abstract function getCalendarsForUser($principalUri);
-
-    /**
-     * Creates a new calendar for a principal.
-     *
-     * If the creation was a success, an id must be returned that can be used to reference
-     * this calendar in other methods, such as updateCalendar.
-     *
-     * @param string $principalUri
-     * @param string $calendarUri
-     * @param array $properties
-     * @return void 
-     */
-    abstract function createCalendar($principalUri,$calendarUri,array $properties); 
-
-    /**
-     * Updates properties for a calendar.
-     *
-     * The mutations array uses the propertyName in clark-notation as key,
-     * and the array value for the property value. In the case a property
-     * should be deleted, the property value will be null.
-     *
-     * This method must be atomic. If one property cannot be changed, the
-     * entire operation must fail.
-     *
-     * If the operation was successful, true can be returned.
-     * If the operation failed, false can be returned.
-     *
-     * Deletion of a non-existant property is always succesful.
-     *
-     * Lastly, it is optional to return detailed information about any
-     * failures. In this case an array should be returned with the following
-     * structure:
-     *
-     * array(
-     *   403 => array(
-     *      '{DAV:}displayname' => null,
-     *   ),
-     *   424 => array(
-     *      '{DAV:}owner' => null,
-     *   )
-     * )
-     *
-     * In this example it was forbidden to update {DAV:}displayname. 
-     * (403 Forbidden), which in turn also caused {DAV:}owner to fail
-     * (424 Failed Dependency) because the request needs to be atomic.
-     *
-     * @param string $calendarId
-     * @param array $mutations
-     * @return bool|array 
-     */
-    public function updateCalendar($calendarId, array $mutations) {
-        
-        return false; 
-
-    }
-
-    /**
-     * Delete a calendar and all it's objects 
-     * 
-     * @param string $calendarId 
-     * @return void
-     */
-    abstract function deleteCalendar($calendarId);
-
-    /**
-     * Returns all calendar objects within a calendar.
-     *
-     * Every item contains an array with the following keys:
-     *   * id - unique identifier which will be used for subsequent updates
-     *   * calendardata - The iCalendar-compatible calnedar data
-     *   * uri - a unique key which will be used to construct the uri. This can be any arbitrary string.
-     *   * lastmodified - a timestamp of the last modification time
-     *   * etag - An arbitrary string, surrounded by double-quotes. (e.g.: 
-     *   '  "abcdef"')
-     *   * calendarid - The calendarid as it was passed to this function.
-     *
-     * Note that the etag is optional, but it's highly encouraged to return for 
-     * speed reasons.
-     *
-     * The calendardata is also optional. If it's not returned 
-     * 'getCalendarObject' will be called later, which *is* expected to return 
-     * calendardata.
-     * 
-     * @param string $calendarId 
-     * @return array 
-     */
-    abstract function getCalendarObjects($calendarId);
-
-    /**
-     * Returns information from a single calendar object, based on it's object
-     * uri.
-     *
-     * The returned array must have the same keys as getCalendarObjects. The 
-     * 'calendardata' object is required here though, while it's not required 
-     * for getCalendarObjects.
-     * 
-     * @param string $calendarId 
-     * @param string $objectUri 
-     * @return array 
-     */
-    abstract function getCalendarObject($calendarId,$objectUri);
-
-    /**
-     * Creates a new calendar object. 
-     * 
-     * @param string $calendarId 
-     * @param string $objectUri 
-     * @param string $calendarData 
-     * @return void
-     */
-    abstract function createCalendarObject($calendarId,$objectUri,$calendarData);
-
-    /**
-     * Updates an existing calendarobject, based on it's uri. 
-     * 
-     * @param string $calendarId 
-     * @param string $objectUri 
-     * @param string $calendarData 
-     * @return void
-     */
-    abstract function updateCalendarObject($calendarId,$objectUri,$calendarData);
-
-    /**
-     * Deletes an existing calendar object. 
-     * 
-     * @param string $calendarId 
-     * @param string $objectUri 
-     * @return void
-     */
-    abstract function deleteCalendarObject($calendarId,$objectUri);
-
-}
diff --git a/lib/Sabre/CalDAV/Backend/PDO.php b/lib/Sabre/CalDAV/Backend/PDO.php
deleted file mode 100755 (executable)
index da04f99..0000000
+++ /dev/null
@@ -1,386 +0,0 @@
-<?php
-
-/**
- * PDO CalDAV backend
- *
- * This backend is used to store calendar-data in a PDO database, such as 
- * sqlite or MySQL
- * 
- * @package Sabre
- * @subpackage CalDAV
- * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/) 
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
-class Sabre_CalDAV_Backend_PDO extends Sabre_CalDAV_Backend_Abstract {
-
-    /**
-     * pdo 
-     * 
-     * @var PDO
-     */
-    protected $pdo;
-
-    /**
-     * The table name that will be used for calendars 
-     * 
-     * @var string 
-     */
-    protected $calendarTableName;
-
-    /**
-     * The table name that will be used for calendar objects  
-     * 
-     * @var string 
-     */
-    protected $calendarObjectTableName;
-
-    /**
-     * List of CalDAV properties, and how they map to database fieldnames
-     *
-     * Add your own properties by simply adding on to this array
-     * 
-     * @var array
-     */
-    public $propertyMap = array(
-        '{DAV:}displayname'                          => 'displayname',
-        '{urn:ietf:params:xml:ns:caldav}calendar-description' => 'description',
-        '{urn:ietf:params:xml:ns:caldav}calendar-timezone'    => 'timezone',
-        '{http://apple.com/ns/ical/}calendar-order'  => 'calendarorder',
-        '{http://apple.com/ns/ical/}calendar-color'  => 'calendarcolor',
-    );
-
-    /**
-     * Creates the backend 
-     * 
-     * @param PDO $pdo 
-     */
-    public function __construct(PDO $pdo, $calendarTableName = 'calendars', $calendarObjectTableName = 'calendarobjects') {
-
-        $this->pdo = $pdo;
-        $this->calendarTableName = $calendarTableName;
-        $this->calendarObjectTableName = $calendarObjectTableName;
-
-    }
-
-    /**
-     * Returns a list of calendars for a principal.
-     *
-     * Every project is an array with the following keys:
-     *  * id, a unique id that will be used by other functions to modify the
-     *    calendar. This can be the same as the uri or a database key.
-     *  * uri, which the basename of the uri with which the calendar is 
-     *    accessed.
-     *  * principalUri. The owner of the calendar. Almost always the same as
-     *    principalUri passed to this method.
-     *
-     * Furthermore it can contain webdav properties in clark notation. A very
-     * common one is '{DAV:}displayname'. 
-     *
-     * @param string $principalUri 
-     * @return array 
-     */
-    public function getCalendarsForUser($principalUri) {
-
-        $fields = array_values($this->propertyMap);
-        $fields[] = 'id';
-        $fields[] = 'uri';
-        $fields[] = 'ctag';
-        $fields[] = 'components';
-        $fields[] = 'principaluri';
-
-        // Making fields a comma-delimited list 
-        $fields = implode(', ', $fields);
-        $stmt = $this->pdo->prepare("SELECT " . $fields . " FROM `".$this->calendarTableName."` WHERE principaluri = ?"); 
-        $stmt->execute(array($principalUri));
-
-        $calendars = array();
-        while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
-
-            $components = explode(',',$row['components']);
-
-            $calendar = array(
-                'id' => $row['id'],
-                'uri' => $row['uri'],
-                'principaluri' => $row['principaluri'],
-                '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}getctag' => $row['ctag']?$row['ctag']:'0',
-                '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet($components),
-            );
-        
-
-            foreach($this->propertyMap as $xmlName=>$dbName) {
-                $calendar[$xmlName] = $row[$dbName];
-            }
-
-            $calendars[] = $calendar;
-
-        }
-
-        return $calendars;
-
-    }
-
-    /**
-     * Creates a new calendar for a principal.
-     *
-     * If the creation was a success, an id must be returned that can be used to reference
-     * this calendar in other methods, such as updateCalendar
-     *
-     * @param string $principalUri
-     * @param string $calendarUri
-     * @param array $properties
-     */
-    public function createCalendar($principalUri,$calendarUri, array $properties) {
-
-        $fieldNames = array(
-            'principaluri',
-            'uri',
-            'ctag',
-        );
-        $values = array(
-            ':principaluri' => $principalUri,
-            ':uri'          => $calendarUri,
-            ':ctag'         => 1,
-        );
-
-        // Default value
-        $sccs = '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set';
-        $fieldNames[] = 'components';
-        if (!isset($properties[$sccs])) {
-            $values[':components'] = 'VEVENT,VTODO';
-        } else {
-            if (!($properties[$sccs] instanceof Sabre_CalDAV_Property_SupportedCalendarComponentSet)) {
-                throw new Sabre_DAV_Exception('The ' . $sccs . ' property must be of type: Sabre_CalDAV_Property_SupportedCalendarComponentSet');
-            }
-            $values[':components'] = implode(',',$properties[$sccs]->getValue());
-        }
-
-        foreach($this->propertyMap as $xmlName=>$dbName) {
-            if (isset($properties[$xmlName])) {
-
-                $myValue = $properties[$xmlName];
-                $values[':' . $dbName] = $properties[$xmlName];
-                $fieldNames[] = $dbName;
-            }
-        }
-
-        $stmt = $this->pdo->prepare("INSERT INTO `".$this->calendarTableName."` (".implode(', ', $fieldNames).") VALUES (".implode(', ',array_keys($values)).")");
-        $stmt->execute($values);
-
-        return $this->pdo->lastInsertId();
-
-    }
-
-    /**
-     * Updates properties for a calendar.
-     *
-     * The mutations array uses the propertyName in clark-notation as key,
-     * and the array value for the property value. In the case a property
-     * should be deleted, the property value will be null.
-     *
-     * This method must be atomic. If one property cannot be changed, the
-     * entire operation must fail.
-     *
-     * If the operation was successful, true can be returned.
-     * If the operation failed, false can be returned.
-     *
-     * Deletion of a non-existant property is always succesful.
-     *
-     * Lastly, it is optional to return detailed information about any
-     * failures. In this case an array should be returned with the following
-     * structure:
-     *
-     * array(
-     *   403 => array(
-     *      '{DAV:}displayname' => null,
-     *   ),
-     *   424 => array(
-     *      '{DAV:}owner' => null,
-     *   )
-     * )
-     *
-     * In this example it was forbidden to update {DAV:}displayname. 
-     * (403 Forbidden), which in turn also caused {DAV:}owner to fail
-     * (424 Failed Dependency) because the request needs to be atomic.
-     *
-     * @param string $calendarId
-     * @param array $mutations 
-     * @return bool|array 
-     */
-    public function updateCalendar($calendarId, array $mutations) {
-
-        $newValues = array();
-        $result = array(
-            200 => array(), // Ok
-            403 => array(), // Forbidden
-            424 => array(), // Failed Dependency
-        );
-
-        $hasError = false;
-
-        foreach($mutations as $propertyName=>$propertyValue) {
-
-            // We don't know about this property. 
-            if (!isset($this->propertyMap[$propertyName])) {
-                $hasError = true;
-                $result[403][$propertyName] = null;
-                unset($mutations[$propertyName]);
-                continue;
-            }
-
-            $fieldName = $this->propertyMap[$propertyName];
-            $newValues[$fieldName] = $propertyValue;
-                
-        }
-
-        // If there were any errors we need to fail the request
-        if ($hasError) {
-            // Properties has the remaining properties
-            foreach($mutations as $propertyName=>$propertyValue) {
-                $result[424][$propertyName] = null;
-            }
-
-            // Removing unused statuscodes for cleanliness
-            foreach($result as $status=>$properties) {
-                if (is_array($properties) && count($properties)===0) unset($result[$status]);
-            }
-
-            return $result;
-
-        }
-
-        // Success
-
-        // Now we're generating the sql query.
-        $valuesSql = array();
-        foreach($newValues as $fieldName=>$value) {
-            $valuesSql[] = $fieldName . ' = ?';
-        }
-        $valuesSql[] = 'ctag = ctag + 1';
-
-        $stmt = $this->pdo->prepare("UPDATE `" . $this->calendarTableName . "` SET " . implode(', ',$valuesSql) . " WHERE id = ?");
-        $newValues['id'] = $calendarId; 
-        $stmt->execute(array_values($newValues));
-
-        return true; 
-
-    }
-
-    /**
-     * Delete a calendar and all it's objects 
-     * 
-     * @param string $calendarId 
-     * @return void
-     */
-    public function deleteCalendar($calendarId) {
-
-        $stmt = $this->pdo->prepare('DELETE FROM `'.$this->calendarObjectTableName.'` WHERE calendarid = ?');
-        $stmt->execute(array($calendarId));
-
-        $stmt = $this->pdo->prepare('DELETE FROM `'.$this->calendarTableName.'` WHERE id = ?');
-        $stmt->execute(array($calendarId));
-
-    }
-
-    /**
-     * Returns all calendar objects within a calendar. 
-     *
-     * Every item contains an array with the following keys:
-     *   * id - unique identifier which will be used for subsequent updates
-     *   * calendardata - The iCalendar-compatible calnedar data
-     *   * uri - a unique key which will be used to construct the uri. This can be any arbitrary string.
-     *   * lastmodified - a timestamp of the last modification time
-     *   * etag - An arbitrary string, surrounded by double-quotes. (e.g.: 
-     *   '  "abcdef"')
-     *   * calendarid - The calendarid as it was passed to this function.
-     *
-     * Note that the etag is optional, but it's highly encouraged to return for 
-     * speed reasons.
-     *
-     * The calendardata is also optional. If it's not returned 
-     * 'getCalendarObject' will be called later, which *is* expected to return 
-     * calendardata.
-     * 
-     * @param string $calendarId 
-     * @return array 
-     */
-    public function getCalendarObjects($calendarId) {
-
-        $stmt = $this->pdo->prepare('SELECT * FROM `'.$this->calendarObjectTableName.'` WHERE calendarid = ?');
-        $stmt->execute(array($calendarId));
-        return $stmt->fetchAll();
-
-    }
-
-    /**
-     * Returns information from a single calendar object, based on it's object
-     * uri.
-     *
-     * The returned array must have the same keys as getCalendarObjects. The 
-     * 'calendardata' object is required here though, while it's not required 
-     * for getCalendarObjects.
-     * 
-     * @param string $calendarId 
-     * @param string $objectUri 
-     * @return array 
-     */
-    public function getCalendarObject($calendarId,$objectUri) {
-
-        $stmt = $this->pdo->prepare('SELECT * FROM `'.$this->calendarObjectTableName.'` WHERE calendarid = ? AND uri = ?');
-        $stmt->execute(array($calendarId, $objectUri));
-        return $stmt->fetch();
-
-    }
-
-    /**
-     * Creates a new calendar object. 
-     * 
-     * @param string $calendarId 
-     * @param string $objectUri 
-     * @param string $calendarData 
-     * @return void
-     */
-    public function createCalendarObject($calendarId,$objectUri,$calendarData) {
-
-        $stmt = $this->pdo->prepare('INSERT INTO `'.$this->calendarObjectTableName.'` (calendarid, uri, calendardata, lastmodified) VALUES (?,?,?,?)');
-        $stmt->execute(array($calendarId,$objectUri,$calendarData,time()));
-        $stmt = $this->pdo->prepare('UPDATE `'.$this->calendarTableName.'` SET ctag = ctag + 1 WHERE id = ?');
-        $stmt->execute(array($calendarId));
-
-    }
-
-    /**
-     * Updates an existing calendarobject, based on it's uri. 
-     * 
-     * @param string $calendarId 
-     * @param string $objectUri 
-     * @param string $calendarData 
-     * @return void
-     */
-    public function updateCalendarObject($calendarId,$objectUri,$calendarData) {
-
-        $stmt = $this->pdo->prepare('UPDATE `'.$this->calendarObjectTableName.'` SET calendardata = ?, lastmodified = ? WHERE calendarid = ? AND uri = ?');
-        $stmt->execute(array($calendarData,time(),$calendarId,$objectUri));
-        $stmt = $this->pdo->prepare('UPDATE `'.$this->calendarTableName.'` SET ctag = ctag + 1 WHERE id = ?');
-        $stmt->execute(array($calendarId));
-
-    }
-
-    /**
-     * Deletes an existing calendar object. 
-     * 
-     * @param string $calendarId 
-     * @param string $objectUri 
-     * @return void
-     */
-    public function deleteCalendarObject($calendarId,$objectUri) {
-
-        $stmt = $this->pdo->prepare('DELETE FROM `'.$this->calendarObjectTableName.'` WHERE calendarid = ? AND uri = ?');
-        $stmt->execute(array($calendarId,$objectUri));
-        $stmt = $this->pdo->prepare('UPDATE `'. $this->calendarTableName .'` SET ctag = ctag + 1 WHERE id = ?');
-        $stmt->execute(array($calendarId));
-
-    }
-
-
-}
diff --git a/lib/Sabre/CalDAV/Backend/TYPO3.php b/lib/Sabre/CalDAV/Backend/TYPO3.php
deleted file mode 100755 (executable)
index efa4bef..0000000
+++ /dev/null
@@ -1,522 +0,0 @@
-<?php
-
-/**
- * TYPO3 CalDAV backend
- *
- * This backend is used to store calendar-data in a TYPO3 database
- *
- * @package Sabre
- * @subpackage CalDAV
- * @copyright Copyright (C) 2012-2015 Mario Matzulla. All rights reserved.
- * @author Mario Matzulla (http://www.matzullas.de)
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
-class Sabre_CalDAV_Backend_TYPO3 extends Sabre_CalDAV_Backend_Abstract {
-       
-       /**
-        * pdo
-        *
-        * @var PDO
-        */
-       private $pdo;
-       
-       /**
-        * The table name that will be used for calendars
-        *
-        * @var string
-        */
-       protected $calendarTableName;
-       
-       /**
-        * The table name that will be used for calendar objects
-        *
-        * @var string
-        */
-       protected $calendarObjectTableName;
-       
-       /**
-        * List of CalDAV properties, and how they map to database fieldnames
-        *
-        * Add your own properties by simply adding on to this array
-        *
-        * @var array
-        */
-       public $propertyMap = array (
-                       '{DAV:}displayname' => 'title',
-                       '{urn:ietf:params:xml:ns:caldav}calendar-description' => 'tx_caldav_data',
-                       '{urn:ietf:params:xml:ns:caldav}calendar-timezone' => 'timezone',
-                       '{http://apple.com/ns/ical/}calendar-order' => 'calendarorder',
-                       '{http://apple.com/ns/ical/}calendar-color' => 'calendarcolor' 
-       );
-       
-       /**
-        * Creates the backend
-        *
-        * @param PDO $pdo              
-        */
-       public function __construct(PDO $pdo, $calendarTableName = 'calendars', $calendarObjectTableName = 'calendarobjects') {
-               $this->pdo = $pdo;
-               $this->calendarTableName = $calendarTableName;
-               $this->calendarObjectTableName = $calendarObjectTableName;
-       }
-       
-       /**
-        * Returns a list of calendars for a principal.
-        *
-        * Every project is an array with the following keys:
-        * * id, a unique id that will be used by other functions to modify the
-        * calendar. This can be the same as the uri or a database key.
-        * * uri, which the basename of the uri with which the calendar is
-        * accessed.
-        * * principalUri. The owner of the calendar. Almost always the same as
-        * principalUri passed to this method.
-        *
-        * Furthermore it can contain webdav properties in clark notation. A very
-        * common one is '{DAV:}displayname'.
-        *
-        * @param string $principalUri          
-        * @return array
-        */
-       public function getCalendarsForUser($principalUri) {
-               $principalUriParts = explode ( "/", $principalUri );
-               $stmt = $this->pdo->prepare ( "SELECT uid, tx_cal_calendar FROM fe_users WHERE username = ? AND deleted=0" );
-               $stmt->execute ( array (
-                               array_pop ( $principalUriParts ) 
-               ) );
-               
-               $calendars = array ();
-               
-               while ( $user = $stmt->fetch ( PDO::FETCH_ASSOC ) ) {
-                       
-                       $stmt = $this->pdo->prepare ( "SELECT * FROM tx_cal_calendar WHERE uid in (" . $user ['tx_cal_calendar'] . ")" );
-                       $stmt->execute ();
-                       
-                       while ( $row = $stmt->fetch ( PDO::FETCH_ASSOC ) ) {
-                               
-                               $components = explode ( ',', 'VEVENT,VTODO' );
-                               
-                               $calendar = array (
-                                               'id' => $row ['uid'],
-                                               'uri' => $row ['title'],
-                                               'principaluri' => $principalUri,
-                                               '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}getctag' => $row ['tstamp'] ? $row ['tstamp'] : '0',
-                                               '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet ( $components ),
-                                               '{DAV:}displayname' => $row ['title'],
-                                               '{urn:ietf:params:xml:ns:caldav}calendar-description' => '',
-                                               '{urn:ietf:params:xml:ns:caldav}calendar-timezone' => null,
-                                               '{http://apple.com/ns/ical/}calendar-order' => 0,
-                                               '{http://apple.com/ns/ical/}calendar-color' => null 
-                               );
-                               
-                               $calendars [] = $calendar;
-                       }
-               }
-               
-               return $calendars;
-       }
-       
-       /**
-        * Creates a new calendar for a principal.
-        *
-        * If the creation was a success, an id must be returned that can be used to reference
-        * this calendar in other methods, such as updateCalendar
-        *
-        * @param string $principalUri          
-        * @param string $calendarUri           
-        * @param array $properties             
-        * @return mixed
-        */
-       public function createCalendar($principalUri, $calendarUri, array $properties) {
-               $fieldNames = array (
-                               'principaluri',
-                               'uri',
-                               'ctag' 
-               );
-               $values = array (
-                               ':principaluri' => $principalUri,
-                               ':uri' => $calendarUri,
-                               ':ctag' => 1 
-               );
-               
-               // Default value
-               $sccs = '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set';
-               $fieldNames [] = 'components';
-               if (! isset ( $properties [$sccs] )) {
-                       $values [':components'] = 'VEVENT,VTODO';
-               } else {
-                       if (! ($properties [$sccs] instanceof Sabre_CalDAV_Property_SupportedCalendarComponentSet)) {
-                               throw new Sabre_DAV_Exception ( 'The ' . $sccs . ' property must be of type: Sabre_CalDAV_Property_SupportedCalendarComponentSet' );
-                       }
-                       $values [':components'] = implode ( ',', $properties [$sccs]->getValue () );
-               }
-               
-               foreach ( $this->propertyMap as $xmlName => $dbName ) {
-                       if (isset ( $properties [$xmlName] )) {
-                               
-                               $myValue = $properties [$xmlName];
-                               $values [':' . $dbName] = $properties [$xmlName];
-                               $fieldNames [] = $dbName;
-                       }
-               }
-               
-               $stmt = $this->pdo->prepare ( "INSERT INTO tx_cal_calendar (" . implode ( ', ', $fieldNames ) . ") VALUES (" . implode ( ', ', array_keys ( $values ) ) . ")" );
-               $stmt->execute ( $values );
-               
-               return $this->pdo->lastInsertId ();
-       }
-       
-       /**
-        * Updates a calendars properties
-        *
-        * The properties array uses the propertyName in clark-notation as key,
-        * and the array value for the property value. In the case a property
-        * should be deleted, the property value will be null.
-        *
-        * This method must be atomic. If one property cannot be changed, the
-        * entire operation must fail.
-        *
-        * If the operation was successful, true can be returned.
-        * If the operation failed, false can be returned.
-        *
-        * Deletion of a non-existant property is always succesful.
-        *
-        * Lastly, it is optional to return detailed information about any
-        * failures. In this case an array should be returned with the following
-        * structure:
-        *
-        * array(
-        * 403 => array(
-        * '{DAV:}displayname' => null,
-        * ),
-        * 424 => array(
-        * '{DAV:}owner' => null,
-        * )
-        * )
-        *
-        * In this example it was forbidden to update {DAV:}displayname.
-        * (403 Forbidden), which in turn also caused {DAV:}owner to fail
-        * (424 Failed Dependency) because the request needs to be atomic.
-        *
-        * @param string $calendarId            
-        * @param array $properties             
-        * @return bool|array
-        */
-       public function updateCalendar($calendarId, array $properties) {
-               $newValues = array ();
-               $result = array (
-                               200 => array (), // Ok
-                               403 => array (), // Forbidden
-                               424 => array ()  // Failed Dependency
-                               );
-               
-               $hasError = false;
-               
-               foreach ( $properties as $propertyName => $propertyValue ) {
-                       
-                       // We don't know about this property.
-                       if (! isset ( $this->propertyMap [$propertyName] )) {
-                               $hasError = true;
-                               $result [403] [$propertyName] = null;
-                               unset ( $properties [$propertyName] );
-                               continue;
-                       }
-                       
-                       $fieldName = $this->propertyMap [$propertyName];
-                       $newValues [$fieldName] = $propertyValue;
-               }
-               
-               // If there were any errors we need to fail the request
-               if ($hasError) {
-                       // Properties has the remaining properties
-                       foreach ( $properties as $propertyName => $propertyValue ) {
-                               $result [424] [$propertyName] = null;
-                       }
-                       
-                       // Removing unused statuscodes for cleanliness
-                       foreach ( $result as $status => $properties ) {
-                               if (is_array ( $properties ) && count ( $properties ) === 0)
-                                       unset ( $result [$status] );
-                       }
-                       return $result;
-               }
-               
-               // Success
-               
-               // Now we're generating the sql query.
-               $valuesSql = array ();
-               foreach ( $newValues as $fieldName => $value ) {
-                       $valuesSql [] = $fieldName . ' = ?';
-               }
-               $valuesSql [] = time ();
-               
-               $stmt = $this->pdo->prepare ( "UPDATE tx_cal_calendar SET " . implode ( ', ', $valuesSql ) . " WHERE id = ?" );
-               $newValues ['id'] = $calendarId;
-               $stmt->execute ( array_values ( $newValues ) );
-               
-               $stmt = $this->pdo->prepare ( 'SELECT * FROM tx_cal_calendar WHERE uid = ?' );
-               $stmt->execute ( array (
-                               $calendarId 
-               ) );
-               $calendarRow = $stmt->fetch ();
-               $this->clearCache ( $calendarRow ['pid'] );
-               
-               return true;
-       }
-       
-       /**
-        * Delete a calendar and all it's objects
-        *
-        * @param string $calendarId            
-        * @return void
-        */
-       public function deleteCalendar($calendarId) {
-               $stmt = $this->pdo->prepare ( 'SELECT * FROM tx_cal_calendar WHERE uid = ?' );
-               $stmt->execute ( array (
-                               $calendarId 
-               ) );
-               $calendarRow = $stmt->fetch ();
-               
-               $stmt = $this->pdo->prepare ( 'DELETE FROM tx_cal_event WHERE calendar_id = ?' );
-               $stmt->execute ( array (
-                               $calendarId 
-               ) );
-               
-               $stmt = $this->pdo->prepare ( 'DELETE FROM tx_cal_calendar WHERE uid = ?' );
-               $stmt->execute ( array (
-                               $calendarId 
-               ) );
-               $this->clearCache ( $calendarRow ['pid'] );
-       }
-       
-       /**
-        * Returns all calendar objects within a calendar object.
-        *
-        * Every item contains an array with the following keys:
-        * * id - unique identifier which will be used for subsequent updates
-        * * calendardata - The iCalendar-compatible calnedar data
-        * * uri - a unique key which will be used to construct the uri. This can be any arbitrary string.
-        * * lastmodified - a timestamp of the last modification time
-        *
-        * @param string $calendarId            
-        * @return array
-        */
-       public function getCalendarObjects($calendarId) {
-               $stmt = $this->pdo->prepare ( 'SELECT * FROM tx_cal_event WHERE calendar_id = ? AND deleted = 0 AND hidden = 0' );
-               $stmt->execute ( array (
-                               $calendarId 
-               ) );
-               $eventArray = $stmt->fetchAll ();
-               $preparedArray = Array ();
-               foreach ( $eventArray as $eventRow ) {
-                       if ($eventRow ['tx_caldav_uid'] == '' && $eventRow ['icsUid'] == '') {
-                               $eventRow ['tx_caldav_uid'] = 'a1b2c3_' . $eventRow ['calendar_id'] . '_' . $eventRow ['uid'];
-                               $eventRow ['icsUid'] = $eventRow ['tx_caldav_uid'];
-                               $stmt = $this->pdo->prepare ( "UPDATE tx_cal_event SET tx_caldav_uid = ?, icsUid = ? WHERE uid = ?" );
-                               $stmt->execute ( Array (
-                                               $eventRow ['tx_caldav_uid'],
-                                               $eventRow ['icsUid'],
-                                               $eventRow ['uid'] 
-                               ) );
-                       } else if ($eventRow ['tx_caldav_uid'] == '') {
-                               $eventRow ['tx_caldav_uid'] = $eventRow ['icsUid'];
-                               $stmt = $this->pdo->prepare ( "UPDATE tx_cal_event SET tx_caldav_uid = ? WHERE uid = ?" );
-                               $stmt->execute ( Array (
-                                               $eventRow ['tx_caldav_uid'],
-                                               $eventRow ['uid'] 
-                               ) );
-                       } else if ($eventRow ['icsUid'] == '') {
-                               $eventRow ['icsUid'] = $eventRow ['tx_caldav_uid'];
-                               $stmt = $this->pdo->prepare ( "UPDATE tx_cal_event SET icsUid = ? WHERE uid = ?" );
-                               $stmt->execute ( Array (
-                                               $eventRow ['icsUid'],
-                                               $eventRow ['uid'] 
-                               ) );
-                       }
-                       $preparedArray [] = Array (
-                                       'id' => $eventRow ['uid'],
-                                       'displayname' => $eventRow ['title'],
-                                       'calendardata' => rtrim($eventRow ['tx_caldav_data']),
-                                       'uri' => $eventRow ['tx_caldav_uid'],
-                                       'calendarid' => $calendarId,
-                                       'lastmodified' => $eventRow ['tstamp'] 
-                       );
-               }
-               return $preparedArray;
-       }
-       
-       /**
-        * Returns information from a single calendar object, based on it's object uri.
-        *
-        * @param string $calendarId            
-        * @param string $objectUri             
-        * @return array
-        */
-       public function getCalendarObject($calendarId, $objectUri) {
-               $stmt = $this->pdo->prepare ( 'SELECT * FROM tx_cal_event WHERE calendar_id = ? AND tx_caldav_uid = ? AND deleted = 0 AND hidden = 0' );
-               $stmt->execute ( array (
-                               $calendarId,
-                               $objectUri 
-               ) );
-               $eventRow = $stmt->fetch ();
-               if (empty ( $eventRow )) {
-                       return Array ();
-               }
-               return Array (
-                               'id' => $eventRow ['uid'],
-                               'displayname' => $eventRow ['title'],
-                               'calendardata' => rtrim($eventRow ['tx_caldav_data']),
-                               'uri' => $eventRow ['icsUid'],
-                               'calendarid' => $calendarId,
-                               'lastmodified' => $eventRow ['tstamp'] 
-               );
-       }
-       
-       /**
-        * Creates a new calendar object.
-        *
-        * @param string $calendarId            
-        * @param string $objectUri             
-        * @param string $calendarData          
-        * @return void
-        */
-       public function createCalendarObject($calendarId, $objectUri, $calendarData) {
-               $stmt = $this->pdo->prepare ( 'SELECT * FROM tx_cal_calendar WHERE uid = ?' );
-               $stmt->execute ( array (
-                               $calendarId 
-               ) );
-               $calendarRow = $stmt->fetch ();
-               
-               $stmt = $this->pdo->prepare ( 'INSERT INTO tx_cal_event (pid,calendar_id, tx_caldav_uid, tx_caldav_data, tstamp) VALUES (?,?,?,?,?)' );
-               $uid = $this->pdo->lastInsertId ();
-               $stmt->execute ( array (
-                               $calendarRow ['pid'],
-                               $calendarId,
-                               $objectUri,
-                               $calendarData,
-                               time () 
-               ) );
-               $stmt = $this->pdo->prepare ( 'UPDATE tx_cal_calendar SET tstamp = tstamp + 1 WHERE uid = ? AND deleted = 0 AND hidden = 0' );
-               $stmt->execute ( array (
-                               $calendarId 
-               ) );
-               $this->updateCalEvent ( $calendarId, $objectUri, $calendarData );
-               $this->clearCache ( $calendarRow ['pid'] );
-       }
-       
-       /**
-        * Updates an existing calendarobject, based on it's uri.
-        *
-        * @param string $calendarId            
-        * @param string $objectUri             
-        * @param string $calendarData          
-        * @return void
-        */
-       public function updateCalendarObject($calendarId, $objectUri, $calendarData) {
-               $stmt = $this->pdo->prepare ( 'SELECT * FROM tx_cal_event WHERE calendar_id = ?' );
-               $stmt->execute ( array (
-                               $calendarId 
-               ) );
-               $calendarRow = $stmt->fetch ();
-               $stmt = $this->pdo->prepare ( 'UPDATE tx_cal_event SET tx_caldav_data = ?, tstamp = ? WHERE calendar_id = ? AND icsUid = ? AND deleted = 0 AND hidden = 0' );
-               $stmt->execute ( array (
-                               rtrim($calendarData),
-                               time (),
-                               $calendarId,
-                               $objectUri 
-               ) );
-               $stmt = $this->pdo->prepare ( 'UPDATE tx_cal_calendar SET tstamp = tstamp + 1 WHERE uid = ? AND deleted = 0 AND hidden = 0' );
-               $stmt->execute ( array (
-                               $calendarId 
-               ) );
-               $this->updateCalEvent ( $calendarId, $objectUri, rtrim($calendarData) );
-               $this->clearCache ( $calendarRow ['pid'] );
-       }
-       
-       /**
-        * Deletes an existing calendar object.
-        *
-        * @param string $calendarId            
-        * @param string $objectUri             
-        * @return void
-        */
-       public function deleteCalendarObject($calendarId, $objectUri) {
-               $stmt = $this->pdo->prepare ( 'SELECT * FROM tx_cal_event WHERE calendar_id = ? AND icsUid = ? AND deleted = 0 AND hidden = 0' );
-               $stmt->execute ( array (
-                               $calendarId,
-                               $objectUri
-               ) );
-               $eventRow = $stmt->fetch ();
-               
-               $stmt = $this->pdo->prepare ( 'DELETE FROM tx_cal_event WHERE calendar_id = ? AND icsUid = ? AND deleted = 0 AND hidden = 0' );
-               $stmt->execute ( array (
-                               $calendarId,
-                               $objectUri 
-               ) );
-               $stmt = $this->pdo->prepare ( 'UPDATE tx_cal_calendar SET tstamp = tstamp + 1 WHERE uid = ? AND deleted = 0 AND hidden = 0' );
-               $stmt->execute ( array (
-                               $calendarId 
-               ) );
-               
-               $service = new \TYPO3\CMS\Cal\Service\ICalendarService ();
-               $service->clearAllImagesAndAttachments($eventRow['uid']);
-               $this->clearCache ( $eventRow ['pid'] );
-       }
-       private function updateCalEvent($calendarId, $objectUri, $calendarData) {
-               $stmt = $this->pdo->prepare ( 'SELECT * FROM tx_cal_calendar WHERE uid = ?' );
-               $stmt->execute ( array (
-                               $calendarId 
-               ) );
-               $calendarRow = $stmt->fetch ();
-               $pageTSConf = \TYPO3\CMS\Backend\Utility\BackendUtility::getPagesTSconfig ( $calendarRow ['pid'] );
-               $pageIDForPlugin = $calendarRow ['pid'];
-               if ($pageTSConf ['options.'] ['tx_cal_controller.'] ['pageIDForPlugin']) {
-                       $pageIDForPlugin = $pageTSConf ['options.'] ['tx_cal_controller.'] ['pageIDForPlugin'];
-               }
-               $calAPI = new \TYPO3\CMS\Cal\Controller\Api ();
-               $calAPI = &$calAPI->tx_cal_api_without ( $pageIDForPlugin );
-               
-               $service = new \TYPO3\CMS\Cal\Service\ICalendarService ();
-               $components = $service->getiCalendarFromIcsFile ( $calendarData );
-               $logger = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\Log\LogManager')->getLogger(__CLASS__);
-               
-               foreach ( $components->_components as $component ) {
-                       if ($component->getType() == 'vEvent') {
-                               $logger->info('is_a ' . $component->getType());
-                               $logger->info($component->getAttribute('UID'));
-                               $stmt = $this->pdo->prepare ( 'UPDATE tx_cal_event SET icsUid = ?, type = ? WHERE tx_caldav_uid = ?' );
-                               $stmt->execute ( array (
-                                               $component->getAttribute ( 'UID' ),
-                                               0,
-                                               $objectUri 
-                               ) );
-                       } else if ($component->getType() == 'vTodo') {
-                               $logger->info('is_a ' . $component->getType());
-                               $logger->info($component->getAttribute('UID'));
-                               $stmt = $this->pdo->prepare ( 'UPDATE tx_cal_event SET icsUid = ?, type = ? WHERE tx_caldav_uid = ?' );
-                               $stmt->execute ( array (
-                                               $component->getAttribute ( 'UID' ),
-                                               4,
-                                               $objectUri
-                               ) );
-                       }
-               }
-               $service->insertCalEventsIntoDB ( $components->_components, $calendarId, $calendarRow ['pid'], 0, 0, FALSE );
-               $this->clearCache ( $calendarRow ['pid'] );
-       }
-       
-       private function clearCache($pid) {
-               $pageTSConf = \TYPO3\CMS\Backend\Utility\BackendUtility::getPagesTSconfig ( $pid );
-               $pageIDForPlugin = $pid;
-                       
-               if ($pageTSConf ['TCEMAIN.'] ['clearCacheCmd']) {
-                       $pageIDForPlugin = $pageTSConf ['TCEMAIN.'] ['clearCacheCmd'];
-               }
-                       
-               /** @var $tcemain \TYPO3\CMS\Core\DataHandling\DataHandler */
-               $tcemain = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\DataHandling\\DataHandler');
-               $tcemain->stripslashes_values = 0;
-               $tcemain->start(array(), array(), new \TYPO3\CMS\Caldav\Backend\FakeBeUser($pid));
-               $tcemain->clear_cacheCmd ( $pageIDForPlugin ); // ID of the page for which to clear the cache
-       }
-       
-}
\ No newline at end of file
diff --git a/lib/Sabre/CalDAV/Calendar.php b/lib/Sabre/CalDAV/Calendar.php
deleted file mode 100755 (executable)
index c237b28..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-<?php
-
-/**
- * This object represents a CalDAV calendar.
- *
- * A calendar can contain multiple TODO and or Events. These are represented
- * as Sabre_CalDAV_CalendarObject objects.
- * 
- * @package Sabre
- * @subpackage CalDAV
- * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/) 
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
-class Sabre_CalDAV_Calendar implements Sabre_CalDAV_ICalendar, Sabre_DAV_IProperties, Sabre_DAVACL_IACL {
-
-    /**
-     * This is an array with calendar information 
-     * 
-     * @var array 
-     */
-    protected $calendarInfo;
-
-    /**
-     * CalDAV backend 
-     * 
-     * @var Sabre_CalDAV_Backend_Abstract 
-     */
-    protected $caldavBackend;
-
-    /**
-     * Principal backend
-     * 
-     * @var Sabre_DAVACL_IPrincipalBackend
-     */
-    protected $principalBackend;
-
-    /**
-     * Constructor 
-     * 
-     * @param Sabre_CalDAV_Backend_Abstract $caldavBackend 
-     * @param array $calendarInfo 
-     * @return void
-     */
-    public function __construct(Sabre_DAVACL_IPrincipalBackend $principalBackend, Sabre_CalDAV_Backend_Abstract $caldavBackend, $calendarInfo) {
-
-        $this->caldavBackend = $caldavBackend;
-        $this->principalBackend = $principalBackend;
-        $this->calendarInfo = $calendarInfo;
-
-
-    }
-
-    /**
-     * Returns the name of the calendar 
-     * 
-     * @return string 
-     */
-    public function getName() {
-
-        return $this->calendarInfo['uri'];
-
-    }
-
-    /**
-     * Updates properties such as the display name and description 
-     * 
-     * @param array $mutations 
-     * @return array 
-     */
-    public function updateProperties($mutations) {
-
-        return $this->caldavBackend->updateCalendar($this->calendarInfo['id'],$mutations);
-
-    }
-
-    /**
-     * Returns the list of properties 
-     * 
-     * @param array $properties 
-     * @return array 
-     */
-    public function getProperties($requestedProperties) {
-
-        $response = array();
-
-        foreach($requestedProperties as $prop) switch($prop) {
-
-            case '{urn:ietf:params:xml:ns:caldav}supported-calendar-data' : 
-                $response[$prop] = new Sabre_CalDAV_Property_SupportedCalendarData(); 
-                break;
-            case '{urn:ietf:params:xml:ns:caldav}supported-collation-set' : 
-                $response[$prop] =  new Sabre_CalDAV_Property_SupportedCollationSet(); 
-                break;
-            case '{DAV:}owner' :
-                $response[$prop] = new Sabre_DAVACL_Property_Principal(Sabre_DAVACL_Property_Principal::HREF,$this->calendarInfo['principaluri']);
-                break;
-            default : 
-                if (isset($this->calendarInfo[$prop])) $response[$prop] = $this->calendarInfo[$prop];
-                break;
-
-        }
-        return $response;
-
-    }
-
-    /**
-     * Returns a calendar object
-     *
-     * The contained calendar objects are for example Events or Todo's.
-     * 
-     * @param string $name 
-     * @return Sabre_DAV_ICalendarObject 
-     */
-    public function getChild($name) {
-
-        $obj = $this->caldavBackend->getCalendarObject($this->calendarInfo['id'],$name);
-
-        if (!$obj) throw new Sabre_DAV_Exception_FileNotFound('Calendar object not found');
-        return new Sabre_CalDAV_CalendarObject($this->caldavBackend,$this->calendarInfo,$obj);
-
-    }
-
-    /**
-     * Returns the full list of calendar objects  
-     * 
-     * @return array 
-     */
-    public function getChildren() {
-
-        $objs = $this->caldavBackend->getCalendarObjects($this->calendarInfo['id']);
-        $children = array();
-        foreach($objs as $obj) {
-            $children[] = new Sabre_CalDAV_CalendarObject($this->caldavBackend,$this->calendarInfo,$obj);
-        }
-        return $children;
-
-    }
-
-    /**
-     * Checks if a child-node exists. 
-     * 
-     * @param string $name 
-     * @return bool 
-     */
-    public function childExists($name) {
-
-        $obj = $this->caldavBackend->getCalendarObject($this->calendarInfo['id'],$name);
-        if (!$obj) 
-            return false;
-        else 
-            return true;
-
-    }
-
-    /**
-     * Creates a new directory
-     *
-     * We actually block this, as subdirectories are not allowed in calendars.
-     * 
-     * @param string $name 
-     * @return void
-     */
-    public function createDirectory($name) {
-
-        throw new Sabre_DAV_Exception_MethodNotAllowed('Creating collections in calendar objects is not allowed');
-
-    }
-
-    /**
-     * Creates a new file
-     *
-     * The contents of the new file must be a valid ICalendar string.
-     * 
-     * @param string $name 
-     * @param resource $calendarData 
-     * @return void
-     */
-    public function createFile($name,$calendarData = null) {
-
-        $calendarData = stream_get_contents($calendarData);
-        // Converting to UTF-8, if needed
-        $calendarData = Sabre_DAV_StringUtil::ensureUTF8($calendarData);
-
-        $supportedComponents = $this->calendarInfo['{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}supported-calendar-component-set'];
-        if ($supportedComponents) {
-            $supportedComponents = $supportedComponents->getValue();
-        } else {
-            $supportedComponents = null;
-        }
-        Sabre_CalDAV_ICalendarUtil::validateICalendarObject($calendarData, $supportedComponents);
-
-        $this->caldavBackend->createCalendarObject($this->calendarInfo['id'],$name,$calendarData);
-
-    }
-
-    /**
-     * Deletes the calendar. 
-     * 
-     * @return void
-     */
-    public function delete() {
-
-        $this->caldavBackend->deleteCalendar($this->calendarInfo['id']);
-
-    }
-
-    /**
-     * Renames the calendar. Note that most calendars use the 
-     * {DAV:}displayname to display a name to display a name. 
-     * 
-     * @param string $newName 
-     * @return void
-     */
-    public function setName($newName) {
-
-        throw new Sabre_DAV_Exception_MethodNotAllowed('Renaming calendars is not yet supported');
-
-    }
-
-    /**
-     * Returns the last modification date as a unix timestamp.
-     * 
-     * @return void
-     */
-    public function getLastModified() {
-
-        return null;
-
-    }
-
-    /**
-     * Returns the owner principal
-     *
-     * This must be a url to a principal, or null if there's no owner 
-     * 
-     * @return string|null
-     */
-    public function getOwner() {
-
-        return $this->calendarInfo['principaluri'];
-
-    }
-
-    /**
-     * Returns a group principal
-     *
-     * This must be a url to a principal, or null if there's no owner
-     * 
-     * @return string|null 
-     */
-    public function getGroup() {
-
-        return null;
-
-    }
-
-    /**
-     * Returns a list of ACE's for this node.
-     *
-     * Each ACE has the following properties:
-     *   * 'privilege', a string such as {DAV:}read or {DAV:}write. These are 
-     *     currently the only supported privileges
-     *   * 'principal', a url to the principal who owns the node
-     *   * 'protected' (optional), indicating that this ACE is not allowed to 
-     *      be updated. 
-     * 
-     * @return array 
-     */
-    public function getACL() {
-
-        return array(
-            array(
-                'privilege' => '{DAV:}read',
-                'principal' => $this->calendarInfo['principaluri'],
-                'protected' => true,
-            ),
-            array(
-                'privilege' => '{DAV:}write',
-                'principal' => $this->calendarInfo['principaluri'],
-                'protected' => true,
-            ),
-            array(
-                'privilege' => '{DAV:}read',
-                'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write',
-                'protected' => true,
-            ),
-            array(
-                'privilege' => '{DAV:}write',
-                'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write',
-                'protected' => true,
-            ),
-            array(
-                'privilege' => '{DAV:}read',
-                'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-read',
-                'protected' => true,
-            ),
-
-        );
-
-    }
-
-    /**
-     * Updates the ACL
-     *
-     * This method will receive a list of new ACE's. 
-     * 
-     * @param array $acl 
-     * @return void
-     */
-    public function setACL(array $acl) {
-
-        throw new Sabre_DAV_Exception_MethodNotAllowed('Changing ACL is not yet supported');
-
-    }
-
-
-
-}
diff --git a/lib/Sabre/CalDAV/CalendarObject.php b/lib/Sabre/CalDAV/CalendarObject.php
deleted file mode 100755 (executable)
index 3c2a752..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-<?php
-
-/**
- * The CalendarObject represents a single VEVENT or VTODO within a Calendar. 
- * 
- * @package Sabre
- * @subpackage CalDAV
- * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/) 
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
-class Sabre_CalDAV_CalendarObject extends Sabre_DAV_File implements Sabre_CalDAV_ICalendarObject, Sabre_DAVACL_IACL {
-
-    /**
-     * Sabre_CalDAV_Backend_Abstract 
-     * 
-     * @var array 
-     */
-    protected $caldavBackend;
-
-    /**
-     * Array with information about this CalendarObject 
-     * 
-     * @var array 
-     */
-    protected $objectData;
-
-    /**
-     * Array with information about the containing calendar
-     * 
-     * @var array 
-     */
-    protected $calendarInfo;
-
-    /**
-     * Constructor 
-     * 
-     * @param Sabre_CalDAV_Backend_Abstract $caldavBackend
-     * @param array $calendarInfo
-     * @param array $objectData 
-     */
-    public function __construct(Sabre_CalDAV_Backend_Abstract $caldavBackend,array $calendarInfo,array $objectData) {
-
-        $this->caldavBackend = $caldavBackend;
-
-        if (!isset($objectData['calendarid'])) {
-            throw new InvalidArgumentException('The objectData argument must contain a \'calendarid\' property');
-        }
-        if (!isset($objectData['uri'])) {
-            throw new InvalidArgumentException('The objectData argument must contain an \'uri\' property');
-        }
-
-        $this->calendarInfo = $calendarInfo;
-        $this->objectData = $objectData;
-
-    }
-
-    /**
-     * Returns the uri for this object 
-     * 
-     * @return string 
-     */
-    public function getName() {
-
-        return $this->objectData['uri'];
-
-    }
-
-    /**
-     * Returns the ICalendar-formatted object 
-     * 
-     * @return string 
-     */
-    public function get() {
-
-        // Pre-populating the 'calendardata' is optional, if we don't have it
-        // already we fetch it from the backend.
-        if (!isset($this->objectData['calendardata'])) {
-            $this->objectData = $this->caldavBackend->getCalendarObject($this->objectData['calendarid'], $this->objectData['uri']);
-        }
-        return $this->objectData['calendardata'];
-
-    }
-
-    /**
-     * Updates the ICalendar-formatted object 
-     * 
-     * @param string $calendarData 
-     * @return void 
-     */
-    public function put($calendarData) {
-
-        if (is_resource($calendarData))
-            $calendarData = stream_get_contents($calendarData);
-
-        // Converting to UTF-8, if needed
-        $calendarData = Sabre_DAV_StringUtil::ensureUTF8($calendarData);
-
-        $supportedComponents = $this->calendarInfo['{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}supported-calendar-component-set'];
-        if ($supportedComponents) {
-            $supportedComponents = $supportedComponents->getValue();
-        } else {
-            $supportedComponents = null;
-        }
-        Sabre_CalDAV_ICalendarUtil::validateICalendarObject($calendarData, $supportedComponents);
-
-        $this->caldavBackend->updateCalendarObject($this->calendarInfo['id'],$this->objectData['uri'],$calendarData);
-        $this->objectData['calendardata'] = $calendarData;
-
-    }
-
-    /**
-     * Deletes the calendar object 
-     * 
-     * @return void
-     */
-    public function delete() {
-
-        $this->caldavBackend->deleteCalendarObject($this->calendarInfo['id'],$this->objectData['uri']);
-
-    }
-
-    /**
-     * Returns the mime content-type 
-     * 
-     * @return string 
-     */
-    public function getContentType() {
-
-        return 'text/calendar';
-
-    }
-
-    /**
-     * Returns an ETag for this object.
-     *
-     * The ETag is an arbritrary string, but MUST be surrounded by double-quotes.
-     * 
-     * @return string 
-     */
-    public function getETag() {
-
-        if (isset($this->objectData['etag'])) {
-            return $this->objectData['etag'];
-        } else {
-            return '"' . md5($this->get()). '"';
-        }
-
-    }
-
-    /**
-     * Returns the last modification date as a unix timestamp
-     * 
-     * @return time 
-     */
-    public function getLastModified() {
-
-        return $this->objectData['lastmodified'];
-
-    }
-
-    /**
-     * Returns the size of this object in bytes 
-     * 
-     * @return int
-     */
-    public function getSize() {
-
-        return strlen($this->objectData['calendardata']);
-
-    }
-
-    /**
-     * Returns the owner principal
-     *
-     * This must be a url to a principal, or null if there's no owner 
-     * 
-     * @return string|null
-     */
-    public function getOwner() {
-
-        return $this->calendarInfo['principaluri'];
-
-    }
-
-    /**
-     * Returns a group principal
-     *
-     * This must be a url to a principal, or null if there's no owner
-     * 
-     * @return string|null 
-     */
-    public function getGroup() {
-
-        return null;
-
-    }
-
-    /**
-     * Returns a list of ACE's for this node.
-     *
-     * Each ACE has the following properties:
-     *   * 'privilege', a string such as {DAV:}read or {DAV:}write. These are 
-     *     currently the only supported privileges
-     *   * 'principal', a url to the principal who owns the node
-     *   * 'protected' (optional), indicating that this ACE is not allowed to 
-     *      be updated. 
-     * 
-     * @return array 
-     */
-    public function getACL() {
-
-        return array(
-            array(
-                'privilege' => '{DAV:}read',
-                'principal' => $this->calendarInfo['principaluri'],
-                'protected' => true,
-            ),
-            array(
-                'privilege' => '{DAV:}write',
-                'principal' => $this->calendarInfo['principaluri'],
-                'protected' => true,
-            ),
-            array(
-                'privilege' => '{DAV:}read',
-                'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write',
-                'protected' => true,
-            ),
-            array(
-                'privilege' => '{DAV:}write',
-                'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-write',
-                'protected' => true,
-            ),
-            array(
-                'privilege' => '{DAV:}read',
-                'principal' => $this->calendarInfo['principaluri'] . '/calendar-proxy-read',
-                'protected' => true,
-            ),
-
-        );
-
-    }
-
-    /**
-     * Updates the ACL
-     *
-     * This method will receive a list of new ACE's. 
-     * 
-     * @param array $acl 
-     * @return void
-     */
-    public function setACL(array $acl) {
-
-        throw new Sabre_DAV_Exception_MethodNotAllowed('Changing ACL is not yet supported');
-
-    }
-
-
-}
-
diff --git a/lib/Sabre/CalDAV/CalendarRootNode.php b/lib/Sabre/CalDAV/CalendarRootNode.php
deleted file mode 100755 (executable)
index a3b16bf..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-/**
- * Users collection 
- *
- * This object is responsible for generating a collection of users.
- *
- * @package Sabre
- * @subpackage CalDAV
- * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/) 
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
-class Sabre_CalDAV_CalendarRootNode extends Sabre_DAVACL_AbstractPrincipalCollection {
-
-    /**
-     * CalDAV backend 
-     * 
-     * @var Sabre_CalDAV_Backend_Abstract 
-     */
-    protected $caldavBackend;
-
-    /**
-     * Constructor 
-     *
-     * This constructor needs both an authentication and a caldav backend.
-     *
-     * By default this class will show a list of calendar collections for 
-     * principals in the 'principals' collection. If your main principals are 
-     * actually located in a different path, use the $principalPrefix argument 
-     * to override this.
-     *
-     *
-     * @param Sabre_DAVACL_IPrincipalBackend $principalBackend 
-     * @param Sabre_CalDAV_Backend_Abstract $caldavBackend 
-     * @param string $principalPrefix
-     */
-    public function __construct(Sabre_DAVACL_IPrincipalBackend $principalBackend,Sabre_CalDAV_Backend_Abstract $caldavBackend, $principalPrefix = 'principals') {
-
-        parent::__construct($principalBackend, $principalPrefix);
-        $this->caldavBackend = $caldavBackend;
-
-    }
-
-    /**
-     * Returns the nodename
-     *
-     * We're overriding this, because the default will be the 'principalPrefix',
-     * and we want it to be Sabre_CalDAV_Plugin::CALENDAR_ROOT 
-     * 
-     * @return void
-     */
-    public function getName() {
-
-        return Sabre_CalDAV_Plugin::CALENDAR_ROOT;
-
-    }
-
-    /**
-     * This method returns a node for a principal.
-     *
-     * The passed array contains principal information, and is guaranteed to
-     * at least contain a uri item. Other properties may or may not be
-     * supplied by the authentication backend.
-     * 
-     * @param array $principal 
-     * @return Sabre_DAV_INode 
-     */
-    public function getChildForPrincipal(array $principal) {
-        return new Sabre_CalDAV_UserCalendars($this->principalBackend, $this->caldavBackend, $principal['uri']);
-
-    }
-
-}
diff --git a/lib/Sabre/CalDAV/Exception/InvalidICalendarObject.php b/lib/Sabre/CalDAV/Exception/InvalidICalendarObject.php
deleted file mode 100755 (executable)
index 24b2c82..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-/**
- * InvalidICalendarObject
- *
- * This exception is thrown when an attempt is made to create or update
- * an invalid ICalendar object
- * 
- * @package Sabre
- * @subpackage CalDAV
- * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/) 
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
-class Sabre_CalDAV_Exception_InvalidICalendarObject extends Sabre_DAV_Exception_PreconditionFailed {
-
-
-}
diff --git a/lib/Sabre/CalDAV/ICSExportPlugin.php b/lib/Sabre/CalDAV/ICSExportPlugin.php
deleted file mode 100755 (executable)
index 5a1e433..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-<?php
-
-/**
- * ICS Exporter
- *
- * This plugin adds the ability to export entire calendars as .ics files.
- * This is useful for clients that don't support CalDAV yet. They often do 
- * support ics files.
- * 
- * @package Sabre
- * @subpackage CalDAV
- * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/) 
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
-class Sabre_CalDAV_ICSExportPlugin extends Sabre_DAV_ServerPlugin {
-
-    /**
-     * Reference to Server class 
-     * 
-     * @var Sabre_DAV_Server 
-     */
-    private $server;
-
-    /**
-     * Initializes the plugin and registers event handlers 
-     * 
-     * @param Sabre_DAV_Server $server 
-     * @return void
-     */
-    public function initialize(Sabre_DAV_Server $server) {
-
-        $this->server = $server;
-        $this->server->subscribeEvent('beforeMethod',array($this,'beforeMethod'), 90);
-
-    }
-
-    /**
-     * 'beforeMethod' event handles. This event handles intercepts GET requests ending
-     * with ?export
-     * 
-     * @param string $method
-     * @param string $uri
-     * @return void
-     */
-    public function beforeMethod($method, $uri) {
-
-        if ($method!='GET') return;
-        if ($this->server->httpRequest->getQueryString()!='export') return;
-
-        // splitting uri
-        list($uri) = explode('?',$uri,2);
-
-        $node = $this->server->tree->getNodeForPath($uri);
-
-        if (!($node instanceof Sabre_CalDAV_Calendar)) return;
-
-        $this->server->httpResponse->setHeader('Content-Type','text/calendar');
-        $this->server->httpResponse->sendStatus(200);
-        $this->server->httpResponse->sendBody($this->generateICS($this->server->tree->getChildren($uri)));
-
-        // Returning false to break the event chain
-        return false;
-
-    }
-
-    /**
-     * Merges all calendar objects, and builds one big ics export 
-     * 
-     * @param array $nodes 
-     * @return void
-     */
-    public function generateICS(array $nodes) {
-
-        $calendar = new Sabre_VObject_Component('vcalendar');
-        $calendar->version = '2.0';
-        $calendar->prodid = '-//SabreDAV//SabreDAV ' . Sabre_DAV_Version::VERSION . '//EN';
-        $calendar->calscale = 'GREGORIAN';
-
-        $collectedTimezones = array();
-
-        $timezones = array();
-        $objects = array();
-
-        foreach($nodes as $node) {
-
-            $nodeData = $node->get();
-            $nodeComp = Sabre_VObject_Reader::read($nodeData);
-
-            foreach($nodeComp->children() as $child) {
-
-                switch($child->name) {
-                    case 'VEVENT' :
-                    case 'VTODO' :
-                    case 'VJOURNAL' :
-                        $objects[] = $child;
-                        break;
-
-                    // VTIMEZONE is special, because we need to filter out the duplicates
-                    case 'VTIMEZONE' :
-                        // Naively just checking tzid.
-                        if (in_array((string)$child->TZID, $collectedTimezones)) continue;
-
-                        $timezones[] = $child;
-                        $collectedTimezones[] = $child->TZID;
-                        break;
-
-
-                }
-
-
-            }
-
-
-        }
-
-        foreach($timezones as $tz) $calendar->add($tz);
-        foreach($objects as $obj) $calendar->add($obj);
-
-        return $calendar->serialize();
-
-    } 
-
-}
diff --git a/lib/Sabre/CalDAV/ICalendar.php b/lib/Sabre/CalDAV/ICalendar.php
deleted file mode 100755 (executable)
index 291b7a7..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-/**
- * Calendar interface
- *
- * Implement this interface to allow a node to be recognized as an calendar.
- * 
- * @package Sabre
- * @subpackage CalDAV
- * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/) 
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
-interface Sabre_CalDAV_ICalendar extends Sabre_DAV_ICollection {
-
-
-}
diff --git a/lib/Sabre/CalDAV/ICalendarObject.php b/lib/Sabre/CalDAV/ICalendarObject.php
deleted file mode 100755 (executable)
index f3b6ba8..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/**
- * CalendarObject interface 
-/**
- * Extend the ICalendarObject interface to allow your custom nodes to be picked up as 
- * CalendarObjects.
- *
- * Calendar objects are resources such as Events, Todo's or Journals.
- * 
- * @package Sabre
- * @subpackage CalDAV
- * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/) 
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
-interface Sabre_CalDAV_ICalendarObject extends Sabre_DAV_IFile { 
-
-}
-
diff --git a/lib/Sabre/CalDAV/ICalendarUtil.php b/lib/Sabre/CalDAV/ICalendarUtil.php
deleted file mode 100755 (executable)
index 53280c4..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php
-
-/**
- * This class contains several utilities related to the ICalendar (rfc2445) format
- *
- * This class is now deprecated, and won't be further maintained. Please use 
- * the Sabre_VObject package for your ics parsing needs.
- *
- * @package Sabre
- * @subpackage CalDAV
- * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/) 
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- * @deprecated Use Sabre_VObject instead.
- */
-class Sabre_CalDAV_ICalendarUtil {
-
-    /**
-     * Validates an ICalendar object
-     *
-     * This method makes sure this ICalendar object is properly formatted.
-     * If we can't parse it, we'll throw exceptions.
-     *
-     * @param string $icalData 
-     * @param array $allowedComponents 
-     * @return bool 
-     */
-    static function validateICalendarObject($icalData, array $allowedComponents = null) {
-
-        $xcal = simplexml_load_string(self::toXCal($icalData));
-        if (!$xcal) throw new Sabre_CalDAV_Exception_InvalidICalendarObject('Invalid calendarobject format');
-
-        $xcal->registerXPathNameSpace('cal','urn:ietf:params:xml:ns:xcal');
-        
-        // Check if there's only 1 component
-        $components = array('vevent','vtodo','vjournal','vfreebusy');
-        $componentsFound = array();
-
-        foreach($components as $component) {
-            $test = $xcal->xpath('/cal:iCalendar/cal:vcalendar/cal:' . $component);
-            if (is_array($test)) $componentsFound = array_merge($componentsFound, $test);
-        }
-        if (count($componentsFound)<1) {
-            throw new Sabre_CalDAV_Exception_InvalidICalendarObject('One VEVENT, VTODO, VJOURNAL or VFREEBUSY must be specified. 0 found.');
-        }
-        $component = $componentsFound[0];
-
-        if (is_null($allowedComponents)) return true;
-
-        // Check if the component is allowed
-        $name = $component->getName();
-        if (!in_array(strtoupper($name),$allowedComponents)) {
-            throw new Sabre_CalDAV_Exception_InvalidICalendarObject(strtoupper($name) . ' is not allowed in this calendar.');
-        }
-
-        if (count($xcal->xpath('/cal:iCalendar/cal:vcalendar/cal:method'))>0) {
-            throw new Sabre_CalDAV_Exception_InvalidICalendarObject('The METHOD property is not allowed in calendar objects');
-        }
-
-        return true;
-
-    }
-
-    /**
-     * Converts ICalendar data to XML.
-     *
-     * Properties are converted to lowercase xml elements. Parameters are;
-     * converted to attributes. BEGIN:VEVENT is converted to <vevent> and
-     * END:VEVENT </vevent> as well as other components.
-     *
-     * It's a very loose parser. If any line does not conform to the spec, it
-     * will simply be ignored. It will try to detect if \r\n or \n line endings
-     * are used.
-     *
-     * @todo Currently quoted attributes are not parsed correctly.
-     * @see http://tools.ietf.org/html/draft-royer-calsch-xcal-03
-     * @param string $icalData 
-     * @return string. 
-     */
-    static function toXCAL($icalData) {
-
-        // Detecting line endings
-        $lb="\r\n";
-        if (strpos($icalData,"\r\n")!==false) $lb = "\r\n";
-        elseif (strpos($icalData,"\n")!==false) $lb = "\n";
-
-        // Splitting up items per line
-        $lines = explode($lb,$icalData);
-
-        // Properties can be folded over 2 lines. In this case the second
-        // line will be preceeded by a space or tab.
-        $lines2 = array();
-        foreach($lines as $line) {
-
-            if (!$line) continue;
-            if ($line[0]===" " || $line[0]==="\t") {
-                $lines2[count($lines2)-1].=substr($line,1);
-                continue;
-            }
-
-            $lines2[]=$line;
-
-        }
-
-        $xml = '<?xml version="1.0"?>' . "\n";
-        $xml.= "<iCalendar xmlns=\"urn:ietf:params:xml:ns:xcal\">\n";
-
-        $spaces = 2;
-        foreach($lines2 as $line) {
-
-            $matches = array();
-            // This matches PROPERTYNAME;ATTRIBUTES:VALUE
-            if (!preg_match('/^([^:^;]*)(?:;([^:]*))?:(.*)$/',$line,$matches))
-                continue;
-
-            $propertyName = strtolower($matches[1]);
-            $attributes = $matches[2];
-            $value = $matches[3];
-
-            // If the line was in the format BEGIN:COMPONENT or END:COMPONENT, we need to special case it.
-            if ($propertyName === 'begin') {
-                $xml.=str_repeat(" ",$spaces);
-                $xml.='<' . strtolower($value) . ">\n";
-                $spaces+=2;
-                continue;
-            } elseif ($propertyName === 'end') {
-                $spaces-=2;
-                $xml.=str_repeat(" ",$spaces);
-                $xml.='</' . strtolower($value) . ">\n";
-                continue;
-            }
-
-            $xml.=str_repeat(" ",$spaces);
-            $xml.='<' . $propertyName;
-            if ($attributes) {
-                // There can be multiple attributes
-                $attributes = explode(';',$attributes);
-                foreach($attributes as $att) {
-  
-                    list($attName,$attValue) = explode('=',$att,2);
-                    $attName = strtolower($attName);
-                    if ($attName === 'language') $attName='xml:lang';
-                    $xml.=' ' . $attName . '="' . htmlspecialchars($attValue) . '"';
-
-                }
-            }
-
-            $xml.='>'. htmlspecialchars(trim($value)) . '</' . $propertyName . ">\n";
-          
-        }
-        $xml.="</iCalendar>";
-        return $xml;
-
-    }
-
-}
-
diff --git a/lib/Sabre/CalDAV/Plugin.php b/lib/Sabre/CalDAV/Plugin.php
deleted file mode 100755 (executable)
index 58031cb..0000000
+++ /dev/null
@@ -1,789 +0,0 @@
-<?php
-
-/**
- * CalDAV plugin
- *
- * This plugin provides functionality added by CalDAV (RFC 4791)
- * It implements new reports, and the MKCALENDAR method.
- *
- * @package Sabre
- * @subpackage CalDAV
- * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/) 
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
-class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin {
-
-    /**
-     * This is the official CalDAV namespace
-     */
-    const NS_CALDAV = 'urn:ietf:params:xml:ns:caldav';
-    
-    /**
-     * This is the namespace for the proprietary calendarserver extensions
-     */
-    const NS_CALENDARSERVER = 'http://calendarserver.org/ns/';
-
-    /**
-     * The following constants are used to differentiate
-     * the various filters for the calendar-query report
-     */
-    const FILTER_COMPFILTER   = 1;
-    const FILTER_TIMERANGE    = 3;
-    const FILTER_PROPFILTER   = 4;
-    const FILTER_PARAMFILTER  = 5;
-    const FILTER_TEXTMATCH    = 6;
-
-    /**
-     * The hardcoded root for calendar objects. It is unfortunate
-     * that we're stuck with it, but it will have to do for now
-     */
-    const CALENDAR_ROOT = 'calendars';
-
-    /**
-     * Reference to server object 
-     * 
-     * @var Sabre_DAV_Server 
-     */
-    private $server;
-
-    /**
-     * Use this method to tell the server this plugin defines additional
-     * HTTP methods.
-     *
-     * This method is passed a uri. It should only return HTTP methods that are 
-     * available for the specified uri.
-     *
-     * @param string $uri
-     * @return array 
-     */
-    public function getHTTPMethods($uri) {
-
-        // The MKCALENDAR is only available on unmapped uri's, whose
-        // parents extend IExtendedCollection
-        list($parent, $name) = Sabre_DAV_URLUtil::splitPath($uri);
-
-        $node = $this->server->tree->getNodeForPath($parent);
-
-        if ($node instanceof Sabre_DAV_IExtendedCollection) {
-            try {
-                $node->getChild($name);
-            } catch (Sabre_DAV_Exception_FileNotFound $e) {
-                return array('MKCALENDAR');
-            }
-        }
-        return array();
-
-    }
-
-    /**
-     * Returns a list of features for the DAV: HTTP header. 
-     * 
-     * @return array 
-     */
-    public function getFeatures() {
-
-        return array('calendar-access', 'calendar-proxy');
-
-    }
-
-    /**
-     * Returns a plugin name.
-     * 
-     * Using this name other plugins will be able to access other plugins
-     * using Sabre_DAV_Server::getPlugin 
-     * 
-     * @return string 
-     */
-    public function getPluginName() {
-
-        return 'caldav';
-
-    }
-
-    /**
-     * Returns a list of reports this plugin supports.
-     *
-     * This will be used in the {DAV:}supported-report-set property.
-     * Note that you still need to subscribe to the 'report' event to actually 
-     * implement them 
-     * 
-     * @param string $uri
-     * @return array 
-     */
-    public function getSupportedReportSet($uri) {
-
-        $node = $this->server->tree->getNodeForPath($uri);
-        if ($node instanceof Sabre_CalDAV_ICalendar || $node instanceof Sabre_CalDAV_ICalendarObject) {
-            return array(
-                 '{' . self::NS_CALDAV . '}calendar-multiget',
-                 '{' . self::NS_CALDAV . '}calendar-query',
-            );
-        }
-        return array();
-
-    }
-
-    /**
-     * Initializes the plugin 
-     * 
-     * @param Sabre_DAV_Server $server 
-     * @return void
-     */
-    public function initialize(Sabre_DAV_Server $server) {
-
-        $this->server = $server;
-        $server->subscribeEvent('unknownMethod',array($this,'unknownMethod'));
-        //$server->subscribeEvent('unknownMethod',array($this,'unknownMethod2'),1000);
-        $server->subscribeEvent('report',array($this,'report'));
-        $server->subscribeEvent('beforeGetProperties',array($this,'beforeGetProperties'));
-
-        $server->xmlNamespaces[self::NS_CALDAV] = 'cal';
-        $server->xmlNamespaces[self::NS_CALENDARSERVER] = 'cs';
-
-        $server->propertyMap['{' . self::NS_CALDAV . '}supported-calendar-component-set'] = 'Sabre_CalDAV_Property_SupportedCalendarComponentSet';
-
-        $server->resourceTypeMapping['Sabre_CalDAV_ICalendar'] = '{urn:ietf:params:xml:ns:caldav}calendar';
-        $server->resourceTypeMapping['Sabre_CalDAV_Principal_ProxyRead'] = '{http://calendarserver.org/ns/}calendar-proxy-read';
-        $server->resourceTypeMapping['Sabre_CalDAV_Principal_ProxyWrite'] = '{http://calendarserver.org/ns/}calendar-proxy-write';
-
-        array_push($server->protectedProperties,
-
-            '{' . self::NS_CALDAV . '}supported-calendar-component-set',
-            '{' . self::NS_CALDAV . '}supported-calendar-data',
-            '{' . self::NS_CALDAV . '}max-resource-size',
-            '{' . self::NS_CALDAV . '}min-date-time',
-            '{' . self::NS_CALDAV . '}max-date-time',
-            '{' . self::NS_CALDAV . '}max-instances',
-            '{' . self::NS_CALDAV . '}max-attendees-per-instance',
-            '{' . self::NS_CALDAV . '}calendar-home-set',
-            '{' . self::NS_CALDAV . '}supported-collation-set',
-            '{' . self::NS_CALDAV . '}calendar-data',
-
-            // scheduling extension
-            '{' . self::NS_CALDAV . '}calendar-user-address-set',
-
-            // CalendarServer extensions
-            '{' . self::NS_CALENDARSERVER . '}getctag',
-            '{' . self::NS_CALENDARSERVER . '}calendar-proxy-read-for',
-            '{' . self::NS_CALENDARSERVER . '}calendar-proxy-write-for'
-
-        );
-    }
-
-    /**
-     * This function handles support for the MKCALENDAR method
-     * 
-     * @param string $method 
-     * @return bool 
-     */
-    public function unknownMethod($method, $uri) {
-
-        if ($method!=='MKCALENDAR') return;
-
-        $this->httpMkCalendar($uri);
-        // false is returned to stop the unknownMethod event
-        return false;
-
-    }
-
-    /**
-     * This functions handles REPORT requests specific to CalDAV 
-     * 
-     * @param string $reportName 
-     * @param DOMNode $dom 
-     * @return bool 
-     */
-    public function report($reportName,$dom) {
-
-        switch($reportName) { 
-            case '{'.self::NS_CALDAV.'}calendar-multiget' :
-                $this->calendarMultiGetReport($dom);
-                return false;
-            case '{'.self::NS_CALDAV.'}calendar-query' :
-                $this->calendarQueryReport($dom);
-                return false;
-
-        }
-
-
-    }
-
-    /**
-     * This function handles the MKCALENDAR HTTP method, which creates
-     * a new calendar.
-     * 
-     * @param string $uri
-     * @return void 
-     */
-    public function httpMkCalendar($uri) {
-
-        // Due to unforgivable bugs in iCal, we're completely disabling MKCALENDAR support
-        // for clients matching iCal in the user agent
-        //$ua = $this->server->httpRequest->getHeader('User-Agent');
-        //if (strpos($ua,'iCal/')!==false) {
-        //    throw new Sabre_DAV_Exception_Forbidden('iCal has major bugs in it\'s RFC3744 support. Therefore we are left with no other choice but disabling this feature.');
-        //}
-
-        $body = $this->server->httpRequest->getBody(true);
-        $properties = array();
-
-        if ($body) {
-
-            $dom = Sabre_DAV_XMLUtil::loadDOMDocument($body);
-
-            foreach($dom->firstChild->childNodes as $child) {
-
-                if (Sabre_DAV_XMLUtil::toClarkNotation($child)!=='{DAV:}set') continue;
-                foreach(Sabre_DAV_XMLUtil::parseProperties($child,$this->server->propertyMap) as $k=>$prop) {
-                    $properties[$k] = $prop;
-                }
-            
-            }
-        }
-
-        $resourceType = array('{DAV:}collection','{urn:ietf:params:xml:ns:caldav}calendar');
-
-        $this->server->createCollection($uri,$resourceType,$properties);
-
-        $this->server->httpResponse->sendStatus(201);
-        $this->server->httpResponse->setHeader('Content-Length',0);
-    }
-
-    /**
-     * beforeGetProperties
-     *
-     * This method handler is invoked before any after properties for a
-     * resource are fetched. This allows us to add in any C