PATH:
home
/
letacommog
/
crmleta
/
modules
/
Mobile
/
third-party
/
qCal
/
qCal
/
Property
<?php /** * Recurrence Rule Property * @package qCal * @copyright Luke Visinoni (luke.visinoni@gmail.com) * @author Luke Visinoni (luke.visinoni@gmail.com) * @license GNU Lesser General Public License * @todo Make sure allowedCompoents is correct. The RFC isn't dead clear * @todo There are a lot of rules for this guy. Make sure you take them all * into consideration and conform to the shit below. * @todo This property doesn't require a value. Make sure it is possible to * render the property without the colon that comes between name, params and value * * RFC 2445 Definition * * Property Name: RRULE * * Purpose: This property defines a rule or repeating pattern for * recurring events, to-dos, or time zone definitions. * * Value Type: RECUR * * Property Parameters: Non-standard property parameters can be * specified on this property. * * Conformance: This property can be specified one or more times in * recurring "VEVENT", "VTODO" and "VJOURNAL" calendar components. It * can also be specified once in each STANDARD or DAYLIGHT sub-component * of the "VTIMEZONE" calendar component. * * Description: The recurrence rule, if specified, is used in computing * the recurrence set. The recurrence set is the complete set of * recurrence instances for a calendar component. The recurrence set is * generated by considering the initial "DTSTART" property along with * the "RRULE", "RDATE", "EXDATE" and "EXRULE" properties contained * within the iCalendar object. The "DTSTART" property defines the first * instance in the recurrence set. Multiple instances of the "RRULE" and * "EXRULE" properties can also be specified to define more * sophisticated recurrence sets. The final recurrence set is generated * by gathering all of the start date/times generated by any of the * specified "RRULE" and "RDATE" properties, and excluding any start * date/times which fall within the union of start date/times generated * by any specified "EXRULE" and "EXDATE" properties. This implies that * start date/times within exclusion related properties (i.e., "EXDATE" * and "EXRULE") take precedence over those specified by inclusion * properties (i.e., "RDATE" and "RRULE"). Where duplicate instances are * generated by the "RRULE" and "RDATE" properties, only one recurrence * is considered. Duplicate instances are ignored. * * * * The "DTSTART" and "DTEND" property pair or "DTSTART" and "DURATION" * property pair, specified within the iCalendar object defines the * first instance of the recurrence. When used with a recurrence rule, * the "DTSTART" and "DTEND" properties MUST be specified in local time * and the appropriate set of "VTIMEZONE" calendar components MUST be * included. For detail on the usage of the "VTIMEZONE" calendar * component, see the "VTIMEZONE" calendar component definition. * * Any duration associated with the iCalendar object applies to all * members of the generated recurrence set. Any modified duration for * specific recurrences MUST be explicitly specified using the "RDATE" * property. * * Format Definition: This property is defined by the following * notation: * * rrule = "RRULE" rrulparam ":" recur CRLF * * rrulparam = *(";" xparam) * * Example: All examples assume the Eastern United States time zone. * * Daily for 10 occurrences: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=DAILY;COUNT=10 * * ==> (1997 9:00 AM EDT)September 2-11 * * Daily until December 24, 1997: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=DAILY;UNTIL=19971224T000000Z * * ==> (1997 9:00 AM EDT)September 2-30;October 1-25 * (1997 9:00 AM EST)October 26-31;November 1-30;December 1-23 * * Every other day - forever: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=DAILY;INTERVAL=2 * ==> (1997 9:00 AM EDT)September2,4,6,8...24,26,28,30; * October 2,4,6...20,22,24 * (1997 9:00 AM EST)October 26,28,30;November 1,3,5,7...25,27,29; * Dec 1,3,... * * Every 10 days, 5 occurrences: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5 * * ==> (1997 9:00 AM EDT)September 2,12,22;October 2,12 * * Everyday in January, for 3 years: * * DTSTART;TZID=US-Eastern:19980101T090000 * RRULE:FREQ=YEARLY;UNTIL=20000131T090000Z; * BYMONTH=1;BYDAY=SU,MO,TU,WE,TH,FR,SA * or * RRULE:FREQ=DAILY;UNTIL=20000131T090000Z;BYMONTH=1 * * ==> (1998 9:00 AM EDT)January 1-31 * (1999 9:00 AM EDT)January 1-31 * (2000 9:00 AM EDT)January 1-31 * * Weekly for 10 occurrences * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=WEEKLY;COUNT=10 * * ==> (1997 9:00 AM EDT)September 2,9,16,23,30;October 7,14,21 * (1997 9:00 AM EST)October 28;November 4 * * Weekly until December 24, 1997 * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=WEEKLY;UNTIL=19971224T000000Z * * ==> (1997 9:00 AM EDT)September 2,9,16,23,30;October 7,14,21 * (1997 9:00 AM EST)October 28;November 4,11,18,25; * December 2,9,16,23 * Every other week - forever: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=WEEKLY;INTERVAL=2;WKST=SU * * ==> (1997 9:00 AM EDT)September 2,16,30;October 14 * (1997 9:00 AM EST)October 28;November 11,25;December 9,23 * (1998 9:00 AM EST)January 6,20;February * ... * * Weekly on Tuesday and Thursday for 5 weeks: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=WEEKLY;UNTIL=19971007T000000Z;WKST=SU;BYDAY=TU,TH * or * RRULE:FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH * * ==> (1997 9:00 AM EDT)September 2,4,9,11,16,18,23,25,30;October 2 * * Every other week on Monday, Wednesday and Friday until December 24, * 1997, but starting on Tuesday, September 2, 1997: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU; * BYDAY=MO,WE,FR * ==> (1997 9:00 AM EDT)September 2,3,5,15,17,19,29;October * 1,3,13,15,17 * (1997 9:00 AM EST)October 27,29,31;November 10,12,14,24,26,28; * December 8,10,12,22 * * Every other week on Tuesday and Thursday, for 8 occurrences: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=8;WKST=SU;BYDAY=TU,TH * * ==> (1997 9:00 AM EDT)September 2,4,16,18,30;October 2,14,16 * * Monthly on the 1st Friday for ten occurrences: * * DTSTART;TZID=US-Eastern:19970905T090000 * RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR * * ==> (1997 9:00 AM EDT)September 5;October 3 * (1997 9:00 AM EST)November 7;Dec 5 * (1998 9:00 AM EST)January 2;February 6;March 6;April 3 * (1998 9:00 AM EDT)May 1;June 5 * * Monthly on the 1st Friday until December 24, 1997: * * DTSTART;TZID=US-Eastern:19970905T090000 * RRULE:FREQ=MONTHLY;UNTIL=19971224T000000Z;BYDAY=1FR * * ==> (1997 9:00 AM EDT)September 5;October 3 * (1997 9:00 AM EST)November 7;December 5 * * Every other month on the 1st and last Sunday of the month for 10 * occurrences: * * DTSTART;TZID=US-Eastern:19970907T090000 * RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=1SU,-1SU * * ==> (1997 9:00 AM EDT)September 7,28 * (1997 9:00 AM EST)November 2,30 * (1998 9:00 AM EST)January 4,25;March 1,29 * (1998 9:00 AM EDT)May 3,31 * * Monthly on the second to last Monday of the month for 6 months: * * DTSTART;TZID=US-Eastern:19970922T090000 * RRULE:FREQ=MONTHLY;COUNT=6;BYDAY=-2MO * * ==> (1997 9:00 AM EDT)September 22;October 20 * (1997 9:00 AM EST)November 17;December 22 * (1998 9:00 AM EST)January 19;February 16 * * Monthly on the third to the last day of the month, forever: * * DTSTART;TZID=US-Eastern:19970928T090000 * RRULE:FREQ=MONTHLY;BYMONTHDAY=-3 * * ==> (1997 9:00 AM EDT)September 28 * (1997 9:00 AM EST)October 29;November 28;December 29 * (1998 9:00 AM EST)January 29;February 26 * ... * * Monthly on the 2nd and 15th of the month for 10 occurrences: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=2,15 * * ==> (1997 9:00 AM EDT)September 2,15;October 2,15 * (1997 9:00 AM EST)November 2,15;December 2,15 * (1998 9:00 AM EST)January 2,15 * * Monthly on the first and last day of the month for 10 occurrences: * * DTSTART;TZID=US-Eastern:19970930T090000 * RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=1,-1 * * ==> (1997 9:00 AM EDT)September 30;October 1 * (1997 9:00 AM EST)October 31;November 1,30;December 1,31 * (1998 9:00 AM EST)January 1,31;February 1 * * Every 18 months on the 10th thru 15th of the month for 10 * occurrences: * * DTSTART;TZID=US-Eastern:19970910T090000 * RRULE:FREQ=MONTHLY;INTERVAL=18;COUNT=10;BYMONTHDAY=10,11,12,13,14, * 15 * * ==> (1997 9:00 AM EDT)September 10,11,12,13,14,15 * (1999 9:00 AM EST)March 10,11,12,13 * * Every Tuesday, every other month: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=MONTHLY;INTERVAL=2;BYDAY=TU * * ==> (1997 9:00 AM EDT)September 2,9,16,23,30 * (1997 9:00 AM EST)November 4,11,18,25 * (1998 9:00 AM EST)January 6,13,20,27;March 3,10,17,24,31 * ... * * Yearly in June and July for 10 occurrences: * * DTSTART;TZID=US-Eastern:19970610T090000 * RRULE:FREQ=YEARLY;COUNT=10;BYMONTH=6,7 * ==> (1997 9:00 AM EDT)June 10;July 10 * (1998 9:00 AM EDT)June 10;July 10 * (1999 9:00 AM EDT)June 10;July 10 * (2000 9:00 AM EDT)June 10;July 10 * (2001 9:00 AM EDT)June 10;July 10 * Note: Since none of the BYDAY, BYMONTHDAY or BYYEARDAY components * are specified, the day is gotten from DTSTART * * Every other year on January, February, and March for 10 occurrences: * * DTSTART;TZID=US-Eastern:19970310T090000 * RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=10;BYMONTH=1,2,3 * * ==> (1997 9:00 AM EST)March 10 * (1999 9:00 AM EST)January 10;February 10;March 10 * (2001 9:00 AM EST)January 10;February 10;March 10 * (2003 9:00 AM EST)January 10;February 10;March 10 * * Every 3rd year on the 1st, 100th and 200th day for 10 occurrences: * * DTSTART;TZID=US-Eastern:19970101T090000 * RRULE:FREQ=YEARLY;INTERVAL=3;COUNT=10;BYYEARDAY=1,100,200 * * ==> (1997 9:00 AM EST)January 1 * (1997 9:00 AM EDT)April 10;July 19 * (2000 9:00 AM EST)January 1 * (2000 9:00 AM EDT)April 9;July 18 * (2003 9:00 AM EST)January 1 * (2003 9:00 AM EDT)April 10;July 19 * (2006 9:00 AM EST)January 1 * * Every 20th Monday of the year, forever: * DTSTART;TZID=US-Eastern:19970519T090000 * RRULE:FREQ=YEARLY;BYDAY=20MO * * ==> (1997 9:00 AM EDT)May 19 * (1998 9:00 AM EDT)May 18 * (1999 9:00 AM EDT)May 17 * ... * * Monday of week number 20 (where the default start of the week is * Monday), forever: * * DTSTART;TZID=US-Eastern:19970512T090000 * RRULE:FREQ=YEARLY;BYWEEKNO=20;BYDAY=MO * * ==> (1997 9:00 AM EDT)May 12 * (1998 9:00 AM EDT)May 11 * (1999 9:00 AM EDT)May 17 * ... * * Every Thursday in March, forever: * * DTSTART;TZID=US-Eastern:19970313T090000 * RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=TH * * ==> (1997 9:00 AM EST)March 13,20,27 * (1998 9:00 AM EST)March 5,12,19,26 * (1999 9:00 AM EST)March 4,11,18,25 * ... * * Every Thursday, but only during June, July, and August, forever: * * DTSTART;TZID=US-Eastern:19970605T090000 * RRULE:FREQ=YEARLY;BYDAY=TH;BYMONTH=6,7,8 * * ==> (1997 9:00 AM EDT)June 5,12,19,26;July 3,10,17,24,31; * August 7,14,21,28 * (1998 9:00 AM EDT)June 4,11,18,25;July 2,9,16,23,30; * August 6,13,20,27 * (1999 9:00 AM EDT)June 3,10,17,24;July 1,8,15,22,29; * August 5,12,19,26 * ... * * Every Friday the 13th, forever: * * DTSTART;TZID=US-Eastern:19970902T090000 * EXDATE;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13 * * ==> (1998 9:00 AM EST)February 13;March 13;November 13 * (1999 9:00 AM EDT)August 13 * (2000 9:00 AM EDT)October 13 * ... * * The first Saturday that follows the first Sunday of the month, * forever: * * DTSTART;TZID=US-Eastern:19970913T090000 * RRULE:FREQ=MONTHLY;BYDAY=SA;BYMONTHDAY=7,8,9,10,11,12,13 * * ==> (1997 9:00 AM EDT)September 13;October 11 * (1997 9:00 AM EST)November 8;December 13 * (1998 9:00 AM EST)January 10;February 7;March 7 * (1998 9:00 AM EDT)April 11;May 9;June 13... * ... * * Every four years, the first Tuesday after a Monday in November, * forever (U.S. Presidential Election day): * * DTSTART;TZID=US-Eastern:19961105T090000 * RRULE:FREQ=YEARLY;INTERVAL=4;BYMONTH=11;BYDAY=TU;BYMONTHDAY=2,3,4, * 5,6,7,8 * * ==> (1996 9:00 AM EST)November 5 * (2000 9:00 AM EST)November 7 * (2004 9:00 AM EST)November 2 * ... * * The 3rd instance into the month of one of Tuesday, Wednesday or * Thursday, for the next 3 months: * * DTSTART;TZID=US-Eastern:19970904T090000 * RRULE:FREQ=MONTHLY;COUNT=3;BYDAY=TU,WE,TH;BYSETPOS=3 * * ==> (1997 9:00 AM EDT)September 4;October 7 * (1997 9:00 AM EST)November 6 * * The 2nd to last weekday of the month: * * DTSTART;TZID=US-Eastern:19970929T090000 * RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-2 * * ==> (1997 9:00 AM EDT)September 29 * (1997 9:00 AM EST)October 30;November 27;December 30 * (1998 9:00 AM EST)January 29;February 26;March 30 * ... * * Every 3 hours from 9:00 AM to 5:00 PM on a specific day: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=HOURLY;INTERVAL=3;UNTIL=19970902T170000Z * * ==> (September 2, 1997 EDT)09:00,12:00,15:00 * * Every 15 minutes for 6 occurrences: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=MINUTELY;INTERVAL=15;COUNT=6 * * ==> (September 2, 1997 EDT)09:00,09:15,09:30,09:45,10:00,10:15 * * Every hour and a half for 4 occurrences: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=MINUTELY;INTERVAL=90;COUNT=4 * * ==> (September 2, 1997 EDT)09:00,10:30;12:00;13:30 * * Every 20 minutes from 9:00 AM to 4:40 PM every day: * * DTSTART;TZID=US-Eastern:19970902T090000 * RRULE:FREQ=DAILY;BYHOUR=9,10,11,12,13,14,15,16;BYMINUTE=0,20,40 * or * RRULE:FREQ=MINUTELY;INTERVAL=20;BYHOUR=9,10,11,12,13,14,15,16 * * ==> (September 2, 1997 EDT)9:00,9:20,9:40,10:00,10:20, * ... 16:00,16:20,16:40 * (September 3, 1997 EDT)9:00,9:20,9:40,10:00,10:20, * ...16:00,16:20,16:40 * ... * * An example where the days generated makes a difference because of * WKST: * * DTSTART;TZID=US-Eastern:19970805T090000 * RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=MO * * ==> (1997 EDT)Aug 5,10,19,24 * * changing only WKST from MO to SU, yields different results... * * DTSTART;TZID=US-Eastern:19970805T090000 * RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU * ==> (1997 EDT)August 5,17,19,31 */ class qCal_Property_Rrule extends qCal_Property { protected $type = 'RECUR'; protected $allowedComponents = array('VEVENT','VTODO','VJOURNAL','VTIMEZONE','DAYLIGHT','STANDARD'); protected $allowMultiple = true; }
[+]
..
[-] LastModified.php
[edit]
[-] Trigger.php
[edit]
[-] Dtstart.php
[edit]
[-] Priority.php
[edit]
[-] RequestStatus.php
[edit]
[-] NonStandard.php
[edit]
[-] Resources.php
[edit]
[-] Duration.php
[edit]
[-] Description.php
[edit]
[-] Url.php
[edit]
[-] Due.php
[edit]
[-] Dtstamp.php
[edit]
[-] Method.php
[edit]
[-] Summary.php
[edit]
[-] Exrule.php
[edit]
[-] Repeat.php
[edit]
[-] Location.php
[edit]
[-] Class.php
[edit]
[-] Prodid.php
[edit]
[-] Transp.php
[edit]
[-] Attendee.php
[edit]
[-] Rrule.php
[edit]
[-] Comment.php
[edit]
[-] Tzurl.php
[edit]
[-] Freebusy.php
[edit]
[-] PercentComplete.php
[edit]
[-] Tzname.php
[edit]
[-] Version.php
[edit]
[-] Categories.php
[edit]
[-] Attach.php
[edit]
[-] Tzid.php
[edit]
[-] Uid.php
[edit]
[-] RelatedTo.php
[edit]
[-] Sequence.php
[edit]
[-] Created.php
[edit]
[-] Tzoffsetto.php
[edit]
[-] RecurrenceId.php
[edit]
[-] Organizer.php
[edit]
[-] Dtend.php
[edit]
[-] Calscale.php
[edit]
[-] Rdate.php
[edit]
[-] Action.php
[edit]
[-] MultiValue.php
[edit]
[-] Exdate.php
[edit]
[-] Contact.php
[edit]
[-] Completed.php
[edit]
[-] Status.php
[edit]
[-] Tzoffsetfrom.php
[edit]
[-] Geo.php
[edit]