iCalcreator 2.10.23

iCalcreator class v2.10.23
copyright (c) 2007-2011 Kjell-Inge Gustafsson, kigkonsult
kigkonsult.se/iCalcreator
ical@kigkonsult.se

## Description:

iCalcreator is a PHP implementation of RFC2445/RFC2446 to manage iCal/xCal formatted files.

# 1. INTRO

iCalcreator is a PHP class managing iCal formatted files for non-calendar systems like CMS, project management systems and other applications able to process calendar information like agendas, tasks, reports, todos, journalling data and for communication with calendar systems and applications.

iCalcreator features create, parse, edit and select calendar and calendar components.

iCalcreator is built of a class file with support of a function class file and are calendar component property oriented. Development environment is PHP version 5.x but coding is done to meet 4.x backward compatibility and may work. Some functions requires PHP >= 5.2.0.

[index] [top]

## 1.1 Ical

The iCalendar format, as described in

rfc5545
  "Internet Calendaring and Scheduling Core Object Specification (iCalendar)"
rfc5546
  "iCalendar Transport-Independent Interoperability Protocol (iTIP)"
  Scheduling Events, BusyTime, To-dos and Journal Entries

. ..allows for the capture and exchange of information
normally stored within a calendaring and scheduling application.

and

. ..is an exchange format between applications or systems.

rfc5545 and rfc5546 obsoletes, respectively, rfc2445 and rfc2446.

A short iCal description is found at Wikipedia. If You are not familiar with iCal, read this first! Knowledge of calendar protocol rfc5545/rfc5546 is to recommend.

Any references to rfc2445, below, corresponds to rfc5545.

All iCalcreator functions calls are made as simple as possible BUT (, !!!,) read these rfc's properly! xCal (iCal xml) output format is supported but still experimental.

[index] [top]

## 1.2 This manual

This style is used for text.

This style is used for formats.

This style is used for PHP coding examples. // this style is used for coding comments.

This style is used for content details.

This style is used for RFC2445 quotes.

[index] [top]

## 1.3 Versioning

The release numbering convention used is major.minor(.micro / suffix).

Major
  Indicates a very large change in the core package. Rewrites or major milestones.
Minor
  Significant amount of feature addition/modification.
  odd number - development/experimental release
  even number - production release
Micro
  Primarily bug fix and maintenance number.
Suffix
  rc1 for first release candidate etc.

[index] [top]

## 1.4 Support

The main support channel is using iCalcreator Sourceforge forum.

Use the contact page for queries, improvement/development issues or professional support and development. Please note that paid support or consulting service has the highest priority.

Our services are available for support and designing and developing iCalcreator etc. customizations, adaptations and other PHP/MySQL solutions with a special focus on software utility and reliability, supported through our iterative acquire/design/transition process modell.

[index] [top]

## 1.5 Donate

You can show your appreciation for our free software, and can support future development by making a donation to the kigkonsult project iCalcreator.

Make a donation of any size by clicking here. Thanks in advance!

[index] [top]

## 1.6 Install

### 1.6.1 Basic

Unpack to any folder
- add this folder to your include-path
- or unpack to your application-(include)-folder
Add

require_once "[folder/]iCalcreator.class.php";

to your php-script.
If using php version 5.1 or higher, the default timezone need to be set/altered, now "Europe/Stockholm", line 50 in the iCalcreator.class.php file.
When creating a new calendar/component instance, review config settings.
[index] [top]

### 1.6.2 Boost performance

To really boost performance, kigkonsult can now offer PHP (4 and 5) packages (iCalcreator etc) in byte coded files, using ionCube encoder.
Encoded files use a platform independent file format, and can be run on any platform for which ionCube supply a (free) Loader. Currently supported platforms are Windows (e.g. NT, XP, W2K), Intel Linux, FreeBSD, NetBSD, OpenBSD, OS X, and Sparc Solaris.
Visit kigkonsult.se contact page for information and purchase.
Use basic install (above), install ionCube Loader (requires an update of "php.ini" or additional file in "/etc/php.d" folder AND the execute rights to use the PHP "dl" function) and simply replace the PHP class files with the encoded files.
[index] [top]

## 1.7 Additional Descriptors

The following properties (as described in wikipedia:iCal) may be required when importing iCal files into some calendaring software (MS etc.):

on calendar level
  METHOD property (value PUBLISH etc.)
  X-WR-CALNAME x-property
  X-WR-CALDESC x-property
  X-WR-RELCALID x-property (a UUID.)
  X-WR-TIMEZONE x-property
on component level
  DTSTAMP property (in iCalcreator created automatically, if not set)
  UID property (in iCalcreator created automatically, if not set)
on component level in vtimezone component
  X-LIC-LOCATION x-property

Recommendation is also to set unique_id when creating a new vcalendar/component instance, to ensure accurate setting of all components UID property, even before parse.

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); $vcalendar->setProperty( "method", "PUBLISH" ) $vcalendar->setProperty( "x-wr-calname", "Calendar Sample" ); $vcalendar->setProperty( "X-WR-CALDESC", "Calendar Description" ); $uuid = "3E26604A-50F4-4449-8B3E-E4F4932D05B5"; $vcalendar->setProperty( "X-WR-RELCALID", $uuid ); $vcalendar->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" ); .. .

[index] [top]

## 1.8 Addendum

Download iCalcreator coding samples.

Examples how to employ iCalcreator in software development
  tinycal, calendar-in-a-box.
  The iCal file event editor

If you are downloading the iCalcreatorusing sub-package, there are free iCal/xCal icons in the images directory, to use as buttons on a web page.

The PHP coding in this document or "coding samples" (above) are only for display of usage, recommendation is to use a coding standard, the following, incomplete, list is a good start;

  http://www.dagbladet.no/development/phpcodingstandard/
  http://framework.zend.com/manual/en/coding-standard.overview.html
  http://pear.php.net/manual/en/standards.php

[index] [top]

## 1.9 INDEX

1. INTRO
1.1 Ical
1.2 This manual
1.3 Versioning
1.4 Support
1.5 Donate
1.6 Install
1.6.1 Basic
1.6.2 Boost performance
1.7 Additional_Descriptors
1.8 Addendum
1.9 INDEX
2. Calendar Component list
2.1 VCALENDAR
2.2 VEVENT
2.3 VTODO
2.4 VJOURNAL
2.5 VFREEBUSY
2.6 VALARM
2.7 VTIMEZONE
2.10 Component Properties
3. Function list
3.1 Calendar object functions
3.1.1 Constructors
3.1.1.1 vcalendar
3.1.1.2 vevent
3.1.1.3 vtodo
3.1.1.4 vjournal
3.1.1.5 vfreebusy
3.1.1.6 valarm
3.1.1.7 vtimezone
3.1.1.8 standard
3.1.1.9 daylight
3.1.2 Calendar property functions
3.1.2.1 deleteProperty
3.1.2.2 getProperty
3.1.2.3 setProperty
3.1.2.4 CALSCALE
3.1.2.5 METHOD
3.1.2.6 VERSION
3.1.2.7 X-PROPERTY
3.1.3 Calendar component functions
3.1.3.1 deleteComponent
3.1.3.2 getComponent
3.1.3.3 newComponent
3.1.3.4 selectComponents
3.1.3.5 setComponent
3.1.4 Calendar input/output functions
3.1.4.1 parse and merge
3.1.4.2 createCalendar
3.1.4.3 returnCalendar
3.1.4.4 saveCalendar
3.1.4.5 sort
3.1.4.6 useCachedCalendar
3.1.5 Calendar configuration functions
3.1.5.1 configuration keys
3.1.5.2 getConfig
3.1.5.3 calendar/component initialization
3.1.5.4 setConfig
3.1.5.5 Allow empty components
3.1.5.6 Component information
3.1.5.7 Delimiter
3.1.5.8 Directory
3.1.5.9 Fileinfo
3.1.5.10 Filename
3.1.5.11 Filesize
3.1.5.12 Format
3.1.5.13 Language
3.1.5.14 NewlineChar
3.1.5.15 TZID
3.1.5.16 Unique_id
3.1.5.17 URL
3.2 Calendar component/object property function list
3.2.1 deleteProperty
3.2.2 getProperty
3.2.3 parse
3.2.4 setProperty
3.2.5 ACTION
3.2.6 ATTACH
3.2.7 ATTENDEE
3.2.8 CATEGORIES
3.2.9 CLASS
3.2.10 COMMENT
3.2.11 COMPLETED
3.2.12 CONTACT
3.2.13 CREATED
3.2.14 DESCRIPTION
3.2.15 DTEND
3.2.16 DTSTAMP
3.2.17 DTSTART
3.2.18 DUE
3.2.19 DURATION
3.2.20 EXDATE
3.2.21 EXRULE
3.2.22 FREEBUSY
3.2.23 GEO
3.2.24 LAST-MODIFIED
3.2.25 LOCATION
3.2.26 ORGANIZER
3.2.27 PERCENT-COMPLETE
3.2.28 PRIORITY
3.2.29 RDATE
3.2.30 RECURRENCE-ID
3.2.31 RELATED-TO
3.2.32 REPEAT
3.2.33 REQUEST-STATUS
3.2.34 RESOURCES
3.2.35 RRULE
3.2.36 SEQUENCE
3.2.37 STATUS
3.2.38 SUMMARY
3.2.39 TRANSP
3.2.40 TRIGGER
3.2.41 TZID
3.2.42 TZNAME
3.2.43 TZOFFSETFROM
3.2.44 TZOFFSETTO
3.2.45 TZURL
3.2.46 UID
3.2.47 URL
3.2.48 X-PROPERTY
3.3 Calendar Component configuration functions
3.3.1 Language
3.4 Calendar component object misc. functions
3.4.1 deleteComponent
3.4.2 getComponent
3.4.3 newComponent
3.4.4 setComponent
4. iCalUtilityFunctions
4.1 createTimezone
4.2 transformDateTime
5. COPYRIGHT AND LICENSE
[index] [top]

# 2. Calendar Component list

Quote from RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar)! (Described in iCal output format, content corresponds to xCal format.)

## 2.1 VCALENDAR

icalobject = 1*("BEGIN" ":" "VCALENDAR" CRLF

icalbody

"END" ":" "VCALENDAR" CRLF)

icalbody = calprops component
calprops = 2*(

"prodid" and "version" are both REQUIRED, but MUST NOT occur more than once

prodid / version /

"calscale"and "method"are optional, but MUST NOT occur more than once

calscale / method /

x-prop

)

component = 1*(eventc / todoc / journalc / freebusyc / timezonec / iana-comp* / x-comp*)

iana-comp = "BEGIN" ":" iana-token CRLF

1*contentline

"END" ":" iana-token CRLF

x-comp = "BEGIN" ":" x-name CRLF

1*contentline

"END" ":" x-name CRLF

*) not supported by iCalcreator
[index] [top] [up]

## 2.2 VEVENT

"BEGIN" ":" "VEVENT" CRLF

eventprop *alarmc

"END" ":" "VEVENT" CRLF

eventprop = *(

the following are optional,but MUST NOT occur more than once

class / created / description / dtstart /

geo / last-mod / location / organizer / priority /

dtstamp / seq / status / summary /

transp / uid / url / recurid /

either "dtend" or "duration" may appear in a "eventprop",

but "dtend" and "duration" MUST NOT occur in the same "eventprop"

dtend / duration /

the following are optional, and MAY occur more than once

attach / attendee / categories / comment /

contact / exdate / exrule / rstatus /

related / resources / rdate / rrule / x-prop

)
[index] [top] [up]

## 2.3 VTODO

"BEGIN" ":" "VTODO" CRLF

todoprop *alarmc

"END" ":" "VTODO" CRLF

todoprop = *(

the following are optional, but MUST NOT occur more than once

class / completed / created / description / dtstamp / dtstart /

geo / last-mod / location / organizer / percent / priority /

recurid / seq / status / summary /uid / url /

either "due" or "duration" may appear in a "todoprop",

but "due" and "duration" MUST NOT occur in the same "todoprop"

due / duration /

the following are optional,and MAY occur more than once

attach / attendee / categories / comment /

contact / exdate / exrule / rstatus /

related / resources / rdate / rrule / x-prop

)
[index] [top] [up]

## 2.4 VJOURNAL

journalc = "BEGIN" ":" "VJOURNAL" CRLF

jourprop

"END" ":" "VJOURNAL" CRLF

jourprop = *(

the following are optional, but MUST NOT occur more than once

class / created / description / dtstart /

dtstamp / last-mod / organizer / recurid /

seq / status / summary /uid / url /

the following are optional,and MAY occur more than once

attach / attendee / categories / comment /

contact / exdate / exrule / related /

rdate / rrule / rstatus / x-prop

)
[index] [top] [up]

## 2.5 VFREEBUSY

"BEGIN" ":" "VFREEBUSY" CRLF

fbprop

"END" ":" "VFREEBUSY" CRLF

fbprop = *(

the following are optional, but MUST NOT occur more than once

contact / dtstart / dtend / duration /

dtstamp / organizer / uid / url /

the following are optional,and MAY occur more than once

attendee / comment / freebusy / rstatus / x-prop

)
[index] [top] [up]

## 2.6 VALARM

"BEGIN" ":" "VALARM" CRLF

(audioprop / dispprop / emailprop / procprop)

"END" ":" "VALARM" CRLF

audioprop = 2*(

"action" and "trigger" are both REQUIRED, but MUST NOT occur more than once

action / trigger /

"duration" and "repeat" are both optional,and MUST NOT occur more than once each,

but if one occurs, so MUST the other

duration / repeat /

the following is optional, but MUST NOT occur more than once

attach /

the following is optional, and MAY occur more than once

x-prop

)
dispprop = 3*(

the following are all REQUIRED, but MUST NOT occur more than once

action / description / trigger /

"duration" and "repeat" are both optional,and MUST NOT occur more than once each,

but if one occurs, so MUST the other

duration / repeat /

the following is optional, and MAY occur more than once

x-prop

)
emailprop = 5*(

the following are all REQUIRED, but MUST NOT occur more than once

action / description / trigger / summary

the following is REQUIRED, and MAY occur more than once

attendee /

"duration" and "repeat" are both optional, and MUST NOT occur more than once each,

but if one occurs, so MUST the other

duration / repeat /

the following are optional, and MAY occur more than once

attach / x-prop

)
procprop = 3*(

the following are all REQUIRED, but MUST NOT occur more than once

action / attach / trigger /

"duration" and "repeat" are both optional, and MUST NOT occur more than once each,

but if one occurs, so MUST the other

duration / repeat /

"description" is optional, and MUST NOT occur more than once

description /

the following is optional, and MAY occur more than once

x-prop

)
[index] [top] [up]

## 2.7 VTIMEZONE

"BEGIN" ":" "VTIMEZONE" CRLF

2*(

"tzid" is required, but MUST NOT occur more than once

tzid /

"last-mod" and "tzurl" are optional, but MUST NOT occur more than once

last-mod / tzurl /

one of "standardc" or "daylightc" MUST occur and each MAY occur more than once.

standardc / daylightc /

the following is optional, and MAY occur more than once

x-prop

)

"END" ":" "VTIMEZONE" CRLF

standardc = "BEGIN" ":" "STANDARD" CRLF

tzprop

"END" ":" "STANDARD" CRLF

daylightc = "BEGIN" ":" "DAYLIGHT" CRLF

tzprop

"END" ":" "DAYLIGHT" CRLF

tzprop = 3*(

the following are each REQUIRED, but MUST NOT occur more than once

dtstart / tzoffsetto / tzoffsetfrom /

the following are optional, and MAY occur more than once

comment /rdate / rrule / tzname / x-prop

)
[index] [top] [up]

## 2.8 Component Properties

A comprehensive table showing relation between calendar components and properties. vtimezone properties are not included.

0-1 | OPTIONAL property, MUST NOT occur more than once.
0-m | OPTIONAL property, MAY occur more than once.
0 / 1=1 | A pair of OPTIONAL properties, MUST NOT occur more than once each. If one occurs, so MUST the other
0*1 | A pair of OPTIONAL properties, MUST NOT occur more than once each. If one occurs, so MUST NOT the other
1-m | REQUIRED property, MAY occur more than once.
1 | REQUIRED property, MUST NOT occur more than once.
| v e v e n t | v t o d o | v j o u r n a l | v f r e e b u s y | v a l a r m
| a u d i o | d i s p l a y | e m a i l | p r o c e d u r e
action |  |  |  |  | 1 | 1 | 1 | 1
attach | 0-m | 0-m | 0-m |  | 0-1 |  | 0-m | 1
attendee | 0-m | 0-m | 0-m | 0-m |  |  | 1-m |
categories | 0-m | 0-m | 0-m |  |  |  |  |
class | 0-1 | 0-1 | 0-1 |  |  |  |  |
comment | 0-m | 0-m | 0-m | 0-m |  |  |  |
completed |  | 0-1 |  |  |  |  |  |
contact | 0-m | 0-m | 0-m | 0-1 |  |  |  |
created | 0-1 | 0-1 | 0-1 |  |  |  |  |
description | 0-1 | 0-1 | 0-m |  |  | 1 | 1 | 0-1
dtend | 0*1 |  |  | 0-1 |  |  |  |
dtstamp | 0-1 | 0-1 | 0-1 | 0-1 |  |  |  |
dtstart | 0-1 | 0-1 | 0-1 | 0-1 |  |  |  |
due |  | 0*1 |  |  |  |  |  |
duration | 0*1 | 0*1 |  | 0-1 | 0 / 1=1 | 0 / 1=1 | 0 / 1=1 | 0 / 1=1
exdate | 0-m | 0-m | 0-m |  |  |  |  |
exrule | 0-m | 0-m | 0-m |  |  |  |  |
freebusy |  |  |  | 0-m |  |  |  |
geo | 0-1 | 0-1 |  |  |  |  |  |
last-mod | 0-1 | 0-1 | 0-1 |  |  |  |  |
location | 0-1 | 0-1 |  |  |  |  |  |
organizer | 0-1 | 0-1 | 0-1 | 0-1 |  |  |  |
percent |  | 0-1 |  |  |  |  |  |
priority | 0-1 | 0-1 |  |  |  |  |  |
rdate | 0-m | 0-m | 0-m |  |  |  |  |
recurid | 0-1 | 0-1 | 0-1 |  |  |  |  |
related | 0-m | 0-m | 0-m |  |  |  |  |
repeat |  |  |  |  | 0 / 1=1 | 0 / 1=1 | 0 / 1=1 | 0 / 1=1
resources | 0-m | 0-m |  |  |  |  |  |
rrule | 0-m | 0-m | 0-m |  |  |  |  |
rstatus | 0-m | 0-m | 0-m | 0-m |  |  |  |
sequence | 0-1 | 0-1 | 0-1 |  |  |  |  |
status | 0-1 | 0-1 | 0-1 |  |  |  |  |
summary | 0-1 | 0-1 | 0-1 |  |  |  | 1 |
transp | 0-1 |  |  |  |  |  |  |
trigger |  |  |  |  | 1 | 1 | 1 | 1
uid | 0-1 | 0-1 | 0-1 | 0-1 |  |  |  |
url | 0-1 | 0-1 | 0-1 | 0-1 |  |  |  |
x-prop | 0-m | 0-m | 0-m | 0-m | 0-m | 0-m | 0-m | 0-m

If not set, the DTSTAMP and UID properties are automatically created by iCalcreator
for vevent,vtodo, vjournal and vfreebusy components
when using calendar functions saveCalendar or returnCalendar
or when fetching DTSTAMP/UID property value with the component function getProperty.

[index] [top] [up]

# 3. Function list

## 3.1 Calendar object functions

### 3.1.1 Constructors

## 3.1.1.1 vcalendar

Create a new VCALENDAR object.

Format

vcalendar()

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ...

[index] [top] [up]

#### 3.1.1.2 vevent

Format 1

Create a new VEVENT object using a calendar factory-method, returning a reference to the new component.

