Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
fc7900b
Allow authentication types other than 'basic'
infostreams Feb 26, 2018
d578421
Implement missing date range filter
infostreams Mar 1, 2018
7595a4b
No longer ignore user provided 'resourcename'
infostreams Mar 1, 2018
1b3cb5c
CalendarDeletedResponse accepts 2 arguments, not 3
infostreams Mar 2, 2018
113fbdd
Add omitted namespace
infostreams Mar 2, 2018
92b72c2
Typo in namespace
infostreams Mar 2, 2018
71c1276
Merge pull request #1 from infostreams/patch-1
smarcet Mar 3, 2018
ba406b3
Merge pull request #2 from infostreams/patch-2
smarcet Mar 3, 2018
e2b7398
Merge pull request #3 from infostreams/patch-3
smarcet Mar 3, 2018
b62978f
Merge pull request #4 from infostreams/patch-4
smarcet Mar 3, 2018
0ea7809
Merge pull request #5 from infostreams/patch-5
smarcet Mar 3, 2018
5977824
[smarcet]
smarcet Mar 3, 2018
60c6a59
[smarcet]
smarcet May 3, 2018
aba1d99
Strip namespaces from XML before JSON conversion
infostreams Mar 2, 2018
cba31a4
User principals can be a multiresponse
infostreams Mar 2, 2018
f4951ea
Made tests succeed on both iCloud and SabreDAV
infostreams Mar 2, 2018
769f4e5
[smarcet]
smarcet May 4, 2018
88f47e1
Merge branch 'infostreams-patch-6'
smarcet May 4, 2018
cd63fc0
[smarcet]
smarcet Jun 1, 2018
d49988b
[smarcet]
smarcet Jun 1, 2018
6c097eb
Allow user to provide additional request headers
infostreams Jun 13, 2018
51eebf2
Add missing ‘getETag’ function
infostreams Jun 15, 2018
3350b20
[smarcet]
smarcet Oct 9, 2018
7aac9f4
[smarcet]
smarcet Oct 31, 2018
0b8c77e
[smarcet]
smarcet Mar 25, 2019
d4e88f7
[smarcet]
smarcet Jul 8, 2019
e08f28b
ETagEntityResponse status propstat fixes
gregjoy1 Feb 11, 2020
3e68132
Consolidated HTTP response status checking.
gregjoy1 Feb 10, 2020
93b20f7
Scrutinizer Auto-Fixes
scrutinizer-auto-fixer Feb 13, 2020
c3f711c
feat: add calendar color prop
anvanvan Aug 26, 2024
bbd7e65
feat(caldav): add component-set parser to detect VTODO calendars
anvanvan Nov 8, 2025
a3519ab
feat(caldav): add privilege-set parser to detect read-only calendars
anvanvan Nov 8, 2025
802cc19
test: add sanitized iCloud CalDAV fixtures for workaround migration
anvanvan Nov 13, 2025
195d058
feat(caldav): add canEdit() convenience method to GetCalendarResponse
anvanvan Nov 13, 2025
3877621
feat(caldav): add getCredentials() method to CalDavClient
anvanvan Nov 13, 2025
1b858b1
feat(caldav): add parseVAlarms() with RFC 5545 support and X-APPLE-DE…
anvanvan Nov 13, 2025
a4f630b
feat(caldav): add expandWithRRulePreservation() to preserve RRULE on …
anvanvan Nov 13, 2025
cea5099
feat(caldav): add createEventFromICS() and updateEventFromICS() methods
anvanvan Nov 13, 2025
af0c299
test(caldav): verify response methods exist
anvanvan Nov 13, 2025
351864a
docs: add changelog for workaround migration
anvanvan Nov 13, 2025
3e30d64
feat: preserve X-MASTER-DTSTART when expanding recurring events
anvanvan Nov 25, 2025
257680a
feat: add HTTP MOVE support for moving events between calendars
anvanvan Nov 26, 2025
c9221f9
fix: restore corrupted test fixture file
anvanvan Nov 26, 2025
3c0be37
fix(apple-caldav): guard foreach VEVENT with ?? [] to silence null wa…
anvanvan Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Changelog

## Unreleased (2025-01-13)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Keep the unreleased bucket undated.

