Download the PHP package horde/itip without Composer
On this page you can find all versions of the php package horde/itip. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Package itip
Short Description iTip invitation response library
License LGPL-2.1-only
Homepage https://www.horde.org/libraries/Horde_Itip
Informations about the package itip
Horde iTIP
horde/itip is a pure decision engine for iTIP (RFC 5546) scheduling. It processes incoming iCalendar messages with METHOD (REQUEST, REPLY, CANCEL) and returns structured results describing what should change, without performing any I/O.
Installation
Requires PHP 8.1+.
Architecture
Design Principles
- Pure logic, no side effects — the engine returns decisions, not mutations
- App applies results — the calling application decides what to persist and when to dispatch events
- Transport-agnostic — email (iMIP), CalDAV, ActiveSync are listener concerns, not engine concerns
- PSR-14 ready — domain events are dispatched by the app layer via
horde/eventdispatcher
Layers
| Layer | Namespace | Purpose |
|---|---|---|
| Engine | Horde\Itip |
ItipProcessor, ItipMessage, ItipResult |
| Interfaces | Horde\Itip |
CalendarState, SchedulingPolicy |
| Changes | Horde\Itip\Change |
Proposed calendar mutations (CreateEvent, UpdateEvent, CancelEvent, etc.) |
| Actions | Horde\Itip\Action |
Required outbound actions (SendReply, SendRequest, SendCancel) |
| Conflicts | Horde\Itip\Conflict |
Problems detected (OutdatedSequence, UnknownAttendee, MissingRequiredProperty) |
| Events | Horde\Itip\Event |
PSR-14 domain events for listener dispatch |
| Generators | Horde\Itip\Generator |
Build outgoing METHOD=REQUEST/REPLY/CANCEL VCalendar messages |
Processing Flow
Boundaries
This library is responsible for:
- Deciding what calendar mutations an iTIP message implies
- Validating SEQUENCE ordering and required properties
- Consulting application-provided policy for accept/reject decisions
- Generating outbound iTIP VCalendar messages (REQUEST, REPLY, CANCEL)
- Defining PSR-14 event types for scheduling notifications
This library is not responsible for:
- Parsing iCalendar byte streams. See
horde/icalendar - Sending email (iMIP/MIME construction), relegated to the upcoming
horde/imippackage - Persisting data. This is handled by application layers (Kronolith, Nag)
- CalDAV schedule-outbox/inbox. See
horde/dav - Event dispatch itself. The app layer calls
$dispatcher->dispatch()
Collaboration Partners
| Package | Relationship |
|---|---|
horde/icalendar |
Provides VCalendar, Vevent, Attendee, Organizer, and open enums consumed by the engine |
horde/eventdispatcher |
PSR-14 dispatcher used by apps to notify listeners after applying results |
horde/imip (planned) |
Will listen for PSR-14 events and handle MIME email construction/delivery |
horde/dav |
CalDAV layer that may feed iTIP messages into the engine and act on results |
| Kronolith / Nag | Application layers that implement CalendarState and SchedulingPolicy |
Upcoming: horde/imip
A separate horde/imip package will handle the iMIP (RFC 6047) transport layer:
- Listens for
InvitationSending,ReplySending,CancellationSendingPSR-14 events - Constructs MIME messages with
text/calendarparts - Delivers via configured mail transport
- Parses incoming iMIP messages from mailbox into
ItipMessagefor processing
This separation keeps horde/itip transport-free and testable without email infrastructure.
Upgrading
See doc/UPGRADING.md for migration guidance from Horde_Itip (PSR-0) to the modern Horde\Itip (PSR-4) engine.
Usage
Processing an Incoming Request
Generating an Outbound Reply
Implementing CalendarState
Legacy horde/itip lib/ content
The package ships with its legacy, largely horde 5 compatible API to tie into the horde/icalendar legacy lib/ API. This older API mixes iTip and iMip concerns.
License
LGPL-2.1 — see LICENSE.
All versions of itip with dependencies
horde/icalendar Version ^3 || dev-FRAMEWORK_6_0
horde/mime Version ^3 || dev-FRAMEWORK_6_0
horde/translation Version ^3 || dev-FRAMEWORK_6_0