]> git.mxchange.org Git - friendica-addons.git/blob - dav/SabreDAV/ChangeLog
twitter: One unregister hook was missing
[friendica-addons.git] / dav / SabreDAV / ChangeLog
1 1.7.0-alpha (2012-??-??)
2     * BC Break: The calendarobjects database table has a bunch of new
3           fields, and a migration script is required to ensure everything will
4           keep working. Read the wiki for more details.
5         * BC Break: The iCalendar interface now has a new method: calendarQuery.
6         * BC Break: In this version a number of classes have been deleted, that
7           have been previously deprecated. Namely:
8                 - Sabre_DAV_Directory (now: Sabre_DAV_Collection)
9                 - Sabre_DAV_SimpleDirectory (now: Sabre_DAV_SimpleCollection)
10             - Sabre_VObject_Element_DateTime (now: .._Property_DateTime)
11                 - Sabre_VObject_Element_MultiDateTime (-> .._Property_MultiDateTime)
12         * BC Break: Sabre_CalDAV_Schedule_IMip::sendMessage now has an extra
13           argument. If you extended this class, you should fix this method. It's
14           only used for informational purposes.
15         * BC Break: The DAV: namespace is no longer converted to urn:DAV. This was
16           a workaround for a bug in older PHP versions (pre-5.3).
17         * Changed: The Sabre_VObject library now spawned into it's own project!
18         * New feature: Support for caldav notifications!
19         * Changed: Responsibility for dealing with the calendar-query is now
20           moved from the CalDAV plugin to the CalDAV backends. This allows for
21           heavy optimizations.
22         * Changed: The CalDAV PDO backend is now a lot faster for common
23           calendar queries.
24         * Fixed: Marking both the text/calendar and text/x-vcard as UTF-8
25           encoded.
26         * Fixed: Workaround for the SOGO connector, as it doesn't understand
27           receiving "text/x-vcard; charset=utf-8" for a contenttype.
28         * Added: Sabre_DAV_Client now throws more specific exceptions in cases
29           where we already has an exception class.
30         * Added: Sabre_DAV_PartialUpdate. This plugin allows you to use the
31           PATCH method to update parts of a file.
32         * Added: Tons of timezone name mappings for Microsoft Exchange.
33         * Added: Support for an 'exception' event.
34         * Fixed: Uploaded VCards without a UID are now rejected. (thanks Dominik!)
35         * Fixed: Rejecting calendar objects if they are not in the
36           supported-calendar-component list. (thanks Armin!)
37         * Fixed: Issue 219: serialize() now reorders correctly.
38         * Fixed: Sabre_DAV_XMLUtil no longer returns empty $dom->childNodes
39           if there is whitespace in $dom.
40
41 1.6.5-stable (2012-??-??)
42         * Fixed: Workaround for line-ending bug OS X 10.8 addressbook has.
43
44 1.6.4-stable (2012-08-02)
45         * Fixed: Issue 220: Calendar-query filters may fail when filtering on
46           alarms, if an overridden event has it's alarm removed.
47         * Fixed: Compatibility for OS/X 10.8 iCal in the IMipHandler.
48         * Fixed: Issue 222: beforeWriteContent shouldn't be called for lock
49           requests.
50         * Fixed: Problem with POST requests to the outbox if mailto: was not lower
51           cased.
52         * Fixed: Yearly recurrence rule expansion on leap-days no behaves
53           correctly.
54         * Fixed: Correctly checking if recurring, all-day events with no dtstart
55           fall in a timerange if the start of the time-range exceeds the start of
56           the instance of an event, but not the end.
57         * Fixed: All-day recurring events wouldn't match if an occurence ended
58           exactly on the start of a time-range.
59         * Fixed: HTTP basic auth did not correctly deal with passwords containing
60           colons on some servers.
61         * Fixed: Issue 228: DTEND is now non-inclusive for all-day events in the
62           calendar-query REPORT and free-busy calculations.
63
64 1.6.3-stable (2012-06-12)
65         * Added: It's now possible to specify in Sabre_DAV_Client which type of
66           authentication is to be used.
67         * Fixed: Issue 206: Sabre_DAV_Client PUT requests are fixed.
68         * Fixed: Issue 205: Parsing an iCalendar 0-second date interval.
69         * Fixed: Issue 112: Stronger validation of iCalendar objects. Now making
70           sure every iCalendar object only contains 1 component, and disallowing
71           vcards, forcing every component to have a UID.
72         * Fixed: Basic validation for vcards in the CardDAV plugin.
73         * Fixed: Issue 213: Workaround for an Evolution bug, that prevented it
74           from updating events.
75         * Fixed: Issue 211: A time-limit query on a non-relative alarm trigger in
76           a recurring event could result in an endless loop.
77         * Fixed: All uri fields are now a maximum of 200 characters. The Bynari
78           outlook plugin used much longer strings so this should improve
79           compatibility.
80         * Fixed: Added a workaround for a bug in KDE 4.8.2 contact syncing. See
81           https://bugs.kde.org/show_bug.cgi?id=300047
82         * Fixed: Issue 217: Sabre_DAV_Tree_FileSystem was pretty broken.
83
84 1.6.2-stable (2012-04-16)
85         * Fixed: Sabre_VObject_Node::$parent should have been public.
86         * Fixed: Recurrence rules of events are now taken into consideration when
87           doing time-range queries on alarms.
88         * Fixed: Added a workaround for the fact that php's DateInterval cannot
89           parse weeks and days at the same time.
90         * Added: Sabre_DAV_Server::$exposeVersion, allowing you to hide SabreDAV's
91           version number from various outputs.
92         * Fixed: DTSTART values would be incorrect when expanding events.
93         * Fixed: DTSTART and DTEND would be incorrect for expansion of WEEKLY
94           BYDAY recurrences.
95         * Fixed: Issue 203: A problem with overridden events hitting the exact
96           date and time of a subsequent event in the recurrence set.
97         * Fixed: There was a problem with recurrence rules, for example the 5th
98           tuesday of the month, if this day did not exist.
99         * Added: New HTTP status codes from draft-nottingham-http-new-status-04.
100
101 1.6.1-stable (2012-03-05)
102         * Added: createFile and put() can now return an ETag.
103         * Added: Sending back an ETag on for operations on CardDAV backends. This
104           should help with OS X 10.6 Addressbook compatibility.
105         * Fixed: Fixed a bug where an infinite loop could occur in the recurrence
106           iterator if the recurrence was YEARLY, with a BYMONTH rule, and either
107           BYDAY or BYMONTHDAY match the first day of the month.
108         * Fixed: Events that are excluded using EXDATE are still counted in the
109           COUNT= parameter in the RRULE property.
110         * Added: Support for time-range filters on VALARM components.
111         * Fixed: Correctly filtering all-day events.
112         * Fixed: Sending back correct mimetypes from the browser plugin (thanks
113           Jürgen).
114         * Fixed: Issue 195: Sabre_CardDAV pear package had an incorrect dependency.
115         * Fixed: Calendardata would be destroyed when performing a MOVE request.
116
117 1.6.0-stable (2012-02-22)
118         * BC Break: Now requires PHP 5.3
119         * BC Break: Any node that implemented Sabre_DAVACL_IACL must now also
120           implement the getSupportedPrivilegeSet method. See website for details.
121         * BC Break: Moved functions from Sabre_CalDAV_XMLUtil to
122           Sabre_VObject_DateTimeParser.
123         * BC Break: The Sabre_DAVACL_IPrincipalCollection now has two new methods:
124           'searchPrincipals' and 'updatePrincipal'.
125         * BC Break: Sabre_DAV_ILockable is removed and all related per-node
126           locking functionality.
127         * BC Break: Sabre_DAV_Exception_FileNotFound is now deprecated in favor of
128           Sabre_DAV_Exception_NotFound. The former will be removed in a later
129           version.
130         * BC Break: Removed Sabre_CalDAV_ICalendarUtil, use Sabre_VObject instead.
131         * BC Break: Sabre_CalDAV_Server is now deprecated, check out the
132           documentation on how to setup a caldav server with just
133           Sabre_DAV_Server.
134         * BC Break: Default Principals PDO backend now needs a new field in the
135           'principals' table. See the website for details.
136         * Added: Ability to create new calendars and addressbooks from within the
137           browser plugin.
138         * Added: Browser plugin: icons for various nodes.
139         * Added: Support for FREEBUSY reports!
140         * Added: Support for creating principals with admin-level privileges.
141         * Added: Possibility to let server send out invitation emails on behalf of
142           CalDAV client, using Sabre_CalDAV_Schedule_IMip.
143         * Changed: beforeCreateFile event now passes data argument by reference.
144         * Changed: The 'propertyMap' property from Sabre_VObject_Reader, must now
145           be specified in Sabre_VObject_Property::$classMap.
146         * Added: Ability for plugins to tell the ACL plugin which principal
147           plugins are searchable.
148         * Added: [DAVACL] Per-node overriding of supported privileges. This allows
149           for custom privileges where needed.
150         * Added: [DAVACL] Public 'principalSearch' method on the DAVACL plugin,
151           which allows for easy searching for principals, based on their
152           properties.
153         * Added: Sabre_VObject_Component::getComponents() to return a list of only
154           components and not properties.
155         * Added: An includes.php file in every sub-package (CalDAV, CardDAV, DAV,
156           DAVACL, HTTP, VObject) as an alternative to the autoloader. This often
157           works much faster.
158         * Added: Support for the 'Me card', which allows Addressbook.app users
159           specify which vcard is their own.
160         * Added: Support for updating principal properties in the DAVACL principal
161           backends.
162         * Changed: Major refactoring in the calendar-query REPORT code. Should
163           make things more flexible and correct.
164         * Changed: The calendar-proxy-[read|write] principals will now only appear
165           in the tree, if they actually exist in the Principal backend. This should
166           reduce some problems people have been having with this.
167         * Changed: Sabre_VObject_Element_* classes are now renamed to
168           Sabre_VObject_Property. Old classes are retained for backwards
169           compatibility, but this will be removed in the future.
170         * Added: Sabre_VObject_FreeBusyGenerator to generate free-busy reports
171           based on lists of events.
172         * Added: Sabre_VObject_RecurrenceIterator to find all the dates and times
173           for recurring events.
174         * Fixed: Issue 97: Correctly handling RRULE for the calendar-query REPORT.
175         * Fixed: Issue 154: Encoding of VObject parameters with no value was
176           incorrect.
177         * Added: Support for {DAV:}acl-restrictions property from RFC3744.
178         * Added: The contentlength for calendar objects can now be supplied by a
179           CalDAV backend, allowing for more optimizations.
180         * Fixed: Much faster implementation of Sabre_DAV_URLUtil::encodePath.
181         * Fixed: {DAV:}getcontentlength may now be not specified.
182         * Fixed: Issue 66: Using rawurldecode instead of urldecode to decode paths
183           from clients. This means that + will now be treated as a literal rather
184           than a space, and this should improve compatibility with the Windows
185           built-in client.
186         * Added: Sabre_DAV_Exception_PaymentRequired exception, to emit HTTP 402
187           status codes.
188         * Added: Some mysql unique constraints to example files.
189         * Fixed: Correctly formatting HTTP dates.
190         * Fixed: Issue 94: Sending back Last-Modified header for 304 responses.
191         * Added: Sabre_VObject_Component_VEvent, Sabre_VObject_Component_VJournal,
192           Sabre_VObject_Component_VTodo and Sabre_VObject_Component_VCalendar.
193         * Changed: Properties are now also automatically mapped to their
194           appropriate classes, if they are created using the add() or __set()
195           methods.
196         * Changed: Cloning VObject objects now clones the entire tree, rather than
197       just the default shallow copy.
198         * Added: Support for recurrence expansion in the CALDAV:calendar-multiget
199           and CALDAV:calendar-query REPORTS.
200         * Changed: CalDAV PDO backend now sorts calendars based on the internal
201           'calendarorder' field.
202         * Added: Issue 181: Carddav backends may no optionally not supply the carddata in
203           getCards, if etag and size are specified. This may speed up certain
204           requests.
205         * Added: More arguments to beforeWriteContent and beforeCreateFile (see
206           WritingPlugins wiki document).
207         * Added: Hook for iCalendar validation. This allows us to validate
208           iCalendar objects when they're uploaded. At the moment we're just
209           validating syntax.
210         * Added: VObject now support Windows Timezone names correctly (thanks
211           mrpace2).
212         * Added: If a timezonename could not be detected, we fall back on the
213           default PHP timezone.
214         * Added: Now a Composer package (thanks willdurand).
215         * Fixed: Support for \N as a newline character in the VObject reader.
216         * Added: afterWriteContent, afterCreateFile and afterUnbind events.
217         * Added: Postgresql example files. Not part of the unittests though, so
218           use at your own risk.
219         * Fixed: Issue 182: Removed backticks from sql queries, so it will work
220           with Postgres.
221
222 1.5.9-stable (2012-04-16)
223         * Fixed: Issue with parsing timezone identifiers that were surrounded by
224           quotes. (Fixes emClient compatibility).
225
226 1.5.8-stable (2012-02-22)
227         * Fixed: Issue 95: Another timezone parsing issue, this time in
228           calendar-query.
229
230 1.5.7-stable (2012-02-19)
231         * Fixed: VObject properties are now always encoded before components.
232         * Fixed: Sabre_DAVACL had issues with multiple levels of privilege
233           aggregration.
234         * Changed: Added 'GuessContentType' plugin to fileserver.php example.
235         * Fixed: The Browser plugin will now trigger the correct events when
236           creating files.
237         * Fixed: The ICSExportPlugin now considers ACL's.
238         * Added: Made it optional to supply carddata from an Addressbook backend
239           when requesting getCards. This can make some operations much faster, and
240           could result in much lower memory use.
241         * Fixed: Issue 187: Sabre_DAV_UUIDUtil was missing from includes file.
242         * Fixed: Issue 191: beforeUnlock was triggered twice.
243
244 1.5.6-stable (2012-01-07)
245         * Fixed: Issue 174: VObject could break UTF-8 characters.
246         * Fixed: pear package installation issues.
247
248 1.5.5-stable (2011-12-16)
249         * Fixed: CalDAV time-range filter workaround for recurring events.
250         * Fixed: Bug in Sabre_DAV_Locks_Backend_File that didn't allow multiple
251           files to be locked at the same time.
252
253 1.5.4-stable (2011-10-28)
254         * Fixed: GuessContentType plugin now supports mixed case file extensions.
255         * Fixed: DATE-TIME encoding was wrong in VObject. (we used 'DATETIME').
256         * Changed: Sending back HTTP 204 after a PUT request on an existing resource
257           instead of HTTP 200. This should fix Evolution CardDAV client
258           compatibility.
259         * Fixed: Issue 95: Parsing X-LIC-LOCATION if it's available.
260         * Added: All VObject elements now have a reference to their parent node.
261
262 1.5.3-stable (2011-09-28)
263         * Fixed: Sabre_DAV_Collection was missing from the includes file.
264         * Fixed: Issue 152. iOS 1.4.2 apparantly requires HTTP/1.1 200 OK to be in
265           uppercase.
266         * Fixed: Issue 153: Support for files with mixed newline styles in
267           Sabre_VObject.
268         * Fixed: Issue 159: Automatically converting any vcard and icalendardata
269           to UTF-8.
270         * Added: Sabre_DAV_SimpleFile class for easy static file creation.
271         * Added: Issue 158: Support for the CARDDAV:supported-address-data
272           property.
273
274 1.5.2-stable (2011-09-21)
275         * Fixed: carddata and calendardata MySQL fields are now of type
276           'mediumblob'. 'TEXT' was too small sometimes to hold all the data.
277         * Fixed: {DAV:}supported-report-set is now correctly reporting the reports
278           for IAddressBook.
279         * Added: Sabre_VObject_Property::add() to add duplicate parameters to
280           properties.
281         * Added: Issue 151: Sabre_CalDAV_ICalendar and Sabre_CalDAV_ICalendarObject
282           interfaces.
283         * Fixed: Issue 140: Not returning 201 Created if an event cancelled the
284           creation of a file.
285         * Fixed: Issue 150: Faster URLUtil::encodePath() implementation.
286         * Fixed: Issue 144: Browser plugin could interfere with
287           TemporaryFileFilterPlugin if it was loaded first.
288         * Added: It's not possible to specify more 'alternate uris' in principal
289           backends.
290
291 1.5.1-stable (2011-08-24)
292         * Fixed: Issue 137. Hiding action interface in HTML browser for
293           non-collections.
294         * Fixed: addressbook-query is now correctly returned from the
295           {DAV:}supported-report-set property.
296         * Fixed: Issue 142: Bugs in groupwareserver.php example.
297         * Fixed: Issue 139: Rejecting PUT requests with Content-Range.
298
299 1.5.0-stable (2011-08-12)
300         * Added: CardDAV support.
301         * Added: An experimental WebDAV client.
302         * Added: MIME-Directory grouping support in the VObject library. This is
303           very useful for people attempting to parse vcards.
304         * BC Break: Adding parameters with the VObject libraries now overwrites
305           the previous parameter, rather than just add it. This makes more sense
306           for 99% of the cases.
307         * BC Break: lib/Sabre.autoload.php is now removed in favor of
308           lib/Sabre/autoload.php.
309         * Deprecated: Sabre_DAV_Directory is now deprecated and will be removed in
310           a future version. Use Sabre_DAV_Collection instead.
311         * Deprecated: Sabre_DAV_SimpleDirectory is now deprecated and will be
312           removed in a future version. Use Sabre_DAV_SimpleCollection instead.
313         * Fixed: Problem with overriding tablenames for the CalDAV backend.
314         * Added: Clark-notation parser to XML utility.
315         * Added: unset() support to VObject components.
316         * Fixed: Refactored CalDAV property fetching to be faster and simpler.
317         * Added: Central string-matcher for CalDAV and CardDAV plugins.
318         * Added: i;unicode-casemap support
319         * Fixed: VObject bug: wouldn't parse parameters if they weren't specified
320           in uppercase.
321         * Fixed: VObject bug: Parameters now behave more like Properties.
322         * Fixed: VObject bug: Parameters with no value are now correctly parsed.
323         * Changed: If calendars don't specify which components they allow, 'all'
324           components are assumed (e.g.: VEVENT, VTODO, VJOURNAL).
325         * Changed: Browser plugin now uses POST variable 'sabreAction' instead of
326           'action' to reduce the chance of collisions.
327
328 1.4.4-stable (2011-07-07)
329         * Fixed: Issue 131: Custom CalDAV backends could break in certain cases.
330         * Added: The option to override the default tablename all PDO backends
331           use. (Issue 60).
332         * Fixed: Issue 124: 'File' authentication backend now takes realm into
333           consideration.
334         * Fixed: Sabre_DAV_Property_HrefList now properly deserializes. This
335           allows users to update the {DAV:}group-member-set property.
336         * Added: Helper functions for DateTime-values in Sabre_VObject package.
337         * Added: VObject library can now automatically map iCalendar properties to
338           custom classes.
339
340 1.4.3-stable (2011-04-25)
341         * Fixed: Issue 123: Added workaround for Windows 7 UNLOCK bug.
342         * Fixed: datatype of lastmodified field in mysql.calendars.sql. Please
343           change the DATETIME field to an INT to ensure this field will work
344           correctly.
345         * Change: Sabre_DAV_Property_Principal is now renamed to
346           Sabre_DAVACL_Property_Principal.
347         * Added: API level support for ACL HTTP method.
348         * Fixed: Bug in serializing {DAV:}acl property.
349         * Added: deserializer for {DAV:}resourcetype property.
350         * Added: deserializer for {DAV:}acl property.
351         * Added: deserializer for {DAV:}principal property.
352
353 1.4.2-beta (2011-04-01)
354         * Added: It's not possible to disable listing of nodes that are denied
355           read access by ACL.
356         * Fixed: Changed a few properties in CalDAV classes from private to
357           protected.
358         * Fixed: Issue 119: Terrible things could happen when relying on
359           guessBaseUri, the server was running on the root of the domain and a user
360           tried to access a file ending in .php. This is a slight BC break.
361         * Fixed: Issue 118: Lock tokens in If headers without a uri should be
362           treated as the request uri, not 'all relevant uri's.
363         * Fixed: Issue 120: PDO backend was incorrectly fetching too much locks in
364           cases where there were similar named locked files in a directory.
365
366 1.4.1-beta (2011-02-26)
367         * Fixed: Sabre_DAV_Locks_Backend_PDO returned too many locks.
368         * Fixed: Sabre_HTTP_Request::getHeader didn't return Content-Type when
369           running on apache, so a few workarounds were added.
370         * Change: Slightly changed CalDAV Backend API's, to allow for heavy
371           optimizations. This is non-bc breaking.
372
373 1.4.0-beta (2011-02-12)
374         * Added: Partly RFC3744 ACL support.
375         * Added: Calendar-delegation (caldav-proxy) support.
376         * BC break: In order to fix Issue 99, a new argument had to be added to
377           Sabre_DAV_Locks_Backend_*::getLocks classes. Consult the classes for
378           details.
379         * Deprecated: Sabre_DAV_Locks_Backend_FS is now deprecated and will be
380           removed in a later version. Use PDO or the new File class instead.
381         * Deprecated: The Sabre_CalDAV_ICalendarUtil class is now marked
382           deprecated, and will be removed in a future version. Please use
383           Sabre_VObject instead.
384         * Removed: All principal-related functionality has been removed from the
385           Sabre_DAV_Auth_Plugin, and moved to the Sabre_DAVACL_Plugin.
386         * Added: VObject library, for easy vcard/icalendar parsing using a natural
387           interface.
388         * Added: Ability to automatically generate full .ics feeds off calendars.
389           To use: Add the Sabre_CalDAV_ICSExportPlugin, and add ?export to your
390           calendar url.
391         * Added: Plugins can now specify a pluginname, for easy access using
392           Sabre_DAV_Server::getPlugin().
393         * Added: beforeGetProperties event.
394         * Added: updateProperties event.
395         * Added: Principal listings and calendar-access can now be done privately,
396           disallowing users from accessing or modifying other users' data.
397         * Added: You can now pass arrays to the Sabre_DAV_Server constructor. If
398           it's an array with node-objects, a Root collection will automatically be
399           created, and the nodes are used as top-level children.
400         * Added: The principal base uri is now customizable. It used to be
401           hardcoded to 'principals/[user]'.
402         * Added: getSupportedReportSet method in ServerPlugin class. This allows
403           you to easily specify which reports you're implementing.
404         * Added: A '..' link to the HTML browser.
405         * Fixed: Issue 99: Locks on child elements were ignored when their parent
406           nodes were deleted.
407         * Fixed: Issue 90: lockdiscovery property and LOCK response now include a
408           {DAV}lockroot element.
409         * Fixed: Issue 96: support for 'default' collation in CalDAV text-match
410           filters.
411         * Fixed: Issue 102: Ensuring that copy and move with identical source and
412           destination uri's fails.
413         * Fixed: Issue 105: Supporting MKCALENDAR with no body.
414         * Fixed: Issue 109: Small fixes in Sabre_HTTP_Util.
415         * Fixed: Issue 111: Properly catching the ownername in a lock (if it's a
416           string)
417         * Fixed: Sabre_DAV_ObjectTree::nodeExist always returned false for the
418           root node.
419         * Added: Global way to easily supply new resourcetypes for certain node
420           classes.
421         * Fixed: Issue 59: Allowing the user to override the authentication realm
422           in Sabre_CalDAV_Server.
423         * Update: Issue 97: Looser time-range checking if there's a recurrence
424           rule in an event. This fixes 'missing recurring events'.
425
426 1.3.0 (2010-10-14)
427         * Added: childExists method to Sabre_DAV_ICollection. This is an api
428           break, so if you implement Sabre_DAV_ICollection directly, add the method.
429         * Changed: Almost all HTTP method implementations now take a uri argument,
430           including events. This allows for internal rerouting of certain calls.
431           If you have custom plugins, make sure they use this argument. If they
432           don't, they will likely still work, but it might get in the way of
433           future changes.
434         * Changed: All getETag methods MUST now surround the etag with
435           double-quotes. This was a mistake made in all previous SabreDAV
436           versions. If you don't do this, any If-Match, If-None-Match and If:
437           headers using Etags will work incorrectly. (Issue 85).
438         * Added: Sabre_DAV_Auth_Backend_AbstractBasic class, which can be used to
439           easily implement basic authentication.
440         * Removed: Sabre_DAV_PermissionDenied class. Use Sabre_DAV_Forbidden
441           instead.
442         * Removed: Sabre_DAV_IDirectory interface, use Sabre_DAV_ICollection
443           instead.
444         * Added: Browser plugin now uses {DAV:}displayname if this property is
445           available.
446         * Added: Cache layer in the ObjectTree.
447         * Added: Tree classes now have a delete and getChildren method.
448         * Fixed: If-Modified-Since and If-Unmodified-Since would be incorrect if
449           the date is an exact match.
450         * Fixed: Support for multiple ETags in If-Match and If-None-Match headers.
451         * Fixed: Improved baseUrl handling.
452         * Fixed: Issue 67: Non-seekable stream support in ::put()/::get().
453         * Fixed: Issue 65: Invalid dates are now ignored.
454         * Updated: Refactoring in Sabre_CalDAV to make everything a bit more
455           ledgable.
456         * Fixed: Issue 88, Issue 89: Fixed compatibility for running SabreDAV on
457            Windows.
458         * Fixed: Issue 86: Fixed Content-Range top-boundary from 'file size' to
459           'file size'-1.
460
461 1.2.4 (2010-07-13)
462         * Fixed: Issue 62: Guessing baseUrl fails when url contains a
463           query-string.
464         * Added: Apache configuration sample for CGI/FastCGI setups.
465         * Fixed: Issue 64: Only returning calendar-data when it was actually
466           requested.
467
468 1.2.3 (2010-06-26)
469         * Fixed: Issue 57: Supporting quotes around etags in If-Match and
470           If-None-Match
471
472 1.2.2 (2010-06-21)
473         * Updated: SabreDAV now attempts to guess the BaseURI if it's not set.
474         * Updated: Better compatibility with BitKinex
475         * Fixed: Issue 56: Incorrect behaviour for If-None-Match headers and GET
476           requests.
477         * Fixed: Issue with certain encoded paths in Browser Plugin.
478
479 1.2.1 (2010-06-07)
480         * Fixed: Issue 50, patch by Mattijs Hoitink.
481         * Fixed: Issue 51, Adding windows 7 lockfiles to TemporaryFileFilter.
482         * Fixed: Issue 38, Allowing custom filters to be added to
483           TemporaryFileFilter.
484         * Fixed: Issue 53, ETags in the If: header were always failing. This
485           behaviour is now corrected.
486         * Added: Apache Authentication backend, in case authentication through
487           .htaccess is desired.
488         * Updated: Small improvements to example files.
489
490 1.2.0 (2010-05-24)
491         * Fixed: Browser plugin now displays international characters.
492         * Changed: More properties in CalDAV classes are now protected instead of
493           private.
494
495 1.2.0beta3 (2010-05-14)
496         * Fixed: Custom properties were not properly sent back for allprops
497           requests.
498         * Fixed: Issue 49, incorrect parsing of PROPPATCH, affecting Office 2007.
499         * Changed: Removed CalDAV items from includes.php, and added a few missing
500           ones.
501
502 1.2.0beta2 (2010-05-04)
503         * Fixed: Issue 46: Fatal error for some non-existent nodes.
504         * Updated: some example sql to include email address.
505         * Added: 208 and 508 statuscodes from RFC5842.
506         * Added: Apache2 configuration examples
507
508 1.2.0beta1 (2010-04-28)
509         * Fixed: redundant namespace declaration in resourcetypes.
510         * Fixed: 2 locking bugs triggered by litmus when no Sabre_DAV_ILockable
511           interface is used.
512         * Changed: using http://sabredav.org/ns for all custom xml properties.
513         * Added: email address property to principals.
514         * Updated: CalendarObject validation.
515
516 1.2.0alpha4 (2010-04-24)
517         * Added: Support for If-Range, If-Match, If-None-Match, If-Modified-Since,
518           If-Unmodified-Since.
519         * Changed: Brand new build system. Functionality is split up between
520           Sabre, Sabre_HTTP, Sabre_DAV and Sabre_CalDAV packages. In addition to
521           that a new non-pear package will be created with all this functionality
522           combined.
523         * Changed: Autoloader moved to Sabre/autoload.php.
524         * Changed: The Allow: header is now more accurate, with appropriate HTTP
525           methods per uri.
526         * Changed: Now throwing back Sabre_DAV_Exception_MethodNotAllowed on a few
527           places where Sabre_DAV_Exception_NotImplemented was used.
528
529 1.2.0alpha3 (2010-04-20)
530         * Update: Complete rewrite of property updating. Now easier to use and
531           atomic.
532         * Fixed: Issue 16, automatically adding trailing / to baseUri.
533         * Added: text/plain is used for .txt files in GuessContentType plugin.
534         * Added: support for principal-property-search and
535           principal-search-property-set reports.
536         * Added: Issue 31: Hiding exception information by default. Can be turned
537           on with the Sabre_DAV_Server::$debugExceptions property.
538
539 1.2.0alpha2 (2010-04-08)
540         * Added: Calendars are now private and can only be read by the owner.
541         * Fixed: double namespace declaration in multistatus responses.
542         * Added: MySQL database dumps. MySQL is now also supported next to SQLite.
543         * Added: expand-properties REPORT from RFC 3253.
544         * Added: Sabre_DAV_Property_IHref interface for properties exposing urls.
545         * Added: Issue 25: Throwing error on broken Finder behaviour.
546         * Changed: Authentication backend is now aware of current user.
547
548 1.2.0alpha1 (2010-03-31)
549         * Fixed: Issue 26: Workaround for broken GVFS behaviour with encoded
550           special characters.
551         * Fixed: Issue 34: Incorrect Lock-Token response header for LOCK. Fixes
552           Office 2010 compatibility.
553         * Added: Issue 35: SabreDAV version to header to OPTIONS response to ease
554           debugging.
555         * Fixed: Issue 36: Incorrect variable name, throwing error in some
556           requests.
557         * Fixed: Issue 37: Incorrect smultron regex in temporary filefilter.
558         * Fixed: Issue 33: Converting ISO-8859-1 characters to UTF-8.
559         * Fixed: Issue 39 & Issue 40: Basename fails on non-utf-8 locales.
560         * Added: More unittests.
561         * Added: SabreDAV version to all error responses.
562         * Added: URLUtil class for decoding urls.
563         * Changed: Now using pear.sabredav.org pear channel.
564         * Changed: Sabre_DAV_Server::getCopyAndMoveInfo is now a public method.
565
566 1.1.2-alpha (2010-03-18)
567         * Added: RFC5397 - current-user-principal support.
568         * Fixed: Issue 27: encoding entities in property responses.
569         * Added: naturalselection script now allows the user to specify a 'minimum
570           number of bytes' for deletion. This should reduce load due to less
571           crawling
572         * Added: Full support for the calendar-query report.
573         * Added: More unittests.
574         * Added: Support for complex property deserialization through the static
575           ::unserialize() method.
576         * Added: Support for modifying calendar-component-set
577         * Fixed: Issue 29: Added TIMEOUT_INFINITE constant
578
579 1.1.1-alpha (2010-03-11)
580         * Added: RFC5689 - Extended MKCOL support.
581         * Fixed: Evolution support for CalDAV.
582         * Fixed: PDO-locks backend was pretty much completely broken. This is
583           100% unittested now.
584         * Added: support for ctags.
585         * Fixed: Comma's between HTTP methods in 'Allow' method.
586         * Changed: default argument for Sabre_DAV_Locks_Backend_FS. This means a
587           datadirectory must always be specified from now on.
588         * Changed: Moved Sabre_DAV_Server::parseProps to
589           Sabre_DAV_XMLUtil::parseProperties.
590         * Changed: Sabre_DAV_IDirectory is now Sabre_DAV_ICollection.
591         * Changed: Sabre_DAV_Exception_PermissionDenied is now
592           Sabre_DAV_Exception_Forbidden.
593         * Changed: Sabre_CalDAV_ICalendarCollection is removed.
594         * Added: Sabre_DAV_IExtendedCollection.
595         * Added: Many more unittests.
596         * Added: support for calendar-timezone property.
597
598 1.1.0-alpha (2010-03-01)
599         * Note: This version is forked from version 1.0.5, so release dates may be
600           out of order.
601         * Added: CalDAV - RFC 4791
602         * Removed: Sabre_PHP_Exception. PHP has a built-in ErrorException for
603           this.
604         * Added: PDO authentication backend.
605         * Added: Example sql for auth, caldav, locks for sqlite.
606         * Added: Sabre_DAV_Browser_GuessContentType plugin
607         * Changed: Authentication plugin refactored, making it possible to
608           implement non-digest authentication.
609         * Fixed: Better error display in browser plugin.
610         * Added: Support for {DAV:}supported-report-set
611         * Added: XML utility class with helper functions for the WebDAV protocol.
612         * Added: Tons of unittests
613         * Added: PrincipalCollection and Principal classes
614         * Added: Sabre_DAV_Server::getProperties for easy property retrieval
615         * Changed: {DAV:}resourceType defaults to 0
616         * Changed: Any non-null resourceType now gets a / appended to the href
617           value. Before this was just for {DAV:}collection's, but this is now also
618           the case for for example {DAV:}principal.
619         * Changed: The Href property class can now optionally create non-relative
620           uri's.
621         * Changed: Sabre_HTTP_Response now returns false if headers are already
622           sent and header-methods are called.
623         * Fixed: Issue 19: HEAD requests on Collections
624         * Fixed: Issue 21: Typo in Sabre_DAV_Property_Response
625         * Fixed: Issue 18: Doesn't work with Evolution Contacts
626
627 1.0.15-stable (2010-05-28)
628         * Added: Issue 31: Hiding exception information by default. Can be turned
629           on with the Sabre_DAV_Server::$debugExceptions property.
630         * Added: Moved autoload from lib/ to lib/Sabre/autoload.php. This is also
631           the case in the upcoming 1.2.0, so it will improve future compatibility.
632
633 1.0.14-stable (2010-04-15)
634         * Fixed: double namespace declaration in multistatus responses.
635
636 1.0.13-stable (2010-03-30)
637         * Fixed: Issue 40: Last references to basename/dirname
638
639 1.0.12-stable (2010-03-30)
640         * Fixed: Issue 37: Incorrect smultron regex in temporary filefilter.
641         * Fixed: Issue 26: Workaround for broken GVFS behaviour with encoded
642           special characters.
643         * Fixed: Issue 33: Converting ISO-8859-1 characters to UTF-8.
644         * Fixed: Issue 39: Basename fails on non-utf-8 locales.
645         * Added: More unittests.
646         * Added: SabreDAV version to all error responses.
647         * Added: URLUtil class for decoding urls.
648         * Updated: Now using pear.sabredav.org pear channel.
649
650 1.0.11-stable (2010-03-23)
651         * Non-public release. This release is identical to 1.0.10, but it is used
652           to test releasing packages to pear.sabredav.org.
653
654 1.0.10-stable (2010-03-22)
655         * Fixed: Issue 34: Invalid Lock-Token header response.
656         * Added: Issue 35: Addign SabreDAV version to HTTP OPTIONS responses.
657
658 1.0.9-stable (2010-03-19)
659         * Fixed: Issue 27: Entities not being encoded in PROPFIND responses.
660         * Fixed: Issue 29: Added missing TIMEOUT_INFINITE constant.
661
662 1.0.8-stable (2010-03-03)
663         * Fixed: Issue 21: typos causing errors
664         * Fixed: Issue 23: Comma's between methods in Allow header.
665         * Added: Sabre_DAV_ICollection interface, to aid in future compatibility.
666         * Added: Sabre_DAV_Exception_Forbidden exception. This will replace
667           Sabre_DAV_Exception_PermissionDenied in the future, and can already be
668           used to ensure future compatibility.
669
670 1.0.7-stable (2010-02-24)
671         * Fixed: Issue 19 regression for MS Office
672
673 1.0.6-stable (2010-02-23)
674         * Fixed: Issue 19: HEAD requests on Collections
675
676 1.0.5-stable (2010-01-22)
677         * Fixed: Fatal error when a malformed url was used for unlocking, in
678           conjuction with Sabre.autoload.php due to a incorrect filename.
679         * Fixed: Improved unittests and build system
680
681 1.0.4-stable (2010-01-11)
682         * Fixed: needed 2 different releases. One for googlecode and one for
683           pearfarm. This is to retain the old method to install SabreDAV until
684           pearfarm becomes the standard installation method.
685
686 1.0.3-stable (2010-01-11)
687         * Added: RFC4709 support (davmount)
688         * Added: 6 unittests
689         * Added: naturalselection. A tool to keep cache directories below a
690           specified theshold.
691         * Changed: Now using pearfarm.org channel server.
692
693 1.0.1-stable (2009-12-22)
694         * Fixed: Issue 15: typos in examples
695         * Fixed: Minor pear installation issues
696
697 1.0.0-stable (2009-11-02)
698         * Added: SimpleDirectory class. This class allows creating static
699           directory structures with ease.
700         * Changed: Custom complex properties and exceptions now get an instance of
701           Sabre_DAV_Server as their first argument in serialize()
702         * Changed: Href complex property now prepends server's baseUri
703         * Changed: delete before an overwriting copy/move is now handles by server
704           class instead of tree classes
705         * Changed: events must now explicitly return false to stop execution.
706           Before, execution would be stopped by anything loosely evaluating to
707           false.
708         * Changed: the getPropertiesForPath method now takes a different set of
709           arguments, and returns a different response. This allows plugin
710           developers to return statuses for properties other than 200 and 404. The
711           hrefs are now also always calculated relative to the baseUri, and not
712           the uri of the request.
713         * Changed: generatePropFindResponse is renamed to generateMultiStatus, and
714           now takes a list of properties similar to the response of
715           getPropertiesForPath. This was also needed to improve flexibility for
716           plugin development.
717         * Changed: Auth plugins are no longer included. They were not yet stable
718           quality, so they will probably be reintroduced in a later version.
719         * Changed: PROPPATCH also used generateMultiStatus now.
720         * Removed: unknownProperties event. This is replaced by the
721           afterGetProperties event, which should provide more flexibility.
722         * Fixed: Only calling getSize() on IFile instances in httpHead()
723         * Added: beforeBind event. This is invoked upon file or directory creation
724         * Added: beforeWriteContent event, this is invoked by PUT and LOCK on an
725           existing resource.
726         * Added: beforeUnbind event. This is invoked right before deletion of any
727           resource.
728         * Added: afterGetProperties event. This event can be used to make
729           modifications to property responses.
730         * Added: beforeLock and beforeUnlock events.
731         * Added: afterBind event.
732         * Fixed: Copy and Move could fail in the root directory. This is now
733           fixed.
734         * Added: Plugins can now be retrieved by their classname. This is useful
735           for inter-plugin communication.
736         * Added: The Auth backend can now return usernames and user-id's.
737         * Added: The Auth backend got a getUsers method
738         * Added: Sabre_DAV_FSExt_Directory now returns quota info
739
740 0.12.1-beta (2009-09-11)
741         * Fixed: UNLOCK bug. Unlock didn't work at all
742
743 0.12-beta (2009-09-10)
744         * Updated: Browser plugin now shows multiple {DAV:}resourcetype values
745           if available.
746         * Added: Experimental PDO backend for Locks Manager
747         * Fixed: Sending Content-Length: 0 for every empty response. This
748           improves NGinx compatibility.
749         * Fixed: Last modification time is reported in UTC timezone. This improves
750           Finder compatibility.
751
752 0.11-beta (2009-08-11)
753         * Updated: Now in Beta
754         * Updated: Pear package no longer includes docs/ directory. These just
755           contained rfc's, which are publically available. This reduces the
756           package from ~800k to ~60k
757         * Added: generatePropfindResponse now takes a baseUri argument
758         * Added: ResourceType property can now contain multiple resourcetypes.
759         * Fixed: Issue 13.
760
761 0.10-alpha (2009-08-03)
762         * Added: Plugin to automatically map GET requests to non-files to
763           PROPFIND (Sabre_DAV_Browser_MapGetToPropFind). This should allow
764           easier debugging of complicated WebDAV setups.
765         * Added: Sabre_DAV_Property_Href class. For future use.
766         * Added: Ability to choose to use auth-int, auth or both for HTTP Digest
767           authentication. (Issue 11)
768         * Changed: Made more methods in Sabre_DAV_Server public.
769         * Fixed: TemporaryFileFilter plugin now intercepts HTTP LOCK requests
770           to non-existent files. (Issue 12)
771         * Added: Central list of defined xml namespace prefixes. This can reduce
772           Bandwidth and legibility for xml bodies with user-defined namespaces.
773         * Added: now a PEAR-compatible package again, thanks to Michael Gauthier
774         * Changed: moved default copy and move logic from ObjectTree to Tree class
775
776 0.9-alpha (2009-07-21)
777         * Changed: Major refactoring, removed most of the logic from the Tree
778           objects. The Server class now directly works with the INode, IFile
779           and IDirectory objects. If you created your own Tree objects,
780           this will most likely break in this release.
781         * Changed: Moved all the Locking logic from the Tree and Server classes
782           into a separate plugin.
783         * Changed: TemporaryFileFilter is now a plugin.
784         * Added: Comes with an autoloader script. This can be used instead of
785           the includer script, and is preferred by some people.
786         * Added: AWS Authentication class.
787         * Added: simpleserversetup.py script. This will quickly get a fileserver
788           up and running.
789         * Added: When subscribing to events, it is now possible to supply a
790           priority. This is for example needed to ensure that the Authentication
791           Plugin is used before any other Plugin.
792         * Added: 22 new tests.
793         * Added: Users-manager plugin for .htdigest files. Experimental and
794           subject to change.
795         * Added: RFC 2324 HTTP 418 status code
796         * Fixed: Exclusive locks could in some cases be picked up as shared locks
797         * Fixed: Digest auth for non-apache servers had a bug (still not actually
798           tested this well).
799
800 0.8-alpha (2009-05-30)
801         * Changed: Renamed all exceptions! This is a compatibility break. Every
802           Exception now follows Sabre_DAV_Exception_FileNotFound convention
803           instead of Sabre_DAV_FileNotFoundException.
804         * Added: Browser plugin now allows uploading and creating directories
805           straight from the browser.
806         * Added: 12 more unittests
807         * Fixed: Locking bug, which became prevalent on Windows Vista.
808         * Fixed: Netdrive support
809         * Fixed: TemporaryFileFilter filtered out too many files. Fixed some
810           of the regexes.
811         * Fixed: Added README and ChangeLog to package
812
813 0.7-alpha (2009-03-29)
814         * Added: System to return complex properties from PROPFIND.
815         * Added: support for {DAV:}supportedlock.
816         * Added: support for {DAV:}lockdiscovery.
817         * Added: 6 new tests.
818         * Added: New plugin system.
819         * Added: Simple HTML directory plugin, for browser access.
820         * Added: Server class now sends back standard pre-condition error xml
821         bodies. This was new since RFC4918.
822         * Added: Sabre_DAV_Tree_Aggregrate, which can 'host' multiple Tree objects
823         into one.
824         * Added: simple basis for HTTP REPORT method. This method is not used yet,
825         but can be used by plugins to add reports.
826         * Changed: ->getSize is only called for files, no longer for collections.
827         r303
828         * Changed: Sabre_DAV_FilterTree is now Sabre_DAV_Tree_Filter
829         * Changed: Sabre_DAV_TemporaryFileFilter is now called
830         Sabre_DAV_Tree_TemporaryFileFilter.
831         * Changed: removed functions (get(/set)HTTPRequest(/Response)) from Server
832         class, and using a public property instead.
833         * Fixed: bug related to parsing proppatch and propfind requests. Didn't
834         show up in most clients, but it needed fixing regardless. (r255)
835         * Fixed: auth-int is now properly supported within HTTP Digest.
836         * Fixed: Using application/xml for a mimetype vs. text/xml as per RFC4918
837         sec 8.2.
838         * Fixed: TemporaryFileFilter now lets through GET's if they actually
839         exist on the backend. (r274)
840         * FIxed: Some methods didn't get passed through in the FilterTree (r283).
841         * Fixed: LockManager is now slightly more complex, Tree classes slightly
842         less. (r287)
843
844 0.6-alpha (2009-02-16)
845         * Added: Now uses streams for files, instead of strings.
846           This means it won't require to hold entire files in memory, which can be
847           an issue if you're dealing with big files. Note that this breaks
848           compatibility for put() and createFile methods.
849         * Added: HTTP Digest Authentication helper class.
850         * Added: Support for HTTP Range header
851         * Added: Support for ETags within If: headers
852         * Added: The API can now return ETags and override the default Content-Type
853         * Added: starting with basic framework for unittesting, using PHPUnit.
854         * Added: 49 unittests.
855         * Added: Abstraction for the HTTP request.
856         * Updated: Using Clark Notation for tags in properties. This means tags
857         are serialized as {namespace}tagName instead of namespace#tagName
858         * Fixed: HTTP_BasicAuth class now works as expected.
859         * Fixed: DAV_Server uses / for a default baseUrl.
860         * Fixed: Last modification date is no longer ignored in PROPFIND.
861         * Fixed: PROPFIND now sends back information about the requestUri even
862           when "Depth: 1" is specified.
863
864 0.5-alpha (2009-01-14)
865         * Added: Added a very simple example for implementing a mapping to PHP
866           file streams. This should allow easy implementation of for example a
867           WebDAV to FTP proxy.
868         * Added: HTTP Basic Authentication helper class.
869         * Added: Sabre_HTTP_Response class. This centralizes HTTP operations and
870           will be a start towards the creating of a testing framework.
871         * Updated: Backwards compatibility break: all require_once() statements
872           are removed
873           from all the files. It is now recommended to use autoloading of
874           classes, or just including lib/Sabre.includes.php. This fix was made
875           to allow easier integration into applications not using this standard
876           inclusion model.
877         * Updated: Better in-file documentation.
878         * Updated: Sabre_DAV_Tree can now work with Sabre_DAV_LockManager.
879         * Updated: Fixes a shared-lock bug.
880         * Updated: Removed ?> from the bottom of each php file.
881         * Updated: Split up some operations from Sabre_DAV_Server to
882           Sabre_HTTP_Response.
883         * Fixed: examples are now actually included in the pear package.
884
885 0.4-alpha (2008-11-05)
886         * Passes all litmus tests!
887         * Added: more examples
888         * Added: Custom property support
889         * Added: Shared lock support
890         * Added: Depth support to locks
891         * Added: Locking on unmapped urls (non-existent nodes)
892         * Fixed: Advertising as WebDAV class 3 support
893
894 0.3-alpha (2008-06-29)
895         * Fully working in MS Windows clients.
896         * Added: temporary file filter: support for smultron files.
897         * Added: Phing build scripts
898         * Added: PEAR package
899         * Fixed: MOVE bug identified using finder.
900         * Fixed: Using gzuncompress instead of gzdecode in the temporary file
901           filter. This seems more common.
902
903 0.2-alpha (2008-05-27)
904         * Somewhat working in Windows clients
905         * Added: Working PROPPATCH method (doesn't support custom properties yet)
906         * Added: Temporary filename handling system
907         * Added: Sabre_DAV_IQuota to return quota information
908         * Added: PROPFIND now reads the request body and only supplies the
909           requested properties
910
911 0.1-alpha (2008-04-04)
912         * First release!
913         * Passes litmus: basic, http and copymove test.
914         * Fully working in Finder and DavFSv2
915
916 Project started: 2007-12-13