Unreleased (2025-01-13) reads like a shipped release. Leave it as plain Unreleased until you tag/version the release, then replace it with the actual version heading.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` at line 3, Change the changelog heading "## Unreleased
(2025-01-13)" to remove the date and leave it as "## Unreleased" so the
unreleased section remains undated until you tag/version a release; update the
heading string in CHANGELOG.md (look for the exact heading "## Unreleased
(2025-01-13)") and replace it with "## Unreleased".


### Added
- `canEdit()` convenience method to GetCalendarResponse for checking calendar write permissions (commit f1c2c81)
- Returns true for writable calendars or when privilege-set not provided by server
- Eliminates need for null-checking `isWritable()` in application code
- `getCredentials()` method to CalDavClient for accessing stored credentials (commit 126d2fb)
- Returns array with 'user' and 'password' keys
- Removes need for reflection to access private properties
- `parseVAlarms()` static method to GetCalendarResponse with full RFC 5545 support (commit fa44101)
- Supports duration-based triggers: "-PT15M", "PT0S", "-P1D", "-PT1H30M"
- Supports absolute DATE-TIME triggers: "19760401T005545Z"
- Handles mixed time units (weeks, days, hours, minutes, seconds)
- Preserves X-APPLE-DEFAULT-ALARM property for default alarm detection
- `expandWithRRulePreservation()` static method to GetCalendarResponse (commit 8022062)
- Preserves RRULE on expanded recurring event instances
- Attaches RRULE as X-MASTER-RRULE property for frontend display
- Eliminates need to manually capture/restore RRULE during expansion
- `createEventFromICS()` and `updateEventFromICS()` methods to CalDavClient (commit d66c0c7)
- Support for raw iCalendar content in PUT requests
- Enables proper all-day event creation and custom property preservation
- Returns EventCreatedResponse/EventUpdatedResponse with ETag handling
- Comprehensive test coverage (commit 711ec62)
- Verified response methods (isSuccessFull, getCode) exist
- Tests for all new functionality

### Improved
- `getCurrentUserPrivileges()` and `isWritable()` methods now in GetCalendarResponse
- All-day event creation/update now supported via library methods
- VALARM parsing supports all RFC 5545 duration formats and absolute timestamps

### Migration Notes
For applications migrating from workarounds to native fork functionality:

1. **Privilege Checking**: Replace null-checking logic with simple `$response->canEdit()` call
2. **Credentials Access**: Replace reflection code with `$client->getCredentials()`
3. **VALARM Parsing**: Replace manual parsing with `GetCalendarResponse::parseVAlarms($vevent)`
4. **RRULE Preservation**: Replace manual RRULE capture/restore with `GetCalendarResponse::expandWithRRulePreservation($vcalendar, $start, $end)`
5. **Event Creation**: Replace direct HTTP PUT/Guzzle calls with `$client->createEventFromICS()` and `$client->updateEventFromICS()`

All changes are backward compatible with existing CalDavClient API usage.
5 changes: 3 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@
"guzzlehttp/guzzle": "^6.3",
"sabre/xml": "1.5.0",
"sabre/uri": "1.2.0",
"eluceo/ical": "^0.11.3"
"eluceo/ical": "^0.15.0"
},
"require-dev": {
"phpunit/phpunit": "^5.7"
"phpunit/phpunit": "^9.5",
"sabre/vobject": "^4.2"
Comment on lines +20 to +24
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

What are the minimum supported PHP versions for eluceo/ical ^0.15, phpunit/phpunit ^9.5, and sabre/vobject ^4.2, and what project-level Composer "require.php" constraint would satisfy all three?

💡 Result:

eluceo/ical ^0.15: PHP 7.0 phpunit/phpunit ^9.5: PHP 7.3 sabre/vobject ^4.2: PHP 7.1 Project-level "require": {"php": "^7.3"} satisfies all three, as it meets or exceeds each minimum (7.3 >= 7.3, 7.3 >= 7.1, 7.3 >= 7.0). A looser constraint like "^7.0 || ^8.0" would also work but ^7.3 is the tightest common minimum.

Citations:


Add an explicit PHP constraint to the require section before upgrading these dependencies.

The packages being updated have specific PHP requirements: eluceo/ical ^0.15 requires PHP ≥7.0, phpunit/phpunit ^9.5 requires PHP ≥7.3, and sabre/vobject ^4.2 requires PHP ≥7.1. Without an explicit "php" constraint in composer.json, Composer will not enforce a minimum PHP version during installation, risking failures in environments with older PHP runtimes.

Add "php": "^7.3" to the require section to satisfy all three packages.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@composer.json` around lines 20 - 24, Add an explicit PHP platform constraint
to composer.json's "require" section: add "php": "^7.3" so Composer enforces a
minimum PHP version compatible with eluceo/ical ^0.15, phpunit/phpunit ^9.5, and
sabre/vobject ^4.2; update the "require" object (near the existing package
entries) to include the php constraint and then run composer update/validate to
ensure the new constraint is applied.

},
"autoload": {
"psr-4": {
Expand Down
Loading