SabreDAV Changelog

What's new in SabreDAV 2.1.4

May 26, 2015
  • This release fixes 3 small bugs, and also updates all dependencies to their latest versions.
  • #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, sabre/http 3.0.5, and sabre/event 2.0.2.

New in SabreDAV 2.2.0 Alpha 3 (Feb 26, 2015)

  • Also contains all the changes introduced between 2.1.2 and 2.1.3.
  • The zip release ships with sabre/vobject 3.4.2, sabre/http 4.0.0-alpha1, sabre/event 2.0.1 and sabre/uri 1.0.0.

New in SabreDAV 2.1.3 (Feb 26, 2015)

  • #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.
  • #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, sabre/http 3.0.4, and sabre/event 2.0.1.

New in SabreDAV 2.1.2 (Dec 11, 2014)

  • #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.
  • #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, sabre/http 3.0.4, and sabre/event 2.0.1.

New in SabreDAV 2.1.1 (Nov 24, 2014)

  • The zip release ships with sabre/vobject 3.3.4, sabre/http 3.0.2, and sabre/event 2.0.1.
  • #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.

New in SabreDAV 2.1.0 (Nov 20, 2014)

  • #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, sabre/http 3.0.2, and sabre/event 2.0.1.

New in SabreDAV 2.0.5 (Oct 16, 2014)

  • #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, sabre/http 2.0.4, and sabre/event 1.0.1.

New in SabreDAV 2.0.4 (Aug 30, 2014)

  • #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.

New in SabreDAV 2.0.3 (Jul 15, 2014)

  • #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, sabre/http 2.0.4, and sabre/event 1.0.1.

New in SabreDAV 2.0.2 (Jun 13, 2014)

  • #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, sabre/http 2.0.3, and sabre/event 1.0.1.

New in SabreDAV 2.0.1 (May 29, 2014)

  • 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.

New in SabreDAV 2.0.0 (May 24, 2014)

  • Fixed: #456: Issue in sqlite migration script.
  • Updated: MySQL database schema optimized by using more efficient column types.
  • Cleaned up browser design.

New in SabreDAV 2.0.0 Beta 1 (May 24, 2014)

  • The zip release ships with sabre/vobject 3.2.2, sabre/http 2.0.3, and sabre/event 1.0.0.
  • BC Break: Property updating and fetching got refactored. Read the migration document 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-existant 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.

New in SabreDAV 1.9.0 Alpha 2 (Jan 15, 2014)

  • 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.

New in SabreDAV 1.9.0 Alpha 1 (Nov 8, 2013)

  • 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: 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!
  • 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.

New in SabreDAV 1.8.7 (Oct 3, 2013)

  • The zip release ships with sabre/vobject 2.1.3.
  • Includes changes from version 1.7.9.

New in SabreDAV 1.8.6 (Jun 18, 2013)

  • The zip release ships with sabre/vobject 2.1.0.
  • Includes changes from version 1.7.8.

New in SabreDAV 1.8.5 (Apr 11, 2013)

  • The zip release ships with sabre/vobject 2.0.7.
  • Includes changes from version 1.7.7.

New in SabreDAV 1.8.4 (Apr 9, 2013)

  • The zip release ships with sabre/vobject 2.0.7.
  • Includes changes from version 1.7.6.

New in SabreDAV 1.8.3 (Mar 1, 2013)

  • Includes changes from version 1.7.5.
  • Fixed: organizer email-address for shared calendars is now prefixed with mailto:, as it should.

New in SabreDAV 1.8.2 (Jan 21, 2013)

  • Includes changes from version 1.7.4.

New in SabreDAV 1.8.1 (Dec 3, 2012)

  • Includes changes from version 1.7.3.
  • Fixed: Typo in 1.7 migration script caused it to fail.

New in SabreDAV 1.8.0 (Nov 8, 2012)

  • 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 flexiblity.

New in SabreDAV 1.7.1 (Oct 8, 2012)

  • Fixed: include path problem in the migration script.

New in SabreDAV 1.7.0 (Oct 8, 2012)

  • 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.
  • 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.

New in SabreDAV 1.6.5 (Oct 4, 2012)

  • 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.

New in SabreDAV 1.6.4 (Aug 3, 2012)

  • 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.

New in SabreDAV 1.6.3 (Jun 12, 2012)

  • 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.

New in SabreDAV 1.6.2 (Apr 17, 2012)

  • 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.

New in SabreDAV 1.6.1 (Mar 5, 2012)

  • 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.

New in SabreDAV 1.6.0 (Feb 23, 2012)

  • 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.

New in SabreDAV 1.5.7 (Feb 20, 2012)

  • 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.

New in SabreDAV 1.5.6 (Jan 9, 2012)

  • Fixed: Issue 174: VObject could break UTF-8 characters.

New in SabreDAV 1.5.5 (Dec 16, 2011)

  • 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.

New in SabreDAV 1.5.4 (Oct 31, 2011)

  • 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.

New in SabreDAV 1.5.3 (Sep 29, 2011)

  • 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.