newComponent( "vevent" )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vevent = & $vcalendar->newComponent( "vevent" ); $vevent->setProperty(... ...

Format 2

Create a new VEVENT object.

vevent()

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vevent = new vevent(); $vevent->setProperty(... ... $vcalendar->setComponent( $vevent ); ...

[index] [top] [up]

#### 3.1.1.3 vtodo

Format 1

Create a new VTODO object using a calendar factory-method, returning a reference to the new component.

newComponent( "vtodo" )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vtodo = & $vcalendar->newComponent( "vtodo" ); $vtodo->setProperty(... ...

Format 2

Create a new VTODO object.

vtodo()

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vtodo = new vtodo(); $vtodo->setProperty(... ... $vcalendar->setComponent( $vtodo ); ...

[index] [top] [up]

#### 3.1.1.4 vjournal

Format 1

Create a new VJOURNAL object using a calendar factory-method, returning a reference to the new component.

newComponent( "vjournal" )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vjournal = & $vcalendar->newComponent( "vjournal" ); $vjournal->setProperty(... ...

Format 2

Create a new VJOURNAL object.

vjournal()

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vjournal = new vjournal(); $vjournal->setProperty(... ... $vcalendar->setComponent( $vjournal ); ...

[index] [top] [up]

#### 3.1.1.5 vfreebusy

Format 1

Create a new VFREEBUSY object using a calendar factory-method, returning a reference to the new component.

newComponent( "vfreebusy" )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vfreebusy = & $vcalendar->newComponent( "vfreebusy" ); $vfreebusy->setProperty(... ...

Format 2

Create a new VFREEBUSY object.

vfreebusy()

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vfreebusy = new vfreebusy(); $vfreebusy->setProperty(... ... $vcalendar->setComponent( $vfreebusy ); ...

[index] [top] [up]

#### 3.1.1.6 valarm

Format 1

Create a new VALARM object using a component factory-method, returning a reference to the new (sub-)component.

newComponent( "valarm" )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vevent = & $vcalendar->newComponent( "vevent" ); $vevent->setProperty(... ... $valarm = & $vevent->newComponent( "valarm" ); $valarm->setProperty(... ...

Format 2

Create a new VALARM object.

valarm()

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vevent = new vevent(); $vevent->setProperty(... ... $valarm = new valarm(); $valarm->setProperty(... ... $vevent->setComponent( $valarm ); ... $vcalendar->setComponent( $vevent ); ...

[index] [top] [up]

#### 3.1.1.7 vtimezone

The vtimezone component describe, at a minimum, the base offset from UTC for the time zone. For dates with UTC DATE-TIME, read this!

Format 1

Create a new VTIMEZONE object using a calendar factory-method, returning a reference to the new component.

newComponent( "vtimezone" )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vtimezone = & $vcalendar->newComponent( "vtimezone" ); $vtimezone->setProperty(... ...

Format 2

Create a new VTIMEZONE object.

vtimezone()

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vtimezone = new vtimezone(); $vtimezone->setProperty(... ... $vcalendar->setComponent( $vtimezone ); ...

##### Creation of timezone components

It is possible to create timezone components, using a function in iCalUtilityFunctions class, createTimezone and utilizing The PHP DateTimeZone class (PHP 5 >= 5.2.0).
[index] [top] [up]

#### 3.1.1.8 standard

Format 1

Create a new VTIMEZONE standard object using a component factory-method, returning a reference to the new (sub-)component.

newComponent( "standard" )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vtimezone = & $vcalendar->newComponent( "vtimezone" ); $vtimezone->setProperty(... ... $standard = & $vtimezone->newComponent( "standard" ); $standard->setProperty(... ... $daylight = & $vtimezone->newComponent( "daylight" ); $daylight->setProperty(... ...

Format 2

Create a new VTIMEZONE STANDARD object.

vtimezone( "standard" )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vtimezone = new vtimezone(); $vtimezone->setProperty(... ... $standard = new vtimezone( "standard" ); $standard->setProperty(... ... $vtimezone->setComponent( $standard ); ... $daylight = new vtimezone( "daylight" ); $daylight->setProperty(... ... $vtimezone->setComponent( $daylight ); ... $vcalendar->setComponent( $vtimezone ); ...

[index] [top] [up]

#### 3.1.1.9 daylight

Format 1

Create a new VTIMEZONE daylight object using a component factory-method, returning a reference to the new (sub-)component.

newComponent( "standard" )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vtimezone = & $vcalendar->newComponent( "vtimezone" ); ... $standard = & $vtimezone->newComponent( "standard" ); ... $daylight = & $vtimezone->newComponent( "daylight" ); ...

Format 2

Create a new VTIMEZONE DAYLIGHT object.

vtimezone( "daylight" )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vtimezone = new vtimezone(); ... $standard = new vtimezone( "standard" ); ... $vtimezone->setComponent( $standard ); $daylight = new vtimezone( "daylight" ); ... $vtimezone->setComponent( $daylight ); $vcalendar->setComponent( $vtimezone ); ...

[index] [top] [up]

### 3.1.2 Calendar property functions

#### 3.1.2.1 deleteProperty

General calendar deleteProperty function, simplifying removal of calendar properties.
FALSE is returned if no property exists or when end-of-properties at consecutive function calls.

Format

deleteProperty( [ string PropName [, int order=1 ] )

propName - case independent, rfc2445 component property names, unknown/missing propName will be regarded as X-property. order - if missing 1st/next occurrence, used with multiple (property) occurrences

Example 1

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); if( !$vcalendar->deleteProperty( "method" )) echo "METHOD property not found"; .. .

[index] [top] [up]

#### 3.1.2.2 getProperty

Format 1

General calendar getProperty function, simplifying fetch of calendar properties.
FALSE is returned if no property exists or when end-of-properties at consecutive function calls.

getProperty( [ string PropName [, int order=1 [, bool complete=FALSE ]]] )

propName - case independent, rfc2445 component property names, unknown/missing propName will be regarded as X-property. order - if missing 1st/next occurrence, used with multiply (property) occurrences complete - FALSE (default) : output only property value - TRUE : output = array( "value"=> <value> ,"params" => <parameter array>)

Example 1

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $calscale = $vcalendar->getProperty( "calscale" ); .. .

Example 2

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); while( $xprop = $vcalendar->getProperty( )) { // get x-properties .. .

Format 2

Ability to fetch specific property (unique) values and number of occurrences. Supported properties are ATTENDEE, CATEGORIES, DTSTART, LOCATION, ORGANIZER, PRIORITY, RESOURCES, STATUS, SUMMARY, UID or "RECURRENCE-ID-UID" (alt. "R-UID" ). The search includes in ALL components within calendar.
Outputs an array( *[<unique-property-value> => <number of occurrence>] )
or an empty array if no hits. The array is sorted by (asc.) key.
If a property contains multiple values (ex. "CATAGORIES:course1,courseB", "LOCATION:London,Paris" or "RESOURCES:pc,developer"), they are split into unique values.
To select components based on property values, see selectComponents (Format 2).

getProperty( string PropName )

propName - case independent DTSTART as argument returns dates, in format "YYYYMMDD", "RECURRENCE-ID-UID"returns UID values for component(-s) where RECURRENCE-ID is set. ATTENDEE and ORGANIZER values are prefixed by protocol like "MAILTO:chair@kigkonsult.se".

Example 1

.. . $attendees = $vcalendar->getProperty( "ATTENDEE" ); foreach( $attendees as $attendee => $occurrCount ) { .. .

Example 2

.. . $startDates = $vcalendar->getProperty( "DTSTART" ); foreach( $startDates as $startDate => $occurrCount ) { .. .

[index] [top] [up]

#### 3.1.2.3 setProperty

General calendar setProperty function,simplifying insert of calendar properties.
A successful update returns TRUE.

Format

setProperty( string PropName, mixed Proparg_1 *[, mixed Proparg_n] )

propName case independent, strict rfc2445 calendar property names, unknown propName will be regarded as X-property.

Example

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); // initiate new CALENDAR $vcalendar->setProperty( "calscale", "GREGORIAN" );

[index] [top] [up]

#### 3.1.2.4 CALSCALE

This property defines the calendar scale used for the calendar information specified in the iCalendar object.
The default value is "GREGORIAN", implied when missing.

##### Delete CALSCALE

Remove CALSCALE from component.

Format

deleteProperty( "calscale" )

Example

$vcalendar->deleteProperty( "CALSCALE" );

##### Get Calscale

Fetch property value.

Format

getProperty( "calscale" )

Example

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $calscale = $vcalendar->getProperty( "calscale" ); .. .

##### Set CALSCALE

Insert property value.

Format

setProperty( "calscale", string value )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); // initiate new CALENDAR $vcalendar->setProperty( "calscale", "GREGORIAN" ); .. .

[index] [top] [up]

#### 3.1.2.5 METHOD

This property defines the iCalendar object method associated with the calendar object.
METHOD property (value PUBLISH etc.) may be required when importing iCal files into some calendaring software (MS etc.), as well as x-properties "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE" and the (automatically created) DTSTAMP and UID properties.

##### Delete METHOD

Remove METHOD from component.

Format

deleteProperty( "METHOD" )

Example

$vcalendar->deleteProperty( "METHOD" );

##### Get METHOD

Fetch property value.

Format

getProperty( "method" );

Example

$config = array( "unique_id" => "kigkonsult.se"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $method = $vcalendar->getProperty( "method" ) .. .

##### Set METHOD

Insert property value.

Format

setProperty( "method", string value )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); // initiate new CALENDAR $vcalendar->setProperty( "method", "PUBLISH" )

[index] [top] [up]

#### 3.1.2.6 VERSION

This property specifies the identifier corresponding to the highest version number or the minimum and maximum range of the iCalendar specification that is required in order to interpret the iCalendar object.
This property is always placed first in the calendar file.

##### Get Version

Fetch property value.

Format

getProperty( "version" )

Example

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $version = $vcalendar->getProperty( "version" ) .. .

##### Set Version

Insert property value. Only version 2.0 valid, version is AUTO generated at calendar creation.

Format

setProperty( "version", string version )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); // initiate new CALENDAR $vcalendar->setProperty( "version", "2.0" )

[index] [top] [up]

#### 3.1.2.7 X-PROPERTY

A calendar, non-standard property with a TEXT value and a name with an "X-" prefix. In a calendar, an x-property, with an unique name, can occur only once but the number of x-properties are unlimited.
X-properties "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE" may be required when importing iCal files into some calendaring software (MS etc.), as well as METHOD property (value PUBLISH etc.) and the (automatically created) DTSTAMP and UID properties.

##### Delete X-PROPERTY

Remove X-PROPERTY from calendar.

Format

deleteProperty( "<X-PROPERTY>" )

Example 1

$vcalendar->deleteProperty( "<X-PROPERTY>" );

Example 2

Deleting all x-properties.

while( $vcalendar->deleteProperty()) continue;

##### Get X-PROPERTY

Fetch property value.

Format

getProperty()
getProperty( "<X-PROPERTY>" )

output = array( propertyName1, propertyData2 )

getProperty( FALSE, propOrderNo/FALSE, TRUE )

output = array( propertyName1 , array( "value" => propertyData2 ) , "params" => params 3))

Example 1

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); while( $xprop = $vcalendar->getProperty( )) { //read all x-props in a loop .. .

$xprop = array( propertyName1, propertyData2 )

Example 2

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); if( $xprop = $vcalendar->getProperty( "X-WR-TIMEZONE" )) { //if exists, read X-WR-TIMEZONE x-prop .. .

$xprop = array( "X-WR-TIMEZONE", propertyData2 )

Example 3

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); while( $xprop = $vcalendar->getProperty( FALSE, FALSE, TRUE )) { .. .

$xprop = array( propertyName1 , array( "value " => propertyData2 ) , "params "=> params 3 )

##### Set X-PROPERTY

Insert property name and value. If an x-prop with the same name already exists, it will be replaced. PropertyNames are always stored upperCase, ex. x-wr-calname => X-WR-CALNAME.

Format

setProperty( propertyName, propertyData [, params ] )

propertyName1 = Any property name with a "X-" prefix propertyData2 = Value type TEXT params3 = array( ["LANGUAGE" => "<lang>"] [, xparam] ) xparam = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); // initiate new CALENDAR // set some X-properties.. . $vcalendar->setProperty( "x-wr-calname", "Calendar Sample" ) $vcalendar->setProperty( "X-WR-CALDESC", "Calendar Description" ); $vcalendar->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" );

[index] [top] [up]

### 3.1.3 Calendar component functions

#### 3.1.3.1 deleteComponent

Remove component from calendar.
FALSE is returned if no property exists or when end-of-properties at consecutive function calls.

format 1

Remove component with order number (1st=1, 2nd=2.. .).

deleteComponent( int orderNumber )

format 2

Remove component with component type (e.g. "vevent") and order 1 alt. suborder number.

deleteComponent( string componentType [, int componentSuborderNumber])

format 3

Remove component with UID. N.B UID is NOT set for ALARM / TIMEZONE components.

deleteComponent( string UID )

Example 1

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcal = new vcalendar( $config ); $vcal->parse(); $vcal->deleteComponent( 1 ); $vcal->deleteComponent( "vtodo", 2 ); $vcal->deleteComponent( "20070803T194810CEST-0123U3PXiX@kigkonsult.se"); .. .

Example 2

Deleting all components, using format 2 without order number.

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcal = new vcalendar( $config ); $vcal->parse(); .. . while( $vcal->deleteComponent( "vevent")) continue; .. . $vtodo = $vcal->getComponent( "vtodo" ); while( $vtodo->deleteComponent( "valarm")) continue; .. .

[index] [top] [up]

#### 3.1.3.2 getComponent

Get component from calendar.
FALSE is returned if no property exists or when end-of-properties at consecutive function calls.

format 1

Get next component, until end-of-components.

getComponent()

format 2

Get specific component with order number (1st=1, 2nd=2.. .).

getComponent( int orderNumber )

format 3

Get (first/next) component with component type (until end-of-components) alt. get specific component with component type and suborder number (1st=1, 2nd=2.. .).

getComponent( string componentType [, int componentSuborderNumber])

format 4

Get (first/next) component with UID as key. (UID is NOT set for ALARM / TIMEZONE components.)

getComponent( string UID )

format 5

Get (first/next) component based on specific property contents; DTSTART, DTEND, DUE, CREATED, COMPLETED, DTSTAMP, LAST-MODIFIED, RECURRENCE-ID, ATTENDEE, CATEGORIES, LOCATION, ORGANIZER, PRIORITY, RESOURCES, STATUS, SUMMARY, UID. For the property "SUMMARY" ,if a search value (any case) exists within property value, a hit exists. For the other, non-date, properties an exact (strict case) match is required.
Note, ATTENDEE and ORGANIZER values must be prefixed by protocol ex."MAILTO:chair@ical.net".

getComponent( array(*[string propertyName => string uniqueValue] ))

propertyName = property name, above propertyData = unique property value (strict case), date format "YYYYMMDD" (if any side is DATE, only dates are used), datetime format "YYYYMMDDTHHMMSS"

Example 1

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); while( $comp = $vcalendar->getComponent()) { .. . } .. .

Example 2

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); if( $comp = $vcalendar->getComponent( 1 )) { .. . } .. .

Example 3

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); if( $comp = $vcalendar->getComponent( "vtodo", 2 ) { .. . } .. .

Example 4

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $uid = "20070803T194810CEST-0123U3PXiX@kigkonsult.se"; if($comp = $vcalendar->getComponent( $uid ){ .. . } .. .

[index] [top] [up]

#### 3.1.3.3 newComponent

Create component (EVENT / VTODO / VJOURNAL / VFREEBUSY / VTIMEZONE) using a calendar factory-method, returning a reference to the new component.

Format

newComponent( string componentType )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vevent = & $vcalendar->newComponent( "vevent" ); ...

[index] [top] [up]

#### 3.1.3.4 selectComponents

Format 1

Selects EVENT / VTODO / VJOURNAL / VFREEBUSY components from calendar on based on dates (notice date restriction), based on the initial DTSTART property along with the RRULE, RDATE, EXDATE and EXRULE properties in the component. If property DTSTART is missing in a VTODO component then DUE is used.
Limitations:

- The values "SECONDLY" / "MINUTELY" / "HOURLY" in the "FREQ" rule part are NOT supported.
- If using components with properties
  UID in combination with SEQUENCE and RECURRENCE-ID
  (i.e. an individual instance within the recurrence set),
  the RECURRENCE-ID parameter "RANGE" ("THISANDPRIOR" / "THISANDFUTURE") is NOT supported.

Requirement:

- sort MUST be executed before "selectComponents", notice example below.

FALSE is returned if no selected component exists.

selectComponents([ int startYear, int startMonth, int startDay [, int endYear, int endMonth, int endDay [, mixed cType [, bool flat [,bool any [,bool split]]]]]])

Returns an array with components (events.. .). For all recurrent instances of a calendar component, an x-property, "X-CURRENT-DTSTART" and opt. also "X-CURRENT-DTEND" alt. "X-CURRENT-DUE", has been created with a TEXT content, "Y-m-d [H:i:s][timezone/UTC offset]" showing the current start and opt. also end alt. due date.
Also a "X-RECURRENCE" x-property is set with order number (valid if selectComponents is called from DTSTART date).

startYear : start year (4*digit), default current year startMonth : start month (1-2*digit), default current month startDay : start day (1-2*digit), default current day endYear : end year (4*digit), default startYear endMonth : end month (1-2*digit), default startMonth endDay : end day (1-2*digit), default startDay cType : calendar component type(-s), string/array ("vevent", "vtodo", "vjournal", "vfreebusy") FALSE (default) => all flat : TRUE => output : array[] (ignores split) component where recurrence pattern exists within period FALSE (default) => output : array[Year][Month][Day][] any : TRUE (default) => select components with recurrence pattern in period FALSE => only components that starts (DTSTART) within period split : TRUE (default) => one component copy for every day it occurs within the period FALSE => one occurrence of component in output array, start date/recurrence (start) date valid flat any split combinations (defaults in upper case) 1 FALSE TRUE TRUE 2 FALSE TRUE false 3 FALSE false [false] (split set to false if flat=FALSE and any=false) 4 true TRUE [false] (split set to false if flat=true) 5 true false [false] (split set to false if flat=true)

Example

$config = array( "unique_id" => "kigkonsult.se", "directory" => "import", "filename" => "file.ics" ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $vcalendar->sort(); $events_arr = $vcalendar->selectComponents( 2007,11,1,2007,11,30,"vevent"); // select all events occurring 1-30 nov. 2007 foreach( $events_arr as $year => $year_arr ) { foreach( $year_arr as $month => $month_arr ) { foreach( $month_arr as $day => $day_arr ) { foreach( $day_arr as $event ) { $currddate = $event->getProperty( "x-current-dtstart" ); // if member of a recurrence set, returns // array(" x-current-dtstart", // <(string) date("Y-m-d [H:i:s][timezone/UTC offset]")>) $startDate = $event->getProperty( "dtstart" ); $summary = $event->getProperty( "summary" ); $description = $event->getProperty( "description" ); .. .

format 2

Using this format, the function selects components based on specific property value(-s), ATTENDEE, CATEGORIES, LOCATION, ORGANIZER, PRIORITY, RESOURCES, STATUS, SUMMARY or UID. For the property "SUMMARY" ,if a search value (any case) exists within property value, a hit is found. For the other properties an exact (strict case) match is required.
ATTENDEE and ORGANIZER search values must be prefixed by protocol ex. "MAILTO:chair@ical.net". Multiple search properties may coexist.
To retrieve property values, see getProperty (Format 2) on calendar level.

selectComponents( searchArray )

Outputs an array of matched (unique) components in UID order.

searchArray : array( propertyName => propertyValue ) propertyName : above (any case) propertyValue : string value / array( *[string value] )

Example

$config = array( "unique_id" => "kigkonsult.se", "directory" => "import", "filename" => "file.ics" ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $vcalendar->sort(); $searchArray = array( "PRIORITY" => array( 1, 2, 3, 4 )); $highPrioArr = $vcalendar->selectComponents( $searchArray ); // select all components with PRIORITY set to high (1-4) if( !empty( $highPrioArr )) { $highPrioCal = new vcalendar( array( "unique_id" => "kigkonsult.se" )); $highPrioCal->setProperty( "X-WR-CALDESC", "High priority events" ); foreach( $highPrioArr as $highPrioComponent ) $highPrioCal->setComponent( $highPrioComponent ); $highPrioCal->returnCalendar(); } .. .

[index] [top] [up]

#### 3.1.3.5 setComponent

Replace or update component in calendar. Also add calendar component to calendar when calendar component is created with the procedural (non-factory) method, see example VEVENT, format 2. A successful update return TRUE.

format 1

Insert last in component chain.

setComponent( component ) addComponent( component ) // alias

addComponent, may be removed i future versions.

format 2

Insert/replace component with order number (1st=1, 2nd=2.. .). If replace and orderNumber is not found, component is inserted last in chain.

setComponent( component, int orderNumber )

format 3

Replace component with component type and 1st alt. component order number. If orderNumber is not found, component is inserted last in chain.

setComponent( component, string componentType [,int component suborder no])

format 4

Replace component with UID. N.B UID is NOT set for ALARM / TIMEZONE components. If UID is not found, component is inserted last in chain.

setComponent( component, string UID )

Example

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $vevent = vcalendar->getComponent( 1 ); //fetch first EVENT $vevent->setProperty( "dtstart" //update DTSTART property , 2006, 12, 24, 19, 30, 00 ); .. . $vcalendar->setComponent( $vevent, 1 ); // replace first component .. .

[index] [top] [up]

### 3.1.4 Calendar input/output functions

#### 3.1.4.1 parse and merge

Parse iCal file(-s) or string/array calendarContent into a single vcalendar object (components, properties and parameters), including multiple vcalendars (within a single ICS file) parse, e.g. Oracle Calendar exports.
As long as php.ini directive "allow_url_fopen" is enabled, remote files, URLs; protocol "http" ("webcal"), are supported. A remote file, URL, must be prefixed by "http://" ("webcal://") and suffixed by a valid filename.! Recommendation is to download (cache) remote file before parsing, due to execution time and control.
If missing, component property UID is created when parsing. For that reason UNIQUE_ID might need to be set before parsing, Se examples below.
Notice date restriction!
If parse error occurs (like file access error, invalid calendar file or calendar file without components), FALSE is returned.

Format

parse( [ mixed textToParse ] )

textToParse = string calendarContent ex. result from - file_get_contents( "filename") array calendarContent ex. result from - file( "filename", FILE_IGNORE_NEW_LINES )

parse example 1

$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics"); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); .. .

parse example 2

$config = array( "unique_id" => "kigkonsult.se", "url" => "http://www.ical.net/calendars/calendar.ics" ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); .. .

parse example 3

$config = array( "unique_id" => "kigkonsult.se", "url" => "http://www.ical.net/calendars/calendar.ics" ); $vcalendar = new vcalendar( $config ); ... $str = array( "BEGIN:VCALENDAR", "PRODID:-//kigkonsult.se//NONSGML kigkonsult.se iCalcreator 2.10.23//", "VERSION:2.0", "BEGIN:VEVENT", "DTSTART:20101224T190000Z", "DTEND:20101224T200000Z", "DTSTAMP:20101020T103827Z", "UID:20101020T113827-1234GkdhFR@test.org", "DESCRIPTION:example", "END:VEVENT", "END:VCALENDAR"); $vcalendar->parse( $str ); ...

merge example

$config = array( "unique_id" => "kigkonsult.se", "directory" => "import" ); $vcalendar = new vcalendar( $config ); $vcalendar->setConfig( "filename", "file1.ics" ); $vcalendar->parse(); $vcalendar->setConfig( "filename", "file2.ics" ); $vcalendar->parse(); $vcalendar->sort(); $vcalendar->setConfig( "directory", "export" ); $vcalendar->setConfig( "filename", "icalmerge.ics" ); $vcalendar->saveCalendar(); .. .

[index] [top] [up]

#### 3.1.4.2 createCalendar

Generate and return calendar in a string, testing.. .?

Format

createCalendar()

Example

.. . $str = $vcalendar->createCalendar(); echo $str;

[index] [top] [up]

#### 3.1.4.3 returnCalendar

Redirect calendar content to user browser. Filename, addressed to browser, is automatically generated if missing or not set;
$filename = date( "YmdHis" ).".ics"

Format

returnCalendar( [bool utf8Encode [, bool gzip ]] )

utf8Encode = TRUE: utf8 encoded output, FALSE: (default) no encoding gzip = TRUE: gzip compressed output and header "Content-Encoding: gzip" set, FALSE: (default) no compressing

Example 1

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); .. . $vevent = & $vcalendar->newComponent( "vevent" ); $vevent->setProperty( "dtstart", array( "year" => 2007 , "month" => 4 , "day" => 1 , "hour" => 19 )); $vevent->setProperty( "duration", 0, 0, 3 )); $vevent->setProperty( "LOCATION", "Central Plaza" ); $vevent->setProperty( "summary", "PHP summit" ); .. . $vcalendar->returnCalendar();

Example 2

$config = array( "unique_id" => "kigkonsult.se", "directory" => "import", "filename" => "file.ics" ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $utf8Encode = TRUE; $hacPar = "HTTP_ACCEPT_ENCODING"; if( isset( $_SERVER[$hacPar] ) && ( FALSE !== strpos( strtolower( $_SERVER[$hacPar] ), "gzip" ))) $gzip = TRUE; else $gzip = FALSE; $vcalendar->returnCalendar( $utf8Encode, $gzip );

[index] [top] [up]

#### 3.1.4.4 saveCalendar

Save ical calendar in a file, uses present directory if directory not set, filename is automatically generated if missing or not set;
$filename = date( "YmdHis" ).".ics"
Directory/filename must be writeable, delimiter default PHP constant DIRECTORY_SEPARATOR.
As long as php.ini directive "allow_url_fopen" is enabled, remote files, URLs; protocol "http" ("webcal"), are supported. Recommendation is to save to a local file and upload later, due to execution time and control.
If file error occurs, FALSE is returned.

Format

saveCalendar ( string directory/FALSE [, string filename/FALSE [, string delimiter/FALSE ]] )

Parameters for directory/filename/delimiter, kept for backward compatibility, may be removed i future versions. Recommendation is to use setConfig, Se example below.

Example

.. . $vcalendar->setConfig( array( "directory" => "depot", "filename" => "calendar.ics" )); $result = $vcalendar->saveCalendar(); if( !$result ) echo "error when saving.. ."

[index] [top] [up]

#### 3.1.4.5 sort

Format 1

Sort created/parsed calendar components on the following (prioritized) keys:
1 - X-CURRENT-DTSTART - X-CURRENT-DTEND/X-CURRENT-DUE
(if created in function selectComponents)
1 - DTSTART - DTEND alt. DURATION (VEVENT and VFREEBUSY components)
1 - DTSTART - DUE alt. DURATION (VTODO components)
1 - DTSTART (VJOURNAL components)
2 - CREATED / DTSTAMP
3 - UID
VTIMEZONE component(-s) are always sorted first in chain.
Sub-components (STANDARD / DAYLIGHT / ALARM), if exists, are not sorted.

sort()

Example

$config = array( "unique_id" => "kigkonsult.se", "directory" => "import", "filename" => "file.ics" ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $vcalendar->sort(); $vcalendar->returnCalendar();

Format 2

Sort created/parsed calendar components on specific property values and ascending order.

sort( sortArgument )

sortArgument: "ATTENDEE" / "CATEGORIES" / "DTSTAMP" / "LOCATION"" / "ORGANIZER" /"RESOURCES" / "PRIORITY" / "STATUS" / "SUMMARY" for a property where multiple occurrence may exist (ATTENDEE, CATEGORIES, RESOURCES ), lowest (alphabetic) value is used as sort parameter.

[index] [top] [up]

#### 3.1.4.6 useCachedCalendar

If recent version of local (non-empty and saved) calendar file exists, an HTTP redirect header is sent otherwise FALSE is returned.

Format

useCachedCalendar( [ int timeout ] ) useCachedCalendar( string directory/FALSE , string filename/FALSE , string delimiter/FALSE [, int timeout ] )

timeout : default 3600 sec Second format with parameters for directory/filename/delimiter,
kept for backward compatibility, may be removed i future
versions. Recommendation is to use setConfig, Se example below.

Example

.. . $vcalendar->setConfig( "directory", "depot" ); $vcalendar->setConfig( "filename", "calendar.ics" ); $vcalendar->useCachedCalendar();

[index] [top] [up]

### 3.1.5 Calendar configuration functions

#### 3.1.5.1 configuration keys

All configuration keys (allowEmpty, compsInfo etc.) case independent.

key | calendar | component | remark
allowEmpty | * | * |
Compsinfo | * | * | getConfig only
Delimiter | * |  |
Directory | * |  |
Filename | * |  |
Dirfile | * |  | getConfig only
Filesize | * |  | getConfig only
Format | * |  |
Language | * | * |
NewlineChar | * | * |
TZID | * | * |
Unique_id | * | * |
URL | * |  |

[index] [top] [up]

#### 3.1.5.2 getConfig

getConfig( [string key )

Example 1

.. . $filename = $vcalendar->getConfig( "filename" ); .. .

In this example, notice Filename

Example 2

.. . $config = $vcalendar->getConfig(); .. .

Output= array( string key => mixed value *[, string key => mixed value] )

[index] [top] [up]

#### 3.1.5.3 calendar/component initialization

Format

When creating a new calendar.

vcalendar( array( string key => mixed value *[,string key => mixed value]))

Example 1

$config = array( "unique_id" => "kigkonsult.se", "directory" => "import", "filename" => "file.ics" ); $vcalendar = new vcalendar( $config ); .. .

When creating a new calendar component.

component( array( string key => mixed value *[,string key => mixed value]))

Example 2

$config = array( "unique_id" => "kigkonsult.se" ); $vevent = new vevent( $config ); .. .

Example 3

. .. $config = $vcalendar->getConfig(); $vevent = new vevent( $config ); .. .

Only component relevant configuration are set. If using the newComponent function, configuration is set automatically.
[index] [top] [up]

#### 3.1.5.4 setConfig

A successful "setConfig" returns TRUE.

Format 1

setConfig( array( string key=>mixed value *[, string key=>mixed value]))

Example 1

$config = array( "unique_id" => "kigkonsult.se", "directory" => "import", "filename" => "file.ics" ); $vcalendar = new vcalendar(); $vcalendar->setConfig( $config ); .. .

Example 2

$config = array( "unique_id" => "kigkonsult.se" ); $vevent = new vevent(); $vevent->setConfig( $config ); .. .

Format 2

setConfig( string key, string value )

Example 1

$vcalendar = new vcalendar(); $vcalendar->setConfig( "directory", "depot" ); .. .

Example 2

$vevent = new vevent(); $vevent->setConfig( "unique_id", "kigkonsult.se" ); .. .

[index] [top] [up]

#### 3.1.5.5 Allow empty components

Allow or reject empty calendar properties, default allow (TRUE).
[index] [top] [up]

#### 3.1.5.6 Component information

Only to use with function getConfig.
Get information about calendar components. Returns array with basic information about all components (in array format) within calendar.

Output = array ( *compinfo ) compinfo = array ( "ordno" => int ordno, // order number (1st=1, 2nd=2..) , "type" => string type // component type (vevent, vtodo.. . , "uid" => string uid // component UID (not for ALARM / TIMEZONE) , "props" => array( *[ propertyName => Property count ]) // for every set property , "sub" => array( *compinfo )) // if subcomponents exists, an array for each subcomponent

Example

$config = array( "unique_id" => "kigkonsult.se", "directory" => "import", "filename" => "file.ics" ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $compsinfo = $vcalendar->getConfig( "compsinfo" ); foreach( $compsinfo as compinfo) { echo " order number : ".$compinfo["ordno"]."<br />"; echo " type : ".$compinfo["type"]."<br />"; echo " UID : ".$compinfo["uid"]."<br />"; foreach( $compinfo["props"] as $propertyName => $propertyCount ) echo " $propertyName = $propertyCount"; if( is_array( $compinfo["sub"] )) { foreach( $compinfo["sub"] as $subcompinfo ) { echo " order number : ".$subcompinfo["ordno"]."<br />"; /* .. dito if subcomponents exists .. . */ } } }

[index] [top] [up]

#### 3.1.5.7 Delimiter

Directory/filename delimiter.
Default PHP constant DIRECTORY_SEPARATOR. If used, must be set BEFORE filename!
[index] [top] [up]

#### 3.1.5.8 Directory

Local directory to store/read iCal files, default ".".
Directory must be set BEFORE filename and must exist and be writeable otherwise FALSE is returned. If set using an config array and together with Filename, Directory are set first. When setting Directory any previously set URL is removed.
[index] [top] [up]

#### 3.1.5.9 Fileinfo

Only available in function getConfig, giving information in array format about directory, filename and filesize.

Example

$fileinfo = $vcalendar->getConfig( "fileinfo" );

output = array( <directory>, <filename>, <filesize> )

[index] [top] [up]

#### 3.1.5.10 Filename

iCal local file name, default created like (if not set):

$filename = date( "YmdHis" ).".ics";

$filename = date( "YmdHis" ).".xml"; // if format set to "xcal"

If not set, filename is created when requested, ex. in functions saveCalendar or getConfig("filename").
Local filename must be set AFTER setting directory (and opt. delimiter)! Filename (and opt. directory) must be readable/writeable otherwise FALSE is returned.
[index] [top] [up]

#### 3.1.5.11 Filesize

Only when getting configuration (using function getConfig).
Returns the size of the file in bytes, to be called
- after "saveCalendar()"
or
- after a "setConfig( "directory" / "filename" )" and before/after "parse()".
Getting the filesize for a remote file (URL) will always return zero.
[index] [top] [up]

#### 3.1.5.12 Format

Format for calendar output, "iCal"/"xCal", any case.
"iCal" is default (rfc2445), "xCal" force xml formatted output.
[index] [top] [up]

#### 3.1.5.13 Language

Language for calendar and component TEXT value properties as defined in [RFC 1766].
If NOT set in TEXT property parameters, language from "setConfig( "language", .." at component level will be used, if set, otherwise language from "setConfig( "language", .." at calendar level will be used, if set.
[index] [top] [up]

#### 3.1.5.14 NewlineChar

Character(s) used for carriage return + line feed (CR+LF), default "\r\n".
[index] [top] [up]

#### 3.1.5.15 TZID

Default (local?) timezone, will be used if no TZID parameter is supplied when setting DTSTART, DTEND, DUE or RECURRENCE-ID (auto completion). Note, some calendar software also require X-WR-TIMEZONE (to be set manually).
[index] [top] [up]

#### 3.1.5.16 Unique_id

Unique_id is used in property PRODID at calendar level and UID at component level, both created automatically, if not set.

PRODID The identifier is RECOMMENDED to be the identical syntax to the [RFC 822] addr-spec. A good method to assure uniqueness is to put the domain name or a domain literal IP address of the host on which.. .

Default AUTOMATICALLY generated by using PHP function gethostbyname( $_SERVER["SERVER_NAME"] ) when running in a web server environment or "localhost" when using command line interface. Used when setting other (domain) name than server name.
A strong recommendation is always to set unique_id when creating a new vcalendar or component object, to ensure accurate creation of all components UID property, also before parse, in case of missing UID.
[index] [top] [up]

#### 3.1.5.17 URL

When managing remote files with URL (writing using saveCalendar(), or reading using parse()), only protocol "http" ("webcal") is supported, i.e. url must be prefixed by "http://" ("webcal://") and suffixed by a valid filename.
When setting URL, any previously set Directory is removed.
The URL filename part can be retrieved by - getConfig( "filename" ).
When storing a remote iCal file locally, only directory need to be set, filename remains unchanged (i.e. 1. set URL, 2. parse, 3. set directory).

Example

$config = array( "unique_id" => "kigkonsult.se", "url", "http://www.iCal.net/depot/calendar.ics" ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $vcalendar->sort(); .. . .. . $vcalendar->setConfig( "directory", "depot" ); $vcalendar->saveCalendar(); // local save in "depot" folder, // using original filename

[index] [top] [up]

## 3.2 Calendar component object property function list

All calendar component property functions for get/set data.
For property format in detail, see RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar).

Notice: for properties and DATE-TIME with UTC time.

RFC2445: The date with UTC time, or absolute time, is identified by a LATIN CAPITAL LETTER Z suffix character (US-ASCII decimal 90), the UTC designator, appended to the time value. For example, the following represents January 19, 1998, at 0700 UTC:

DTSTART:19980119T070000Z

The TZID property parameter MUST NOT be applied to DATE-TIME properties whose time values are specified in UTC.

Notice: date limitation.
Due to a limitation in PHP date functions, e.g. mktime, strtotime, a date (e.g. while setting DTSTART property) before "January 1 1970 00:00:00 GMT" may force a PHP date function to generate an error or set date to "January 1 1970".

### 3.2.1 deleteProperty

General calendar delete property function,simplifying removal of calendar properties.
FALSE is returned if no property exists or when end-of-properties at consecutive function calls.

Format

deleteProperty( [ string PropName [, int order=1 ] )

propName - case independent, rfc2445 component property names, unknown/missing propName will be used as X-property. order - if missing 1st/next occurrence, used with multiply (property) occurrences

Example

$config = array( "unique_id" => "kigkonsult.se", "directory" => "import", "filename" => "file.ics" ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $e = $vcalendar->getComponent( "vevent" ); while( $e->deleteProperty( "comment" )) continue; // remove all COMMENT properties .. .

[index] [top] [up]

### 3.2.2 getProperty

General get property function, simplifying fetch of calendar properties.
FALSE is returned if no property exists or when end-of-properties at consecutive function calls.

Format

getProperty( string PropName [, int order=1 [, bool complete=FALSE ]] )

propName - case independent, rfc2445 component property names, unknown/missing propName will be used as X-property. order - if missing/FALSE 1st/next occurrence, otherwise with multiply occurrences (1st=1, 2nd=2.. .) complete - FALSE (default): output only property value TRUE : output = array("value" => <value> ,"params"=> <parameter array>)

Example

$config = array( "unique_id" => "kigkonsult.se", "directory" => "import", "filename" => "file.ics" ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); while( $vevent = $vcalendar->getComponent( "vevent" )) { $dtstart = $vevent->getProperty( "dtstart" ); // one occurrence $description = $vevent->getProperty( "description" ); // one occurrence while( $comment = $vevent->getProperty( "comment" )) { // MAY occur more than once .. . } .. .

[index] [top] [up]

### 3.2.3 parse

Parse strict rfc2445 component property text and/or ALARMs.
A rfc2445 strict formatted property text, in string or array format and starting with property name.
Complete ALARMs, all properties included, in array format and first array row as "BEGIN:VALARM", last as "END:VALARM" as well as TIMEZONE and standard/daylight subcomponents.
FALSE is returned if (read-file) problems occur.

Format

parse( mixed propertyText )

propertyText = string/array, rcf2445 formatted property/properties, property name must begin (first) line

example

.. . $vevent = & $vcalendar->newComponent( "vevent" ); $e->parse( "DTSTAMP:19970324T1200Z" ); $e->parse( "SEQUENCE:0" ); $e->parse( "ORGANIZER:MAILTO:jdoe@host1.com" ); $e->parse( array( "ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host1.com", "ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host2.com", "ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host3.com", "ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host4.com" )); $e->parse( "DTSTART:19970324T123000Z" ); $e->parse( "DTEND:19970324T210000Z" ); $e->parse( "CATEGORIES:MEETING,PROJECT" ); $e->parse( "CLASS:PUBLIC" ); $e->parse( "SUMMARY:Calendaring Interoperability Planning Meeting" ); $e->parse( "STATUS:DRAFT" ); $e->parse( array( "DESCRIPTION:Project xyz Review Meeting Minutes" ,"Agenda" ,"1. Review of project version 1.0 requirements." ,"2. Definition of project processes." ,"3. Review of project schedule." ,"Participants: John Smith, Jane Doe, Jim Dandy" ,"- It was decided that the requirements need to be signed off by ". "product marketing." ,"- Project processes were accepted." ,"- Project schedule needs to account for scheduled holidays and employee". " vacation time. Check with HR for specific dates." ,"- New schedule will be distributed by Friday." ,"- Next weeks meeting is cancelled. No meeting until 3/23." )); $e->parse( "LOCATION:LDB Lobby" ); $e->parse( "ATTACH;FMTTYPE=application/postscript:ftp://xyz.com/pub/conf/bkgrnd.ps" ); $e->parse( array( "BEGIN:VALARM", "ACTION:AUDIO", "TRIGGER;VALUE=DATE-TIME:19970224T070000Z", "ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-files/ssbanner.aud", "REPEAT:4", "DURATION:PT1H", "X-alarm:non-standard ALARM property", "END:VALARM" )); $e->parse( "X-xomment:non-standard property will be displayed, comma escaped"); .. .

[index] [top] [up]

### 3.2.4 setProperty

General set property function, simplifying insert of component properties. For properties where multiple occurrences are allowed, last parameter is an index, implementing replaceProperty functionality.
A successful update returns TRUE.

Format

setProperty( string PropName, mixed Proparg_1 *[, mixed Proparg_n] )

propName case independent, rfc2445 component property names, unknown propName will be regarded as X-property.

Example

$vevent = & $vcalendar->newComponent( "vevent" ); $vevent->setProperty( "dtstart" , array("year"=>2007,"month"=>4,"day"=>1,"hour"=>19)); $vevent->setProperty( "duration", 0, 0, 3 )); $vevent->setProperty( "LOCATION", "Central Plaza" ); $vevent->setProperty( "summary", "PHP summit" ); .. .

[index] [top] [up]

### 3.2.5 ACTION

This property defines the action to be invoked when an VALARM is triggered,
"AUDIO" / "DISPLAY" / "EMAIL" / "PROCEDURE". This property is REQUIRED and MUST NOT occur more than once.

##### Delete ACTION

Remove ACTION from component.

Format

deleteProperty( "Action" )

Example

$valarm->deleteProperty( "Action" );

##### Get ACTION

Fetch property value.

Format 1

getProperty( "Action" )

output = actionValue 1

Format 2

getProperty( "Action", FALSE , TRUE )

output = array( "value" => actionValue1 , "params" => xparam2 )

Example

$action = $valarm->getProperty( "action" );

##### Set ACTION

Insert property value.

Format

setProperty( "Action", actionValue [, xparam ] )

actionValue1 = one of "AUDIO" / "DISPLAY" / "EMAIL" / "PROCEDURE" xparam2 = array( *[ xparamkey => xparamvalue ] )

Example

$valarm->setProperty( "action", "DISPLAY" );

[index] [top] [up]

### 3.2.6 ATTACH

The property provides the capability to associate a document object with a calendar component. The property is is REQUIRED and MUST NOT occur more than once in an "ALARM" ("ACTION" "procedure"), OPTIONAL and MUST NOT occur more than once in an "ALARM" ("ACTION" "audio") and OPTIONAL and MAY occur more than once in VEVENT, VTODO, VJOURNAL and VALARM ("ACTION" "email") components.
The default value type for ATTACH is URI. The value type can also be set to BINARY to indicate inline binary encoded content information (params 2).

##### Delete ATTACH

Remove ATTACH from component.

Format

deleteProperty( "ATTACH" )

Example 1

$valarm->deleteProperty( "ATTACH" );

Example 2

Delete ATTACH property no 2.

$valarm->deleteProperty( "ATTACH", 2 );

Example 3

Deleting all ATTACH properties.

while( $valarm->deleteProperty( "ATTACH" )) continue;

##### Get ATTACH

Fetch property value.

Format 1

getProperty( "Attach" )

output = attachValue1

Format 2

getProperty( "ATTACH", propOrderNo/FALSE , TRUE )

output = array( "value" => attachValue1 , "params" => params2 )

Format 3

getProperty( "Attach", propOrderNo )

Get propOrderNo ATTACH

Example

$attach = $valarm->getProperty( "attach" );

##### Set ATTACH

Insert property value.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "attach", attachValue1 [, params [, propOrderNo ]] )

attachValue1 = URI / inline binary encoded content information. params2 = array( [ "ENCODING" => "BASE64", "VALUE" => "BINARY" ] [, "FMTTYPE" => contentType ] [, xparam ] ) contentType = The parameter value MUST be the TEXT for either an IANA registered content type or a non-standard content type. xparam = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

$vevent->setProperty( "attach" , "ftp://domain.com/pub/docs/agenda.doc" , array( "FMTTYPE" => "application/binary" ));

[index] [top] [up]

### 3.2.7 ATTENDEE

The property defines an "Attendee" within a calendar component and is OPTIONAL and MUST NOT occur more than once in a VALARM ("ACTION" "email"), OPTIONAL and MAY occur more than once in VEVENT, VTODO, VJOURNAL and VFREEBUSY components.
This value type for ATTENDEE is URI, a calendar user address.

##### Delete ATTENDEE

Remove ATTENDEE from component.

Format

deleteProperty( "ATTENDEE" )

Example 1

$valarm->deleteProperty( "ATTENDEE" );

Example 2

Delete ATTENDEE property no 2.

$valarm->deleteProperty( "ATTENDEE", 2 );

Example 3

Deleting all ATTENDEE properties.

while( $valarm->deleteProperty( "ATTENDEE" )) continue;

##### Get ATTENDEE

Fetch property value.

Format 1

getProperty( "Attendee" )

output = attendeeValue 1

Format 2

getProperty( "ATTENDEE", propOrderNo/FALSE , TRUE )

output = array( "value" => attendeeValue1 , "params" => array( params2 ))

Format 3

getProperty( "ATTENDEE", propOrderNo )

Get propOrderNo ATTENDEE

Example

$attendee = $valarm->getProperty( "attendee" );

##### Set ATTENDEE

Insert property value. If exist, default parameter values are removed after input (params2). Property value must be prefixed by protocol (ftp://, http://,mailto:, file://.. . ref. rfc 1738 ), if missing, "mailto:" is set (ex. indicating an internet mail address). Also MEMBER and DIR parameters must be prefixed by protocol. DELEGATED-TO, DELEGATED-FROM, SENT-BY parameters must use protocol "mailto:", prefixed if missing (ex. indicating an internet mail address).
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "attendee", attendeeValue [, params [, propOrderNo ]] )

attendeeValue1 = a calendar user address, a URI as defined by [RFC 1738] or any other IANA registered form for a URI. params2 = array( [CUTYPE] [,MEMBER] [,ROLE] [,PARTSTAT] [,RVSP] [,DELEGATED-TO] [,DELEGATED-FROM] [,SENT-BY] [,CN] [,DIR] [,LANGUAGE] [,xparams] ) CUTYPE = "CUTYPE" => "INDIVIDUAL" (An individual, Default) / "GROUP" (A group of individuals) / "RESOURCE" (A physical resource) / "ROOM" (A room resource) / "UNKNOWN" (Otherwise not known) / x-name (Experimental type) / iana-token (Other IANA registered type) MEMBER = "MEMBER" => array( *[ "single member of the group or list membership"]) ROLE = "ROLE" => "CHAIR" (Indicates chair of the calendar entity) / "REQ-PARTICIPANT" (required participation, Default) / "OPT-PARTICIPANT" (optional participation) / "NON-PARTICIPANT" (information purposes only) / x-name (Experimental role) / iana-token (Other IANA role) PARTSTAT = "PARTSTAT" => "NEEDS-ACTION" (Event needs action, Default) / "ACCEPTED" (Event accepted) / "DECLINED" (Event declined) / "TENTATIVE" (Event tentatively accepted) / "DELEGATED" (Event delegated) / "NEEDS-ACTION" (To-do needs action, Default) / "ACCEPTED" (To-do accepted) / "DECLINED" (To-do declined) / "TENTATIVE" (To-do tentatively accepted) / "DELEGATED" (To-do delegated) / "COMPLETED" (To-do completed. COMPLETED property has date/time completed) / "IN-PROCESS" (To-do in process of being completed) / "NEEDS-ACTION" (Journal needs action, Default) / "ACCEPTED" (Journal accepted) / "DECLINED" (Journal declined) / x-name (Experimental status) / iana-token (Other IANA registered status) RSVP = "RSVP" => "TRUE" / "FALSE", Default (reply expectation) DELEGATED-TO = "DELEGATED-TO" => array(*["single calendar user to specified by the property has delegated participation"]) DELEGATED-FROM = "DELEGATED-FROM" => array( *[ "single calendar user that have delegated their participation to the calendar user specified by the property" ] ) SENT-BY = "SENT-BY" => single calendar user that is acting on behalf of the calendar user specified by the property" LANGUAGE = "LANGUAGE" => language for text values in CN parameter" CN = "CN" => "common name to be associated with the calendar user specified by the property" DIR = "DIR" => "reference to a directory entry associated with the calendar user specified by the property" xparam = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

See rules in detail in RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar).

Example

$vevent->setProperty( "attendee" , "attendee1@ical.net" $vevent->setProperty( "attendee" , "attendee2@ical.net" , array( "cutype" => "INDIVIDUAL" , "member" => array( "member1@ical.net" , "member2@ical.net" , "member3@ical.net" ) , "role" => "CHAIR" , "PARTSTAT" => "ACCEPTED" , "RSVP" => "TRUE" , "DELEgated-to" => array( "part1@ical.net" , "part2@ical.net" , "part3@ical.net" ) , "delegateD-FROM" =>array( "cio@ical.net" , "vice.cio@ical.net") , "SENT-BY" => "secretary@ical.net" , "LANGUAGE" => "us-EN" , "CN" => "John Doe" , "DIR" => "http://www.ical.net/info.doc" , "x-agenda" => "status reports" // xparam , "x-length" => "15 min" )); // xparam

[index] [top] [up]

### 3.2.8 CATEGORIES

This property defines the categories for a calendar component and is OPTIONAL and MAY occur more than once in VEVENT, VTODO and VJOURNAL components.
The value type for CATEGORIES is TEXT.

##### Delete CATEGORIES

Remove CATEGORIES from component.

Format

deleteProperty( "CATEGORIES" )

Example 1

$vevent->deleteProperty( "CATEGORIES" );

Example 2

Delete CATEGORIES property no 2.

$vevent->deleteProperty( "CATEGORIES", 2 );

Example 3

Deleting all CATEGORIES properties.

while( $vevent->deleteProperty( "CATEGORIES" )) continue;

##### Get CATEGORIES

Fetch property value.

Format 1

getProperty( "CATEGORIES" )

output = categoryValue1

Format 2

getProperty( "CATEGORIES", propOrderNo/FALSE , TRUE )

output = array( "value" => categories1 , "params" => params2 )

Format 3

getProperty( "CATEGORIES", propOrderNo )

Get propOrderNo CATEGORIES

Example

$categories = $valarm->getProperty( "categories" );

##### Set CATEGORIES

Insert property value.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "categories", mixed categories [, params [, propOrderNo ]] )

categories1 = string categoryValue / array( *categoryValue ) categoryValue = textual categories or subtypes of the calendar component, can be specified as a list of categories separated by the COMMA character params2 = array( ["LANGUAGE" => "<lang>"][, xparam] ) xparam = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

$vevent->setProperty( "categories", "project_x" );

[index] [top] [up]

### 3.2.9 CLASS

This property defines the access classification for a calendar component and is OPTIONAL and MUST NOT occur more than once in VEVENT, VTODO and VJOURNAL components.

##### Delete CLASS

Remove CLASS from component.

Format

deleteProperty( "CLASS" )

Example

$vjournal->deleteProperty( "CLASS" );

##### Get CLASS

Fetch property value.

Format 1

getProperty( "CLASS" )

output = classValue1

Format 2

getProperty( "CLASS", FALSE , TRUE )

output = array "value" => classValue1 , "params" => xparam2 )

Example

$class = $valarm->getProperty( "class" );

##### Set CLASS

Insert property value.

Format

setProperty( "class", string classvalue [, xparam ] )

classvalue1 = "PUBLIC" / "PRIVATE" / "CONFIDENTIAL" / iana-token / x-name xparam2 = array( *[ xparamkey => xparamvalue ] )

Example

$vevent->setProperty( "class", "CONFIDENTIAL" );

[index] [top] [up]

### 3.2.10 COMMENT

This property specifies non-processing information intended to provide a comment to the calendar user and is OPTIONAL and MAY occur more than once in VEVENT, VTODO, VJOURNAL, VFREEBUSY, STANDARD and DAYLIGHT components.
The value type for COMMENT is TEXT.

##### Delete COMMENT

Remove COMMENT from component.

Format

deleteProperty( "COMMENT" )

Example 1

$vevent->deleteProperty( "COMMENT" );

Example 2

Delete COMMENT property no 2.

$vevent->deleteProperty( "COMMENT", 2 );

Example 3

Deleting all COMMENT properties.

while( $vevent->deleteProperty( "COMMENT" )) continue;

##### Get COMMENT

Fetch property value.

Format 1

getProperty( "COMMENT" )

output = commentValue1

Format 2

getProperty( "COMMENT", propOrderNo/FALSE , TRUE )

output = array( "value" => commentValue1 , "params" => params2 )

Format 3

getProperty( "COMMENT", propOrderNo )

Get propOrderNo COMMENT

Example

$comment = $vevent->getProperty( "comment" );

##### Set COMMENT

Insert property value.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "comment", commentValue [, params [, propOrderNo ]] )

commentValue1 = Value type Text params2 = array( ["ALTREP" => "<an alternate text representation, URI>"] [, "LANGUAGE" => "<lang>"] [, xparam ] ) xparam = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

$vevent->setProperty( "comment", "this is a comment" );

[index] [top] [up]

### 3.2.11 COMPLETED

This property defines the date and time that a VTODO was actually completed and is OPTIONAL and MUST NOT occur more than once.
The value type for COMPLETED is UTC DATE-TIME.

##### Delete COMPLETED

Remove COMPLETED from component.

Format

deleteProperty( "COMPLETED" )

Example

$vtodo->deleteProperty( "COMPLETED" );

##### Get COMPLETED

Fetch property value.

Format 1

getProperty( "COMPLETED" )

output = completedDate1

Format 2

getProperty( "COMPLETED", FALSE , TRUE )

output = array( "value" => completedDate1 , "params" => xparam2 )

Example

$completed = $vtodo->getProperty( "completed" );

##### Set COMPLETED

Insert property value. Input date is always a UTC DATE-TIME or, if "offset" parameter is used, converted to a UTC DATE-TIME. Notice, use function transformDateTime to change a datetime from local to UTC datetime.

Format

setProperty( "completed", completedDate [, xparam ] )

completedDate1 = array( "year" => int year , "month" => int month , "day" => int day [, "hour" => int hour , "min" => int min , "sec" => int sec , "tz" => offset ]] ) completedDate = int year , int month , int day [, int hour , int min , int sec ] completedDate = array( int year , int month , int day [, int hour , int min , int sec [, offset ]] ) completedDate = array ( "timestamp" => int timestamp [, "tz" => offset]) completedDate = string datestring // string date, acceptable by strtotime function, ex. "14 august 2006 16.00.00" (notice date restriction) offset = (+/-)HHmm[ss], local date + UTC offset => UTC DATE-TIME xparam2 = array( *[ xparamkey => xparamvalue ] )

Example 1

$config = array( "unique_id" => "kigkonsult.se"); $vcalendar = new vcalendar( $config ); $vtodo = & $vcalendar->newComponent( "vtodo" ); .. . $vtodo->setProperty( "completed", 2006, 8, 10, 10, 0, 0 ); // 10 august 2006 10.00 UTC

Example 2

$date = array("year" => 2006, "month" => 10, "day" => 10, "hour" => 10, "min" => 0, "sec" => 0, "tz" => "+0200"); // local date + UTC offset => UTCDATE-TIME $vtodo->setProperty( "completed", $date );

[index] [top] [up]

### 3.2.12 CONTACT

The property is used to represent textual contact information or alternately a reference to textual contact information associated with the calendar component. The property is OPTIONAL and MUST NOT occur more than once in a VFREEBUSY or MAY occur more than once in VEVENT, VTODO and VJOURNAL components.
The value type for CONTACT is TEXT.

##### Delete CONTACT

Remove CONTACT from component.

Format

deleteProperty( "CONTACT" )

Example 1

$vevent->deleteProperty( "CONTACT" );

Example 2

Delete CONTACT property no 2.

$vevent->deleteProperty( "CONTACT", 2 );

Example 3

Deleting all CONTACT properties.

while( $vevent->deleteProperty( "CONTACT" )) continue;

##### Get CONTACT

Fetch property value.

Format 1

getProperty( "CONTACT" )

output = contactValue1

Format 2

getProperty( "CONTACT", propOrderNo/FALSE , TRUE )

output = array( "value" => contactValue1 , "params" => params2 )

Format 3

getProperty( "CONTACT", propOrderNo )

Get propOrderNo CONTACT

Example

$contact = $vevent->getProperty( "contact" );

##### Set CONTACT

Insert property value.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "contact", contactValue [, params [, propOrderNo ]] )

contactValue1 = Value type TEXT params2 = array ( ["ALTREP" => "<an alternate text representation, URI>"] [, "LANGUAGE" => "<lang>"] [, xparam] ) xparam = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

$c->setProperty( "contact", "tel 012-34 56 789" )

[index] [top] [up]

### 3.2.13 CREATED

This property specifies the date and time that the calendar information was created by the calendar user agent in the calendar store. Note: This is analogous to the creation date and time for a file in the file system. The property is OPTIONAL and MUST NOT occur more than once in VEVENT, VTODO and VJOURNAL components.
The value type for CREATED is UTC DATE-TIME.

##### Delete CREATED

Remove CREATED from component.

Format

deleteProperty( "CREATED" )

Example

$vevent->deleteProperty( "CREATED" );

##### Get CREATED

Fetch property value.

Format 1

getProperty( "CREATED" )

output = createdDate1

Format 2

getProperty( "CREATED", FALSE , TRUE )

output = array( "value" => createdDate1 , "params" => xparam2 )

Example

$created = $vevent->getProperty( "CREATED" );

##### Set CREATED

Insert property value. Input date is always a UTC DATE-TIME or, if "offset" parameter is used, converted to a UTC DATE-TIME. Notice, use function transformDateTime to change a datetime from local to UTC datetime.

Format

setProperty( "created", [ createdDate [, xparam ]] )

createdDate1 = array( "year" => int year , "month" => int month , "day" => int day [, "hour" => int hour , "min" => int min , "sec" => int sec , "tz" => offset ]] ) createdDate = int year , int month , int day [, int hour , int min , int sec ] createdDate = array( int year , int month , int day [, int hour , int min , int sec [, offset ]] ) createdDate = array ( "timestamp" => int timestamp [, "tz" => offset ]) createdDate = string datestring // string date, acceptable by strtotime function, ex. "14 august 2006 16.00.00" (notice date restriction) offset = (+/-)HHmm[ss], local date + UTC offset => UTC DATE-TIME xparam2 = array( *[ xparamkey => xparamvalue ] )

Example 1

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); $vtodo = & $vcalendar->newComponent( "vtodo" ); .. . $vtodo->setProperty( "created", 2006, 8, 11, 14, 30, 35 ); // 11 august 2006 14.30.35 UTC

Example 2

$date = array("year" => 2006, "month" => 10, "day" => 10, "hour" => 10, "min" => 0, "sec" => 0, "tz" => "+0200"); // local date + UTC offset => UTC DATE-TIME $vtodo->setProperty( "created", $date ); .. .

Example 3

$vevent->setProperty( "created" ); // current UTC date-time is set if called without parameters

[index] [top] [up]

### 3.2.14 DESCRIPTION

This property provides a more complete textual description of the calendar component, than that provided by the SUMMARY property (, analogous to a mail BODY). The property is OPTIONAL, MUST NOT occur more than once within VEVENT, VTODO or VALARM (PROCEDURE) but can be specified multiple times within a VJOURNAL calendar component. The property is REQUIRED in VALARM (DISPLAY, EMAIL) component.
The value type for DESCRIPTION is TEXT.

##### Delete DESCRIPTION

Remove DESCRIPTION from component.

Format

deleteProperty( "DESCRIPTION" )

Example 1

$vevent->deleteProperty( "DESCRIPTION" );

Example 2

Delete DESCRIPTION property no 2.

$vjournal->deleteProperty( "DESCRIPTION", 2 );

Example 3

Deleting all DESCRIPTION properties.

while( $vjournal->deleteProperty( "DESCRIPTION" )) continue;

##### Get DESCRIPTION

Fetch property value.

Format 1

getProperty( "DESCRIPTION" )

output = descriptionValue1

Format 2

getProperty( "DESCRIPTION", FALSE , TRUE )

output = array( "value" => descriptionValue1 , "params" => params2 )

Example

$description = $vevent->getProperty( "description" );

##### Set DESCRIPTION

Insert property value.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "description", descriptionValue [, params [, propOrderNo ]] )

descriptionValue1 = Value type TEXT params2 = array( ["ALTREP" => "<an alternate text representation, URI>"] [, "LANGUAGE" => "<lang>"] [, xparam] ) xparam = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

$vevent->setProperty( "description", "This is a description" );

[index] [top] [up]

### 3.2.15 DTEND

This property specifies the date and time that a calendar component ends. The property is OPTIONAL and MUST NOT occur more than once in VFREEBUSY and VEVENT. In VEVENT, it only occurs if DURATION NOT occurs.
The default value type for DTEND is DATE-TIME, can be set to a DATE value type.
Notice that an end date without a time is in effect midnight of the day before the date, so for timeless dates, use the date following the event date for it to be correct. For an "all-day event" and using timeless dates, the DTEND is equal DTSTART plus one day, example all-day event (2007-12-01)
DTSTART;VALUE=DATE:20071201
DTEND;VALUE=DATE:20071202.

##### Delete DTEND

Remove DTEND from component.

Format

deleteProperty( "DTEND" )

Example

$vevent->deleteProperty( "DTEND" );

##### Get DTEND

Fetch property value.

Format 1

getProperty( "DTEND" )

output = dtendDate1

Format 2

getProperty( "DTEND", FALSE , TRUE )

output = array( "value" => dtendDate1 , "params" => params2 )

Example

$dtend = $vevent->getProperty( "dtend" );

##### Set DTEND

Insert property value. If DATE value type is expected, "VALUE" = "DATE" must be set (in params2) otherwise DATE-TIME (default) value type is set.
If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config TZID is set, date-time values will be set WITH timezone from config. Notice, use function transformDateTime to change a datetime from a time zone to another.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "dtend", dtendDate [, params2 ] )

dtendDate1 = array ( "year" => int year , "month" => int month , "day" => int day [, "hour" => int hour , "min" => int min , "sec" => int sec [, "tz" => mixed tz ]] ) dtendDate = int year , int month , int day [, int hour , int min , int sec [, mixed tz ]] dtendDate = array( int year , int month , int day [, int hour , int min , int sec [, mixed tz ]] ) dtendDate = array( "timestamp" => int timestamp [,"tz" => mixed tz]) dtendDate = string datestring // string date, acceptable by strtotime function, ex. "14 august 2006 16.00.00" (notice date restriction) dtendDate : Within the "VFREEBUSY" calendar component, the time MUST be specified in the UTC time format. tz = <timezone identifier> / UTC offset (timezone will be used as tzidparam (below), if tzidparam not set) offset = (+/-)HHmm[ss], local date + UTC offset => UTC DATE-TIME params2 = array([ tzidparam/datetimeparam/dateparam ] *[,xparams]) tzidparam = "TZID" => <timezone identifier> // output as local date-time with timezone identifier datetimeparam = "VALUE" => "DATE-TIME" // default, output as date-time dateparam = "VALUE" => "DATE" // output as DATE, ex. all-day event xparams = xparamkey => xparamvalue

Example 1

$vevent->setProperty( "dtend" , 2006, 8, 11, 16, 30, 0 ); // 11 august 2006 16.30.00 local date

Example 2

$vfreebusy->setProperty( "dtend" , 2006, 8, 11, 16, 30, 0, "-040000" ); // 11 august 2006 16.30.00 -040000 : local date + UTC offset => UTC DATE-TIME

Example 3

$vevent->setProperty( "dtend" , array( "year" =>, 2006, "month" => 8, "day"=> 11 ) , array( "VALUE" => "DATE" )); // end of one or more all-day events

[index] [top] [up]

### 3.2.16 DTSTAMP

The property indicates the date/time that the instance of the iCalendar object was created and is OPTIONAL and MUST NOT occur more than once in VEVENT, VTODO, VJOURNAL and VFREEBUSY components. However, DTSTAMP is AUTOMATICALLY GENERATED in iCalcreator.
DTSTAMP may be required when importing iCal files into some calendaring software
(MS etc.), as well as (calendar) x-properties "X-WR-CALNAME", "X-WR-CALDESC" and
"X-WR-TIMEZONE", METHOD property (value PUBLISH etc.) and the (also created) UID property.
The value type for DTSTAMP is UTC DATE-TIME.

##### Delete DTSTAMP

If DTSTAMP if removed from a component, DTSTAMP will automatically be recreated when calendar output functions like createCalendar, returnCalendar or saveCalendar is executed.

Format

deleteProperty( "DTSTAMP" )

Example

$vevent->deleteProperty( "DTSTAMP" );

##### Get DTSTAMP

Fetch property value.

Format 1

getProperty( "DTSTAMP" )

output = dtstampDate1

Format 2

getProperty( "DTSTAMP", FALSE , TRUE )

output = array( "value" => dtstampDate1 , "params" => xparam2 )

Example

$dtstamp = $vevent->getProperty( "dtstamp" );

##### Set DTSTAMP

Insert property value. Input date is always a UTC DATE-TIME or, if "offset" parameter is used, converted to a UTC DATE-TIME. Notice, use function transformDateTime to change a datetime To UTC.

Format

setProperty( "dtstamp", dtstampDate [, xparam ] )

dtstampDate1 = array( "year" => int year , "month" => int month , "day" => int day [, "hour" => int hour , "min" => int min , "sec" => int sec , "tz" => offset ]] ) dtstampDate = int year , int month , int day [, int hour , int min , int sec ] dtstampDate = array( int year , int month , int day [, int hour , int min , int sec [, offset ]] ) dtstampDate = array ( "timestamp" => int timestamp [, "tz" => offset ]) dtstampDate = string datestring // string date, acceptable by strtotime function, ex. "14 august 2006 16.00.00" (notice date restriction) offset = (+/-)HHmm[ss], local date + UTC offset => UTC DATE-TIME xparam2 = array( *[ xparamkey => xparamvalue ] )

Example 1

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); $vtodo = & $vcalendar->newComponent( "vtodo" ); .. . $vtodo->setProperty( "dstamp" , 2006, 8, 11, 7, 30, 1 ); // 11 august 2006 07.30.01 UTC

Example 2

$date = array("year" => 2006, "month" => 10, "day" => 10, "hour" => 10, "min" => 0, "sec" => 0, "tz" => "+0200"); // local date + UTC offset => UTC DATE-TIME $vtodo->setProperty( "dtstamp", $date ); .. .

[index] [top] [up]

### 3.2.17 DTSTART

This property specifies when the calendar component begins.
The property is OPTIONAL and MUST NOT occur more than once in VEVENT, VTODO, VJOURNAL and VFREEBUSY components.
The property is REQUIRED, but MUST NOT occur more than once in STANDARD and DAYLIGHT components.
The default value type for DTSTART is DATE-TIME, can be set to a DATE value type.
For an "all-day event" and using timeless dates, example (2007-12-01)
DTSTART;VALUE=DATE:20071201
DTEND;VALUE=DATE:20071202. // opt., in effect midnight of the day before the date!!

##### Delete DTSTART

Remove DTSTART from component.

Format

deleteProperty( "DTSTART" )

Example

$vevent->deleteProperty( "DTSTART" );

##### Get DTSTART

Fetch property value.

Format 1

getProperty( "DTSTART" )

output = dtstartDate1

Format 2

getProperty( "DTSTART", FALSE , TRUE )

output = array( "value" => dtstartDate1 , "params" => params2 )

Example

$dtstart = $vevent->getProperty( "dtstart" );

##### Set DTSTART

Insert property value. If DATE value type is expected, "VALUE" = "DATE" must be set (in params2) otherwise DATE-TIME (default) value type is set.
If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config TZID is set, date-time values will be set WITH timezone from config. Notice, use function transformDateTime to change a datetime from a time zones to another.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "dtstart", dtstartDate [, params ] )

dtstartDate1 = array( "year" => int year , "month" => int month , "day" => int day [, "hour" => int hour , "min" => int min , "sec" => int sec [, "tz" => mixed tz ]] ) dtstartDate = int year , int month , int day [, int hour , int min , int sec [, mixed tz ]] dtstartDate = array( int year , int month , int day [, int hour , int min , int sec [, mixed tz ]] ) dtstartDate = array("timestamp" => int timestamp [, "tz" => mixed tz]) dtstartDate = string datestring // string date, acceptable by strtotime function, ex. "14 august 2006 16.00.00" (notice date restriction) dtstartDate : Within the "VFREEBUSY" calendar component, the dtstartDate MUST be specified in the UTC time format. tz = <timezone identifier> / offset (timezone will be used as tzidparam (below), if tzidparam not set) offset = (+/-)HHmm[ss], local date + UTC offset => UTC DATE-TIME params2 = array([ tzidparam/datetimeparam/dateparam ] *[, xparams]) tzidparam = "TZID" => <timezone identifier> // output as local date-time with timezone identifier datetimeparam = "VALUE" => "DATE-TIME" // default, output as date-time dateparam = "VALUE" => "DATE" // output as DATE, ex. all-day event xparams = xparamkey => xparamvalue

Example 1

$vevent->setProperty( "dstart" , 2006, 8, 11, 7, 30, 1 ); // 11 august 2006 07.30.01 local date

Example 2

$vevent->setProperty( "dstart" , 2006, 8, 11, 16, 30, 0, "-040000" ); // 11 august 2006 16.30.00 -040000, // local date + UTC offset => UTC DATE-TIME

Example 3

$vevent->setProperty( "dtstart" , array( "year" =>, 2006, "month" => 8, "day"=> 11 ) , array( "VALUE" => "DATE" )); // start of an all-day event, or a period of (entire) days

[index] [top] [up]

### 3.2.18 DUE

This property defines the date and time when a VTODO is expected to be completed and is OPTIONAL and MUST NOT occur more than once and only if DURATION NOT occurs.
The default value type for DUE is DATE-TIME, can be set to a DATE value type.

##### Delete DUE

Remove DUE from component.

Format

deleteProperty( "DUE" )

Example

$vtodo->deleteProperty( "DUE" );

##### Get DUE

Fetch property value.

Format 1

getProperty( "DUE" )

output = dueDate1

Format 2

getProperty( "DUE", FALSE , TRUE )

output = array( "value" => dueDate1 , "params" => params2 )

Example

$due = $vtodo->getProperty( "due" );

##### Set DUE

Insert property value. If DATE value type is expected, "VALUE" = "DATE" must be set (in params2) otherwise DATE-TIME (default) value type is set.
If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config TZID is set, date-time values will be set WITH timezone from config. Notice, use function transformDateTime to change a datetime from a time zone to another.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "due", dueDate [, params ] )

dueDate1 = array( "year" => int year , "month" => int month , "day" => int day [, "hour" => int hour , "min" => int min , "sec" => int sec [, "tz" => mixed tz ]] ) dueDate = int year , int month , int day [, int hour , int min , int sec [, mixed tz ]] dueDate = array( int year , int month , int day [, int hour , int min , int sec [, mixed tz ]] ) dueDate = array( "timestamp" => int timestamp [, "tz" => mixed tz]) dueDate = string datestring // string date, acceptable by strtotime function, ex. "14 august 2006 16.00.00" (notice date restriction) tz = <timezone identifier> / offset (timezone will be used as tzidparam (below), if tzidparam not set) offset = (+/-)HHmm[ss], local date + UTC offset => UTC DATE-TIME params2 = array([ tzidparam/datetimeparam/dateparam ] *[, xparams]) tzidparam = "TZID" => <timezone identifier> // output as local date-time with timezone identifier datetimeparam = "VALUE" => "DATE-TIME" // default, output as date-time dateparam = "VALUE" => "DATE" // output as DATE, "during the day" xparams = xparamkey => xparamvalue

Example 1

$vtodo->setProperty( "due" , 2006, 8, 11, 18, 0, 0 ); // 11 august 2005 18.00.00 local date

Example 2

$vtodo->setProperty( "due" , 2006, 8, 11, 16, 30, 0, "-040000" ); // 11 august 2006 16.30.00 -040000 // local date + UTC offset sets UTCDATE-TIME

Example 3

$vtodo->setProperty( "due" , array( "year" =>, 2006, "month" => 8, "day"=> 11 ) , array( "VALUE" => "DATE" )); // due "during the day"

[index] [top] [up]

### 3.2.19 DURATION

The property specifies a positive duration of time
In a VEVENT it is OPTIONAL and MUST NOT occur more than once and MUST NOT occur in pair with DTEND. If one occurs, so MUST NOT the other.
In a VTODO it is OPTIONAL and MUST NOT occur more than once and MUST NOT occur in pair with DUE. If one occurs, so MUST NOT the other.
In a VFREEBUSY it is OPTIONAL and MUST NOT occur more than once.
In a VALARM it is OPTIONAL and MUST NOT occur more than once and MUST occur in pair with TRIGGER. If one occurs, so MUST the other.

##### Delete DURATION

Remove DURATION from component.

Format

deleteProperty( "DURATION" )

Example

$valarm->deleteProperty( "DURATION" );

##### Get DURATION

Fetch property value.

Format 1

getProperty( "DURATION" )

output = duration1

Format 2

getProperty( "DURATION", FALSE , TRUE )

output = array( "value" => duration1 , "params" => xparam2 )

Example

$duration = $vtodo->getProperty( "duration" );

option

If a 4th argument is used and set to TRUE, returned output is in a DATE-TIME output format (like DTEND / DUE), based on DTSTART value with added DURATION value.

##### Set DURATION

Insert property value.

Format

setProperty( "duration", duration [, xparam ] )

duration1 = array ( "week" => int week ) duration1 = array ( "day" => int day ) [, "hour" => int hour , "min" => int min , "sec" => int sec ]) duration = array ( "sec" => int sec ) duration = array( int week/false [, int day/false [, int hour , int min , int sec ]] ) duration = int week/false [, int day/false [, int hour , int min , int sec ]] duration = string dur-value = ["+"] "P" (dur-date/dur-time/dur-week) dur-date = dur-day [dur-time] dur-time = "T" (dur-hour / dur-minute / dur-second) dur-week = 1*DIGIT "W" dur-hour = 1*DIGIT "H" [dur-minute] dur-minute = 1*DIGIT "M" [dur-second] dur-second = 1*DIGIT "S" dur-day = 1*DIGIT "D" xparam2 = array( *[ xparamkey => xparamvalue ] )

Example 1

$vtodo->setProperty "duration" , array( "day" => 1 ));

// one day

Example 2

$vtodo->setProperty( "duration" , "PT4H" );

// four hours

[index] [top] [up]

### 3.2.20 EXDATE

This property defines the list of date/time exceptions for a recurring calendar component and is OPTIONAL and MAY occur more than once in VEVENT, VTODO, VJOURNAL components.
The default value type for EXDATE is DATE-TIME, can be set to a DATE value type.

##### Delete EXDATE

Remove EXDATE from component.

Format

deleteProperty( "EXDATE" )

Example 1

$vtodo->deleteProperty( "EXDATE" );

Example 2

Delete EXDATE property no 2.

$vjournal->deleteProperty( "EXDATE", 2 );

Example 3

Deleting all EXDATE properties.

while( $vjournal->deleteProperty( "EXDATE" )) continue;

##### Get EXDATE

Fetch property value.

Format 1

getProperty( "EXDATE" )

output = exdates1

Format 2

getProperty( "exdate", propOrderNo/FALSE, TRUE )

output = array( "value" => exdates1 , "params" => xparams2 )

Format 3

getProperty( "EXDATE", propOrderNo )

Get propOrderNo EXDATE

Example

$exdate = $vtodo->getProperty( "exdate" );

##### Set EXDATE

Insert property value.
If "TZID" is set in params, ex. "TZID" = "CET", all timezone or offset in dates are ignored and DATE-TIME value type is set.
If DATE value type is set in params ("VALUE" = "DATE"), all timezone or offset in dates are ignored.
If no "VALUE" parameter in params, DATE-TIME (default) value type is set.
If empty params and offset in 1st date, all remaining dates are set to UTC.
If no "TZID" is set in params and timezone in 1st date, all remaining dates are within this timezone and param "TZID" is set.
If none of the above rules are applicable, DATE-TIME and local date is set default.
Notice, use function transformDateTime to change a datetime from a time zone to another.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "exdate", exdates [, xparams [, propOrderNo ]] )

exdates1 = array ( date *[, date ] ) date = array( int year , int month , int day [, int hour , int min , int sec [, mixed tz ]] ) date1 = array( "year" => int year , "month" => int month , "day" => int day [, "hour" => int hour , "min" => int min , "sec" => int sec [, "tz" => mixed tz ]] ) date = array( "timestamp" => int timestamp [, "tz" => mixed tz]) date = string datestring // string date, acceptable by strtotime function, ex. "14 august 2006 16.00.00" (notice date restriction) tz = <timezone identifier> / offset (timezone will be used as tzidparam (below), if tzidparam not set) offset = (+/-)HHmm[ss], local date + UTC offset => UTC DATE-TIME params2 = array([(datetimeparam/dateparam) / tzidparam] [,xparam]) datetimeparam = "VALUE" => "DATE-TIME" // default, output as date-time dateparam = "VALUE" => "DATE" // output as DATE tzidparam = "TZID" => <timezone identifier> xparams = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example 1

$vevent->setProperty( "exdate" , array( array( 2006, 8, 14, 16, 0, 0 )); // >exclude 2006-08-14 16.00.00 (local date) from recurrence pattern

Example 2

$vevent->setProperty( "exdate" , array( array("year" =>,2006,"month" => 8,"day"=> 11)) , array( "VALUE" => "DATE" )); // exclude 2006-08-11 from recurrence pattern;

[index] [top] [up]

### 3.2.21 EXRULE

This property defines a rule or repeating pattern for an exception to a recurrence set and is OPTIONAL and MAY occur more than once in VEVENT, VTODO, VJOURNAL components.

##### Delete EXRULE

Remove EXRULE from component.

Format

deleteProperty( "EXRULE" )

Example 1

$vtodo->deleteProperty( "EXRULE" );

Example 2

Delete EXRULE property no 2.

$vjournal->deleteProperty( "EXRULE", 2 );

Example 3

Deleting all EXRULE properties.

while( $vjournal->deleteProperty( "EXRULE" )) continue;

##### Get EXRULE

Fetch property value.

Format 1

getProperty( "EXRULE" )

output = recur1

Format 2

getProperty( "exrule", propOrderNo/FALSE, TRUE )

output = array( "value" => recur1 , "params" => xparam2 )

Format 3

getProperty( "EXRULE", propOrderNo )

Get propOrderNo EXRULE

Example

$exrule = $vtodo->getProperty( "exrule" );

##### Set EXRULE

Insert property value.
Notice, use function transformDateTime to change a datetime to UTC time zone.
Parameters, will be ordered as prescribed in rcf2445.

Format

setProperty( "exrule", recur [, xparams [, propOrderNo ]] )

See rules in detail in RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar).

recur1 = array( "FREQ"=>freq // either UNTIL or COUNT may appear in a "recur", but UNTIL and COUNT MUST NOT occur in the same "recur" [, "UNTIL" "=>" >enddate ] [, "COUNT" "=>" 1*DIGIT ] // the rest of these keywords are optional, but MUST NOT occur more than once [, "INTERVAL" "=>" 1*DIGIT ] [, "BYSECOND" "=>" byseclist ] [, "BYMINUTE" "=>" byminlist ] [, "BYHOUR" "=>" byhrlist ] [, "BYDAY" "=>" bywdaylist ] [, "BYMONTHDAY" "=>" bymodaylist ] [, "BYYEARDAY" "=>" byyrdaylist ] [, "BYWEEKNO" "=>" bywknolist ] [, "BYMONTH" "=>" bymolist ] [, "BYSETPOS" "=>" bysplist ] [, "WKST" "=>" weekday ] [, x-name "=>" text ] ) freq = "SECONDLY" / "MINUTELY" / "HOURLY" / "DAILY" / "WEEKLY" / "MONTHLY" / "YEARLY" enddate = date enddate = / date-time ;An UTC DATE-TIME value byseclist = seconds byseclist = array(seconds *(, seconds )) seconds = 1DIGIT / 2DIGIT ;0 to 59 byminlist = minutes byminlist = array( minutes *(, minutes )) minutes = 1DIGIT / 2DIGIT ;0 to 59 byhrlist = hour byhrlist = array( hour *(, hour )) hour = 1DIGIT / 2DIGIT ;0 to 23 bywdaylist = weekdaynum bywdaylist = array( weekdaynum *("," weekdaynum )) weekdaynum = array( [([plus] ordwk / minus ordwk)], "DAY" => weekday ) plus = "+" minus = "-" ordwk = 1DIGIT / 2DIGIT ;1 to 53 weekday = "SU" / "MO" / "TU" / "WE" / "TH" / "FR" / "SA" ; Corresponding to ; SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, ; FRIDAY, SATURDAY and SUNDAY days of the week. bymodaylist = monthdaynum bymodaylist = array( monthdaynum *(, monthdaynum )) monthdaynum = ( [plus] ordmoday ) / ( minus ordmoday ) ordmoday = 1DIGIT / 2DIGIT ;1 to 31 byyrdaylist = yeardaynum byyrdaylist = array( yeardaynum *(, yeardaynum )) yeardaynum = ( [plus] ordyrday ) / ( minus ordyrday ) ordyrday = 1DIGIT / 2DIGIT / 3DIGIT ;1 to 366 bywknolist = weeknum bywknolist = array( weeknum *(, weeknum )) weeknum = ( [plus] ordwk ) / ( minus ordwk ) bymolist = monthnum bymolist = array( monthnum *(, monthnum )) monthnum = 1DIGIT / 2DIGIT ;1 to 12 bysplist = setposday bysplist = array( setposday *(, setposday )) setposday = yeardaynum

xparam2 = array( *[ xparamkey => xparamvalue ] ) propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

$vevent->setProperty( "Exrule" , array( "FREQ" => "MONTHLY" , "UNTIL" => "20060831" // DATE / DATE-TIME in UTC format; string/array, see CREATED format , "INTERVAL" => 2 , "WKST" => "SU" , "BYSECOND" => 2 , "BYMINUTE" => array( 2, -4, 6 ) // (*) , "BYHOUR" => array( 2, 4, -6 ) // (*) , "BYMONTHDAY" => -2 // (*) , "BYYEARDAY" => 2 // (*) , "BYWEEKNO" => array( 2, -4, 6 ) // (*) , "BYMONTH" => 2 // (*) , "BYSETPOS" => array( 2, -4, 6 ) // (*) , "BYday" => array( array(-2, "DAY" => "WE" ) , array( 3, "DAY" => "TH") , array( 5, "DAY" => "FR") , array( "DAY" => "MO")) // (**) , "X-NAME" => "x-value" ) , array( "xparamkey" => "xparamValue" )); $vtodo->setProperty( >"exrule" , array( "FREQ" => "WEEKLY" , "COUNT" => 2 , "INTERVAL" => 2 , "WKST" => "SU" , "BYSECOND" => array( -2, 4, 6 ) // (*) , "BYMINUTE" => -2 // (*) , "BYHOUR" => 2 // (*) , "BYMONTHDAY" => array( 2, -4, 6 ) // (*) , "BYYEARDAY" => array( -2, 4, 6 ) // (*) , "BYWEEKNO" => -2 // (*) , "BYMONTH" => array( 2, 4, -6 ) // (*) , "BYSETPOS" => -2 // (*) , "BYday" => array( 5, "DAY" => "WE" ) // (**) , "X-NAME" => "x-value" ) , array( "xparamkey" => "xparamValue" )); //(*) single value/array of values //(**) single value array /array of arrays

[index] [top] [up]

### 3.2.22 FREEBUSY

The property defines one or more free or busy time intervals in a VFREEBUSY calendar component.
The value type for FREEBUSY is PERIOD. A PERIOD is a DATE-TIME/DATE-TIME or a DATE-TIME/duration.

##### Delete FREEBUSY

Remove FREEBUSY from component.

Format

deleteProperty( "FREEBUSY" )

Example 1

$vfreebusy->deleteProperty( "FREEBUSY" );

Example 2

Delete FREEBUSY property no 2.

$vfreebusy->deleteProperty( "FREEBUSY", 2 );

Example 3

Deleting all FREEBUSY properties.

while( $vfreebusy->deleteProperty( "FREEBUSY" )) continue;

##### Get FREEBUSY

Fetch property value.

Format 1

getProperty( "FREEBUSY" )

output = array( "fbtyp" => freebusytype1 , periods2 )

Format 3

getProperty( "FREEBUSY", propOrderNo/FALSE , TRUE )

output = array( "value" => array("fbtype" => freebusytype1 ,periods2) , "params" => xparams 3 )

Format 3

getProperty( "FREEBUSY", propOrderNo )

Get propOrderNo FREEBUSY

Example

$freebusy = $vfreebusy->getProperty( "FREEBUSY" );

##### Set FREEBUSY

Insert property value. A FREEBUSY input date is always a UTC DATE-TIME.

Format

setProperty( "freebusy",freebusytype,fbperiods [,xparams [,propOrderNo ]] )

freebusytype1 = one of "FREE" / "BUSY" Default / "BUSY-UNAVAILABLE" / "BUSY-TENTATIVE" / x-name fbperiods = array( periods2 ) periods2 = array( startdate, enddate/duration ) *[, array( startdate, enddate/duration )] startdate/enddate = array( int year , int month , int day , int int hour , int min , int day ) startdate/enddate = array( "year" => int year , "month" => int month , "day" => int day , "hour" => int hour , "min" => int min , "sec" => int sec ) // output format startdate/enddate = array( "timestamp" => int timestamp ) startdate/enddate = string datestring // string date, acceptable by strtotime function, ex. "14 august 2006 16.00.00" (notice date restriction) startdate/enddate : date and time values MUST be an UTC DATE-TIME duration = array( int week/false [, int day/false , int hour , int min , int sec] ) duration = array( "week" => int week/false [, "day" => int day/false [, "hour" => int hour , "min" => int min , "sec" => int sec ]] ); // output format duration = array( "sec" => int sec ) duration = string dur-value = (["+"]/"-") "P" (dur-date/dur-time/dur-week) dur-date = dur-day [dur-time] dur-time = "T" (dur-hour / dur-minute / dur-second) dur-week = 1*DIGIT "W" dur-hour = 1*DIGIT "H" [dur-minute] dur-minute = 1*DIGIT "M" [dur-second] dur-second = 1*DIGIT "S" dur-day = 1*DIGIT "D" xparams3 = array( *[ xparamkey => xparamvalue ] ) propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

See rules in detail in RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar).

$fdate1 = array ( 2001, 1, 1, 1, 1, 1 ); alt. $fdate1 = array ( "year" => 2001 , "month" => 1 , "day" => 1 , "hour" => 1 , "min" => 1 , "sec" => 1 ); $fdate2 = array ( 2002, 2, 2, 2, 2, 2 ); $fdate3 = array ( 2003, 3, 3, 3, 3, 3 ); $fdate4 = "4 April 2005 4:4:4"; $fdate7 = array ( "year" => 2007 , "month" => 7 , "day" => 7 ); $fdur6 = array ( "week" => 0 , "day" => 5 , "hour" => 5 , "min" => 5 , "sec" => 5 ); $fdur7 = array ( 0, 0, 6 ); // duration for 6 hours $fdur8 = "P2D"; // duration two days $freebusy->setProperty "freebusy" , "FREE" , array( array( $fdate1, $fdate2 ) , array( $fdate3, $fdur6 ) , array( $fdate4, $fdate5 ))); $freebusy->setProperty("freebusy" , "Busy" , array( array( array( $fdate1, $fdate2 ) , array( $fdate3, $fdur8 ) , array( $fdate4, $fdur7 ) , array( $fdate1, $fdate3 )));

[index] [top] [up]

### 3.2.23 GEO

This property specifies information related to the global position for the activity specified by VEVENT and VTODO components and is OPTIONAL and MUST NOT occur more than once.
Value type for latitude and longitude is FLOAT. "Values for latitude and longitude shall be expressed as decimal fractions of degrees. Whole degrees of latitude shall be represented by a two-digit decimal number ranging from 0 through 90. Whole degrees of longitude shall be represented by a decimal number ranging from 0 through 180. When a decimal fraction of a degree is specified, it shall be separated from the whole number of degrees by a decimal point."

##### Delete GEO

Remove GEO from component.

Format

deleteProperty( "GEO" )

Example

$vevent->deleteProperty( "GEO" );

##### Get GEO

Fetch property value.

Format 1

getProperty( "GEO" )

output = array( "latitude" => <latitude> , "longitude" => <longitude>))

Format 2

getProperty( "GEO", FALSE , TRUE )

output = array( "value" => array ( "latitude" => <latitude> , "longitude" => <longitude>)) , "params" => xparam 1 )

Example

$geo = $vevent->getProperty( "GEO" );

##### Set GEO

Insert property value.

Format

setProperty( "geo", float latitude, float longitude [, xparam ] )

xparam 1 = array( *[ xparamkey => xparamvalue ] )

Example

$vevent->setProperty( "geo", 11.23456, -23.45678 );

[index] [top] [up]

### 3.2.24 LAST-MODIFIED

The property specifies the date and time that the information associated with the calendar component was last revised in the calendar store. The property is OPTIONAL and MUST NOT occur more than once in VEVENT, VTODO, VJOURNAL and VTIMEZONE components.
The value type for LAST-MODIFIED is UTC DATE-TIME.

##### Delete LAST-MODIFIED

Remove LAST-MODIFIED from component.

Format

deleteProperty( "LAST-MODIFIED" )

Example

$vevent->deleteProperty( "LAST-MODIFIED" );

##### Get LAST-MODIFIED

Fetch property value.

Format 1

getProperty( "LAST-MODIFIED" )

output = moddate1

Format 2

getProperty( "LAST-MODIFIED", FALSE , TRUE )

output = array( "value" => moddate1 , "params" => xparam2 )

Example

$lastMod = $vevent->getProperty( "LAST-MODIFIED" );

##### Set LAST-MODIFIED

Insert property value. Input date is always a UTC DATE-TIME or, if "offset" parameter is used, converted to a UTC DATE-TIME. Notice, use function transformDateTime to change a datetime to UTC time zone.

Format

setProperty( "Last-Modified" [, moddate [, xparam ]] )

moddate1 = array( "year" => int year , "month" => int month , "day" => int day [, "hour" => int hour , "min" => int min , "sec" => int sec , "tz" => offset ]] ) completedDate = int year , int month , int day [, int hour , int min , int sec ] completedDate = array( int year , int month , int day [, int hour , int min , int sec [, offset ]] ) completedDate = array ( "timestamp" => int timestamp [, "tz" => offset]) completedDate = string datestring // string date, acceptable by strtotime function, ex. "14 august 2006 16.00.00" (notice date restriction) offset = (+/-)HHmm[ss], local date + UTC offset => UTC DATE-TIME xparam2 = array( *[ xparamkey => xparamvalue ] )

Example 1

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); $vtodo = & $vcalendar->newComponent( "vtodo" ); .. . $vtodo->setProperty("last-modified" , 2006, 8, 14, 12, 1, 2 ); // 14 august 2006 12.01.02 UTC

Example 2

$date = array("year" => 2006, "month" => 10, "day" => 10, "hour" => 10, "min" => 0, "sec" => 0, "tz" => "+0200"); // local date + UTC offset => UTC DATE-TIME $vtodo->setProperty( "last-modified", $date ); .. .

Example 3

$vevent->setProperty( "last-modified" ); // current UTC DATE-TIME is set if called without parameters

[index] [top] [up]

### 3.2.25 LOCATION

The property defines the intended venue for the activity defined by a calendar component. The property is OPTIONAL and MUST NOT occur more than once in VEVENT and VTODO components.
The value type for LOCATION is TEXT.

##### Delete LOCATION

Remove LOCATION from component.

Format

deleteProperty( "LOCATION" )

Example

$vevent->deleteProperty( "LOCATION" );

##### Get LOCATION

Fetch property value.

Format 1

getProperty( "LOCATION" )

output = location1

Format 2

getProperty( "LOCATION", FALSE , TRUE )

output = array( "value" => location1 , "params" => param2 )

Example

$location = $vevent->getProperty( "LOCATION" );

##### Set LOCATION

Insert property value.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "location", string location [, array param] )

location1 = Value type TEXT params2 = array( ["ALTREP" => "<an alternate text representation, URI>"] [, "LANGUAGE" => "<lang>"] [, xparam ] xparam = *[ xparamkey => xparamvalue ]

Example

$vevent->setProperty( "location", "Buckingham Palace" );

[index] [top] [up]

### 3.2.26 ORGANIZER

The property defines the organizer for a calendar component and is OPTIONAL and MUST NOT occur more than once in VEVENT, VTODO, VJOURNAL and VFREEBUSY components.
This value type for ORGANIZER is URI, a calendar user address.

##### Delete ORGANIZER

Remove ORGANIZER from component.

Format

deleteProperty( "ORGANIZER" )

Example

$vevent->deleteProperty( "ORGANIZER" );

##### Get ORGANIZER

Fetch property value.

Format 1

getProperty( "ORGANIZER" )

output = organizer1

Format 2

getProperty( "ORGANIZER", FALSE , TRUE )

output = array( "value" => organizer1 , "params" => params2 )

Example

$organizer = $vevent->getProperty( "ORGANIZER" );

##### Set ORGANIZER

Insert property value. Property value must be prefixed by protocol (ftp://, http://,mailto:, file://.. . ref. rfc 1738 ). Also DIR parameter must be prefixed by protocol. SENT-BY parameter must use protocol "mailto:", prefixed if missing.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "organizer", organizer [, params] )

organizer1 = a calendar user address, a URI as defined by [RFC 1738] or any other IANA registered form for a URI. params2 = array( ["LANGUAGE" => "<lang>" (applies to the CN parameter value) ] [, "CN" => "common name to be associated with the calendar user specified by the property"] [, "DIR" => "reference to a directory entry associated with the calendar user specified by the property" ] [, "SENT-BY" => "single calendar user that is acting on behalf of the calendar user specified by the property" ] [, xparam ] xparam = *[ xparamkey => xparamvalue ]

Example

$dir = "ldap://domain.com:6666/o=3DDC%20Comp,c=3DUS??(cn=3DJohn%20Doe)"; $vevent->setProperty( "organizer" , "ical@domain.com" , array( "CN" => "John Doe" , "DIR" => $dir , "SENT-BY" => "secretary@domain.com" , "X-Key1" => "X-Value1" , "X-Key2" => "X-Value2" ));

[index] [top] [up]

### 3.2.27 PERCENT-COMPLETE

This property is used by an assignee or delegatee of a VTODO to convey the percent completion of a VTODO to the Organizer and is OPTIONAL and MUST NOT occur more than once.
The property value is a positive integer between zero and one hundred. A value of "0" indicates the VTODO has not yet been started. A value of "100" indicates that the VTODO has been completed. Integer values in between indicate the percent partially complete.

##### Delete PERCENT-COMPLETE

Remove PERCENT-COMPLETE from component.

Format

deleteProperty( "PERCENT-COMPLETE" )

Example

$vtodo->deleteProperty( "PERCENT-COMPLETE" );

##### Get PERCENT-COMPLETE

Fetch property value.

Format 1

getProperty( "PERCENT-COMPLETE" )

output = percent1

Format 2

getProperty( "PRIORITY", FALSE , TRUE )

output = array( "value" => percent1 , "params" => xparam2 )

Example

$percent = $vtodo->getProperty( "PERCENT-COMPLETE" );

##### Set PERCENT-COMPLETE

Insert property value.

Format

setProperty( "Percent-Complete", percent [, xparam ] )

percent1 = Value type INTEGER xparam2 = array( *[ xparamkey => xparamvalue ] )

Example

$vtodo->setProperty( "percent-complete", 90 );

[index] [top] [up]

### 3.2.28 PRIORITY

The property defines the relative priority for a calendar component and is OPTIONAL and MUST NOT occur more than once in VEVENT and VTODO components.
The priority is specified as an integer in the range zero to nine.
A value of zero (US-ASCII decimal 48) specifies an undefined priority.
A value of one (US-ASCII decimal 49) is the highest priority.
A value of two (US-ASCII decimal 50) is the second highest priority.
Subsequent numbers specify a decreasing ordinal priority.
A value of nine (US-ASCII decimal 58) is the lowest priority.

##### Delete PRIORITY

Remove PRIORITY from component.

Format

deleteProperty( "PRIORITY" )

Example

$vevent->deleteProperty( "PRIORITY" );

##### Get PRIORITY

Fetch property value.

Format 1

getProperty( "PRIORITY" )

output = priority1

Format 2

getProperty( "PRIORITY", FALSE , TRUE )

output = array( "value" => priority1 , "params" => xparam2 )

Example

$priority = $vevent->getProperty( "priority" );

##### Set PRIORITY

Insert property value.

Format

setProperty( "priority", priority [, xparam ] )

priority1 = Value type INTEGER xparam2 = array( *[ xparamkey => xparamvalue ] )

Example

$vevent->setProperty( "priority", 3 );

[index] [top] [up]

### 3.2.29 RDATE

This property defines the list of date/times for a recurrence set and is OPTIONAL and MAY occur more than once in VEVENT, VTODO, VJOURNAL, STANDARD and DAYLIGHT components.
The default value type for RDATE is DATE-TIME, can be set to DATE or PERIOD (params 2).

##### Delete RDATE

Remove RDATE from component.

Format

deleteProperty( "RDATE" )

Example 1

$vtodo->deleteProperty( "RDATE" );

Example 2

Delete RDATE property no 2.

$vjournal->deleteProperty( "RDATE", 2 );

Example 3

Deleting all RDATE properties.

while( $vjournal->deleteProperty( "RDATE" )) continue;

##### Get RDATE

Fetch property value.

Format 1

getProperty( "RDATE" )

output = dates1

Format 2

getProperty( "RDATE", propOrderNo/FALSE , TRUE )

output = array( "value" => dates1 , "params" => params2 )

Format 3

getProperty( "RDATE", propOrderNo )

Get propOrderNo RDATE

Example

$rdates = $vevent->getProperty( "RDATE" );

##### Set RDATE

Insert property value.
If "TZID" is set in params, ex. "TZID" = "CET", all timezone or offset in dates are ignored and DATE-TIME value type is set.
If DATE value type is set in params ("VALUE" = "DATE"), all timezone or offset in dates are ignored.
If "PERIOD" is set in params ("VALUE" = "PERIOD"), DATE-TIME value type is set.
If no "VALUE" parameter in params, DATE-TIME (default) value type is set.
If empty params and offset in 1st date, all remaining dates are set to UTC.
If no "TZID" is set in params and timezone in 1st date, all remaining dates are within this timezone and param "TZID" is set.
If none of the above rules are applicable, DATE-TIME and local date is set default.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "rdate", dates [, params [, propOrderNo ]] )

dates1 = array ( date2 *[, date2 ] ) date2 = date date2 = array( startdate, enddate/duration ) ] startdate = date enddate = date date = array( int year , int month , int day [, int int hour , int min , int day , mixed tz ] ) date = array( "year" => int year , "month" => int month , "day" => int day [, "hour" => int hour , "min" => int min , "sec" => int sec [, "tz" => mixed tz ]] ) // output format date = array( "timestamp" => int timestamp [, "tz" => mixed tz ] ) date = string datestring // string date, acceptable by strtotime function, ex. "14 august 2006 16.00.00" (notice date restriction) tz = timezone / offset (timezone will be used as tzidparam, if tzidparam not exists) offset = (+/-)HHmm[ss], local date + UTC offset => UTC DATE-TIME duration = array( int week/false [, int day/false , int hour , int min , int sec] ) duration = array([ "week" => int week/false ,] / [ "day" => int day/false [, "hour" => int hour , "min" => int min , "sec" => int sec ]] ); // output format, only used keys duration = array( "sec" => int sec ); duration = string format duration like "P15DT5H0M20S" params2 = ([tzidparam ( / datetimeparam / dateparam / periodparam )] *[, xparams ] ) tzidparam = "TZID" => <timezone identifier> // output as local DATE-TIME with timezone identifier datetimeparam = "VALUE" => "DATE-TIME" // default, output as DATE-TIME dateparam = "VALUE" => "DATE" // output as DATE periodparam = "VALUE" => "PERIOD" // output as PERIOD (datetime) xparams = xparamkey => xparamvalue propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

See rules in detail in RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar).

// $rdate1 = array ( 2001, 1, 1, 1, 1, 1 ); // alt. $rdate1 = array( "year" => 2001 , "month" => 1 , "day" => 1 , "hour" => 1 , "min" => 1 , "sec" => 1 , "tz" => "GMT" ); $rdate2 = array( 2002, 2, 2, 2, 2, 2, "GMT" ); $rdate3 = "3 March 2003 03.03.03"; $rdate4 = array( 2004, 4, 4, 4, 4, 4, "GMT" ); $rdate5 = array( 2005, 10, 5, 5, 5, 5 ); $rdate8 = array( "year" => 2007, "month" => 7, "day" => 7 ); $rdur6 = array( "week" => 0 , "day" => 0 , "hour" => 5 , "min" => 5 , "sec" => 5 ); $rdur7 = array( 0, 0, 6 ); // duration for 6 hours $rdur8 = array( "week" => 8 ); // duration for 8 weeks $vevent = & $vcalendar->newComponent( "vevent" ); $vevent->setProperty( "rdate", array( $rdate1 )); // one recurrence date, date in 7-params format (DATE-TIME) $vevent->setProperty( "rdate", array( $rdate1, $rdate2 )); // two dates, date 7-params format (DATE-TIME) $vevent->setProperty( "rdate", array( array( $rdate1, $rdate2 ) , array( $rdate3, $rdate4 )) , array( "VALUE" => "PERIOD" )); // Both fromdate and enddate must have 7 params (DATE-TIME) !!! $vevent->setProperty( "rdate", array( array( $rdate2, $rdur6 )) , array( "VALUE" => "PERIOD" )); // one duration (fromdate-duration) $vevent->setProperty( "rdate", array( array( $rdate1, $date2 ) , array( $rdate3, $rdur7 )) , array( "VALUE" => "PERIOD" )); // period, pairs of fromdate+enddate and fromdate-duration $vevent->setProperty( "rdate", array( $rdate5, $date8 )) , array( "VALUE" => "DATE" )); // dates in DATE format .. .

[index] [top] [up]

### 3.2.30 RECURRENCE-ID

This property is used in conjunction with the UID and SEQUENCE property to identify a specific instance of a recurring VEVENT, VTODO or VJOURNAL calendar component and is OPTIONAL and MAY NOT occur more than once.
The property value is the effective value of the DTSTART property of the recurrence instance. The default value type is DATE-TIME, can be set to DATE (params 2).

##### Delete RECURRENCE-ID

Remove RECURRENCE-ID from component.

Format

deleteProperty( "RECURRENCE-ID" )

Example

$vevent->deleteProperty( "RECURRENCE-ID" );

##### Get RECURRENCE-ID

Fetch property value.

Format 1

getProperty( "RECURRENCE-ID" )

output = recurrIdDate1

Format 2

getProperty( "RECURRENCE-ID", FALSE , TRUE )

output = array( "value" => recurrIdDate1 , "params" => params2 )

Example

$recurrDate = $vtodo->getProperty( "RECURRENCE-ID" );

##### Set RECURRENCE-ID

Insert property value. If DATE value type is expected, "VALUE" = "DATE" must be set (in params2) otherwise DATE-TIME (default) value type is set.
If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config TZID is set, date-time values will be set WITH timezone from config. Notice, use function transformDateTime to change a datetime from a time zone to another.

Format

setProperty( "recurrence-id", recurrIdDate [, params ] )

recurrIdDate1 = array( "year" => int year , "month" => int month , "day" => int day [, "hour" => int hour , "min" => int min , "sec" => int sec [, "tz" => mixed tz ]] ) recurrIdDate = int year , int month , int day [, int hour , int min , int sec [, mixed tz ]] recurrIdDate = array( int year , int month , int day [, int hour , int min , int sec [, mixed tz ]] ) recurrIdDate = array( "timestamp" => int timestamp [, "tz" => mixed tz ] ) recurrIdDate = string datestring // string date, acceptable by strtotime function, ex. "14 august 2006 16.00.00" (notice date restriction) tz = timezone / offset (timezone will be used as tzidparam, if tzidparam not exists) offset = (+/-)HHmm[ss], local date + UTC offset => UTC DATE-TIME params2 = array([ datetimeparam/dateparam/tzidparam ] [, rangeparam ] [, xparam ] ) datetimeparam = "VALUE" => "DATE-TIME" // default, output as DATE-TIME dateparam = "VALUE" => "DATE" // output as DATE tzidparam = "TZID" => <timezone identifier> // output as local date-time with timezone identifier rangeparam = "RANGE" => ( "THISANDPRIOR" / "THISANDFUTURE" ) // range parameter xparam = *[ xparamkey => xparamvalue ]

Example

$vtodo->setProperty( "recurrence-id", "3 March 2003 03.03.03" ); // 3 march 2003 03.03.03 local time

[index] [top] [up]

### 3.2.31 RELATED-TO

The property is used to represent a relationship or reference between one calendar component and another and is OPTIONAL and MAY occur more than once in VEVENT, VTODO, VJOURNAL components.
The property value consists of the persistent, globally unique identifier of another calendar component. This value would be represented in a calendar component by the UID property.
The value type for RELATED-TO is TEXT.

##### Delete RELATED-TO

Remove RELATED-TO from component.

Format

deleteProperty( "RELATED-TO" )

Example 1

$vtodo->deleteProperty( "RELATED-TO" );

Example 2

Delete RELATED-TO property no 2.

$vjournal->deleteProperty( "RELATED-TO", 2 );

Example 3

Deleting all RELATED-TO properties.

while( $vjournal->deleteProperty( "RELATED-TO" )) continue;

##### Get RELATED-TO

Fetch property value.

Format 1

getProperty( "RELATED-TO" )

output = relid1

Format 2

getProperty( "RELATED-TO", propOrderNo/FALSE , TRUE )

output = array( "value" => relid1 , "params" => params2 )

Format 3

getProperty( "RELATED-TO", propOrderNo )

Get propOrderNo RELATED-TO

Example

$relatedId = $vtodo->getProperty( "RELATED-TO" );

##### Set RELATED-TO

Insert property value.

Format

setProperty( "Related-To", relid [, params [, propOrderNo ]] )

relid1 = Value type TEXT. params2 = array( [ reltype ] [, xparam] ) reltype = "RELTYPE" => ("PARENT" (Default) / "CHILD" / "SIBLING" / iana-token / x-name) xparam = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

$vtodo->setProperty( "related-to", "19960401-080045-4000F192713@host.com");

[index] [top] [up]

### 3.2.32 REPEAT

This property defines the number of time the ALARM should be repeated, after the initial trigger. If the ALARM triggers more than once, then this property MUST be specified along with the DURATION property.

##### Delete REPEAT

Remove REPEAT from component.

Format

deleteProperty( "REPEAT" )

Example

$valarm->deleteProperty( "REPEAT" );

##### Get REPEAT

Fetch property value.

Format 1

getProperty( "REPEAT" )

output = repeatTimes1

Format 2

getProperty( "REPEAT", FALSE , TRUE )

output = array( "value" => repeatTimes1 , "params" => xparam2 )

Example

$repeat = $vtodo->getProperty( "REPEAT" );

##### Set REPEAT

Insert property value.

Format

setProperty( "repeat", repeatTimes [, xparam ] )

repeatTimes1 = Value type INTEGER xparam2 = array( *[ xparamkey => xparamvalue ] )

Example

$valarm->setProperty( "repeat", 2 );

[index] [top] [up]

### 3.2.33 REQUEST-STATUS

This property defines the status code returned for a scheduling request and is OPTIONAL and MAY occur more than once in VEVENT, VTODO, VJOURNAL and VFREEBUSY components.

##### Delete REQUEST-STATUS

Remove REQUEST-STATUS from component.

Format

deleteProperty( "REQUEST-STATUS" )

Example 1

$vtodo->deleteProperty( "REQUEST-STATUS" );

Example 2

Delete REQUEST-STATUS property no 2.

$vjournal->deleteProperty( "REQUEST-STATUS", 2 );

Example 3

Deleting all REQUEST-STATUS properties.

while( $vjournal->deleteProperty( "REQUEST-STATUS" )) continue;

##### Get REQUEST-STATUS

Fetch property value.

Format 1

getProperty( "REQUEST-STATUS" )

output = array( "statcode" => statcode1 , "text" => errtext2 [ , "extdata" => extraData 3 ] )

Format 2

getProperty( "REQUEST-STATUS", propOrderNo/FALSE, TRUE )

output = array( "value" => array( "statcode" => statcode1 , "text" => errtext2 [ , "extdata" => extraData3 ] ) , "params" => params4 )

Format 3

getProperty( "REQUEST-STATUS", propOrderNo )

Get propOrderNo REQUEST-STATUS

Example

$requestStatus = $vtodo->getProperty( "REQUEST-STATUS" );

##### Set REQUEST-STATUS

Insert property value.

Format

setProperty( "Request-Status" , statcode, errtext [,extraData/FALSE [,params [,propOrderNo]]])

statcode1 = Hierarchical, numeric return status code (1*DIGIT *("." 1*DIGIT)) errtext2 = Textual status description extraData3 = Textual exception data. For example, the offending property name and value or complete property line. params4 = array( ["LANGUAGE" => "<lang>"] [, xparam ] ) xparam = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

$vfreebusy->setProperty("request-status" , 2.0 , "Invalid property value" , "DTSTART:96-Apr-31");

[index] [top] [up]

### 3.2.34 RESOURCES

This property defines the equipment or resources anticipated for an activity specified by a calendar entity and is OPTIONAL and MAY occur more than once in VEVENT and VTODO components.
The value type for RESOURCES is TEXT.

##### Delete RESOURCES

Remove RESOURCES from component.

Format

deleteProperty( "RESOURCES" )

Example 1

$vevent->deleteProperty( "RESOURCES" );

Example 2

Delete RESOURCES property no 2.

$vevent->deleteProperty( "RESOURCES", 2 );

Example 3

Deleting all RESOURCES properties.

while( $vevent->deleteProperty( "RESOURCES" )) continue;

##### Get RESOURCES

Fetch property value.

Format 1

getProperty( "RESOURCES" )

output = resources1

Format 2

getProperty( "RESOURCES", propOrderNo/FALSE, TRUE )

output = array( "value" => resources1 , "params" => params2 )

Format 3

getProperty( "RESOURCES", propOrderNo )

Get propOrderNo RESOURCES

Example

$resources = $vtodo->getProperty( "RESOURCES" );

##### Set RESOURCES

Insert property value.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "resources", resources [, params [, propOrderNo ]] )

resources1 = string resource / array( *resource ) resource = textual resources or subtypes of the calendar component, can be specified as a list of resources separated by the COMMA character. params2 = array([ "ALTREP" => "<an alternate text representation, URI>"] [, "LANGUAGE" => "<lang>"] [, xparam] ) xparam = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

$vevent->setProperty( "resources", "COMPUTER PROJECTOR" );

[index] [top] [up]

### 3.2.35 RRULE

This property defines a rule or repeating pattern for recurring EVENTs, TODOs, STANDARD or DAYLIGHT definitions and is OPTIONAL and MAY occur more than once.

##### Delete RRULE

Remove RRULE from component.

Format

deleteProperty( "RRULE" )

Example 1

$vevent->deleteProperty( "RRULE" );

Example 2

Delete RRULE property no 2.

$vevent->deleteProperty( "RRULE", 2 );

Example 3

Deleting all RRULE properties.

while( $vevent->deleteProperty( "RRULE" )) continue;

##### Get RRULE

Fetch property value.

Format 1

getProperty( "RRULE" )

output = recur1

Format 2

getProperty( "RRULE", propOrderNo/FALSE, TRUE )

output = array( "value" => recur1 , "params" => xparams2 )

Format 3

getProperty( "RRULE", propOrderNo )

Get propOrderNo RRULE

Example

$rrules = $vtodo->getProperty( "RRULE" );

##### Set RRULE

Insert property value.
Parameters will be ordered as prescribed in rcf2445.

Format

setProperty( "rrule", recur [, xparams [, propOrderNo ]] )

For rules example see Exrule format and in detail in RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar).

recur1 = see Exrule xparams2 = array( *[ xparamkey => xparamvalue ] ) propOrderNo = int ordernumber, 1=1st, 2=2nd etc

[index] [top] [up]

### 3.2.36 SEQUENCE

This property defines the revision sequence number of the calendar component within a sequence of revisions. The property is OPTIONAL and MUST NOT occur more than once in VEVENT, VTODO and VJOURNAL components.

It is monotonically incremented by the ORGANIZER's CUA (Calendar User Agent) each time the ORGANIZER makes a significant revision to the calendar component. When the ORGANIZER makes changes to one of the following properties, the sequence number MUST be incremented: DTSTART, DTEND, DUE, RDATE, RRULE, EXDATE, EXRULE, STATUS. In addition, changes made by the ORGANIZER to other properties can also force the sequence number to be incremented. The ORGANIZER CUA MUST increment the sequence number when ever it makes changes to properties in the calendar component that the ORGANIZER deems will jeopardize the validity of the participation status of the Attendees. For example, changing the location of a meeting from one locale to another distant locale could effectively impact the participation status of the Attendees.

##### Delete SEQUENCE

Remove SEQUENCE from component.

Format

deleteProperty( "SEQUENCE" )

Example

$vtodo->deleteProperty( "SEQUENCE" );

##### Get SEQUENCE

Fetch property value.

Format 1

getProperty( "SEQUENCE" )

output = sequence1

Format 2

getProperty( "SEQUENCE", FALSE , TRUE )

output = array( "value" => sequence1 , "params" => xparam2 )

Example

$sequence = $vtodo->getProperty( "SEQUENCE" );

##### Set SEQUENCE

Insert property value.

Format

setProperty( "sequence" [, sequence [, xparam ]] )

sequence1 = Value type INTEGER xparam2 = array( *[ xparamkey => xparamvalue ] )

Example 1

$vevent->setProperty( "sequence", 2 ); // set sequence number to 2

Example 2

$vevent->setProperty( "sequence" ); // force sequence number to be set to 0 // or, if sequence exists, incremented by 1

[index] [top] [up]

### 3.2.37 STATUS

This property defines the overall status or confirmation for the calendar component. The property is OPTIONAL and MUST NOT occur more than once in VEVENT, VTODO and VJOURNAL components.

##### Delete STATUS

Remove STATUS from component.

Format

deleteProperty( "STATUS" )

Example

$vtodo->deleteProperty( "STATUS" );

##### Get STATUS

Fetch property value.

Format 1

getProperty( "STATUS" )

output = status1

Format 2

getProperty( "STATUS", FALSE , TRUE )

output = array( "value" => status1 , "params" => xparam2 )

Example

$status = $vtodo->getProperty( "STATUS" );

##### Set STATUS

Insert property value.

Format

setProperty( "status", status [, xparam ] )

// Status values for a VEVENT status1 = "TENTATIVE" // Indicates event is tentative / "CONFIRMED" // Indicates event is definite / "CANCELLED" // Indicates event was cancelled // Status values for VTODO status1 = "NEEDS-ACTION" // Indicates to-do needs action / "COMPLETED" // Indicates to-do completed / "IN-PROCESS" // Indicates to-do in process of / "CANCELLED" // Indicates to-do was cancelled // Status values for VJOURNAL status1 = "DRAFT" // Indicates journal is draft / "FINAL" // Indicates journal is final / "CANCELLED" // Indicates journal is removed xparam2 = array( *[ xparamkey => xparamvalue ] )

Example

$vevent->setProperty( "Status", "COMPLETED" );

[index] [top] [up]

### 3.2.38 SUMMARY

This property defines a short ("one line") summary or subject for the calendar component. (In "rfc2445, Recommended Practices", up to 255 characters) (, analogous to a mail SUBJECT). The property is OPTIONAL and MUST NOT occur more than once in VEVENT, VTODO and VJOURNAL components. The property is REQUIRED and MUST occur once in VALARM (EMAIL) calendar component.
The value type for SUMMARY is TEXT.

##### Delete SUMMARY

Remove SUMMARY from component.

Format

deleteProperty( "SUMMARY" )

Example

$vevent->deleteProperty( "SUMMARY" );

##### Get SUMMARY

Fetch property value.

Format 1

getProperty( "SUMMARY" )

output = summary1

Format 2

getProperty( "SUMMARY", FALSE , TRUE )

output = array( "value" => summary1 , "params" => params2 )

Example

$summary = $vtodo->getProperty( "SUMMARY" );

##### Set SUMMARY

Insert property value.
Parameters, if any, will be ordered as prescribed in rcf2445.

Format

setProperty( "summary", summary [, params ] )

summary1 = Value type TEXT, a short, one line summary about the activity or journal entry. params2 = array( ["ALTREP" => "<an alternate text representation, URI>"] [, "LANGUAGE" => "<lang>"] [, xparam ] ) xparam = *[ xparamkey => xparamvalue ]

Example

$vevent->setProperty( "summary", "This is a summary" );

[index] [top] [up]

### 3.2.39 TRANSP

This property defines whether an EVENT is transparent or not to busy time searches and is OPTIONAL and MUST NOT occur more than once.

##### Delete TRANSP

Remove TRANSP from component.

Format

deleteProperty( "TRANSP" )

Example

$vevent->deleteProperty( "TRANSP" );

##### Get TRANSP

Fetch property value.

Format 1

getProperty( "TRANSP" )

output = transp1

Format 2

getProperty( "TRANSP", FALSE , TRUE )

output = array( "value" => transp1 , "params" => xparam2 )

Example

$transp = $vtodo->getProperty( "TRANSP" );

##### Set TRANSP

Insert property value.

Format

setProperty( "transp", transp [, xparam ] )

transp1 = "OPAQUE" / "TRANSPARENT" xparam2 = array( *[ xparamkey => xparamvalue ] )

Example

$vevent->setProperty( "transp", "TRANSPARENT" );

[index] [top] [up]

### 3.2.40 TRIGGER

This property specifies when an ALARM will trigger and is REQUIRED and MUST NOT occur more than once.
The default value type is DURATION. The value type can be set to a DATE-TIME value type, in which case the value MUST specify an UTC formatted DATE-TIME value.

##### Delete TRIGGER

Remove TRIGGER from component.

Format

deleteProperty( "TRIGGER" )

Example

$valarm->deleteProperty( "TRIGGER" );

##### Get TRIGGER

Fetch property value.

Format 1

getProperty( "TRIGGER" )

output = duration/date

Format 2

getProperty( "TRIGGER", FALSE , TRUE )

output = array( "value" => duration1/date3 ) , "params" => params4 )

Example

$trigger = $vtodo->getProperty( "TRIGGER" );

##### Set TRIGGER

Insert property value.
Note, use function transformDateTime to change a datetime (in a local time zone) to UTC time zone.

Format 1

setProperty( "trigger", duration1 [, params4 ] )

Format 2

setProperty( "trigger", duration2 [, params4 ] )

Format 3

setProperty( "trigger", date3 [, params4 ] )

Format

setProperty( "trigger", int year/FALSE , int month/FALSE , int day/FALSE [, int week/FALSE [, int hour/FALSE , int min/FALSE , int sec/FALSE [, bool relatedStart=TRUE [, bool before=TRUE [, array params4 ]]]]] )

duration1 = array( "week" => int week , "relatedStart" => bool relstart , "before" => bool before ) duration1 = array( "day" => int day , "hour" => int hour , "min" => int min , "sec" => int sec , "relatedStart" => bool relstart , "before" => bool before ) relatedStart = TRUE : related start (default), FALSE : related end before = TRUE : before relatedStart (default), FALSE : after relatedStart duration2 = string dur-value = (["+"]/"-")"P"(dur-date/dur-time/dur-week) dur-date = dur-day [dur-time] dur-time = "T" (dur-hour / dur-minute / dur-second) dur-week = 1*DIGIT "W" dur-day = 1*DIGIT "D" dur-hour = 1*DIGIT "H" [dur-minute] dur-minute = 1*DIGIT "M" [dur-second] dur-second = 1*DIGIT "S" date3 = array( "year" => int year // UTC DATE-TIME , "month" => int month , "day" => int day [, "hour" => int hour , "min" => int min , "sec" => int sec ]) date3 = array ( "timestamp" => int timestamp ) // UTCDATE-TIME date3 = string datestring // string date, acceptable by strtotime function, ex. "14 august 2006 16.00.00" (notice date restriction) // UTCDATE-TIME params4 = array( [[ reltype [, trigRelparam ]] / datetimeparam ] [, xparams ] ) reltyp = "RELATED" => "START" (default) / "END" trigRelparam = "VALUE" => "DURATION" datetimeparam= "VALUE" => "DATE-TIME" xparam = *[ xparamkey => xparamvalue ]

Example 1

$valarm->setProperty( "trigger" , FALSE, FALSE, FALSE, FALSE, 1, 2, 3 ); // duration, 1 hour 2 min 3 sec, before start

Example 2

$valarm->setProperty( "trigger" , array ("hour"=>1,"min"=>2,"sec"=>3 ); // duration, 1 hour 2 min 3 sec, before start

Example 3

$valarm->setProperty( "trigger" , "PT1H2M3S" ); // duration, 1 hour 2 min 3 sec, before start

Example 4

$valarm->setProperty( "trigger" , FALSE, FALSE, FALSE, 1 , FALSE, FALSE, FALSE, FALSE, FALSE ); // duration, 1 week after end

Example 5

$valarm->setProperty( "trigger" , array ( "week" => 1 , "relatedStart" => FALSE , "before" => FALSE )); // duration, 1 week after end

Example 6

$valarm->setProperty( "trigger" , "P1W" , array( "related" => "END" )); // duration, 1 week after end

Example 7

$valarm->setProperty( "trigger" , array( "year" => 2007 , "month" => 6 , "day" => 5, , "hour" => 2 , "min" => 2 , "sec" => 3 ));

[index] [top] [up]

### 3.2.41 TZID

This property specifies the text value that uniquely identifies the VTIMEZONE calendar component and is REQUIRED, but MUST NOT occur more than once.
The value type for TZID is TEXT.

##### Delete TZID

Remove TZID from component.

Format

deleteProperty( "TZID" )

Example

$vtimezone->deleteProperty( "TZID" );

##### Get TZID

Fetch property value.

Format 1

getProperty( "TZID" )

output = tzid1

Format 2

getProperty( "TZID", FALSE , TRUE )

output = array( "value" => tzid1 , "params" => xparam2 )

Example

$tzid = $vtimezone->getProperty( "TZID" );

##### Set TZID

Insert property value.

Format

setProperty( "tzid", tzid [, xparam ] )

tzid1 = Value type TEXT xparam2 = array( *[ xparamkey => xparamvalue ] )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); $vtimezone = & $vcalendar->newComponent( "vtimezone" ); $vtimezone->setProperty( "tzid", "US-Eastern" ); .. .

[index] [top] [up]

### 3.2.42 TZNAME

This property specifies the customary designation for a STANDARD or DAYLIGHT description and is OPTIONAL and MAY occur more than once.
The value type for TZNAME is TEXT.

##### Delete TZNAME

Remove TZNAME from component.

Format

deleteProperty( "TZNAME" )

Example 1

$vtimezonestd->deleteProperty( "TZNAME" );

Example 2

Delete TZNAME property no 2.

$vtimezonestd->deleteProperty( "TZNAME", 2 );

Example 3

Deleting all TZNAME properties.

while( $vtimezonestd->deleteProperty( "TZNAME" )) continue;

##### Get TZNAME

Fetch property value.

Format 1

getProperty( "TZNAME" )

output = tzname1

Format 2

getProperty( "TZNAME", propOrderNo/FALSE, TRUE )

output = array( "value" => tzname1 , "params" => params2 )

Format 3

getProperty( "TZNAME", propOrderNo )

Get propOrderNo TZNAME

Example

$tzname = $timezonestandard->getProperty( "TZNAME" );

##### Set TZNAME

Insert property value.

Format

setProperty( "tzname", tzname [, params [, propOrderNo ]] )

tzname1 = Value type TEXT params2 = array( [ "LANGUAGE" => "<lang>" ] [, xparam ] ) xparam = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); $vtimezone = & $vcalendar->newComponent( "vtimezone" ); $vtimezone->setProperty( "Tzid", "US-Eastern" ); $vtimezone->setProperty( "Last-Modified", "19870101" ); $standard = & $vtimezone->newComponent( "standard" ); $standard->setProperty( "tzname", "EST" ); .. .

[index] [top] [up]

### 3.2.43 TZOFFSETFROM

This property specifies the offset which is in use prior to this TIMEZONE observance. The property is REQUIRED, but MUST NOT occur more than once in STANDARD and DAYLIGHT components.

##### Delete TZOFFSETFROM

Remove TZOFFSETFROM from component.

Format

deleteProperty( "TZOFFSETFROM" )

Example

$vtimezonestd->deleteProperty( "TZOFFSETFROM" );

##### Get TZOFFSETFROM

Fetch property value.

Format 1

getProperty( "TZOFFSETFROM" )

output = tzoffsetfrom1

Format 2

getProperty( "TZOFFSETFROM", FALSE , TRUE )

output = array( "value" => tzoffsetfrom1 , "params" => xparam2 )

Example

$tzoffsetfrom = $timezonestandard->getProperty( "TZOFFSETFROM" );

##### Set TZOFFSETFROM

Insert property value.

Format

setProperty( "tzoffsetfrom", tzoffsetfrom [, xparam ] )

tzoffsetfrom1 = (+/-)HHmm[ss], UTC offset xparam2 = array( *[ xparamkey => xparamvalue ] )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); $vtimezone = & $vcalendar->newComponent( "vtimezone" ); $vtimezone->setProperty( "Tzid", "US-Eastern" ); $vtimezone->setProperty( "Last-Modified", "19870101" ); $standard = & $vtimezone->newComponent( "standard" ); $standard->setProperty( "tzname", "EST" ); $standard->setProperty( "tzoffsetfrom", "-0500" ); .. .

[index] [top] [up]

### 3.2.44 TZOFFSETTO

This property specifies the offset which is in use in this TIMEZONE observance. The property is REQUIRED, but MUST NOT occur more than once in STANDARD and DAYLIGHT components.

##### Delete TZOFFSETTO

Remove TZOFFSETTO from component.

Format

deleteProperty( "TZOFFSETTO" )

Example

$daylight->deleteProperty( "TZOFFSETTO" );

##### Get TZOFFSETTO

Fetch property value.

Format 1

getProperty( "TZOFFSETTO" )

output = tzoffsetto1

Format 2

getProperty( "TZOFFSETTO", FALSE , TRUE )

output = array( "value" => tzoffsetto1 , "params" => xparam2 )

Example

$tzoffsetto = $timezonestandard->getProperty( "TZOFFSETTO" );

##### Set TZOFFSETTO

Insert property value.

Format

setProperty( "tzoffsetto", tzoffsetto [, xparam ] )

tzoffsetto1 = (+/-)HHmm[ss], UTC offset xparam2 = array( *[ xparamkey => xparamvalue ] )

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); $vtimezone = & $vcalendar->newComponent( "vtimezone" ); $vtimezone->setProperty( "Tzid", "US-Eastern" ); $vtimezone->setProperty( "Last-Modified", "19870101" ); $standard = & $vtimezone->newComponent( "standard" ); .. . $daylight = & $vtimezone->newComponent( "daylight" ); $daylight->setProperty( "tzoffsetto", "1345" ); .. .

