View Source

<ac:macro ac:name="unmigrated-inline-wiki-markup"><ac:plain-text-body><![CDATA[{zone-template-instance:ZFPROP:Proposal Zone Template}

{zone-data:component-name}
Zend_Calendar
{zone-data}

{zone-data:proposer-list}
[Ramses Paiva|http://framework.zend.com/wiki/display/~rpaiva] - Sourcebits Technologies
{zone-data}

{zone-data:liaison}
TBD
{zone-data}

{zone-data:revision}
1.0 - March 23th, 2009: Initial Draft.
{zone-data}

{zone-data:overview}
Zend_Calendar is a component for handling dates and events in a given interval of time. It can easily fetch events from a database, as well as it startup settings. It provides a simple and straightforward interface for handling the periods in this interval, rendering them in the views and provide links for navigation.

On this Calendar component, my approach is on the usage as an Object Date where I can place and manage events ocurring on that particular interval of time.

As stated on Wikipedia:
"Calendars can include computerized systems, which can be set to remind the user of upcoming events and appointments".

And the definition on Wiktionary:
"Any system by which time is divided into days, weeks, months, and years; A means to determine the date consisting of a document containing dates and other temporal information; A list of planned events; To set a date for a proceeding in court, usually done by a judge at a calendar call"

Once one of the purpose is handling events, it will also support iCalendar events for generating vCards with scheduled events.
{zone-data}

{zone-data:references}
* [Zend_Calendar - Thomas Weidner|http://framework.zend.com/wiki/display/ZFPROP/Zend_Calendar+-+Thomas+Weidner] (Archived).
* [Wikipedia - Calendar|http://en.wikipedia.org/wiki/Calendar].
* [RFC 2445 - iCalendar Core Object Specification|http://tools.ietf.org/html/rfc2445]
* [RFC 2739 - Calendar Attributes for vCard and LDAP|http://tools.ietf.org/html/rfc2739]
{zone-data}

{zone-data:requirements}
* This component *will* provide a collection of period objects, which will represent a particular date.
* Each period object that represents a DAY *will* provide a collection of event objects.
* This event objects *will* be compliant with the RFC 2445 and RFC 2739 - iCalendar Core Object Specification and Calendar Attributes for vCard and LDAP - for events schedulling and external synchronization.
* This component *will* support magic configuration using Zend_Registry
* This component *will* support Zend_Config
* This component *will* be locale aware
* This component *will* provide a common interface for extensibility for supporting different calendar types, such as Gregorian (default and included), Chinese, Arabian, etc.
* This component *will* provide a simple interface for being populated with events from the database.
{zone-data}

{zone-data:dependencies}
* Zend_Exception.
* [Zend_Config|http://framework.zend.com/manual/en/zend.config.html].
* [Zend_Date|http://framework.zend.com/manual/en/zend.date.html].
* [Zend_Loader|http://framework.zend.com/manual/en/zend.loader.html].
* [Zend_Locale|http://framework.zend.com/manual/en/zend.locale.html].
* [Zend_Registry|http://framework.zend.com/manual/en/zend.registry.html].

{info:title=Notes}
Currently, the performance of Zend_Calendar is very poor due to the Zend_Date component performance and perhaps I'll decouple it from that or hope Thomas can work on an improvement ;). Testing with a simpler Date object, it works gracefully.
{info}
{zone-data}

{zone-data:operation}
The component is a singleton object, which will handle a set of periods and events belonging to this periods.
{zone-data}

{zone-data:milestones}
* Milestone 1: [IN PROGRESS] Acceptance of this Proposal.
* Milestone 1: [IN PROGRESS] Design Notes.
* Milestone 2: Planning Documentation.
* Milestone 3: Implementation code.
* Milestone 4: Unit tests.
* Milestone 6: Improvements and prototype commited to SVN supporting the mentioned use cases.
* Milestone 7: Reference Guide Documentation.
* Milestone 8: Final release.
{zone-data}

{zone-data:class-list}
* Zend_Date_Calendar (an intermediate object, which extends Zend_Date and can have further functionalities in future - like calendar date conversion from one calendar type to another).
* Zend_Calendar (Singleton class).
* Zend_Calendar_Exception
* Zend_Calendar_Adapter.
* Zend_Calendar_Adapter_Exception.
* Zend_Calendar_Adapter_Gregorian (different adapters can be created, but as of now the Gregorian will be the only one available).
* Zend_Calendar_Adapter_Interface.
* Zend_Calendar_Event
* Zend_Calendar_Event_Exception
* Zend_Calendar_EventsList
* Zend_Calendar_Period (extends Zend_Date_Calendar)
* Zend_Calendar_Period_Day
* Zend_Calendar_Period_Exception
* Zend_Calendar_Period_Interface
* Zend_Calendar_Period_Month
* Zend_Calendar_Period_Week
* Zend_Calendar_Period_Year
* Zend_Calendar_Shift
{zone-data}

{zone-data:use-cases}
{composition-setup}
{deck:id=UseCases1}
{card:label="UC-01"}
Description.
{code}
// @todo Implementation
{code}
{card}

{card:label="UC-02"}
Description.
{code}
// @todo Implementation
{code}
{card}

{card:label="UC-03"}
Description.
{code}
// @todo Implementation
{code}
{card}

{card:label="UC-04"}
Description.
{code}
// @todo Implementation
{code}
{card}

{card:label="UC-05"}
Description.
{code}
// @todo Implementation
{code}
{card}

{card:label="UC-06"}
Description.
{code}
// @todo Implementation
{code}
{card}

{card:label="UC-07"}
Description.
{code}
// @todo Implementation
{code}
{card}

{card:label="UC-08"}
Description.
{code}
// @todo Implementation
{code}
{card}

{card:label="UC-09"}
Description.
{code}
// @todo Implementation
{code}
{card}

{card:label="UC-10"}
Description.
{code}
// @todo Implementation
{code}
{card}
{deck}
{zone-data}

{zone-data:skeletons}
{deck:id=Skeletons1}
{card:label=Zend_Calendar}
{code}
// @todo Implementation
{code}
{card}

{card:label=Zend_Calendar_Date}
{code}
// @todo Implementation
{code}
{card}

{card:label=Zend_Calendar_Adapter}
{code}
// @todo Implementation
{code}
{card}

{card:label=Zend_Calendar_Adapter_Gregorian}
{code}
// @todo Implementation
{code}
{card}

{card:label=Zend_Calendar_Adapter_Interface}
{code}
// @todo Implementation
{code}
{card}
{deck}

{deck:id=Skeletons2}
{card:label=Zend_Calendar_Event}
{code}
// @todo Implementation
{code}
{card}

{card:label=Zend_Calendar_EventsList}
{code}
// @todo Implementation
{code}
{card}

{card:label=Zend_Calendar_Period}
{code}
// @todo Implementation
{code}
{card}

{card:label=Zend_Calendar_Period_Interface}
{code}
// @todo Implementation
{code}
{card}

{card:label=Zend_Calendar_Period_Day}
{code}
// @todo Implementation
{code}
{card}
{deck}

{deck:id=Skeletons3}
{card:label=Zend_Calendar_Period_Week}
{code}
// @todo Implementation
{code}
{card}

{card:label=Zend_Calendar_Period_Month}
{code}
// @todo Implementation
{code}
{card}

{card:label=Zend_Calendar_Period_Year}
{code}
// @todo Implementation
{code}
{card}

{card:label=Zend_Calendar_Shift}
{code}
// @todo Implementation
{code}
{card}
{deck}
{zone-data}

{zone-template-instance}]]></ac:plain-text-body></ac:macro>