New in SabreDAV 1.5.0 (Aug 12, 2011)

  • Added: CardDAV support.
  • Added: An experimental WebDAV client.
  • Added: MIME-Directory grouping support in the VObject library. This isvery useful for people attempting to parse vcards.
  • BC Break: Adding parameters with the VObject libraries now overwritesthe previous parameter, rather than just add it. This makes more sensefor 99% of the cases.
  • BC Break: lib/Sabre.autoload.php is now removed in favor oflib/Sabre/autoload.php.
  • Deprecated: Sabre_DAV_Directory is now deprecated and will be removed ina future version. Use Sabre_DAV_Collection instead.
  • Deprecated: Sabre_DAV_SimpleDirectory is now deprecated and will beremoved 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 specifiedin 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.

New in SabreDAV 1.4.2 (Apr 2, 2011)

  • 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 f.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.

New in SabreDAV 1.3.0 (Oct 15, 2010)

  • Added: Cache layer in the ObjectTree.
  • 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: 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.

New in SabreDAV 1.2.5 (Aug 25, 2010)

  • Fixed: Issue 73 : guessBaseUrl fails for some servers.
  • Fixed: Issue 67 : Works better with non-seekable streams.
  • Fixed: If-Modified-Since and If-Unmodified-Since would be incorrect if the date is an exact match.

New in SabreDAV 1.2.4 (Jul 14, 2010)

  • 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. Improves iPhone compatibility

New in SabreDAV 1.2.3 (Jun 28, 2010)

  • Fixed: Issue 57: Supporting quotes around etags in If-Match and If-None-Match

New in SabreDAV 1.2.2 (Jun 22, 2010)

  • SabreDAV now attempts to guess the baseUri when it's not set by the user, reducing boilerplate code.
  • Fixed: Issue 54 , better compatibility with BitKinex.
  • Fixed: Issue 56 , Incorrect behaviour when using If-None-Match headers with GET requests.
  • Fixed: Issue with certain encodings in Browser plugin.

New in SabreDAV 1.2.1 (Jun 7, 2010)

  • 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.

New in SabreDAV 1.2.0 (May 25, 2010)

  • CalDAV (RFC4791) support.
  • PDO backends for Locks, Authentication and Calendars.
  • 95% unittesting code coverage. 415 unittests. There's actually more unittesting code now than 'normal' code.
  • ACL (RFC3744) principals. Note that privileges are not yet implemented.
  • Support for Extended MKCOL (RFC5689).
  • Support for current-user-principal (RFC5397).
  • Now throwing an error if you're using Finder on an unsupported server (nginx, apache + fcgi, lighttpd).
  • Support for If-Range, If-Modified-Since, If-Unmodified-Since, If-Match and If-None-Match.
  • There's now 2 distributions. 1 unified zip with all the features, as well as 4 separate pear packages (Sabre, Sabre_HTTP, Sabre_DAV, Sabre_CalDAV).

New in SabreDAV 1.0.15 (Apr 29, 2010)

  • Issue 31 : Hiding exception information by default. Can be turned on with the Sabre_DAV_Server::$debugExceptions property.
  • 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. Backwards compatibility is provided, but it is recommended to use the new location.

New in SabreDAV 1.0.14 (Apr 15, 2010)

  • Fixed a double xml-namespace declaration, which fixes a Webdrive bug.

New in SabreDAV 1.2.0 Alpha 2 (Apr 9, 2010)

  • Now using a new pear channel: pear.sabredav.org.
  • Added the SabreDAV version to all error responses, for easier debugging.
  • Fixed Issue 26 Better Gnome compatibility.
  • Fixed Issue 37 TemporaryFileFilter regex too loose.
  • Issue 33, 39, 40 Better handling of international characters.

New in SabreDAV 1.2.0 Alpha 1 (Apr 1, 2010)

  • 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.

New in SabreDAV 1.0.13 (Mar 31, 2010)

  • Now using a new pear channel: pear.sabredav.org.
  • Added the SabreDAV version to all error responses, for easier debugging.
  • Fixed Issue 26 Better Gnome compatibility.
  • Fixed Issue 37 TemporaryFileFilter regex too loose.
  • Issue 33, 39, 40 Better handling of international characters.

New in SabreDAV 1.0.8 (Mar 9, 2010)

  • Added Sabre_DAV_Exception_Forbidden, this is going to replace Sabre_DAV_Exception_PermissionDenied in the future.
  • Added Sabre_DAV_ICollection, this is going to replace Sabre_DAV_IDirectory in the future.

New in SabreDAV 1.0.7 (Feb 24, 2010)

  • Fixed: Issue 19 regression for MS Office

New in SabreDAV 1.0.5 (Feb 2, 2010)

  • 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

New in SabreDAV 1.0.4 (Jan 12, 2010)

  • 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.

New in SabreDAV 1.0.1 (Dec 22, 2009)

  • Fixed: Issue 15: typos in examples
  • Fixed: Minor pear installation issues

New in SabreDAV 1.0.0 (Nov 2, 2009)

  • SimpleDirectory class
  • Authentication plugin is no longer included. The plugin was not yet production ready, and in order to allow myself to make API changes, I needed to remove it for 1.0. This does not mean you can no longer use the recommended way to implement authentication.
  • The unknownProperties event was removed, replaced by the afterGetPropertiesEvent (docs).
  • Addition of more events for plugin writers.
  • Lots of cleaning up, unittests.