[index] [top] [up]

### 3.2.45 TZURL

The TZURL provides a means for a VTIMEZONE component to point to a network location that can be used to retrieve an up-to-date version of itself. The property is OPTIONAL and MUST NOT occur more than once.

##### Delete TZURL

Remove TZURL from component.

Format

deleteProperty( "TZURL" )

Example

$vtimezone->deleteProperty( "TZURL" );

##### Get TZURL

Fetch property value.

Format 1

getProperty( "TZURL" )

output = tzurl1

Format 2

getProperty( "TZURL", FALSE , TRUE )

output = array( "value" => tzurl1 , "params" => xparam2 )

Example

$tzurl = $timezonestandard->getProperty( "TZURL" );

##### Set TZURL

Insert property value.

Format

setProperty( "tzurl", tzurl [, xparam ] )

tzurl1 = Value type URI xparam2 = array( *[ xparamkey => xparamvalue ] )

Example

$tz = "http://zones.stds_r_us.net/tz/US-Eastern" ); $config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); $vtimezone = & $vcalendar->newComponent( "vtimezone" ); $vtimezone->setProperty( "Tzid", "US-Eastern" ); $vtimezone->setProperty( "Last-Modified", "19870101T000000" ); $vtimezone->setProperty( "tzurl", $tz ); .. . .. .

