Zend Framework: Zend_Ical Component Proposal
| Proposed Component Name | Zend_Ical |
|---|---|
| Developer Notes | http://framework.zend.com/wiki/display/ZFDEV/Zend_Ical |
| Proposers |
|
| Revision | 1.1 - 22 September 2007: Initial proposal 1.2 - 03 March 2008: Proposal rewrite 1.3 - 19 May 2008: Proposal update (wiki revision: 27) |
Table of Contents
1. Overview
Zend_Ical is a component to manage events, alarms and todos in calendar objects.
2. References
3. Component Requirements, Constraints, and Acceptance Criteria
- This component will handle ICS files from different data sources (Filesystem, FTP and HTTP (webDAV required for writing)).
- This component will support the entire ICS 2.0 specification
- This component will be able to create/write new ICS data
- This component will allow searching and iteration through calendar data
- This component must validate any input before writing them to the source
4. Dependencies on Other Framework Components
- Zend_Exception
- Zend_Date
- Zend_Uri
5. Theory of Operation
Zend_Ical will take an URI (String or Zend_Uri) as argument for the constructor method. Zend_Ical will then parse the ICS file through a LALR parsing mode. All time values within the ICS data will be converted to the local time zone.
After the parsing you can call different methods to gather data from the calendar or add additional data to it. You can also iterate through the calendar object to get all data available.
At the time of writing, Zend_Ical will only support the iCalender 2.0 format.
6. Milestones / Tasks
- Milestone 1: [done] Proposal finished
- Milestone 2: [done] Development of prototype started and checked into http://zend.svn.dasprids.de/
- Milestone 3: Proposal approved
- Milestone 4: Working prototype checked into the incubator.
- Milestone 5: Unit tests exist, work, and are checked into SVN.
- Milestone 6: Documentation exists.
7. Class Index
- Zend_Ical
- Zend_Ical_Exception
- Zend_Ical_Parser
- Zend_Ical_Source_Exception
- Zend_Ical_Source_Abstract
- Zend_Ical_Source_Filesystem
- Zend_Ical_Source_Ftp
- Zend_Ical_Source_Http
8. Use Cases
| UC-01 |
|---|
Open a ICS calendar file
| UC-02 |
|---|
Fetching specific events
| UC-03 |
|---|
Iterating through all events
9. Class Skeletons
Will this allow generation of repeat events based on RRULE part of the iCal specification.
for eg a sample RRULE like
DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH
should return this
(1997 9:00 AM EDT)September 2,4,9,11,16,18,23,25,30;October 2
This is going to be very useful.
Are there any plans to add also iCal creation functionality or will this component only parse existing ones?
| Zend Comments This proposal has been approved for laboratory development with the following suggestions:
|
Wouldn't this be more properly called iCalendar and not iCal? I know iCal is also used for the format, but in the RFC it's always called iCalendar. Also, iCal is the name of Apple's calendar program.
ZF Home Page
Code Browser
Wiki Dashboard
As discussed somewhere else, here are my hints for the interface. That are ideas, which may be useful, but dont has to be, as some might be very special
1. default methods like add, set, get, ...
2. getByDateDuration($startDate,$endDate), .... Maybe with the possibility only to get only all items, which are fully in, or their start-/endtimes are in
3. getByDate($date) at the other hand can maybe return the items, which duration overspan the specified time
4. hasByDate($date)/hasByDateDuration($startDate,$endDate), if there are items. I think very useful to specify, if there is free time to plan with
5. *byType. Maybe is more useful not to provide a method for this, than provides a option to use with the other methods to filter by Type.
6. getNext, getLast (maybe with parameters). First one seems to by very useful for something like "next meeting at ...", getCurrent as a alias for "getByDate ('now')" (something like that)
7. load, store to file. maybe a kind of file locking possible? (Ive no idea)
8. Merge?
9. Export,Import?!? Seems to be quite special, properly not used very much