1ChangeLog 2========= 3 43.4.7 (2015-09-04) 5------------------ 6 7* #253: Handle `isInTimeRange` for recurring events that have 0 valid 8 instances. (@DominikTo, @migrax). 9 10 113.4.6 (2015-08-06) 12------------------ 13 14* #250: Recurring all-day events are incorrectly included in time range 15 requests when not using UTC in the time range. (@armin-hackmann) 16 17 183.4.5 (2015-06-02) 19------------------ 20 21* #229: Converting vcards from 3.0 to 4.0 that contained a `LANG` property 22 would throw an error. 23 24 253.4.4 (2015-05-27) 26------------------ 27 28* #228: Fixed a 'party crasher' bug in the iTip broker. This would break 29 scheduling in some cases. 30 31 323.4.3 (2015-05-19) 33------------------ 34 35* #219: Corrected validation of `EXDATE` properties with more than one value. 36* #212: `BYSETPOS` with values below `-1` was broken and could cause infinite 37 loops. 38* #211: Fix `BYDAY=-5TH` in recurrence iterator. (@lindquist) 39* #216: `ENCODING` parameter is now validated for all document types. 40* #217: Initializing vCard `DATE` objects with a PHP DateTime object will now 41 work correctly. (@thomascube) 42 43 443.4.2 (2015-02-25) 45------------------ 46 47* #210: iTip: Replying to an event without a master event was broken. 48 49 503.4.1 (2015-02-24) 51------------------ 52 53* A minor change to ensure that unittests work correctly in the sabre/dav 54 test-suite. 55 56 573.4.0 (2015-02-23) 58------------------ 59 60* #196: Made parsing recurrence rules a lot faster on big calendars. 61* Updated windows timezone mappings to latest unicode version. 62* #202: Support for parsing and validating `VAVAILABILITY` components. (@Hywan) 63* #195: PHP 5.3 compatibility in 'generatevcards' script. (@rickdenhaan) 64* #205: Improving handling of multiple `EXDATE` when processing iTip changes. 65 (@armin-hackmann) 66* #187: Fixed validator rules for `LAST-MODIFIED` properties. 67* #188: Retain floating times when generating instances using 68 `Recur\EventIterator`. 69* #203: Skip tests for timezones that are not supported on older PHP versions, 70 instead of a hard fail. 71* #204: Dealing a bit better with vCard date-time values that contained 72 milliseconds. (which is normally invalid). (@armin-hackmann) 73 74 753.3.5 (2015-01-09) 76------------------ 77 78* #168: Expanding calendars now removes objects with recurrence rules that 79 don't have a valid recurrence instance. 80* #177: SCHEDULE-STATUS should not contain a reason phrase, only a status 81 code. 82* #175: Parser can now read and skip the UTF-8 BOM. 83* #179: Added `isFloating` to `DATE-TIME` properties. 84* #179: Fixed jCal serialization of floating `DATE-TIME` properties. 85* #173: vCard converter failed for `X-ABDATE` properties that had no 86 `X-ABLABEL`. 87* #180: Added `PROFILE_CALDAV` and `PROFILE_CARDDAV` to enable validation rules 88 specific for CalDAV/CardDAV servers. 89* #176: A missing `UID` is no longer an error, but a warning for the vCard 90 validator, unless `PROFILE_CARDDAV` is specified. 91 92 933.3.4 (2014-11-19) 94------------------ 95 96* #154: Converting `ANNIVERSARY` to `X-ANNIVERSARY` and `X-ABDATE` and 97 vice-versa when converting to/from vCard 4. 98* #154: It's now possible to easily select all vCard properties belonging to 99 a single group with `$vcard->{'ITEM1.'}` syntax. (@armin-hackmann) 100* #156: Simpler way to check if a string is UTF-8. (@Hywan) 101* Unittest improvements. 102* #159: The recurrence iterator, freebusy generator and iCalendar DATE and 103 DATE-TIME properties can now all accept a reference timezone when working 104 floating times or all-day events. 105* #159: Master events will no longer get a `RECURRENCE-ID` when expanding. 106* #159: `RECURRENCE-ID` for all-day events will now be correct when expanding. 107* #163: Added a `getTimeZone()` method to `VTIMEZONE` components. 108 109 1103.3.3 (2014-10-09) 111------------------ 112 113* #142: `CANCEL` and `REPLY` messages now include the `DTSTART` from the 114 original event. 115* #143: `SCHEDULE-AGENT` on the `ORGANIZER` property is respected. 116* #144: `PARTSTAT=NEEDS-ACTION` is now set for new invites, if no `PARTSTAT` is 117 set to support the inbox feature of iOS. 118* #147: Bugs related to scheduling all-day events. 119* #148: Ignore events that have attendees but no organizer. 120* #149: Avoiding logging errors during timezone detection. This is a workaround 121 for a PHP bug. 122* Support for "Line Islands Standard Time" windows timezone. 123* #154: Correctly work around vCard parameters that have a value but no name. 124 125 1263.3.2 (2014-09-19) 127------------------ 128 129* Changed: iTip broker now sets RSVP status to false when replies are received. 130* #118: iTip Message now has a `getScheduleStatus()` method. 131* #119: Support for detecting 'significant changes'. 132* #120: Support for `SCHEDULE-FORCE-SEND`. 133* #121: iCal demands parameters containing the + sign to be quoted. 134* #122: Don't generate REPLY messages for events that have been cancelled. 135* #123: Added `SUMMARY` to iTip messages. 136* #130: Incorrect validation rules for `RELATED` (should be `RELATED-TO`). 137* #128: `ATTACH` in iCalendar is `URI` by default, not `BINARY`. 138* #131: RRULE that doesn't provide a single valid instance now throws an 139 exception. 140* #136: Validator rejects *all* control characters. We were missing a few. 141* #133: Splitter objects will throw exceptions when receiving incompatible 142 objects. 143* #127: Attendees who delete recurring event instances events they had already 144 declined earlier will no longer generate another reply. 145* #125: Send CANCEL messages when ORGANIZER property gets deleted. 146 147 1483.3.1 (2014-08-18) 149------------------ 150 151* Changed: It's now possible to pass DateTime objects when using the magic 152 setters on properties. (`$event->DTSTART = new DateTime('now')`). 153* #111: iTip Broker does not process attendee adding events to EXDATE. 154* #112: EventIterator now sets TZID on RECURRENCE-ID. 155* #113: Timezone support during creation of iTip REPLY messages. 156* #114: VTIMEZONE is retained when generating new REQUEST objects. 157* #114: Support for 'MAILTO:' style email addresses (in uppercase) in the iTip 158 broker. This improves evolution support. 159* #115: Using REQUEST-STATUS from REPLY messages and now propegating that into 160 SCHEDULE-STATUS. 161 162 1633.3.0 (2014-08-07) 164------------------ 165 166* We now use PSR-4 for the directory structure. This means that everything 167 that was used to be in the `lib/Sabre/VObject` directory is now moved to 168 `lib/`. If you use composer to load this library, you shouldn't have to do 169 anything about that though. 170* VEVENT now get populated with a DTSTAMP and UID property by default. 171* BC Break: Removed the 'includes.php' file. Use composer instead. 172* #103: Added support for processing [iTip][iTip] messages. This allows a user 173 to parse incoming iTip messages and apply the result on existing calendars, 174 or automatically generate invites/replies/cancellations based on changes that 175 a user made on objects. 176* #75, #58, #18: Fixes related to overriding the first event in recurrences. 177* Added: VCalendar::getBaseComponent to find the 'master' component in a 178 calendar. 179* #51: Support for iterating RDATE properties. 180* Fixed: Issue #101: RecurrenceIterator::nextMonthly() shows events that are 181 excluded events with wrong time 182 183 1843.2.4 (2014-07-14) 185------------------ 186 187* Added: Issue #98. The VCardConverter now takes `X-APPLE-OMIT-YEAR` into 188 consideration when converting between vCard 3 and 4. 189* Fixed: Issue #96. Some support for Yahoo's broken vcards. 190* Fixed: PHP 5.3 support was broken in the cli tool. 191 192 1933.2.3 (2014-06-12) 194------------------ 195 196* Validator now checks if DUE and DTSTART are of the same type in VTODO, and 197 ensures that DUE is always after DTSTART. 198* Removed documentation from source repository, to http://sabre.io/vobject/ 199* Expanded the vobject cli tool validation output to make it easier to find 200 issues. 201* Fixed: vobject repair. It was not working for iCalendar objects. 202 203 2043.2.2 (2014-05-07) 205------------------ 206 207* Minor tweak in unittests to make it run on PHP 5.5.12. Json-prettifying 208 slightly changed which caused the test to fail. 209 210 2113.2.1 (2014-05-03) 212------------------ 213 214* Minor tweak to make the unittests run with the latest hhvm on travis. 215* Updated timezone definitions. 216* Updated copyright links to point to http://sabre.io/ 217 218 2193.2.0 (2014-04-02) 220------------------ 221 222* Now hhvm compatible! 223* The validator can now detect a _lot_ more problems. Many rules for both 224 iCalendar and vCard were added. 225* Added: bin/generate_vcards, a utility to generate random vcards for testing 226 purposes. Patches are welcome to add more data. 227* Updated: Windows timezone mapping to latest version from unicode.org 228* Changed: The timezone maps are now loaded in from external files, in 229 lib/Sabre/VObject/timezonedata. 230* Added: Fixing badly encoded URL's from google contacts vcards. 231* Fixed: Issue #68. Couldn't decode properties ending in a colon. 232* Fixed: Issue #72. RecurrenceIterator should respect timezone in the UNTIL 233 clause. 234* Fixed: Issue #67. BYMONTH limit on DAILY recurrences. 235* Fixed: Issue #26. Return a more descriptive error when coming across broken 236 BYDAY rules. 237* Fixed: Issue #28. Incorrect timezone detection for some timezones. 238* Fixed: Issue #70. Casting a parameter with a null value to string would fail. 239* Added: Support for rfc6715 and rfc6474. 240* Added: Support for DateTime objects in the VCard DATE-AND-OR-TIME property. 241* Added: UUIDUtil, for easily creating unique identifiers. 242* Fixed: Issue #83. Creating new VALUE=DATE objects using php's DateTime. 243* Fixed: Issue #86. Don't go into an infinite loop when php errors are 244 disabled and an invalid file is read. 245 246 2473.1.4 (2014-03-30) 248------------------ 249 250* Fixed: Issue #87: Several compatibility fixes related to timezone handling 251 changes in PHP 5.5.10. 252 253 2543.1.3 (2013-10-02) 255------------------ 256 257* Fixed: Support from properties from draft-daboo-valarm-extensions-04. Issue 258 #56. 259* Fixed: Issue #54. Parsing a stream of multiple vcards separated by more than 260 one newline. Thanks @Vedmak for the patch. 261* Fixed: Serializing vcard 2.1 parameters with no name caused a literal '1' to 262 be inserted. 263* Added: VCardConverter removed properties that are no longer supported in vCard 264 4.0. 265* Added: vCards with a minimum number of values (such as N), but don't have that 266 many, are now automatically padded with empty components. 267* Added: The vCard validator now also checks for a minimum number of components, 268 and has the ability to repair these. 269* Added: Some support for vCard 2.1 in the VCard converter, to upgrade to vCard 270 3.0 or 4.0. 271* Fixed: Issue 60 Use Document::$componentMap when instantiating the top-level 272 VCalendar and VCard components. 273* Fixed: Issue 62: Parsing iCalendar parameters with no value. 274* Added: --forgiving option to vobject utility. 275* Fixed: Compound properties such as ADR were not correctly split up in vCard 276 2.1 quoted printable-encoded properties. 277* Fixed: Issue 64: Encoding of binary properties of converted vCards. Thanks 278 @DominikTo for the patch. 279 280 2813.1.2 (2013-08-13) 282------------------ 283 284* Fixed: Setting correct property group on VCard conversion 285 286 2873.1.1 (2013-08-02) 288------------------ 289 290* Fixed: Issue #53. A regression in RecurrenceIterator. 291 292 2933.1.0 (2013-07-27) 294------------------ 295 296* Added: bad-ass new cli debugging utility (in bin/vobject). 297* Added: jCal and jCard parser. 298* Fixed: URI properties should not escape ; and ,. 299* Fixed: VCard 4 documents now correctly use URI as a default value-type for 300 PHOTO and others. BINARY no longer exists in vCard 4. 301* Added: Utility to convert between 2.1, 3.0 and 4.0 vCards. 302* Added: You can now add() multiple parameters to a property in one call. 303* Added: Parameter::has() for easily checking if a parameter value exists. 304* Added: VCard::preferred() to find a preferred email, phone number, etc for a 305 contact. 306* Changed: All $duration properties are now public. 307* Added: A few validators for iCalendar documents. 308* Fixed: Issue #50. RecurrenceIterator gives incorrect result when exception 309 events are out of order in the iCalendar file. 310* Fixed: Issue #48. Overridden events in the recurrence iterator that were past 311 the UNTIL date were ignored. 312* Added: getDuration for DURATION values such as TRIGGER. Thanks to 313 @SimonSimCity. 314* Fixed: Issue #52. vCard 2.1 parameters with no name may lose values if there's 315 more than 1. Thanks to @Vedmak. 316 317 3183.0.0 (2013-06-21) 319------------------ 320 321* Fixed: includes.php file was still broken. Our tool to generate it had some 322 bugs. 323 324 3253.0.0-beta4 (2013-06-21) 326------------------------ 327 328* Fixed: includes.php was no longer up to date. 329 330 3313.0.0-beta3 (2013-06-17) 332------------------------ 333 334* Added: OPTION_FORGIVING now also allows slashes in property names. 335* Fixed: DateTimeParser no longer fails on dates with years < 1000 & > 4999 336* Fixed: Issue 36: Workaround for the recurrenceiterator and caldav events with 337 a missing base event. 338* Fixed: jCard encoding of TIME properties. 339* Fixed: jCal encoding of REQUEST-STATUS, GEO and PERIOD values. 340 341 3423.0.0-beta2 (2013-06-10) 343------------------------ 344 345* Fixed: Corrected includes.php file. 346* Fixed: vCard date-time parser supported extended-format dates as well. 347* Changed: Properties have been moved to an ICalendar or VCard directory. 348* Fixed: Couldn't parse vCard 3 extended format dates and times. 349* Fixed: Couldn't export jCard DATE values correctly. 350* Fixed: Recursive loop in ICalendar\DateTime property. 351 352 3533.0.0-beta1 (2013-06-07) 354------------------------ 355 356* Added: jsonSerialize() for creating jCal and jCard documents. 357* Added: helper method to parse vCard dates and times. 358* Added: Specialized classes for FLOAT, LANGUAGE-TAG, TIME, TIMESTAMP, 359 DATE-AND-OR-TIME, CAL-ADDRESS, UNKNOWN and UTC-OFFSET properties. 360* Removed: CommaSeparatedText property. Now included into Text. 361* Fixed: Multiple parameters with the same name are now correctly encoded. 362* Fixed: Parameter values containing a comma are now enclosed in double-quotes. 363* Fixed: Iterating parameter values should now fully work as expected. 364* Fixed: Support for vCard 2.1 nameless parameters. 365* Changed: $valueMap, $componentMap and $propertyMap now all use fully-qualified 366 class names, so they are actually overridable. 367* Fixed: Updating DATE-TIME to DATE values now behaves like expected. 368 369 3703.0.0-alpha4 (2013-05-31) 371------------------------- 372 373* Added: It's now possible to send parser options to the splitter classes. 374* Added: A few tweaks to improve component and property creation. 375 376 3773.0.0-alpha3 (2013-05-13) 378------------------------- 379 380* Changed: propertyMap, valueMap and componentMap are now static properties. 381* Changed: Component::remove() will throw an exception when trying to a node 382 that's not a child of said component. 383* Added: Splitter objects are now faster, line numbers are accurately reported 384 and use less memory. 385* Added: MimeDir parser can now continue parsing with the same stream buffer. 386* Fixed: vobjectvalidate.php is operational again. 387* Fixed: \r is properly stripped in text values. 388* Fixed: QUOTED-PRINTABLE is now correctly encoded as well as encoded, for 389 vCards 2.1. 390* Fixed: Parser assumes vCard 2.1, if no version was supplied. 391 392 3933.0.0-alpha2 (2013-05-22) 394------------------------- 395 396* Fixed: vCard URL properties were referencing a non-existant class. 397 398 3993.0.0-alpha1 (2013-05-21) 400------------------------- 401 402* Fixed: Now correctly dealing with escaping of properties. This solves the 403 problem with double-backslashes where they don't belong. 404* Added: Easy support for properties with more than one value, using setParts 405 and getParts. 406* Added: Support for broken 2.1 vCards produced by microsoft. 407* Added: Automatically decoding quoted-printable values. 408* Added: Automatically decoding base64 values. 409* Added: Decoding RFC6868 parameter values (uses ^ as an escape character). 410* Added: Fancy new MimeDir parser that can also parse streams. 411* Added: Automatically mapping many, many properties to a property-class with 412 specialized API's. 413* Added: remove() method for easily removing properties and sub-components 414 components. 415* Changed: Components, Properties and Parameters can no longer be created with 416 Component::create, Property::create and Parameter::create. They must instead 417 be created through the root component. (A VCalendar or VCard object). 418* Changed: API for DateTime properties has slightly changed. 419* Changed: the ->value property is now protected everywhere. Use getParts() and 420 getValue() instead. 421* BC Break: No support for mac newlines (\r). Never came across these anyway. 422* Added: add() method to the Property class. 423* Added: It's now possible to easy set multi-value properties as arrays. 424* Added: When setting date-time properties you can just pass PHP's DateTime 425 object. 426* Added: New components automatically get a bunch of default properties, such as 427 VERSION and CALSCALE. 428* Added: You can add new sub-components much quicker with the magic setters, and 429 add() method. 430 431 4322.1.7 (2015-01-21) 433------------------ 434 435* Fixed: Issue #94, a workaround for bad escaping of ; and , in compound 436 properties. It's not a full solution, but it's an improvement for those 437 stuck in the 2.1 versions. 438 439 4402.1.6 (2014-12-10) 441------------------ 442 443* Fixed: Minor change to make sure that unittests succeed on every PHP version. 444 445 4462.1.5 (2014-06-03) 447------------------ 448 449* Fixed: #94: Better parameter escaping. 450* Changed: Documentation cleanups. 451 452 4532.1.4 (2014-03-30) 454------------------ 455 456* Fixed: Issue #87: Several compatibility fixes related to timezone handling 457 changes in PHP 5.5.10. 458 459 4602.1.3 (2013-10-02) 461------------------ 462 463* Fixed: Issue #55. \r must be stripped from property values. 464* Fixed: Issue #65. Putting quotes around parameter values that contain a colon. 465 466 4672.1.2 (2013-08-02) 468------------------ 469 470* Fixed: Issue #53. A regression in RecurrenceIterator. 471 472 4732.1.1 (2013-07-27) 474------------------ 475 476* Fixed: Issue #50. RecurrenceIterator gives incorrect result when exception 477 events are out of order in the iCalendar file. 478* Fixed: Issue #48. Overridden events in the recurrence iterator that were past 479 the UNTIL date were ignored. 480 481 4822.1.0 (2013-06-17) 483------------------ 484 485* This version is fully backwards compatible with 2.0.\*. However, it contains a 486 few new API's that mimic the VObject 3 API. This allows it to be used a 487 'bridge' version. Specifically, this new version exists so SabreDAV 1.7 and 488 1.8 can run with both the 2 and 3 versions of this library. 489* Added: Property\DateTime::hasTime(). 490* Added: Property\MultiDateTime::hasTime(). 491* Added: Property::getValue(). 492* Added: Document class. 493* Added: Document::createComponent and Document::createProperty. 494* Added: Parameter::getValue(). 495 496 4972.0.7 (2013-03-05) 498------------------ 499 500* Fixed: Microsoft re-uses their magic numbers for different timezones, 501 specifically id 2 for both Sarajevo and Lisbon). A workaround was added to 502 deal with this. 503 504 5052.0.6 (2013-02-17) 506------------------ 507 508* Fixed: The reader now properly parses parameters without a value. 509 510 5112.0.5 (2012-11-05) 512------------------ 513 514* Fixed: The FreeBusyGenerator is now properly using the factory methods for 515 creation of components and properties. 516 517 5182.0.4 (2012-11-02) 519------------------ 520 521* Added: Known Lotus Notes / Domino timezone id's. 522 523 5242.0.3 (2012-10-29) 525------------------ 526 527* Added: Support for 'GMT+????' format in TZID's. 528* Added: Support for formats like SystemV/EST5EDT in TZID's. 529* Fixed: RecurrenceIterator now repairs recurrence rules where UNTIL < DTSTART. 530* Added: Support for BYHOUR in FREQ=DAILY (@hollodk). 531* Added: Support for BYHOUR and BYDAY in FREQ=WEEKLY. 532 533 5342.0.2 (2012-10-06) 535------------------ 536 537* Added: includes.php file, to load the entire library in one go. 538* Fixed: A problem with determining alarm triggers for TODO's. 539 540 5412.0.1 (2012-09-22) 542------------------ 543 544* Removed: Element class. It wasn't used. 545* Added: Basic validation and repair methods for broken input data. 546* Fixed: RecurrenceIterator could infinitely loop when an INTERVAL of 0 was 547 specified. 548* Added: A cli script that can validate and automatically repair vcards and 549 iCalendar objects. 550* Added: A new 'Compound' property, that can automatically split up parts for 551 properties such as N, ADR, ORG and CATEGORIES. 552* Added: Splitter classes, that can split up large objects (such as exports) 553 into individual objects (thanks @DominikTO and @armin-hackmann). 554* Added: VFREEBUSY component, which allows easily checking wether timeslots are 555 available. 556* Added: The Reader class now has a 'FORGIVING' option, which allows it to parse 557 properties with incorrect characters in the name (at this time, it just allows 558 underscores). 559* Added: Also added the 'IGNORE_INVALID_LINES' option, to completely disregard 560 any invalid lines. 561* Fixed: A bug in Windows timezone-id mappings for times created in Greenlands 562 timezone (sorry Greenlanders! I do care!). 563* Fixed: DTEND was not generated correctly for VFREEBUSY reports. 564* Fixed: Parser is at least 25% faster with real-world data. 565 566 5672.0.0 (2012-08-08) 568------------------ 569 570* VObject is now a separate project from SabreDAV. See the SabreDAV changelog 571 for version information before 2.0. 572* New: VObject library now uses PHP 5.3 namespaces. 573* New: It's possible to specify lists of parameters when constructing 574 properties. 575* New: made it easier to construct the FreeBusyGenerator. 576 577[iTip]: http://tools.ietf.org/html/rfc5546 578