[index] [top] [up]

### 3.2.46 UID

The persistent, globally Unique IDentifier for the calendar component. The property is OPTIONAL and MUST NOT occur more than once in VEVENT, VTODO, VJOURNAL and VFREEBUSY components.
However, UID is AUTOMATICALLY generated in iCalcreator and configuration unique_id, is used when auto-creating component UID.
UID generated format :

date("Ymd\THisT")."-".[microSec][random]."@".unique_id

microSec = microseconds, 4 pos
random = 6 characters aA-zZ, 0-9

Example

"20070803T194810CEST-0123U3PXiX@kigkonsult.se"

UID may be required when importing iCal files into some calendaring software (MS etc.), as well as (calendar) properties x-properties "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE", METHOD (value PUBLISH etc.) and the (also automatically created) DTSTAMP property.
The value type for UID is TEXT.

##### Delete UID

If UID is remove from a component, UID will automatically be recreated when calendar output functions like createCalendar, returnCalendar or saveCalendar is executed.

Format

deleteProperty( "UID" )

Example

$vevent->deleteProperty( "UID" );

##### Get UID

Fetch property value.

Format 1

getProperty( "UID" )

output = uid1

Format 2

getProperty( "UID", FALSE , TRUE )

output = array( "value" => uid1 , "params" => xparam2 )

