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