Example

$uid = $vevent->getProperty( "UID" );

##### Set UID

Insert property value, overrides any previously set or auto-created UID.
Do NOT use an integer UID or only a component name in UID (ex. "vevent"), this may cause malfunction in setComponent with index or UID argument.

Format

setProperty( "uid", uid [, xparam ] )

uid1 = Value type TEXT xparam2 = array( *[ xparamkey => xparamvalue ] )

Example

$vevent->setProperty("uid","20070803T194810CEST-0123U3PXiX@kigkonsult.se");

[index] [top] [up]

### 3.2.47 URL

This property defines a Uniform Resource Locator (URL) associated with the iCalendar object. The property is OPTIONAL and MUST NOT occur more than once in VEVENT, VTODO, VJOURNAL and VFREEBUSY components.

##### Delete URL

Remove URL from component.

Format

deleteProperty( "URL" )

Example

$vevent->deleteProperty( "URL" );

##### Get URL

Fetch property value.

Format 1

getProperty( "URL" )

output = url1

Format 2

getProperty( "URL", FALSE , TRUE )

output = array "value" => url1 , "params" => xparam2 )

Example

$url = $vevent->getProperty( "URL" );

##### Set URL

Insert property value.

Format

setProperty( "url", url [, xparam ] )

url1 = Value type URI xparam2 = array( *[ xparamkey => xparamvalue ] (

Example

$vtodo->setProperty( "url", "http://www.icaldomain.net" );

[index] [top] [up]

### 3.2.48 X-PROPERTY

A component, non-standard property with a TEXT value and a name with an "X-" prefix. In a component, an x-property, with an unique name, can occur only once but the number of x-properties are unlimited.

##### Delete X-PROPERTY

Remove X-PROPERTY from component.

Format

deleteProperty( "<X-PROPERTY>" )

Example 1

$vevent->deleteProperty( "<X-PROPERTY>" );

Example 2

Deleting all x-properties.

while( $vevent->deleteProperty()) continue;

##### Get X-property

Fetch property value.

Format 1

getProperty( "<X-PROPERTY>" )

output = array( propertyName1 , propertyData2 )

Format 2

getProperty()

output = array( propertyName1 , propertyData2 )

Format 3

getProperty( FALSE, propOrderNo/FALSE, TRUE )

output = array( propertyName1 , array ( "value" => propertyData2 ) , "params" => params 3))

Format 4

getProperty( FALSE, propOrderNo )

Get propOrderNo X-property

Example 1

$config = array( "unique_id" => "kigkonsult.se", "filename", "file.ics" ); ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); if( FALSE !== ( $d = $vcalendar->getProperty( "X-WR-TIMEZONE" ))) echo $d[1]; .. .

// $xprop = array( propertyName1, propertyData2 )

Example 2

$config = array( "unique_id" => "kigkonsult.se", "filename", "file.ics" ); ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); while( $xprop = $vcalendar->getProperty( )) { .. .

// $xprop = array( propertyName1, propertyData2 )

Example 3

$config = array( "unique_id" => "kigkonsult.se", "filename", "file.ics" ); ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); while( $xprop = $vcalendar->getProperty( "X-ABC-MMSUBJ" )) { .. .

// $xprop = array( "X-ABC-MMSUBJ", propertyData2 )

Example 4

$config = array( "unique_id" => "kigkonsult.se", "filename", "file.ics" ); ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); while( $xprop = $vcalendar->getProperty( FALSE, FALSE, TRUE )) { .. .

// $xprop = array( propertyName1 // , array( "value" => propertyData2 ) // , "params" => params 3 )

##### Set X-property

Insert property name and value. If an x-prop with the same name already exists, it will be replaced.

Format

setProperty( propertyName, propertyData [, params ] )

propertyName1 = Any property name with a "X-" prefix propertyData2 = Value type TEXT params3 = array( ["LANGUAGE" => "<lang>"] [, xparam] ) xparam = *[ xparamkey => xparamvalue ] propOrderNo = int ordernumber, 1=1st, 2=2nd etc

Example

$component->setProperty("X-ABC-MMSUBJ","http://load.noise.org/mysubj.wav");

[index] [top] [up]

## 3.3 Calendar Component configuration functions

### 3.3.1 Language

Language for specific calendar component as defined in [RFC 1766].
Language set at component level can be overridden by specific component property parameter.
A successful "setConfig" returns TRUE.

##### Get language

Language for calendar (only if language is set at component level).

Format

getConfig( "language" )

Example

$lang = $vevent->getConfig( "language" );

##### Set LANGUAGE

Format

setConfig( "language", string <lang> )

Example

$vevent->setConfig( "language", "en" );

[index] [top] [up]

## 3.4 Calendar component object misc. functions

Calendar component subcomponent functions

#### 3.4.1 deleteComponent

Remove subcomponent from component.

Format

deleteComponent( int orderNumber )

Remove component with order number (1st=1, 2nd=2.. .).

deleteComponent( string componentType [, int componentSuborderNumber])

Remove component with component type (ex. "vevent") and order 1 alt. suborder number.

deleteComponent( string UID )

Remove component with UID. N.B UID is NOT set for ALARM / timezone components.

Example 1

Delete first subcomponent.

$config = array( "unique_id" => "kigkonsult.se", "filename", "file.ics" ); ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $comp1 = $vcalendar->getComponent(); $comp1->deleteComponent( 1 ); .. .

Example 2

Delete all subcomponents.

$config = array( "unique_id" => "kigkonsult.se", "filename", "file.ics" ); ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $comp1 = $vcalendar->getComponent(); while( $comp1->deleteComponent( "valarm" ) continue; .. .

[index] [top] [up]

#### 3.4.2 getComponent

Get subComponent from component.

Format 1

getComponent()

Get next component until end-of-components.

Format 2

getComponent( int orderNumber )

Get component with order number (1st=1, 2nd=2.. .).

Format 3

getComponent( string componentType [, int componentSuborderNumber])

Get (next) component with component type (until end-of-components) alt. component with component type and suborder number (1st=1, 2nd=2..).

Format 4

getComponent( string UID )

Get component with UID. N.B UID is NOT set for ALARM / timezone components.

Example

$config = array( "unique_id" => "kigkonsult.se", "filename", "file.ics" ); ); $vcalendar = new vcalendar( $config ); $vcalendar->parse(); $comp1 = $vcalendar->getComponent()); while( $subComp = $comp1->getComponent()) { .. .

[index] [top] [up]

#### 3.4.3 newComponent

Create subcomponent (ALARN / VTIMEZONE STANDARD / VTIMEZONE DAYLIGHT) using a component factory-method, returning a reference to the new component.

Format

newComponent( string componentType )

Example 1

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vevent = & $vcalendar->newComponent( "vevent" ); $vevent->setProperty( "dtstart" // add some EVENT properties , 2006, 12, 24, 19, 30, 00 ); $vevent->setProperty(.. . ... $valarm = & $vevent->newComponent( "valarm" ); $valarm->setProperty( "trigger", .. . ...

Example 2

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); ... $vtimezone = & $vcalendar->newComponent( "vtimezone" ); $vtimezone->setProperty(.. . ... $standard = & $vtimezone->newComponent( "standard" ); $standard->setProperty(.. . ... $daylight = & $vtimezone->newComponent( "daylight" ); $daylight->setProperty(.. . ...

[index] [top] [up]

#### 3.4.4 setComponent

Add calendar component to calendar or replace/update component in calendar.

Format 1

setComponent( component ) addSubComponent( component ) // alias

Insert last in component chain.

Format 2

setComponent( component, int orderNumber )

Replace component with order number(1st=1, 2nd=2.. .). If orderNumber is not found, component is inserted last in chain.

Format 3

setComponent( component, string componentType [,component suborder number])

Replace component with component type and component order number. if orderNumber is not found, component is inserted last in chain.

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); // initiate new CALENDAR .. . $vevent = new vevent(); $vevent->setProperty( "dtstart" // add some EVENT properties , 2006, 12, 24, 19, 30, 00 ); $vevent->setProperty(.. . .. . $valarm = new valarm(); $valarm->setProperty( "trigger", .. . .. . $vevent->setComponent( $valarm ); $vcalendar->setComponent( $vevent ); .. .

[index] [top] [up]

# 4. iCalUtilityFunctions

iCalUtilityFunctions.class.php contains static functions used by iCalcreator, also usable outside the iCalcreator class. Please examine the class file to explore other functions.

#### 4.1 createTimezone

The function, applied on a iCalcrator instance and using a PHP valid timezone (as arguments) creates simple vtimezone, standard and (opt.) daylight components, based on PHP DateTimeZone class and the most recent transition dates for the timezone.
(PHP 5 >= 5.2.0)
Note, only when timezone NOT is UTC. For dates with UTC DATE-TIME, read this!
FALSE is returned if not using a PHP valid timezone.

Format

createTimezone( calendar, timezone [, xprops ] )

calendar = iCalcreator instance timezone = an PHP (DateTimeZone) valid timezone xprops = array( *[ x-propName => value ] ), timezone non-standard properties

Example

$config = array( "unique_id" => "kigkonsult.se" ); $vcalendar = new vcalendar( $config ); .. . $PHPtz = "Europe/Stockholm"; $xprops = array( "X-LIC-LOCATION" => $PHPtz ); iCalUtilityFunctions::createTimezone( $vcalendar, $PHPtz, $xprops ); .. .

Output (when using createCalendar or returnCalendar functions):
BEGIN:VTIMEZONE
TZID:Europe/Stockholm
X-LIC-LOCATION:Europe/Stockholm
BEGIN:STANDARD
DTSTART:20101031T020000
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CET
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20100328T030000
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:CEST
END:DAYLIGHT
END:VTIMEZONE
[index] [top] [up]

#### 4.2 transformDateTime

Transforms a datetime from a time zone to another. (Requires PHP >= 5.2.0 and PHP DateTimeZone acceptable time zones)
FALSE is returned if not using a "strtotime" acceptable datetime or unacceptable PHP time zones. If TRUE, the dateTime argument (below) is converted to the new time zone, otherwise unaltered.

Format

transformDateTime( dateTime, timezoneFrom, timezoneTo [, format ] )

dateTime = string datetime // acceptable by strtotime function ex. "14 august 2006 16.00.00" (notice date restriction) timezoneFrom = string, a PHP (DateTimeZone) valid time zone timezoneTo = string, a PHP (DateTimeZone) valid time zone, default "UTC" format = string, format accepted by date(), default "Ymd\THis"

Example

.. . $d = date( "Y-m-d H:i:s" ); $tzFr = "Europe/Stockholm"; if( FALSE !== iCalUtilityFunctions::transformDateTime( $d, $tzFr )) $event->setProperty( "dtstart", $d."Z" ); else $event->setProperty( "dtstart", $d, array( "TZID" => $tzFr )); .. .

[index] [top] [up]

# 5. COPYRIGHT AND LICENSE

## Copyright

iCalcreator class
copyright (c) 2007-2011 Kjell-Inge Gustafsson, kigkonsult
kigkonsult.se/iCalcreator
ical@kigkonsult.se

## License

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or download it here.
[index] [top]