From: Michael Rubinsky Date: Mon, 28 Dec 2009 19:03:57 +0000 (+0000) Subject: Add H3's iCalendar library to hatchery until new H4 Icalendar lib X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=b74c3d195cf04f29facc288501504d9c06c091aa;p=horde.git Add H3's iCalendar library to hatchery until new H4 Icalendar lib is ready. --- diff --git a/framework/iCalendar/docs/examples/exchange.ics b/framework/iCalendar/docs/examples/exchange.ics new file mode 100644 index 000000000..b714cfb83 --- /dev/null +++ b/framework/iCalendar/docs/examples/exchange.ics @@ -0,0 +1,53 @@ +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:Microsoft CDO for Microsoft Exchange +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:Eastern Time (US & Canada) +X-MICROSOFT-CDO-TZID:10 +BEGIN:STANDARD +DTSTART:16010101T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:16010101T020000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=4;BYDAY=1SU +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20011115T211047Z +DTSTART;TZID="Eastern Time (US & Canada)":20011116T140000 +SUMMARY:internal final review of mmc site changes +UID:040000008200E00074C5B7101A82E00800000000B0549C15F06DC101000000000000000 + 0100000008BF784046BEC174CA6706A51BE3E8B33 +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN="MHMN002" +: + MAILTO:MHMN002@bitgroup.com +ORGANIZER;CN="Ann Cave":MAILTO:acave@bitgroup.com +LOCATION:metcalfe +DTEND;TZID="Eastern Time (US & Canada)":20011116T143000 +DESCRIPTION:Let's get together to finalize. Way to go team in the final hom + estretch!\N +SEQUENCE:0 +PRIORITY:5 +CLASS: +CREATED:20011115T212414Z +LAST-MODIFIED:20011115T212414Z +STATUS:CONFIRMED +TRANSP:OPAQUE +X-MICROSOFT-CDO-BUSYSTATUS:BUSY +X-MICROSOFT-CDO-INSTTYPE:0 +X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY +X-MICROSOFT-CDO-ALLDAYEVENT:FALSE +X-MICROSOFT-CDO-IMPORTANCE:1 +BEGIN:VALARM +ACTION:DISPLAY +DESCRIPTION:REMINDER +TRIGGER;RELATED=START:-PT00H15M00S +END:VALARM +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/docs/examples/exdate.ics b/framework/iCalendar/docs/examples/exdate.ics new file mode 100644 index 000000000..1b7644cc0 --- /dev/null +++ b/framework/iCalendar/docs/examples/exdate.ics @@ -0,0 +1,16 @@ +BEGIN:VCALENDAR +VERSION:2.0 +X-WR-CALNAME:Nasa History +PRODID:-//Apple Computer\, Inc//iCal 1.0//EN +X-WR-RELCALID:7A58AF63-46A0-11D7-BCDE-000A95673266-CALP +X-WR-TIMEZONE;VALUE=TEXT:US/Central +CALSCALE:GREGORIAN +BEGIN:VEVENT +DURATION:P1D +EXDATE;VALUE=DATE:20030428 +DTSTAMP:20030926T233021Z +UID:D2924923-RID +DTSTART;VALUE=DATE:20020428 +SUMMARY:(1961) Little Joe 5B +RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=4 +END:VEVENT diff --git a/framework/iCalendar/docs/examples/ical.ics b/framework/iCalendar/docs/examples/ical.ics new file mode 100644 index 000000000..6ed057e49 --- /dev/null +++ b/framework/iCalendar/docs/examples/ical.ics @@ -0,0 +1,40 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +DTSTART:19970714T170000Z +DTEND:19970715T035959Z +SUMMARY:Bastille Day Party +END:VEVENT + +BEGIN:VEVENT +DTSTAMP:19980309T231000Z +UID:guid-1.host1.com +ORGANIZER;ROLE=CHAIR:MAILTO: +ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO: +DESCRIPTION:Project XYZ Review Meeting +CATEGORIES:MEETING +CLASS:PUBLIC +CREATED:19980309T130000Z +SUMMARY:XYZ Project Review +DTSTART;TZID=US-Eastern:19980312T083000 +DTEND;TZID=US-Eastern:19980312T093000 +LOCATION:1CP Conference Room 4350 +END:VEVENT + +BEGIN:VTODO +DTSTAMP:19980130T134500Z +SEQUENCE:2 +UID: +ORGANIZER:MAILTO: +ATTENDEE;PARTSTAT=ACCEPTED:MAILTO: +DUE:19980415T235959 +STATUS:NEEDS-ACTION +SUMMARY:Submit Income Taxes +BEGIN:VALARM +ACTION:AUDIO +TRIGGER;VALUE=DATE-TIME:19980403T120000 +ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-files/ssbanner.aud +REPEAT:4 +DURATION:PT1H +END:VALARM +END:VTODO +END:VCALENDAR diff --git a/framework/iCalendar/docs/examples/parser.php b/framework/iCalendar/docs/examples/parser.php new file mode 100755 index 000000000..db0dce470 --- /dev/null +++ b/framework/iCalendar/docs/examples/parser.php @@ -0,0 +1,51 @@ +#!/usr/bin/php +fatal('No file specified on the command line.'); +} + +$input_file = $argv[1]; +if (!file_exists($input_file)) { + $cli->fatal($input_file . ' does not exist.'); +} +if (!is_readable($input_file)) { + $cli->fatal($input_file . ' is not readable.'); +} + +$cli->writeln($cli->blue('Parsing ' . $input_file . ' ...')); + +$data = file_get_contents($input_file); +$ical = new Horde_iCalendar(); +if (!$ical->parseVCalendar($data)) { + $cli->fatal('iCalendar parsing failed.'); +} + +$cli->writeln($cli->green('Parsing successful, found ' . $ical->getComponentCount() . ' component(s).')); + +$components = $ical->getComponents(); +foreach ($components as $component) { + var_dump($component->toHash(true)); +} diff --git a/framework/iCalendar/docs/examples/test_recurring.vcs b/framework/iCalendar/docs/examples/test_recurring.vcs new file mode 100644 index 000000000..8d01f59a7 --- /dev/null +++ b/framework/iCalendar/docs/examples/test_recurring.vcs @@ -0,0 +1,50 @@ +BEGIN:VCALENDAR +X-LOTUS-CHARSET:UTF-8 +VERSION:2.0 +PRODID:-//Lotus Development Corporation//NONSGML Notes 6.0//EN +METHOD:REQUEST +BEGIN:VTIMEZONE +TZID:Central European +BEGIN:STANDARD +DTSTART:19501029T020000 +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +RRULE:FREQ=YEARLY;BYMINUTE=0;BYHOUR=2;BYDAY=-1SU;BYMONTH=10 +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19500326T020000 +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +RRULE:FREQ=YEARLY;BYMINUTE=0;BYHOUR=2;BYDAY=-1SU;BYMONTH=3 +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +DTSTART;TZID="Central European":20040417T110000 +DTEND;TZID="Central European":20040417T113000 +TRANSP:OPAQUE +DTSTAMP:20040416T075254Z +SEQUENCE:0 +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN="XXXX/UNSA" + ;RSVP=FALSE:mailto:XXXX@XXXX.ba +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE + :mailto:XXXX1@XXXX.com +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION + ;CN="XXXX2";RSVP=TRUE:mailto:XXXX2@XXXX.ba +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION + ;CN="XXXX3";RSVP=TRUE:mailto:XXXX3@XXXX.ba +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE + :mailto:XXXX4@XXXX.ba +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE + :mailto:vljubovic@smartnet.ba +CLASS:PUBLIC +SUMMARY:XXXStriked out XXX +ORGANIZER;CN="XXXX/UNSA":mailto:XXXX@XXXX.ba +UID:59A47452891243FCC1256E78002B082C-Lotus_Notes_Generated +X-LOTUS-BROADCAST:FALSE +X-LOTUS-UPDATE-SEQ:1 +X-LOTUS-UPDATE-WISL:$S:1;$L:1;$B:1;$R:1;$E:1 +X-LOTUS-NOTESVERSION:2 +X-LOTUS-NOTICETYPE:I +X-LOTUS-CHILD_UID:59A47452891243FCC1256E78002B082C +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/docs/examples/vnote.txt b/framework/iCalendar/docs/examples/vnote.txt new file mode 100644 index 000000000..6bd5fd5e8 --- /dev/null +++ b/framework/iCalendar/docs/examples/vnote.txt @@ -0,0 +1,7 @@ +BEGIN:VNOTE +VERSION:1.1 +DCREATED:20030523T192529Z +LAST-MODIFIED:20030523T211027Z +BODY;ENCODING=QUOTED-PRINTABLE: + food=0D=0Asoup=20540=0D=0Aduck=201690=0D=0Abeer=20590=0D=0A +END:VNOTE diff --git a/framework/iCalendar/iCalendar.php b/framework/iCalendar/iCalendar.php new file mode 100644 index 000000000..b53d2be16 --- /dev/null +++ b/framework/iCalendar/iCalendar.php @@ -0,0 +1,1487 @@ + + * @since Horde 3.0 + * @package Horde_iCalendar + */ +class Horde_iCalendar { + + /** + * The component type of this class. + * + * @var string + */ + var $type = 'vcalendar'; + + /** + * The parent (containing) iCalendar object. + * + * @var Horde_iCalendar + */ + var $_container = false; + + /** + * The name/value pairs of attributes for this object (UID, + * DTSTART, etc.). Which are present depends on the object and on + * what kind of component it is. + * + * @var array + */ + var $_attributes = array(); + + /** + * Any children (contained) iCalendar components of this object. + * + * @var array + */ + var $_components = array(); + + /** + * According to RFC 2425, we should always use CRLF-terminated lines. + * + * @var string + */ + var $_newline = "\r\n"; + + /** + * iCalendar format version (different behavior for 1.0 and 2.0 especially + * with recurring events). + * + * @var string + */ + var $version; + + /** + * Whether entry is vcalendar 1.0, vcard 2.1 or vnote 1.1. + * + * These 'old' formats are defined by www.imc.org. The 'new' (non-old) + * formats icalendar 2.0 and vcard 3.0 are defined in rfc2426 and rfc2445 + * respectively. + */ + var $oldFormat = true; + + function Horde_iCalendar($version = '2.0') + { + $this->setAttribute('VERSION', $version); + } + + /** + * Return a reference to a new component. + * + * @param string $type The type of component to return + * @param Horde_iCalendar $container A container that this component + * will be associated with. + * + * @return object Reference to a Horde_iCalendar_* object as specified. + * + * @static + */ + function &newComponent($type, &$container) + { + $type = Horde_String::lower($type); + $class = 'Horde_iCalendar_' . $type; + if (!class_exists($class)) { + include 'Horde/iCalendar/' . $type . '.php'; + } + if (class_exists($class)) { + $component = new $class(); + if ($container !== false) { + $component->_container = &$container; + // Use version of container, not default set by component + // constructor. + $component->setVersion($container->version); + } + } else { + // Should return an dummy x-unknown type class here. + $component = false; + } + + return $component; + } + + /** + * Sets the version of this component. + * + * @see $version + * @see $oldFormat + * + * @param string A float-like version string. + */ + function setVersion($version) + { + $this->oldFormat = $version < 2; + $this->version = $version; + } + + /** + * Sets the value of an attribute. + * + * @param string $name The name of the attribute. + * @param string $value The value of the attribute. + * @param array $params Array containing any addition parameters for + * this attribute. + * @param boolean $append True to append the attribute, False to replace + * the first matching attribute found. + * @param array $values Array representation of $value. For + * comma/semicolon seperated lists of values. If + * not set use $value as single array element. + */ + function setAttribute($name, $value, $params = array(), $append = true, + $values = false) + { + // Make sure we update the internal format version if + // setAttribute('VERSION', ...) is called. + if ($name == 'VERSION') { + $this->setVersion($value); + if ($this->_container !== false) { + $this->_container->setVersion($value); + } + } + + if (!$values) { + $values = array($value); + } + $found = false; + if (!$append) { + foreach (array_keys($this->_attributes) as $key) { + if ($this->_attributes[$key]['name'] == Horde_String::upper($name)) { + $this->_attributes[$key]['params'] = $params; + $this->_attributes[$key]['value'] = $value; + $this->_attributes[$key]['values'] = $values; + $found = true; + break; + } + } + } + + if ($append || !$found) { + $this->_attributes[] = array( + 'name' => Horde_String::upper($name), + 'params' => $params, + 'value' => $value, + 'values' => $values + ); + } + } + + /** + * Sets parameter(s) for an (already existing) attribute. The + * parameter set is merged into the existing set. + * + * @param string $name The name of the attribute. + * @param array $params Array containing any additional parameters for + * this attribute. + * @return boolean True on success, false if no attribute $name exists. + */ + function setParameter($name, $params = array()) + { + $keys = array_keys($this->_attributes); + foreach ($keys as $key) { + if ($this->_attributes[$key]['name'] == $name) { + $this->_attributes[$key]['params'] = + array_merge($this->_attributes[$key]['params'], $params); + return true; + } + } + + return false; + } + + /** + * Get the value of an attribute. + * + * @param string $name The name of the attribute. + * @param boolean $params Return the parameters for this attribute instead + * of its value. + * + * @return mixed (object) PEAR_Error if the attribute does not exist. + * (string) The value of the attribute. + * (array) The parameters for the attribute or + * multiple values for an attribute. + */ + function getAttribute($name, $params = false) + { + $result = array(); + foreach ($this->_attributes as $attribute) { + if ($attribute['name'] == $name) { + if ($params) { + $result[] = $attribute['params']; + } else { + $result[] = $attribute['value']; + } + } + } + if (!count($result)) { + require_once 'PEAR.php'; + return PEAR::raiseError('Attribute "' . $name . '" Not Found'); + } if (count($result) == 1 && !$params) { + return $result[0]; + } else { + return $result; + } + } + + /** + * Gets the values of an attribute as an array. Multiple values + * are possible due to: + * + * a) multiplce occurences of 'name' + * b) (unsecapd) comma seperated lists. + * + * So for a vcard like "KEY:a,b\nKEY:c" getAttributesValues('KEY') + * will return array('a', 'b', 'c'). + * + * @param string $name The name of the attribute. + * @return mixed (object) PEAR_Error if the attribute does not exist. + * (array) Multiple values for an attribute. + */ + function getAttributeValues($name) + { + $result = array(); + foreach ($this->_attributes as $attribute) { + if ($attribute['name'] == $name) { + $result = array_merge($attribute['values'], $result); + } + } + if (!count($result)) { + return PEAR::raiseError('Attribute "' . $name . '" Not Found'); + } + return $result; + } + + /** + * Returns the value of an attribute, or a specified default value + * if the attribute does not exist. + * + * @param string $name The name of the attribute. + * @param mixed $default What to return if the attribute specified by + * $name does not exist. + * + * @return mixed (string) The value of $name. + * (mixed) $default if $name does not exist. + */ + function getAttributeDefault($name, $default = '') + { + $value = $this->getAttribute($name); + return is_a($value, 'PEAR_Error') ? $default : $value; + } + + /** + * Remove all occurences of an attribute. + * + * @param string $name The name of the attribute. + */ + function removeAttribute($name) + { + $keys = array_keys($this->_attributes); + foreach ($keys as $key) { + if ($this->_attributes[$key]['name'] == $name) { + unset($this->_attributes[$key]); + } + } + } + + /** + * Get attributes for all tags or for a given tag. + * + * @param string $tag Return attributes for this tag, or all attributes if + * not given. + * + * @return array An array containing all the attributes and their types. + */ + function getAllAttributes($tag = false) + { + if ($tag === false) { + return $this->_attributes; + } + $result = array(); + foreach ($this->_attributes as $attribute) { + if ($attribute['name'] == $tag) { + $result[] = $attribute; + } + } + return $result; + } + + /** + * Add a vCalendar component (eg vEvent, vTimezone, etc.). + * + * @param Horde_iCalendar $component Component (subclass) to add. + */ + function addComponent($component) + { + if (is_a($component, 'Horde_iCalendar')) { + $component->_container = &$this; + $this->_components[] = &$component; + } + } + + /** + * Retrieve all the components. + * + * @return array Array of Horde_iCalendar objects. + */ + function getComponents() + { + return $this->_components; + } + + function getType() + { + return $this->type; + } + + /** + * Return the classes (entry types) we have. + * + * @return array Hash with class names Horde_iCalendar_xxx as keys + * and number of components of this class as value. + */ + function getComponentClasses() + { + $r = array(); + foreach ($this->_components as $c) { + $cn = strtolower(get_class($c)); + if (empty($r[$cn])) { + $r[$cn] = 1; + } else { + $r[$cn]++; + } + } + + return $r; + } + + /** + * Number of components in this container. + * + * @return integer Number of components in this container. + */ + function getComponentCount() + { + return count($this->_components); + } + + /** + * Retrieve a specific component. + * + * @param integer $idx The index of the object to retrieve. + * + * @return mixed (boolean) False if the index does not exist. + * (Horde_iCalendar_*) The requested component. + */ + function getComponent($idx) + { + if (isset($this->_components[$idx])) { + return $this->_components[$idx]; + } else { + return false; + } + } + + /** + * Locates the first child component of the specified class, and returns a + * reference to it. + * + * @param string $type The type of component to find. + * + * @return boolean|Horde_iCalendar_* False if no subcomponent of the + * specified class exists or a reference + * to the requested component. + */ + function &findComponent($childclass) + { + $childclass = 'Horde_iCalendar_' . Horde_String::lower($childclass); + $keys = array_keys($this->_components); + foreach ($keys as $key) { + if (is_a($this->_components[$key], $childclass)) { + return $this->_components[$key]; + } + } + + $component = false; + return $component; + } + + /** + * Locates the first matching child component of the specified class, and + * returns a reference to it. + * + * @param string $childclass The type of component to find. + * @param string $attribute This attribute must be set in the component + * for it to match. + * @param string $value Optional value that $attribute must match. + * + * @return boolean|Horde_iCalendar_* False if no matching subcomponent of + * the specified class exists, or a + * reference to the requested component. + */ + function &findComponentByAttribute($childclass, $attribute, $value = null) + { + $childclass = 'Horde_iCalendar_' . Horde_String::lower($childclass); + $keys = array_keys($this->_components); + foreach ($keys as $key) { + if (is_a($this->_components[$key], $childclass)) { + $attr = $this->_components[$key]->getAttribute($attribute); + if (is_a($attr, 'PEAR_Error')) { + continue; + } + if ($value !== null && $value != $attr) { + continue; + } + return $this->_components[$key]; + } + } + + $component = false; + return $component; + } + + /** + * Clears the iCalendar object (resets the components and attributes + * arrays). + */ + function clear() + { + $this->_components = array(); + $this->_attributes = array(); + } + + /** + * @deprecated + */ + function isOldFormat() + { + return $this->oldFormat; + } + + /** + * Export as vCalendar format. + */ + function exportvCalendar() + { + // Default values. + $requiredAttributes['PRODID'] = '-//The Horde Project//Horde_iCalendar Library' . (defined('HORDE_VERSION') ? ', Horde ' . constant('HORDE_VERSION') : '') . '//EN'; + $requiredAttributes['METHOD'] = 'PUBLISH'; + + foreach ($requiredAttributes as $name => $default_value) { + if (is_a($this->getattribute($name), 'PEAR_Error')) { + $this->setAttribute($name, $default_value); + } + } + + return $this->_exportvData('VCALENDAR'); + } + + /** + * Export this entry as a hash array with tag names as keys. + * + * @param boolean $paramsInKeys + * If false, the operation can be quite lossy as the + * parameters are ignored when building the array keys. + * So if you export a vcard with + * LABEL;TYPE=WORK:foo + * LABEL;TYPE=HOME:bar + * the resulting hash contains only one label field! + * If set to true, array keys look like 'LABEL;TYPE=WORK' + * @return array A hash array with tag names as keys. + */ + function toHash($paramsInKeys = false) + { + $hash = array(); + foreach ($this->_attributes as $a) { + $k = $a['name']; + if ($paramsInKeys && is_array($a['params'])) { + foreach ($a['params'] as $p => $v) { + $k .= ";$p=$v"; + } + } + $hash[$k] = $a['value']; + } + + return $hash; + } + + /** + * Parses a string containing vCalendar data. + * + * @todo This method doesn't work well at all, if $base is VCARD. + * + * @param string $text The data to parse. + * @param string $base The type of the base object. + * @param string $charset The encoding charset for $text. Defaults to + * utf-8 for new format, iso-8859-1 for old format. + * @param boolean $clear If true clears the iCal object before parsing. + * + * @return boolean True on successful import, false otherwise. + */ + function parsevCalendar($text, $base = 'VCALENDAR', $charset = null, + $clear = true) + { + if ($clear) { + $this->clear(); + } + if (preg_match('/^BEGIN:' . $base . '(.*)^END:' . $base . '/ism', $text, $matches)) { + $container = true; + $vCal = $matches[1]; + } else { + // Text isn't enclosed in BEGIN:VCALENDAR + // .. END:VCALENDAR. We'll try to parse it anyway. + $container = false; + $vCal = $text; + } + $vCal = trim($vCal); + + // All subcomponents. + $matches = null; + if (preg_match_all('/^BEGIN:(.*)(\r\n|\r|\n)(.*)^END:\1/Uims', $vCal, $matches)) { + // vTimezone components are processed first. They are + // needed to process vEvents that may use a TZID. + foreach ($matches[0] as $key => $data) { + $type = trim($matches[1][$key]); + if ($type != 'VTIMEZONE') { + continue; + } + $component = &Horde_iCalendar::newComponent($type, $this); + if ($component === false) { + return PEAR::raiseError("Unable to create object for type $type"); + } + $component->parsevCalendar($data, $type, $charset); + + $this->addComponent($component); + + // Remove from the vCalendar data. + $vCal = str_replace($data, '', $vCal); + } + + // Now process the non-vTimezone components. + foreach ($matches[0] as $key => $data) { + $type = trim($matches[1][$key]); + if ($type == 'VTIMEZONE') { + continue; + } + $component = &Horde_iCalendar::newComponent($type, $this); + if ($component === false) { + return PEAR::raiseError("Unable to create object for type $type"); + } + $component->parsevCalendar($data, $type, $charset); + + $this->addComponent($component); + + // Remove from the vCalendar data. + $vCal = str_replace($data, '', $vCal); + } + } elseif (!$container) { + return false; + } + + // Unfold "quoted printable" folded lines like: + // BODY;ENCODING=QUOTED-PRINTABLE:= + // another=20line= + // last=20line + while (preg_match_all('/^([^:]+;\s*(ENCODING=)?QUOTED-PRINTABLE(.*=\r?\n)+(.*[^=])?\r?\n)/mU', $vCal, $matches)) { + foreach ($matches[1] as $s) { + $r = preg_replace('/=\r?\n/', '', $s); + $vCal = str_replace($s, $r, $vCal); + } + } + + // Unfold any folded lines. + if ($this->isOldFormat()) { + $vCal = preg_replace('/[\r\n]+([ \t])/', '$1', $vCal); + } else { + $vCal = preg_replace('/[\r\n]+[ \t]/', '', $vCal); + } + + // Parse the remaining attributes. + if (preg_match_all('/^((?:[^":]+|(?:"[^"]*")+)*):([^\r\n]*)\r?$/m', $vCal, $matches)) { + foreach ($matches[0] as $attribute) { + preg_match('/([^;^:]*)((;(?:[^":]+|(?:"[^"]*")+)*)?):([^\r\n]*)[\r\n]*/', $attribute, $parts); + $tag = trim(Horde_String::upper($parts[1])); + $value = $parts[4]; + $params = array(); + + // Parse parameters. + if (!empty($parts[2])) { + preg_match_all('/;(([^;=]*)(=("[^"]*"|[^;]*))?)/', $parts[2], $param_parts); + foreach ($param_parts[2] as $key => $paramName) { + $paramName = Horde_String::upper($paramName); + $paramValue = $param_parts[4][$key]; + if ($paramName == 'TYPE') { + $paramValue = preg_split('/(?oldFormat ? 'iso-8859-1' : 'utf-8') : $charset); + } + } elseif (isset($params['CHARSET'])) { + $value = Horde_String::convertCharset($value, $params['CHARSET']); + } else { + // As per RFC 2279, assume UTF8 if we don't have an + // explicit charset parameter. + $value = Horde_String::convertCharset($value, empty($charset) ? ($this->oldFormat ? 'iso-8859-1' : 'utf-8') : $charset); + } + + // Get timezone info for date fields from $params. + $tzid = isset($params['TZID']) ? trim($params['TZID'], '\"') : false; + + switch ($tag) { + // Date fields. + case 'COMPLETED': + case 'CREATED': + case 'LAST-MODIFIED': + case 'X-MOZ-LASTACK': + case 'X-MOZ-SNOOZE-TIME': + $this->setAttribute($tag, $this->_parseDateTime($value, $tzid), $params); + break; + + case 'BDAY': + case 'X-ANNIVERSARY': + $this->setAttribute($tag, $this->_parseDate($value), $params); + break; + + case 'DTEND': + case 'DTSTART': + case 'DTSTAMP': + case 'DUE': + case 'AALARM': + case 'RECURRENCE-ID': + // types like AALARM may contain additional data after a ; + // ignore these. + $ts = explode(';', $value); + if (isset($params['VALUE']) && $params['VALUE'] == 'DATE') { + $this->setAttribute($tag, $this->_parseDate($ts[0]), $params); + } else { + $this->setAttribute($tag, $this->_parseDateTime($ts[0], $tzid), $params); + } + break; + + case 'TRIGGER': + if (isset($params['VALUE']) && + $params['VALUE'] == 'DATE-TIME') { + $this->setAttribute($tag, $this->_parseDateTime($value, $tzid), $params); + } else { + $this->setAttribute($tag, $this->_parseDuration($value), $params); + } + break; + + // Comma seperated dates. + case 'EXDATE': + case 'RDATE': + $dates = array(); + preg_match_all('/,([^,]*)/', ',' . $value, $values); + + foreach ($values[1] as $value) { + $dates[] = $this->_parseDate($value); + } + $this->setAttribute($tag, isset($dates[0]) ? $dates[0] : null, $params, true, $dates); + break; + + // Duration fields. + case 'DURATION': + $this->setAttribute($tag, $this->_parseDuration($value), $params); + break; + + // Period of time fields. + case 'FREEBUSY': + $periods = array(); + preg_match_all('/,([^,]*)/', ',' . $value, $values); + foreach ($values[1] as $value) { + $periods[] = $this->_parsePeriod($value); + } + + $this->setAttribute($tag, isset($periods[0]) ? $periods[0] : null, $params, true, $periods); + break; + + // UTC offset fields. + case 'TZOFFSETFROM': + case 'TZOFFSETTO': + $this->setAttribute($tag, $this->_parseUtcOffset($value), $params); + break; + + // Integer fields. + case 'PERCENT-COMPLETE': + case 'PRIORITY': + case 'REPEAT': + case 'SEQUENCE': + $this->setAttribute($tag, intval($value), $params); + break; + + // Geo fields. + case 'GEO': + if ($this->oldFormat) { + $floats = explode(',', $value); + $value = array('latitude' => floatval($floats[1]), + 'longitude' => floatval($floats[0])); + } else { + $floats = explode(';', $value); + $value = array('latitude' => floatval($floats[0]), + 'longitude' => floatval($floats[1])); + } + $this->setAttribute($tag, $value, $params); + break; + + // Recursion fields. + case 'EXRULE': + case 'RRULE': + $this->setAttribute($tag, trim($value), $params); + break; + + // ADR, ORG and N are lists seperated by unescaped semicolons + // with a specific number of slots. + case 'ADR': + case 'N': + case 'ORG': + $value = trim($value); + // As of rfc 2426 2.4.2 semicolon, comma, and colon must + // be escaped (comma is unescaped after splitting below). + $value = str_replace(array('\\n', '\\N', '\\;', '\\:'), + array($this->_newline, $this->_newline, ';', ':'), + $value); + + // Split by unescaped semicolons: + $values = preg_split('/(?setAttribute($tag, trim($value), $params, true, $values); + break; + + // String fields. + default: + if ($this->oldFormat) { + // vCalendar 1.0 and vCard 2.1 only escape semicolons + // and use unescaped semicolons to create lists. + $value = trim($value); + // Split by unescaped semicolons: + $values = preg_split('/(?setAttribute($tag, trim($value), $params, true, $values); + } else { + $value = trim($value); + // As of rfc 2426 2.4.2 semicolon, comma, and colon + // must be escaped (comma is unescaped after splitting + // below). + $value = str_replace(array('\\n', '\\N', '\\;', '\\:', '\\\\'), + array($this->_newline, $this->_newline, ';', ':', '\\'), + $value); + + // Split by unescaped commas. + $values = preg_split('/(?setAttribute($tag, trim($value), $params, true, $values); + } + break; + } + } + } + + return true; + } + + /** + * Export this component in vCal format. + * + * @param string $base The type of the base object. + * + * @return string vCal format data. + */ + function _exportvData($base = 'VCALENDAR') + { + $result = 'BEGIN:' . Horde_String::upper($base) . $this->_newline; + + // VERSION is not allowed for entries enclosed in VCALENDAR/ICALENDAR, + // as it is part of the enclosing VCALENDAR/ICALENDAR. See rfc2445 + if ($base !== 'VEVENT' && $base !== 'VTODO' && $base !== 'VALARM' && + $base !== 'VJOURNAL' && $base !== 'VFREEBUSY') { + // Ensure that version is the first attribute. + $result .= 'VERSION:' . $this->version . $this->_newline; + } + foreach ($this->_attributes as $attribute) { + $name = $attribute['name']; + if ($name == 'VERSION') { + // Already done. + continue; + } + + $params_str = ''; + $params = $attribute['params']; + if ($params) { + foreach ($params as $param_name => $param_value) { + /* Skip CHARSET for iCalendar 2.0 data, not allowed. */ + if ($param_name == 'CHARSET' && !$this->oldFormat) { + continue; + } + /* Skip VALUE=DATE for vCalendar 1.0 data, not allowed. */ + if ($this->oldFormat && + $param_name == 'VALUE' && $param_value == 'DATE') { + continue; + } + + if ($param_value === null) { + $params_str .= ";$param_name"; + } else { + $len = strlen($param_value); + $safe_value = ''; + $quote = false; + for ($i = 0; $i < $len; ++$i) { + $ord = ord($param_value[$i]); + // Accept only valid characters. + if ($ord == 9 || $ord == 32 || $ord == 33 || + ($ord >= 35 && $ord <= 126) || + $ord >= 128) { + $safe_value .= $param_value[$i]; + // Characters above 128 do not need to be + // quoted as per RFC2445 but Outlook requires + // this. + if ($ord == 44 || $ord == 58 || $ord == 59 || + $ord >= 128) { + $quote = true; + } + } + } + if ($quote) { + $safe_value = '"' . $safe_value . '"'; + } + $params_str .= ";$param_name=$safe_value"; + } + } + } + + $value = $attribute['value']; + switch ($name) { + // Date fields. + case 'COMPLETED': + case 'CREATED': + case 'DCREATED': + case 'LAST-MODIFIED': + case 'X-MOZ-LASTACK': + case 'X-MOZ-SNOOZE-TIME': + $value = $this->_exportDateTime($value); + break; + + case 'DTEND': + case 'DTSTART': + case 'DTSTAMP': + case 'DUE': + case 'AALARM': + case 'RECURRENCE-ID': + if (isset($params['VALUE'])) { + if ($params['VALUE'] == 'DATE') { + // VCALENDAR 1.0 uses T000000 - T235959 for all day events: + if ($this->oldFormat && $name == 'DTEND') { + $d = new Horde_Date($value); + $value = new Horde_Date(array( + 'year' => $d->year, + 'month' => $d->month, + 'mday' => $d->mday - 1)); + $value->correct(); + $value = $this->_exportDate($value, '235959'); + } else { + $value = $this->_exportDate($value, '000000'); + } + } else { + $value = $this->_exportDateTime($value); + } + } else { + $value = $this->_exportDateTime($value); + } + break; + + // Comma seperated dates. + case 'EXDATE': + case 'RDATE': + $dates = array(); + foreach ($value as $date) { + if (isset($params['VALUE'])) { + if ($params['VALUE'] == 'DATE') { + $dates[] = $this->_exportDate($date, '000000'); + } elseif ($params['VALUE'] == 'PERIOD') { + $dates[] = $this->_exportPeriod($date); + } else { + $dates[] = $this->_exportDateTime($date); + } + } else { + $dates[] = $this->_exportDateTime($date); + } + } + $value = implode(',', $dates); + break; + + case 'TRIGGER': + if (isset($params['VALUE'])) { + if ($params['VALUE'] == 'DATE-TIME') { + $value = $this->_exportDateTime($value); + } elseif ($params['VALUE'] == 'DURATION') { + $value = $this->_exportDuration($value); + } + } else { + $value = $this->_exportDuration($value); + } + break; + + // Duration fields. + case 'DURATION': + $value = $this->_exportDuration($value); + break; + + // Period of time fields. + case 'FREEBUSY': + $value_str = ''; + foreach ($value as $period) { + $value_str .= empty($value_str) ? '' : ','; + $value_str .= $this->_exportPeriod($period); + } + $value = $value_str; + break; + + // UTC offset fields. + case 'TZOFFSETFROM': + case 'TZOFFSETTO': + $value = $this->_exportUtcOffset($value); + break; + + // Integer fields. + case 'PERCENT-COMPLETE': + case 'PRIORITY': + case 'REPEAT': + case 'SEQUENCE': + $value = "$value"; + break; + + // Geo fields. + case 'GEO': + if ($this->oldFormat) { + $value = $value['longitude'] . ',' . $value['latitude']; + } else { + $value = $value['latitude'] . ';' . $value['longitude']; + } + break; + + // Recurrence fields. + case 'EXRULE': + case 'RRULE': + break; + + default: + if ($this->oldFormat) { + if (is_array($attribute['values']) && + count($attribute['values']) > 1) { + $values = $attribute['values']; + if ($name == 'N' || $name == 'ADR' || $name == 'ORG') { + $glue = ';'; + } else { + $glue = ','; + } + $values = str_replace(';', '\\;', $values); + $value = implode($glue, $values); + } else { + /* vcard 2.1 and vcalendar 1.0 escape only + * semicolons */ + $value = str_replace(';', '\\;', $value); + } + // Text containing newlines or ASCII >= 127 must be BASE64 + // or QUOTED-PRINTABLE encoded. Currently we use + // QUOTED-PRINTABLE as default. + if (preg_match("/[^\x20-\x7F]/", $value) && + empty($params['ENCODING'])) { + $params['ENCODING'] = 'QUOTED-PRINTABLE'; + $params_str .= ';ENCODING=QUOTED-PRINTABLE'; + // Add CHARSET as well. At least the synthesis client + // gets confused otherwise + if (empty($params['CHARSET'])) { + $params['CHARSET'] = Horde_Nls::getCharset(); + $params_str .= ';CHARSET=' . $params['CHARSET']; + } + } + } else { + if (is_array($attribute['values']) && + count($attribute['values'])) { + $values = $attribute['values']; + if ($name == 'N' || $name == 'ADR' || $name == 'ORG') { + $glue = ';'; + } else { + $glue = ','; + } + // As of rfc 2426 2.5 semicolon and comma must be + // escaped. + $values = str_replace(array('\\', ';', ','), + array('\\\\', '\\;', '\\,'), + $values); + $value = implode($glue, $values); + } else { + // As of rfc 2426 2.5 semicolon and comma must be + // escaped. + $value = str_replace(array('\\', ';', ','), + array('\\\\', '\\;', '\\,'), + $value); + } + $value = preg_replace('/\r?\n/', '\n', $value); + } + break; + } + + $value = str_replace("\r", '', $value); + if (!empty($params['ENCODING']) && + $params['ENCODING'] == 'QUOTED-PRINTABLE' && + strlen(trim($value))) { + $result .= $name . $params_str . ':' + . str_replace('=0A', '=0D=0A', + $this->_quotedPrintableEncode($value)) + . $this->_newline; + } else { + $attr_string = $name . $params_str . ':' . $value; + if (!$this->oldFormat) { + $attr_string = Horde_String::wordwrap($attr_string, 75, $this->_newline . ' ', + true, 'utf-8', true); + } + $result .= $attr_string . $this->_newline; + } + } + + foreach ($this->_components as $component) { + $result .= $component->exportvCalendar(); + } + + return $result . 'END:' . $base . $this->_newline; + } + + /** + * Parse a UTC Offset field. + */ + function _parseUtcOffset($text) + { + $offset = array(); + if (preg_match('/(\+|-)([0-9]{2})([0-9]{2})([0-9]{2})?/', $text, $timeParts)) { + $offset['ahead'] = (bool)($timeParts[1] == '+'); + $offset['hour'] = intval($timeParts[2]); + $offset['minute'] = intval($timeParts[3]); + if (isset($timeParts[4])) { + $offset['second'] = intval($timeParts[4]); + } + return $offset; + } else { + return false; + } + } + + /** + * Export a UTC Offset field. + */ + function _exportUtcOffset($value) + { + $offset = $value['ahead'] ? '+' : '-'; + $offset .= sprintf('%02d%02d', + $value['hour'], $value['minute']); + if (isset($value['second'])) { + $offset .= sprintf('%02d', $value['second']); + } + + return $offset; + } + + /** + * Parse a Time Period field. + */ + function _parsePeriod($text) + { + $periodParts = explode('/', $text); + + $start = $this->_parseDateTime($periodParts[0]); + + if ($duration = $this->_parseDuration($periodParts[1])) { + return array('start' => $start, 'duration' => $duration); + } elseif ($end = $this->_parseDateTime($periodParts[1])) { + return array('start' => $start, 'end' => $end); + } + } + + /** + * Export a Time Period field. + */ + function _exportPeriod($value) + { + $period = $this->_exportDateTime($value['start']); + $period .= '/'; + if (isset($value['duration'])) { + $period .= $this->_exportDuration($value['duration']); + } else { + $period .= $this->_exportDateTime($value['end']); + } + return $period; + } + + /** + * Grok the TZID and return an offset in seconds from UTC for this + * date and time. + */ + function _parseTZID($date, $time, $tzid) + { + $vtimezone = $this->_container->findComponentByAttribute('vtimezone', 'TZID', $tzid); + if (!$vtimezone) { + return false; + } + + $change_times = array(); + foreach ($vtimezone->getComponents() as $o) { + $t = $vtimezone->parseChild($o, $date['year']); + if ($t !== false) { + $change_times[] = $t; + } + } + + if (!$change_times) { + return false; + } + + sort($change_times); + + // Time is arbitrarily based on UTC for comparison. + $t = @gmmktime($time['hour'], $time['minute'], $time['second'], + $date['month'], $date['mday'], $date['year']); + + if ($t < $change_times[0]['time']) { + return $change_times[0]['from']; + } + + for ($i = 0, $n = count($change_times); $i < $n - 1; $i++) { + if (($t >= $change_times[$i]['time']) && + ($t < $change_times[$i + 1]['time'])) { + return $change_times[$i]['to']; + } + } + + if ($t >= $change_times[$n - 1]['time']) { + return $change_times[$n - 1]['to']; + } + + return false; + } + + /** + * Parses a DateTime field and returns a unix timestamp. If the + * field cannot be parsed then the original text is returned + * unmodified. + * + * @todo This function should be moved to Horde_Date and made public. + */ + function _parseDateTime($text, $tzid = false) + { + $dateParts = explode('T', $text); + if (count($dateParts) != 2 && !empty($text)) { + // Not a datetime field but may be just a date field. + if (!preg_match('/^(\d{4})-?(\d{2})-?(\d{2})$/', $text, $match)) { + // Or not + return $text; + } + $dateParts = array($text, '000000'); + } + + if (!$date = Horde_iCalendar::_parseDate($dateParts[0])) { + return $text; + } + if (!$time = Horde_iCalendar::_parseTime($dateParts[1])) { + return $text; + } + + // Get timezone info for date fields from $tzid and container. + $tzoffset = ($time['zone'] == 'Local' && $tzid && + is_a($this->_container, 'Horde_iCalendar')) + ? $this->_parseTZID($date, $time, $tzid) : false; + if ($time['zone'] == 'UTC' || $tzoffset !== false) { + $result = @gmmktime($time['hour'], $time['minute'], $time['second'], + $date['month'], $date['mday'], $date['year']); + if ($tzoffset) { + $result -= $tzoffset; + } + } else { + // We don't know the timezone so assume local timezone. + // FIXME: shouldn't this be based on the user's timezone + // preference rather than the server's timezone? + $result = @mktime($time['hour'], $time['minute'], $time['second'], + $date['month'], $date['mday'], $date['year']); + } + + return ($result !== false) ? $result : $text; + } + + /** + * Export a DateTime field. + */ + function _exportDateTime($value) + { + $temp = array(); + if (!is_object($value) && !is_array($value)) { + $tz = date('O', $value); + $TZOffset = (3600 * substr($tz, 0, 3)) + (60 * substr(date('O', $value), 3, 2)); + $value -= $TZOffset; + + $temp['zone'] = 'UTC'; + $temp['year'] = date('Y', $value); + $temp['month'] = date('n', $value); + $temp['mday'] = date('j', $value); + $temp['hour'] = date('G', $value); + $temp['minute'] = date('i', $value); + $temp['second'] = date('s', $value); + } else { + $dateOb = new Horde_Date($value); + return Horde_iCalendar::_exportDateTime($dateOb->timestamp()); + } + + return Horde_iCalendar::_exportDate($temp) . 'T' . Horde_iCalendar::_exportTime($temp); + } + + /** + * Parses a Time field. + * + * @static + */ + function _parseTime($text) + { + if (!preg_match('/([0-9]{2})([0-9]{2})([0-9]{2})(Z)?/', $text, $timeParts)) { + return false; + } + + $time = array('hour' => $timeParts[1], + 'minute' => $timeParts[2], + 'second' => $timeParts[3]); + if (isset($timeParts[4])) { + $time['zone'] = 'UTC'; + } else { + $time['zone'] = 'Local'; + } + + return $time; + } + + /** + * Exports a Time field. + */ + function _exportTime($value) + { + $time = sprintf('%02d%02d%02d', + $value['hour'], $value['minute'], $value['second']); + if ($value['zone'] == 'UTC') { + $time .= 'Z'; + } + return $time; + } + + /** + * Parses a Date field. + * + * @static + */ + function _parseDate($text) + { + $parts = explode('T', $text); + if (count($parts) == 2) { + $text = $parts[0]; + } + + if (!preg_match('/^(\d{4})-?(\d{2})-?(\d{2})$/', $text, $match)) { + return false; + } + + return array('year' => $match[1], + 'month' => $match[2], + 'mday' => $match[3]); + } + + /** + * Exports a date field. + * + * @param object|array $value Date object or hash. + * @param string $autoconvert If set, use this as time part to export the + * date as datetime when exporting to Vcalendar + * 1.0. Examples: '000000' or '235959' + */ + function _exportDate($value, $autoconvert = false) + { + if (is_object($value)) { + $value = array('year' => $value->year, 'month' => $value->month, 'mday' => $value->mday); + } + if ($autoconvert !== false && $this->oldFormat) { + return sprintf('%04d%02d%02dT%s', $value['year'], $value['month'], $value['mday'], $autoconvert); + } else { + return sprintf('%04d%02d%02d', $value['year'], $value['month'], $value['mday']); + } + } + + /** + * Parse a Duration Value field. + */ + function _parseDuration($text) + { + if (preg_match('/([+]?|[-])P(([0-9]+W)|([0-9]+D)|)(T(([0-9]+H)|([0-9]+M)|([0-9]+S))+)?/', trim($text), $durvalue)) { + // Weeks. + $duration = 7 * 86400 * intval($durvalue[3]); + + if (count($durvalue) > 4) { + // Days. + $duration += 86400 * intval($durvalue[4]); + } + if (count($durvalue) > 5) { + // Hours. + $duration += 3600 * intval($durvalue[7]); + + // Mins. + if (isset($durvalue[8])) { + $duration += 60 * intval($durvalue[8]); + } + + // Secs. + if (isset($durvalue[9])) { + $duration += intval($durvalue[9]); + } + } + + // Sign. + if ($durvalue[1] == "-") { + $duration *= -1; + } + + return $duration; + } else { + return false; + } + } + + /** + * Export a duration value. + */ + function _exportDuration($value) + { + $duration = ''; + if ($value < 0) { + $value *= -1; + $duration .= '-'; + } + $duration .= 'P'; + + $weeks = floor($value / (7 * 86400)); + $value = $value % (7 * 86400); + if ($weeks) { + $duration .= $weeks . 'W'; + } + + $days = floor($value / (86400)); + $value = $value % (86400); + if ($days) { + $duration .= $days . 'D'; + } + + if ($value) { + $duration .= 'T'; + + $hours = floor($value / 3600); + $value = $value % 3600; + if ($hours) { + $duration .= $hours . 'H'; + } + + $mins = floor($value / 60); + $value = $value % 60; + if ($mins) { + $duration .= $mins . 'M'; + } + + if ($value) { + $duration .= $value . 'S'; + } + } + + return $duration; + } + + /** + * Converts an 8bit string to a quoted-printable string according to RFC + * 2045, section 6.7. + * + * imap_8bit() does not apply all necessary rules. + * + * @param string $input The string to be encoded. + * + * @return string The quoted-printable encoded string. + */ + function _quotedPrintableEncode($input = '') + { + $output = $line = ''; + $len = strlen($input); + + for ($i = 0; $i < $len; ++$i) { + $ord = ord($input[$i]); + // Encode non-printable characters (rule 2). + if ($ord == 9 || + ($ord >= 32 && $ord <= 60) || + ($ord >= 62 && $ord <= 126)) { + $chunk = $input[$i]; + } else { + // Quoted printable encoding (rule 1). + $chunk = '=' . Horde_String::upper(sprintf('%02X', $ord)); + } + $line .= $chunk; + // Wrap long lines (rule 5) + if (strlen($line) + 1 > 76) { + $line = Horde_String::wordwrap($line, 75, "=\r\n", true, 'us-ascii', true); + $newline = strrchr($line, "\r\n"); + if ($newline !== false) { + $output .= substr($line, 0, -strlen($newline) + 2); + $line = substr($newline, 2); + } else { + $output .= $line; + } + continue; + } + // Wrap at line breaks for better readability (rule 4). + if (substr($line, -3) == '=0A') { + $output .= $line . "=\r\n"; + $line = ''; + } + } + $output .= $line; + + // Trailing whitespace must be encoded (rule 3). + $lastpos = strlen($output) - 1; + if ($output[$lastpos] == chr(9) || + $output[$lastpos] == chr(32)) { + $output[$lastpos] = '='; + $output .= Horde_String::upper(sprintf('%02X', ord($output[$lastpos]))); + } + + return $output; + } + +} diff --git a/framework/iCalendar/iCalendar/valarm.php b/framework/iCalendar/iCalendar/valarm.php new file mode 100644 index 000000000..c2bfe9ed5 --- /dev/null +++ b/framework/iCalendar/iCalendar/valarm.php @@ -0,0 +1,30 @@ + + * @since Horde 3.0 + * @package Horde_iCalendar + */ +class Horde_iCalendar_valarm extends Horde_iCalendar { + + /** + * The component type of this class. + * + * @var string + */ + var $type = 'vAlarm'; + + function exportvCalendar() + { + return parent::_exportvData('VALARM'); + } + +} diff --git a/framework/iCalendar/iCalendar/vcard.php b/framework/iCalendar/iCalendar/vcard.php new file mode 100644 index 000000000..ff37aadb5 --- /dev/null +++ b/framework/iCalendar/iCalendar/vcard.php @@ -0,0 +1,148 @@ + + * @package Horde_iCalendar + */ +class Horde_iCalendar_vcard extends Horde_iCalendar { + + /** + * The component type of this class. + * + * @var string + */ + var $type = 'vcard'; + + function Horde_iCalendar_vcard($version = '2.1') + { + return parent::Horde_iCalendar($version); + } + + /** + * Sets the version of this component. + * + * @see $version + * @see $oldFormat + * + * @param string A float-like version string. + */ + function setVersion($version) + { + $this->oldFormat = $version < 3; + $this->version = $version; + } + + /** + * Unlike vevent and vtodo, a vcard is normally not enclosed in an + * iCalendar container. (BEGIN..END) + */ + function exportvCalendar() + { + $requiredAttributes['VERSION'] = $this->version; + $requiredAttributes['N'] = ';;;;;;'; + if ($this->version == '3.0') { + $requiredAttributes['FN'] = ''; + } + + foreach ($requiredAttributes as $name => $default_value) { + if (is_a($this->getAttribute($name), 'PEAR_Error')) { + $this->setAttribute($name, $default_value); + } + } + + return $this->_exportvData('VCARD'); + } + + /** + * Returns the contents of the "N" tag as a printable Name: + * i.e. converts: + * + * N:Duck;Dagobert;T;Professor;Sen. + * to + * "Professor Dagobert T Duck Sen" + * + * @return string Full name of vcard "N" tag or null if no N tag. + */ + function printableName() + { + $name_parts = $this->getAttributeValues('N'); + if (is_a($name_parts, 'PEAR_Error')) { + return null; + } + + $name_arr = array(); + + if (!empty($name_parts[VCARD_N_PREFIX])) { + $name_arr[] = $name_parts[VCARD_N_PREFIX]; + } + if (!empty($name_parts[VCARD_N_GIVEN])) { + $name_arr[] = $name_parts[VCARD_N_GIVEN]; + } + if (!empty($name_parts[VCARD_N_ADDL])) { + $name_arr[] = $name_parts[VCARD_N_ADDL]; + } + if (!empty($name_parts[VCARD_N_FAMILY])) { + $name_arr[] = $name_parts[VCARD_N_FAMILY]; + } + if (!empty($name_parts[VCARD_N_SUFFIX])) { + $name_arr[] = $name_parts[VCARD_N_SUFFIX]; + } + + return implode(' ', $name_arr); + } + + /** + * Static function to make a given email address rfc822 compliant. + * + * @param string $address An email address. + * + * @return string The RFC822-formatted email address. + */ + function getBareEmail($address) + { + // Empty values are still empty. + if (!$address) { + return $address; + } + + static $rfc822; + if (is_null($rfc822)) { + $rfc822 = new Mail_RFC822(); + } + + if (!$rfc822->validateMailbox($address)) { + return $address; + } + return Horde_Mime_Address::writeAddress($address->mailbox, $address->host); + } + +} diff --git a/framework/iCalendar/iCalendar/vevent.php b/framework/iCalendar/iCalendar/vevent.php new file mode 100644 index 000000000..ea9fde59e --- /dev/null +++ b/framework/iCalendar/iCalendar/vevent.php @@ -0,0 +1,232 @@ + + * @since Horde 3.0 + * @package Horde_iCalendar + */ +class Horde_iCalendar_vevent extends Horde_iCalendar { + + /** + * The component type of this class. + * + * @var string + */ + var $type = 'vEvent'; + + function exportvCalendar() + { + // Default values. + $requiredAttributes = array(); + $requiredAttributes['DTSTAMP'] = time(); + $requiredAttributes['UID'] = $this->_exportDateTime(time()) + . substr(str_pad(base_convert(microtime(), 10, 36), 16, uniqid(mt_rand()), STR_PAD_LEFT), -16) + . '@' . (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost'); + + $method = !empty($this->_container) ? + $this->_container->getAttribute('METHOD') : 'PUBLISH'; + + switch ($method) { + case 'PUBLISH': + $requiredAttributes['DTSTART'] = time(); + $requiredAttributes['SUMMARY'] = ''; + break; + + case 'REQUEST': + $requiredAttributes['ATTENDEE'] = ''; + $requiredAttributes['DTSTART'] = time(); + $requiredAttributes['SUMMARY'] = ''; + break; + + case 'REPLY': + $requiredAttributes['ATTENDEE'] = ''; + break; + + case 'ADD': + $requiredAttributes['DTSTART'] = time(); + $requiredAttributes['SEQUENCE'] = 1; + $requiredAttributes['SUMMARY'] = ''; + break; + + case 'CANCEL': + $requiredAttributes['ATTENDEE'] = ''; + $requiredAttributes['SEQUENCE'] = 1; + break; + + case 'REFRESH': + $requiredAttributes['ATTENDEE'] = ''; + break; + } + + foreach ($requiredAttributes as $name => $default_value) { + if (is_a($this->getAttribute($name), 'PEAR_Error')) { + $this->setAttribute($name, $default_value); + } + } + + return parent::_exportvData('VEVENT'); + } + + /** + * Update the status of an attendee of an event. + * + * @param $email The email address of the attendee. + * @param $status The participant status to set. + * @param $fullname The full name of the participant to set. + */ + function updateAttendee($email, $status, $fullname = '') + { + foreach ($this->_attributes as $key => $attribute) { + if ($attribute['name'] == 'ATTENDEE' && + $attribute['value'] == 'mailto:' . $email) { + $this->_attributes[$key]['params']['PARTSTAT'] = $status; + if (!empty($fullname)) { + $this->_attributes[$key]['params']['CN'] = $fullname; + } + unset($this->_attributes[$key]['params']['RSVP']); + return; + } + } + $params = array('PARTSTAT' => $status); + if (!empty($fullname)) { + $params['CN'] = $fullname; + } + $this->setAttribute('ATTENDEE', 'mailto:' . $email, $params); + } + + /** + * Return the organizer display name or email. + * + * @return string The organizer name to display for this event. + */ + function organizerName() + { + $organizer = $this->getAttribute('ORGANIZER', true); + if (is_a($organizer, 'PEAR_Error')) { + return _("An unknown person"); + } + + if (isset($organizer[0]['CN'])) { + return $organizer[0]['CN']; + } + + $organizer = parse_url($this->getAttribute('ORGANIZER')); + + return $organizer['path']; + } + + /** + * Update this event with details from another event. + * + * @param Horde_iCalendar_vEvent $vevent The vEvent with latest details. + */ + function updateFromvEvent($vevent) + { + $newAttributes = $vevent->getAllAttributes(); + foreach ($newAttributes as $newAttribute) { + $currentValue = $this->getAttribute($newAttribute['name']); + if (is_a($currentValue, 'PEAR_error')) { + // Already exists so just add it. + $this->setAttribute($newAttribute['name'], + $newAttribute['value'], + $newAttribute['params']); + } else { + // Already exists so locate and modify. + $found = false; + + // Try matching the attribte name and value incase + // only the params changed (eg attendee updating + // status). + foreach ($this->_attributes as $id => $attr) { + if ($attr['name'] == $newAttribute['name'] && + $attr['value'] == $newAttribute['value']) { + // merge the params + foreach ($newAttribute['params'] as $param_id => $param_name) { + $this->_attributes[$id]['params'][$param_id] = $param_name; + } + $found = true; + break; + } + } + if (!$found) { + // Else match the first attribute with the same + // name (eg changing start time). + foreach ($this->_attributes as $id => $attr) { + if ($attr['name'] == $newAttribute['name']) { + $this->_attributes[$id]['value'] = $newAttribute['value']; + // Merge the params. + foreach ($newAttribute['params'] as $param_id => $param_name) { + $this->_attributes[$id]['params'][$param_id] = $param_name; + } + break; + } + } + } + } + } + } + + /** + * Update just the attendess of event with details from another + * event. + * + * @param Horde_iCalendar_vEvent $vevent The vEvent with latest details + */ + function updateAttendeesFromvEvent($vevent) + { + $newAttributes = $vevent->getAllAttributes(); + foreach ($newAttributes as $newAttribute) { + if ($newAttribute['name'] != 'ATTENDEE') { + continue; + } + $currentValue = $this->getAttribute($newAttribute['name']); + if (is_a($currentValue, 'PEAR_error')) { + // Already exists so just add it. + $this->setAttribute($newAttribute['name'], + $newAttribute['value'], + $newAttribute['params']); + } else { + // Already exists so locate and modify. + $found = false; + // Try matching the attribte name and value incase + // only the params changed (eg attendee updating + // status). + foreach ($this->_attributes as $id => $attr) { + if ($attr['name'] == $newAttribute['name'] && + $attr['value'] == $newAttribute['value']) { + // Merge the params. + foreach ($newAttribute['params'] as $param_id => $param_name) { + $this->_attributes[$id]['params'][$param_id] = $param_name; + } + $found = true; + break; + } + } + + if (!$found) { + // Else match the first attribute with the same + // name (eg changing start time). + foreach ($this->_attributes as $id => $attr) { + if ($attr['name'] == $newAttribute['name']) { + $this->_attributes[$id]['value'] = $newAttribute['value']; + // Merge the params. + foreach ($newAttribute['params'] as $param_id => $param_name) { + $this->_attributes[$id]['params'][$param_id] = $param_name; + } + break; + } + } + } + } + } + } + +} diff --git a/framework/iCalendar/iCalendar/vfreebusy.php b/framework/iCalendar/iCalendar/vfreebusy.php new file mode 100644 index 000000000..d2a20b13b --- /dev/null +++ b/framework/iCalendar/iCalendar/vfreebusy.php @@ -0,0 +1,456 @@ + + * @since Horde 3.0 + * @package Horde_iCalendar + */ +class Horde_iCalendar_vfreebusy extends Horde_iCalendar { + + /** + * The component type of this class. + * + * @var string + */ + var $type = 'vFreebusy'; + + var $_busyPeriods = array(); + var $_extraParams = array(); + + /** + * Parses a string containing vFreebusy data. + * + * @param string $data The data to parse. + */ + function parsevCalendar($data, $type = null, $charset = null) + { + parent::parsevCalendar($data, 'VFREEBUSY', $charset); + + // Do something with all the busy periods. + foreach ($this->_attributes as $key => $attribute) { + if ($attribute['name'] != 'FREEBUSY') { + continue; + } + foreach ($attribute['values'] as $value) { + $params = isset($attribute['params']) + ? $attribute['params'] + : array(); + if (isset($value['duration'])) { + $this->addBusyPeriod('BUSY', $value['start'], null, + $value['duration'], $params); + } else { + $this->addBusyPeriod('BUSY', $value['start'], + $value['end'], null, $params); + } + } + unset($this->_attributes[$key]); + } + } + + /** + * Returns the component exported as string. + * + * @return string The exported vFreeBusy information according to the + * iCalender format specification. + */ + function exportvCalendar() + { + foreach ($this->_busyPeriods as $start => $end) { + $periods = array(array('start' => $start, 'end' => $end)); + $this->setAttribute('FREEBUSY', $periods, + isset($this->_extraParams[$start]) + ? $this->_extraParams[$start] : array()); + } + + $res = parent::_exportvData('VFREEBUSY'); + + foreach ($this->_attributes as $key => $attribute) { + if ($attribute['name'] == 'FREEBUSY') { + unset($this->_attributes[$key]); + } + } + + return $res; + } + + /** + * Returns a display name for this object. + * + * @return string A clear text name for displaying this object. + */ + function getName() + { + $name = ''; + $method = !empty($this->_container) ? + $this->_container->getAttribute('METHOD') : 'PUBLISH'; + + if (is_a($method, 'PEAR_Error') || $method == 'PUBLISH') { + $attr = 'ORGANIZER'; + } elseif ($method == 'REPLY') { + $attr = 'ATTENDEE'; + } + + $name = $this->getAttribute($attr, true); + if (!is_a($name, 'PEAR_Error') && isset($name[0]['CN'])) { + return $name[0]['CN']; + } + + $name = $this->getAttribute($attr); + if (is_a($name, 'PEAR_Error')) { + return ''; + } else { + $name = parse_url($name); + return $name['path']; + } + } + + /** + * Returns the email address for this object. + * + * @return string The email address of this object's owner. + */ + function getEmail() + { + $name = ''; + $method = !empty($this->_container) + ? $this->_container->getAttribute('METHOD') : 'PUBLISH'; + + if (is_a($method, 'PEAR_Error') || $method == 'PUBLISH') { + $attr = 'ORGANIZER'; + } elseif ($method == 'REPLY') { + $attr = 'ATTENDEE'; + } + + $name = $this->getAttribute($attr); + if (is_a($name, 'PEAR_Error')) { + return ''; + } else { + $name = parse_url($name); + return $name['path']; + } + } + + /** + * Returns the busy periods. + * + * @return array All busy periods. + */ + function getBusyPeriods() + { + return $this->_busyPeriods; + } + + /** + * Returns any additional freebusy parameters. + * + * @return array Additional parameters of the freebusy periods. + */ + function getExtraParams() + { + return $this->_extraParams; + } + + /** + * Returns all the free periods of time in a given period. + * + * @param integer $startStamp The start timestamp. + * @param integer $endStamp The end timestamp. + * + * @return array A hash with free time periods, the start times as the + * keys and the end times as the values. + */ + function getFreePeriods($startStamp, $endStamp) + { + $this->simplify(); + $periods = array(); + + // Check that we have data for some part of this period. + if ($this->getEnd() < $startStamp || $this->getStart() > $endStamp) { + return $periods; + } + + // Locate the first time in the requested period we have data for. + $nextstart = max($startStamp, $this->getStart()); + + // Check each busy period and add free periods in between. + foreach ($this->_busyPeriods as $start => $end) { + if ($start <= $endStamp && $end >= $nextstart) { + if ($nextstart <= $start) { + $periods[$nextstart] = min($start, $endStamp); + } + $nextstart = min($end, $endStamp); + } + } + + // If we didn't read the end of the requested period but still have + // data then mark as free to the end of the period or available data. + if ($nextstart < $endStamp && $nextstart < $this->getEnd()) { + $periods[$nextstart] = min($this->getEnd(), $endStamp); + } + + return $periods; + } + + /** + * Adds a busy period to the info. + * + * This function may throw away data in case you add a period with a start + * date that already exists. The longer of the two periods will be chosen + * (and all information associated with the shorter one will be removed). + * + * @param string $type The type of the period. Either 'FREE' or + * 'BUSY'; only 'BUSY' supported at the moment. + * @param integer $start The start timestamp of the period. + * @param integer $end The end timestamp of the period. + * @param integer $duration The duration of the period. If specified, the + * $end parameter will be ignored. + * @param array $extra Additional parameters for this busy period. + */ + function addBusyPeriod($type, $start, $end = null, $duration = null, + $extra = array()) + { + if ($type == 'FREE') { + // Make sure this period is not marked as busy. + return false; + } + + // Calculate the end time if duration was specified. + $tempEnd = is_null($duration) ? $end : $start + $duration; + + // Make sure the period length is always positive. + $end = max($start, $tempEnd); + $start = min($start, $tempEnd); + + if (isset($this->_busyPeriods[$start])) { + // Already a period starting at this time. Change the current + // period only if the new one is longer. This might be a problem + // if the callee assumes that there is no simplification going + // on. But since the periods are stored using the start time of + // the busy periods we have to throw away data here. + if ($end > $this->_busyPeriods[$start]) { + $this->_busyPeriods[$start] = $end; + $this->_extraParams[$start] = $extra; + } + } else { + // Add a new busy period. + $this->_busyPeriods[$start] = $end; + $this->_extraParams[$start] = $extra; + } + + return true; + } + + /** + * Returns the timestamp of the start of the time period this free busy + * information covers. + * + * @return integer A timestamp. + */ + function getStart() + { + if (!is_a($this->getAttribute('DTSTART'), 'PEAR_Error')) { + return $this->getAttribute('DTSTART'); + } elseif (count($this->_busyPeriods)) { + return min(array_keys($this->_busyPeriods)); + } else { + return false; + } + } + + /** + * Returns the timestamp of the end of the time period this free busy + * information covers. + * + * @return integer A timestamp. + */ + function getEnd() + { + if (!is_a($this->getAttribute('DTEND'), 'PEAR_Error')) { + return $this->getAttribute('DTEND'); + } elseif (count($this->_busyPeriods)) { + return max(array_values($this->_busyPeriods)); + } else { + return false; + } + } + + /** + * Merges the busy periods of another Horde_iCalendar_vfreebusy object + * into this one. + * + * This might lead to simplification no matter what you specify for the + * "simplify" flag since periods with the same start date will lead to the + * shorter period being removed (see addBusyPeriod). + * + * @param Horde_iCalendar_vfreebusy $freebusy A freebusy object. + * @param boolean $simplify If true, simplify() will + * called after the merge. + */ + function merge($freebusy, $simplify = true) + { + if (!is_a($freebusy, 'Horde_iCalendar_vfreebusy')) { + return false; + } + + $extra = $freebusy->getExtraParams(); + foreach ($freebusy->getBusyPeriods() as $start => $end) { + // This might simplify the busy periods without taking the + // "simplify" flag into account. + $this->addBusyPeriod('BUSY', $start, $end, null, + isset($extra[$start]) + ? $extra[$start] : array()); + } + + $thisattr = $this->getAttribute('DTSTART'); + $thatattr = $freebusy->getAttribute('DTSTART'); + if (is_a($thisattr, 'PEAR_Error') && !is_a($thatattr, 'PEAR_Error')) { + $this->setAttribute('DTSTART', $thatattr, array(), false); + } elseif (!is_a($thatattr, 'PEAR_Error')) { + if ($thatattr < $thisattr) { + $this->setAttribute('DTSTART', $thatattr, array(), false); + } + } + + $thisattr = $this->getAttribute('DTEND'); + $thatattr = $freebusy->getAttribute('DTEND'); + if (is_a($thisattr, 'PEAR_Error') && !is_a($thatattr, 'PEAR_Error')) { + $this->setAttribute('DTEND', $thatattr, array(), false); + } elseif (!is_a($thatattr, 'PEAR_Error')) { + if ($thatattr > $thisattr) { + $this->setAttribute('DTEND', $thatattr, array(), false); + } + } + + if ($simplify) { + $this->simplify(); + } + + return true; + } + + /** + * Removes all overlaps and simplifies the busy periods array as much as + * possible. + */ + function simplify() + { + $clean = false; + $busy = array($this->_busyPeriods, $this->_extraParams); + while (!$clean) { + $result = $this->_simplify($busy[0], $busy[1]); + $clean = $result === $busy; + $busy = $result; + } + + ksort($result[1], SORT_NUMERIC); + $this->_extraParams = $result[1]; + + ksort($result[0], SORT_NUMERIC); + $this->_busyPeriods = $result[0]; + } + + function _simplify($busyPeriods, $extraParams = array()) + { + $checked = array(); + $checkedExtra = array(); + $checkedEmpty = true; + + foreach ($busyPeriods as $start => $end) { + if ($checkedEmpty) { + $checked[$start] = $end; + $checkedExtra[$start] = isset($extraParams[$start]) + ? $extraParams[$start] : array(); + $checkedEmpty = false; + } else { + $added = false; + foreach ($checked as $testStart => $testEnd) { + // Replace old period if the new period lies around the + // old period. + if ($start <= $testStart && $end >= $testEnd) { + // Remove old period entry. + unset($checked[$testStart]); + unset($checkedExtra[$testStart]); + // Add replacing entry. + $checked[$start] = $end; + $checkedExtra[$start] = isset($extraParams[$start]) + ? $extraParams[$start] : array(); + $added = true; + } elseif ($start >= $testStart && $end <= $testEnd) { + // The new period lies fully within the old + // period. Just forget about it. + $added = true; + } elseif (($end <= $testEnd && $end >= $testStart) || + ($start >= $testStart && $start <= $testEnd)) { + // Now we are in trouble: Overlapping time periods. If + // we allow for additional parameters we cannot simply + // choose one of the two parameter sets. It's better + // to leave two separated time periods. + $extra = isset($extraParams[$start]) + ? $extraParams[$start] : array(); + $testExtra = isset($checkedExtra[$testStart]) + ? $checkedExtra[$testStart] : array(); + // Remove old period entry. + unset($checked[$testStart]); + unset($checkedExtra[$testStart]); + // We have two periods overlapping. Are their + // additional parameters the same or different? + $newStart = min($start, $testStart); + $newEnd = max($end, $testEnd); + if ($extra === $testExtra) { + // Both periods have the same information. So we + // can just merge. + $checked[$newStart] = $newEnd; + $checkedExtra[$newStart] = $extra; + } else { + // Extra parameters are different. Create one + // period at the beginning with the params of the + // first period and create a trailing period with + // the params of the second period. The break + // point will be the end of the first period. + $break = min($end, $testEnd); + $checked[$newStart] = $break; + $checkedExtra[$newStart] = + isset($extraParams[$newStart]) + ? $extraParams[$newStart] : array(); + $checked[$break] = $newEnd; + $highStart = max($start, $testStart); + $checkedExtra[$break] = + isset($extraParams[$highStart]) + ? $extraParams[$highStart] : array(); + + // Ensure we also have the extra data in the + // extraParams. + $extraParams[$break] = + isset($extraParams[$highStart]) + ? $extraParams[$highStart] : array(); + } + $added = true; + } + + if ($added) { + break; + } + } + + if (!$added) { + $checked[$start] = $end; + $checkedExtra[$start] = isset($extraParams[$start]) + ? $extraParams[$start] : array(); + } + } + } + + return array($checked, $checkedExtra); + } + +} diff --git a/framework/iCalendar/iCalendar/vjournal.php b/framework/iCalendar/iCalendar/vjournal.php new file mode 100644 index 000000000..ffd121ee6 --- /dev/null +++ b/framework/iCalendar/iCalendar/vjournal.php @@ -0,0 +1,30 @@ + + * @since Horde 3.0 + * @package Horde_iCalendar + */ +class Horde_iCalendar_vjournal extends Horde_iCalendar { + + /** + * The component type of this class. + * + * @var string + */ + var $type = 'vJournal'; + + function exportvCalendar() + { + return parent::_exportvData('VJOURNAL'); + } + +} diff --git a/framework/iCalendar/iCalendar/vnote.php b/framework/iCalendar/iCalendar/vnote.php new file mode 100644 index 000000000..b78bae535 --- /dev/null +++ b/framework/iCalendar/iCalendar/vnote.php @@ -0,0 +1,62 @@ + + * @author Karsten Fourmont + * @package Horde_iCalendar + */ +class Horde_iCalendar_vnote extends Horde_iCalendar { + + /** + * The component type of this class. + * + * @var string + */ + var $type = 'vNote'; + + function Horde_iCalendar_vnote($version = '1.1') + { + return parent::Horde_iCalendar($version); + } + + /** + * Sets the version of this component. + * + * @see $version + * @see $oldFormat + * + * @param string A float-like version string. + */ + function setVersion($version) + { + $this->oldFormat = $version < 1; + $this->version = $version; + } + + /** + * Unlike vevent and vtodo, a vnote is normally not enclosed in an + * iCalendar container. (BEGIN..END) + */ + function exportvCalendar() + { + $requiredAttributes['BODY'] = ''; + $requiredAttributes['VERSION'] = '1.1'; + + foreach ($requiredAttributes as $name => $default_value) { + if (is_a($this->getattribute($name), 'PEAR_Error')) { + $this->setAttribute($name, $default_value); + } + } + + return $this->_exportvData('VNOTE'); + } + +} diff --git a/framework/iCalendar/iCalendar/vtimezone.php b/framework/iCalendar/iCalendar/vtimezone.php new file mode 100644 index 000000000..7f0b8bdbf --- /dev/null +++ b/framework/iCalendar/iCalendar/vtimezone.php @@ -0,0 +1,208 @@ + + * @since Horde 3.0 + * @package Horde_iCalendar + */ +class Horde_iCalendar_vtimezone extends Horde_iCalendar { + + /** + * The component type of this class. + * + * @var string + */ + var $type = 'vTimeZone'; + + function exportvCalendar() + { + return parent::_exportvData('VTIMEZONE'); + } + + /** + * Parse child components of the vTimezone component. Returns an + * array with the exact time of the time change as well as the + * 'from' and 'to' offsets around the change. Time is arbitrarily + * based on UTC for comparison. + */ + function parseChild(&$child, $year) + { + // Make sure 'time' key is first for sort(). + $result['time'] = 0; + + $t = $child->getAttribute('TZOFFSETFROM'); + if (is_a($t, 'PEAR_Error')) { + return false; + } + $result['from'] = ($t['hour'] * 60 * 60 + $t['minute'] * 60) * ($t['ahead'] ? 1 : -1); + + $t = $child->getAttribute('TZOFFSETTO'); + if (is_a($t, 'PEAR_Error')) { + return false; + } + $result['to'] = ($t['hour'] * 60 * 60 + $t['minute'] * 60) * ($t['ahead'] ? 1 : -1); + + $switch_time = $child->getAttribute('DTSTART'); + if (is_a($switch_time, 'PEAR_Error')) { + return false; + } + + $rrules = $child->getAttribute('RRULE'); + if (is_a($rrules, 'PEAR_Error')) { + if (!is_int($switch_time)) { + return false; + } + // Convert this timestamp from local time to UTC for + // comparison (All dates are compared as if they are UTC). + $t = getdate($switch_time); + $result['time'] = @gmmktime($t['hours'], $t['minutes'], $t['seconds'], + $t['mon'], $t['mday'], $t['year']); + return $result; + } + + $rrules = explode(';', $rrules); + foreach ($rrules as $rrule) { + $t = explode('=', $rrule); + switch ($t[0]) { + case 'FREQ': + if ($t[1] != 'YEARLY') { + return false; + } + break; + + case 'INTERVAL': + if ($t[1] != '1') { + return false; + } + break; + + case 'BYMONTH': + $month = intval($t[1]); + break; + + case 'BYDAY': + $len = strspn($t[1], '1234567890-+'); + if ($len == 0) { + return false; + } + $weekday = substr($t[1], $len); + $weekdays = array( + 'SU' => 0, + 'MO' => 1, + 'TU' => 2, + 'WE' => 3, + 'TH' => 4, + 'FR' => 5, + 'SA' => 6 + ); + $weekday = $weekdays[$weekday]; + $which = intval(substr($t[1], 0, $len)); + break; + + case 'UNTIL': + if (intval($year) > intval(substr($t[1], 0, 4))) { + return false; + } + break; + } + } + + if (empty($month) || !isset($weekday)) { + return false; + } + + if (is_int($switch_time)) { + // Was stored as localtime. + $switch_time = strftime('%H:%M:%S', $switch_time); + $switch_time = explode(':', $switch_time); + } else { + $switch_time = explode('T', $switch_time); + if (count($switch_time) != 2) { + return false; + } + $switch_time[0] = substr($switch_time[1], 0, 2); + $switch_time[2] = substr($switch_time[1], 4, 2); + $switch_time[1] = substr($switch_time[1], 2, 2); + } + + // Get the timestamp for the first day of $month. + $when = gmmktime($switch_time[0], $switch_time[1], $switch_time[2], + $month, 1, $year); + // Get the day of the week for the first day of $month. + $first_of_month_weekday = intval(gmstrftime('%w', $when)); + + // Go to the first $weekday before first day of $month. + if ($weekday >= $first_of_month_weekday) { + $weekday -= 7; + } + $when -= ($first_of_month_weekday - $weekday) * 60 * 60 * 24; + + // If going backwards go to the first $weekday after last day + // of $month. + if ($which < 0) { + do { + $when += 60*60*24*7; + } while (intval(gmstrftime('%m', $when)) == $month); + } + + // Calculate $weekday number $which. + $when += $which * 60 * 60 * 24 * 7; + + $result['time'] = $when; + + return $result; + } + +} + +/** + * @package Horde_iCalendar + */ +class Horde_iCalendar_standard extends Horde_iCalendar { + + function getType() + { + return 'standard'; + } + + function parsevCalendar($data) + { + parent::parsevCalendar($data, 'STANDARD'); + } + + function exportvCalendar() + { + return parent::_exportvData('STANDARD'); + } + +} + +/** + * @package Horde_iCalendar + */ +class Horde_iCalendar_daylight extends Horde_iCalendar { + + function getType() + { + return 'daylight'; + } + + function parsevCalendar($data) + { + parent::parsevCalendar($data, 'DAYLIGHT'); + } + + function exportvCalendar() + { + return parent::_exportvData('DAYLIGHT'); + } + +} diff --git a/framework/iCalendar/iCalendar/vtodo.php b/framework/iCalendar/iCalendar/vtodo.php new file mode 100644 index 000000000..595523feb --- /dev/null +++ b/framework/iCalendar/iCalendar/vtodo.php @@ -0,0 +1,86 @@ + + * @since Horde 3.0 + * @package Horde_iCalendar + */ +class Horde_iCalendar_vtodo extends Horde_iCalendar { + + /** + * The component type of this class. + * + * @var string + */ + var $type = 'vTodo'; + + function exportvCalendar() + { + return parent::_exportvData('VTODO'); + } + + /** + * Convert this todo to an array of attributes. + * + * @return array Array containing the details of the todo in a hash + * as used by Horde applications. + */ + function toArray() + { + $todo = array(); + + $name = $this->getAttribute('SUMMARY'); + if (!is_array($name) && !is_a($name, 'PEAR_Error')) { + $todo['name'] = $name; + } + $desc = $this->getAttribute('DESCRIPTION'); + if (!is_array($desc) && !is_a($desc, 'PEAR_Error')) { + $todo['desc'] = $desc; + } + + $priority = $this->getAttribute('PRIORITY'); + if (!is_array($priority) && !is_a($priority, 'PEAR_Error')) { + $todo['priority'] = $priority; + } + + $due = $this->getAttribute('DTSTAMP'); + if (!is_array($due) && !is_a($due, 'PEAR_Error')) { + $todo['due'] = $due; + } + + return $todo; + } + + /** + * Set the attributes for this todo item from an array. + * + * @param array $todo Array containing the details of the todo in + * the same format that toArray() exports. + */ + function fromArray($todo) + { + if (isset($todo['name'])) { + $this->setAttribute('SUMMARY', $todo['name']); + } + if (isset($todo['desc'])) { + $this->setAttribute('DESCRIPTION', $todo['desc']); + } + + if (isset($todo['priority'])) { + $this->setAttribute('PRIORITY', $todo['priority']); + } + + if (isset($todo['due'])) { + $this->setAttribute('DTSTAMP', $todo['due']); + } + } + +} diff --git a/framework/iCalendar/package.xml b/framework/iCalendar/package.xml new file mode 100644 index 000000000..a90070e65 --- /dev/null +++ b/framework/iCalendar/package.xml @@ -0,0 +1,158 @@ + + + iCalendar + pear.horde.org + iCalendar API + This package provides an API for dealing with iCalendar data. + + Chuck Hagenbuch + chuck + chuck@horde.org + yes + + + Jan Schneider + jan + jan@horde.org + yes + + 2008-09-25 + + 0.1.0 + 0.1.0 + + + beta + beta + + LGPL + * Fix vFreebusy merging (Bug #4807). +* Implement handling of vTimezones in iCalendar data (lists-horde@carlthompson.net, Bug #4399). +* Correctly produce vcard parameters without value, like "ADR;WORK:...". +* Support departments in vCard's ORG properties (martin@matuska.org, Bug #4285). +* Fixed _parseDateTime() (wrobel@pardus.de, Bug #4808). +* Fix exporting of recurring exceptions (Bug #4627). +* Use lowercase mailto: for better Apple iCal compatibility. +* We must *not* escape colons per RFC in param values. +* Fix encoding issues with iCalendar 2.0 exports. +* Move version specific vCalendar/iCalendar export to Kronolith_Event. +* Use QUOTED-PRINTABLE when there's a newline in VNOTE data. +* Anniversary support (ntai@smartfruit.com, Request #5059). +* Support for all day events with VCALENDAR 1.0. +* Use ISO-8559-1 as default vCalendar 1.0 and vCard 2.1. +* Fix unreliably overwriting a variable with itself (rsalmon@mbpgroup.com, Bug #5652). +* Handle AALARM data with parameters (delimited by a ";"). +* Fix GEO parsing and generation. +* Refactor line folding and quoted-printable encoding. +* Add missing softline break (Bug #6541). +* Don't require a newline after END (Bug #6641, #6706). +* Fix detecting of "old" formats when parsing vCalendar/vCard data. +* Request charset on the fly, because it depends on the VERSION property. +* Fix passing value arrays with only one element. +* Correctly parse quoted parameters (Bug #7031) +* Set the correct version if none provided through the vcard data. +* BODY is not required, but N is, and FN for vcard3.0. +* Return the passed address unmodified if Mail_RFC822::validateMailbox() fails. +* Fixed importing of several events at once. +* Removed required calendar component properties in vevent.php. +* Fix generation of UIDs with PHP 5.2+. +* Fix generation of free periods with overlapping events (cedric.parent@multitel.be). +* Add support for extended vfreebusy parameters (wrobel@gentoo.org, Request #4690). +* Ensure vnotes and vcards are created with a valid default version number. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4.3.0 + + + 1.5.4 + + + Util + pear.horde.org + + + + + + + 2006-05-08 + + 0.0.3 + 0.0.3 + + + beta + beta + + LGPL + * Converted to package.xml 2.0 for pear.horde.org. + + + + + 0.0.2 + 0.0.2 + + + beta + beta + + 2004-12-05 + LGPL + Lots of improvements, bugfixes and support for more fields and members of the iCalendar family. + + + + + 0.0.1 + 0.0.1 + + + alpha + alpha + + 2003-07-03 + LGPL + Initial release as a PEAR package + + + + diff --git a/framework/iCalendar/tests/.cvsignore b/framework/iCalendar/tests/.cvsignore new file mode 100644 index 000000000..4fce866b4 --- /dev/null +++ b/framework/iCalendar/tests/.cvsignore @@ -0,0 +1,5 @@ +*.diff +*.log +*.exp +*.php +*.out diff --git a/framework/iCalendar/tests/bug_7423.phpt b/framework/iCalendar/tests/bug_7423.phpt new file mode 100644 index 000000000..56cc9a273 --- /dev/null +++ b/framework/iCalendar/tests/bug_7423.phpt @@ -0,0 +1,32 @@ +--TEST-- +Bug #7423: Leading space on attribute names +--FILE-- +parseVCalendar($data); +$components = $ical->getComponents(); +foreach ($components as $component) { + var_dump($component->toHash(true)); +} + +?> +--EXPECT-- +array(1) { + ["SUMMARY"]=> + string(8) "birthday" +} diff --git a/framework/iCalendar/tests/charset1.phpt b/framework/iCalendar/tests/charset1.phpt new file mode 100644 index 000000000..b9aec0b8a --- /dev/null +++ b/framework/iCalendar/tests/charset1.phpt @@ -0,0 +1,50 @@ +--TEST-- +Inline charset test +--FILE-- +parseVCalendar($data); +$event = $ical->getComponent(0); +var_dump($event->getAttribute('SUMMARY')); + +$data = 'BEGIN:VCALENDAR +VERSION:1.0 +BEGIN:VEVENT +SUMMARY;ENCODING=QUOTED-PRINTABLE:m=C3=B6chen +DTSTART:20040628T080000Z +DTEND:20040628T090000Z +X-EPOCAGENDAENTRYTYPE:APPOINTMENT +CLASS:PUBLIC +DCREATED:20040627T220000Z +LAST-MODIFIED:20040628T175300Z +PRIORITY:0 +STATUS:NEEDS ACTION +END:VEVENT +END:VCALENDAR'; + +$ical->parseVCalendar($data, 'VCALENDAR', 'UTF-8'); +$event = $ical->getComponent(0); +var_dump($event->getAttribute('SUMMARY')); + +?> +--EXPECT-- +string(6) "möchen" +string(6) "möchen" diff --git a/framework/iCalendar/tests/empty_data.phpt b/framework/iCalendar/tests/empty_data.phpt new file mode 100644 index 000000000..d29a82bd1 --- /dev/null +++ b/framework/iCalendar/tests/empty_data.phpt @@ -0,0 +1,30 @@ +--TEST-- +Empty data parsing test +--FILE-- +parseVCalendar($data)); +echo "\n"; +var_export($ical->getComponents()); +echo "\n"; +var_export($ical->parseVCalendar('')); +echo "\n"; +var_export($ical->getComponents()); +echo "\n"; + +?> +--EXPECT-- +true +array ( +) +false +array ( +) diff --git a/framework/iCalendar/tests/fixtures/vTimezone/AuthorChats.ics b/framework/iCalendar/tests/fixtures/vTimezone/AuthorChats.ics new file mode 100644 index 000000000..49956a13e --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/AuthorChats.ics @@ -0,0 +1,208 @@ +BEGIN:VCALENDAR +VERSION:2.0 +X-WR-CALNAME:AuthorChats +PRODID:-//Apple Computer\, Inc//iCal 2.0//EN +X-WR-RELCALID:7245D10D-C6E4-40D1-998A-4FDDE8522F8A +X-WR-TIMEZONE:US/Central +CALSCALE:GREGORIAN +METHOD:PUBLISH +X-WR-CALDESC:Chat dates for CPLLC authors. +BEGIN:VTIMEZONE +TZID:US/Central +LAST-MODIFIED:20060901T191936Z +BEGIN:DAYLIGHT +DTSTART:20060402T080000 +TZOFFSETTO:-0500 +TZOFFSETFROM:+0000 +TZNAME:CDT +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20061029T020000 +TZOFFSETTO:-0600 +TZOFFSETFROM:-0500 +TZNAME:CST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:20070311T010000 +TZOFFSETTO:-0500 +TZOFFSETFROM:-0600 +TZNAME:CDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060806T090000 +DTEND;TZID=US/Central:20060806T180000 +SUMMARY:FAR Sexy Sunday Chat +UID:814DEA1F-F531-4E04-B3A2-DD49AA54F54E-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +SEQUENCE:5 +DTSTAMP:20060702T204116Z +BEGIN:VALARM +ACTION:AUDIO +TRIGGER:-PT15M +X-WR-ALARMUID:3210FF94-6D76-495F-9381-6A2F00325466 +ATTACH;VALUE=URI:Basso +END:VALARM +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060729T100000 +DTEND;TZID=US/Central:20060729T170000 +SUMMARY:Lady Aibell Chat +UID:934838F2-FB0E-4005-A1CA-A6E0F296BD75-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +SEQUENCE:8 +DTSTAMP:20060710T034417Z +RRULE:FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=29 +END:VEVENT +BEGIN:VEVENT +DURATION:PT7H +DTSTAMP:20060710T034417Z +UID:934838F2-FB0E-4005-A1CA-A6E0F296BD75-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +SEQUENCE:7 +RECURRENCE-ID;TZID=US/Central:20060729T100000 +DTSTART;TZID=US/Central:20060729T100000 +SUMMARY:Lady Aibell Chat +DESCRIPTION:Release author chat on Lady Aibell Loop +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060910T090000 +DTEND;TZID=US/Central:20060910T170000 +SUMMARY:FAR Sexy Sunday Chat +UID:E8B9C16D-E3A4-4FF8-80BE-F8959008FF75-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +SEQUENCE:5 +DTSTAMP:20060702T204150Z +BEGIN:VALARM +ACTION:AUDIO +TRIGGER:-PT15M +X-WR-ALARMUID:499D81D6-A0DF-4A33-8EEF-6C330D23F3A5 +ATTACH;VALUE=URI:Basso +END:VALARM +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H +DTSTAMP:20060824T161813Z +UID:633D2C12-E8E9-4C21-855D-48D08D8CCAB4-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +SEQUENCE:9 +URL;VALUE=URI:http://ladyaibell.com/bookstore/information.php?info_id=22 + +DTSTART;TZID=US/Central:20060911T200000 +SUMMARY:Sapphire Phelan's Birthday and She Wants to Party Chat +DESCRIPTION:Chat starts at 9:00 pm central time. +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060826T100000 +SUMMARY:Bianca's Chat +URL;VALUE=URI:http://groups.yahoo.com/group/BiancaDArc +UID:B575367D-880A-465A-94E1-3D4D0537C6ED-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +SEQUENCE:3 +DTSTAMP:20060823T145036Z +DURATION:PT1H +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060817T100000 +DTEND;TZID=US/Central:20060817T160000 +SUMMARY:Lady Aibell Chat @ Coffeetime Devin Group +UID:FC8077B5-DAE0-4EB6-8F36-6DDAB6A87D41-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +SEQUENCE:7 +DTSTAMP:20060710T174446Z +RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=3TH +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060903T190000 +DTEND;TZID=US/Central:20060903T210000 +SUMMARY:Live Editor Chat +UID:97B15FA9-C33B-4F64-90F0-46BF15C602C5-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +URL;VALUE=URI:http://ladyaibell.com/bookstore/information.php?info_id=22 + +SEQUENCE:6 +DTSTAMP:20060824T132749Z +BEGIN:VALARM +ACTION:AUDIO +TRIGGER:-PT15M +X-WR-ALARMUID:C1525025-1B21-4382-90E6-DCDBE427B4C1 +ATTACH;VALUE=URI:Basso +END:VALARM +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060709T090000 +DTEND;TZID=US/Central:20060709T170000 +SUMMARY:FAR Sexy Sunday Chat +UID:9D3E0CD6-0845-4D2A-9514-02D92AD60866-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +URL;VALUE=URI:http://groups.yahoo.com/group/fallenangelreviewchatters +SEQUENCE:7 +DTSTAMP:20060702T202936Z +BEGIN:VALARM +ACTION:AUDIO +TRIGGER:-PT15M +X-WR-ALARMUID:8797188A-A8FA-4761-9547-A288E6B31AAE +ATTACH;VALUE=URI:Basso +END:VALARM +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060903T130000 +DTEND;TZID=US/Central:20060903T150000 +SUMMARY:Tammy Lee Author Live Chat +UID:5C18B411-30F3-4594-A13E-FDB3BD963FE7-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +URL;VALUE=URI:http://ladyaibell.com/bookstore/information.php?info_id=22 + +SEQUENCE:6 +DTSTAMP:20060824T132715Z +BEGIN:VALARM +ACTION:AUDIO +TRIGGER:-PT15M +X-WR-ALARMUID:897B3612-2E79-415D-AEC1-3E3814113EFD +ATTACH;VALUE=URI:Basso +END:VALARM +END:VEVENT +BEGIN:VEVENT +DTSTAMP:20060818T052554Z +UID:27FE0DC8-9F34-442C-931F-59997619017D-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +SEQUENCE:9 +DTSTART;TZID=US/Central:20060804T100000 +SUMMARY:CPLLC Romance Authors @ Coffeetime +DTEND;TZID=US/Central:20060804T160000 +DESCRIPTION:Coffeetime Karen Find Out About New Books chat for general r + omance every first Friday of the month\n +RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1FR +END:VEVENT +BEGIN:VEVENT +DURATION:PT6H +DTSTAMP:20060818T052554Z +UID:27FE0DC8-9F34-442C-931F-59997619017D-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +SEQUENCE:8 +RECURRENCE-ID;TZID=US/Central:20060901T100000 +DTSTART;TZID=US/Central:20060901T100000 +SUMMARY:CPLLC Romance Authors @ Coffeetime +DESCRIPTION:Coffeetime Karen Find Out About New Books chat for general r + omance every first Friday of the month\ndk +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H +DTSTAMP:20060824T132246Z +UID:C87293E2-7594-467A-A900-493F067063FB-9F560168-F2A5-46FC-9009-47AAF54 + FE01A +SEQUENCE:7 +URL;VALUE=URI:http://ladyaibell.com/bookstore/information.php?info_id=22 + +DTSTART;TZID=US/Central:20060830T200000 +SUMMARY:Ella Scopilo's Hump Day chat +DESCRIPTION:Come join Ella for an hour of naughty fun! +RRULE:FREQ=WEEKLY;INTERVAL=1 +BEGIN:VALARM +ACTION:AUDIO +TRIGGER:-PT15M +X-WR-ALARMUID:A5D69E87-5159-48C6-94BF-F3C7CFF2448B +ATTACH;VALUE=URI:Basso +END:VALARM +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/MMMPseminar.ics b/framework/iCalendar/tests/fixtures/vTimezone/MMMPseminar.ics new file mode 100644 index 000000000..f5082cd77 --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/MMMPseminar.ics @@ -0,0 +1,180 @@ +BEGIN:VCALENDAR +VERSION:2.0 +X-WR-CALNAME:spring2006 +PRODID:-//Apple Computer\, Inc//iCal 2.0//EN +X-WR-RELCALID:DC5E55FF-E16F-4B73-9E26-1233EFC3A1C9 +X-WR-TIMEZONE:US/Central +CALSCALE:GREGORIAN +METHOD:PUBLISH +BEGIN:VTIMEZONE +TZID:US/Central +LAST-MODIFIED:20060130T164630Z +BEGIN:STANDARD +DTSTART:20051030T070000 +TZOFFSETTO:-0600 +TZOFFSETFROM:+0000 +TZNAME:CST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:20060402T010000 +TZOFFSETTO:-0500 +TZOFFSETFROM:-0600 +TZNAME:CDT +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20061029T020000 +TZOFFSETTO:-0600 +TZOFFSETFROM:-0500 +TZNAME:CST +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060207T120000 +DTEND;TZID=US/Central:20060207T130000 +SUMMARY:Jack Murphy\nTrojan Horse or Proton Force: Finding the Right Par + tners for Toxin Translocation +UID:D6E613D7-59A0-4720-875A-760D97A4B3FD +SEQUENCE:2 +DTSTAMP:20060130T163846Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060509T120000 +DTEND;TZID=US/Central:20060509T130000 +SUMMARY:Kai Matuschewski\nHitting the Plasmodium Life Cycle Early On: At + tenuated Liver Stages +UID:11A905EB-B0AB-4101-AA7C-90723C00345D +SEQUENCE:2 +DTSTAMP:20060130T164444Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060321T120000 +DTEND;TZID=US/Central:20060321T130000 +SUMMARY:Felix Rey\nInsights into the Mechanism of Membrane Fusion Derive + d from Structural Studies of Viral Envelope Proteins +UID:BD747E63-BA7D-46E3-9BFF-82ED05963784 +SEQUENCE:2 +DTSTAMP:20060130T164131Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060221T120000 +DTEND;TZID=US/Central:20060221T130000 +SUMMARY:Maurizio Del Poeta\nSphingolipid-Mediated Fungal Pathogenesis +UID:ED8190C6-A07F-47EC-A480-20A8FBCF6E17 +SEQUENCE:2 +DTSTAMP:20060130T163935Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060124T120000 +DTEND;TZID=US/Central:20060124T130000 +SUMMARY:Jorge Galan\nStructure\, Assembly\, and Function of the Type III + Secretion Injectisome +UID:2D657A20-917F-49F2-8E6A-D49B9D5A65F1 +SEQUENCE:3 +DTSTAMP:20060130T163705Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060307T120000 +DTEND;TZID=US/Central:20060307T130000 +SUMMARY:Don Ganem\nRNAi\, MicroRNAs and Viral Infection +UID:883949DC-C6FF-418A-BDEE-0CB6B6453C45 +SEQUENCE:2 +DTSTAMP:20060130T164024Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060228T120000 +DTEND;TZID=US/Central:20060228T130000 +SUMMARY:Barak Cohen\nGenomic Analysis of Natural Variation in Saccharomy + ces +UID:8A81A021-F2A4-426E-BA0C-13C5D12F2248 +SEQUENCE:2 +DTSTAMP:20060130T164001Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060328T120000 +DTEND;TZID=US/Central:20060328T130000 +SUMMARY:Michael Ferguson\nThe Structure and Biosynthesis of Trypanosome + Surface Molecules: Basic Science and Therapeutic Possiblities +UID:0384243F-2858-4BC3-92EC-5940CF0B3C0E +SEQUENCE:2 +DTSTAMP:20060130T164200Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060425T120000 +DTEND;TZID=US/Central:20060425T130000 +SUMMARY:James M. Musser\nMolecular Pathogenomics of Group A Streptococcu + s\, the Flesh-Eater +UID:4599802A-AFFE-45BC-B2DD-13BAB8E1BB6C +SEQUENCE:2 +DTSTAMP:20060130T164338Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060411T120000 +DTEND;TZID=US/Central:20060411T130000 +SUMMARY:Wayne Yokoyama\nInnate Responses to Viral Infections +UID:11610367-EC3F-46CB-9F5F-7EEBAEED722E +SEQUENCE:2 +DTSTAMP:20060130T164246Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060314T120000 +DTEND;TZID=US/Central:20060314T130000 +SUMMARY:Herbert \"Skip\" Virgin\nHost-Herpesvirus Standoff: Good News F + rom the Front in an Ancient Battle\n +UID:FA8394ED-F737-4E4D-A171-A8A917AFB1CC +SEQUENCE:3 +DTSTAMP:20060130T164108Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060102T110000 +SUMMARY:New Event +UID:609176ED-56DF-43C2-8931-8EF20C6CFBC0 +SEQUENCE:1 +DTSTAMP:20060130T163545Z +DURATION:PT1H +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060404T120000 +DTEND;TZID=US/Central:20060404T130000 +SUMMARY:Matthew Welch\nExploitation of the Host Actin Cytoskeleton by Ba + cterial and Viral Pathogens +UID:F2B5E5E2-A204-4C27-B679-D0D3217D2F5B +SEQUENCE:2 +DTSTAMP:20060130T164223Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060502T120000 +DTEND;TZID=US/Central:20060502T130000 +SUMMARY:Theresa Koeher\nVirulence Gene Expression by Bacillus anthracis + and Implications for the Host +UID:4AA1FDD2-F2A1-43B5-B8FF-60D1003E5A09 +SEQUENCE:2 +DTSTAMP:20060130T164409Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060214T120000 +DTEND;TZID=US/Central:20060214T130000 +SUMMARY:Eduardo Groisman\nRegulatory Networks Controlling Bacterial Phys + iology and Virulence +UID:1C1002C3-DEB1-4FA5-9090-C57EB42DE5C2 +SEQUENCE:2 +DTSTAMP:20060130T163907Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060418T120000 +DTEND;TZID=US/Central:20060418T130000 +SUMMARY:Brendan Cormack\nTranscriptional Silencing and Adherence in the + Yeast Pathogen Candida glabrata +UID:FB61B2BE-6805-4A18-8FD7-02DF5B6DDAFB +SEQUENCE:2 +DTSTAMP:20060130T164311Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=US/Central:20060131T120000 +DTEND;TZID=US/Central:20060131T130000 +SUMMARY:Andrew Pekosz\nIntracellular Transport of Viral Proteins and Par + ticles +UID:80E1E336-E8BD-406C-B578-D8B08F0DCA4D +SEQUENCE:2 +DTSTAMP:20060130T163806Z +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/Moon_Days.ics b/framework/iCalendar/tests/fixtures/vTimezone/Moon_Days.ics new file mode 100644 index 000000000..ccd6c71c2 --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/Moon_Days.ics @@ -0,0 +1,226 @@ +BEGIN:VCALENDAR +VERSION:2.0 +X-WR-CALNAME:Moon_Days +PRODID:-//Apple Computer\, Inc//iCal 2.0//EN +X-WR-RELCALID:925E2DFC-D4CC-46BC-AD37-F60F4B459D2D +X-WR-TIMEZONE:America/New_York +CALSCALE:GREGORIAN +METHOD:PUBLISH +X-WR-CALDESC:Full moons\, new moons\, + related dates that are astronomi + cally notable to one chai walla. +BEGIN:VTIMEZONE +TZID:America/New_York +LAST-MODIFIED:20060818T012007Z +BEGIN:DAYLIGHT +DTSTART:20060402T070000 +TZOFFSETTO:-0400 +TZOFFSETFROM:+0000 +TZNAME:EDT +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20061029T020000 +TZOFFSETTO:-0500 +TZOFFSETFROM:-0400 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:20070311T010000 +TZOFFSETTO:-0400 +TZOFFSETFROM:-0500 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20061029T020000 +DTEND;TZID=America/New_York:20061029T020000 +SUMMARY:Standard Time resumes +UID:A9672871-FB93-4B76-A1B0-D567D58F32B4-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:7 +DTSTAMP:20060302T175347Z +DESCRIPTION:Fall back! Americans must submit to the Lords of Time and ro + ll their clocks back 1 hour at 3am\, making it 2am. Or something like th + at. Basically\, we gain 1 hour. +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20060625T120500 +DTEND;TZID=America/New_York:20060625T120500 +SUMMARY:New Moon +UID:D54D42CC-FA01-495A-97C3-316767E97302-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:7 +DTSTAMP:20060302T175700Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20061006T231300 +DTEND;TZID=America/New_York:20061007T231300 +SUMMARY:Full Moon +UID:9373EAFB-9F3D-40CB-B27D-98509D16B552-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:6 +DTSTAMP:20060302T173533Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20061105T075800 +DTEND;TZID=America/New_York:20061105T075800 +SUMMARY:Full Moon +UID:9B3DFD55-B850-46AA-BD2D-82C9EE4408B1-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:6 +DTSTAMP:20060302T174931Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20061204T192500 +DTEND;TZID=America/New_York:20061204T192500 +SUMMARY:Full Moon +UID:605C9869-E068-4991-97BE-DC960E3BBF25-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:5 +DTSTAMP:20060302T173824Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20060923T000300 +DTEND;TZID=America/New_York:20060923T000300 +SUMMARY:Autumnal Equinox +UID:536184D2-EF08-45D6-BC00-E8386DEA7B00-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:6 +DTSTAMP:20060302T173447Z +END:VEVENT +BEGIN:VEVENT +DTSTART;VALUE=DATE:20060711 +DTEND;VALUE=DATE:20060712 +SUMMARY:Guru Purnima +UID:7F7EA952-C7CB-4E26-ADE2-A30ED3863AE8-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:3 +DTSTAMP:20060626T191946Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20061120T171800 +DTEND;TZID=America/New_York:20061120T171800 +SUMMARY:New Moon +UID:B927FEBD-23BC-4763-824A-658F531AAD44-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:8 +DTSTAMP:20060302T180443Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20060710T230200 +DTEND;TZID=America/New_York:20060711T110200 +SUMMARY:Full Moon +UID:DB59CF53-79CE-4AD7-8617-B98D4B83DBE3-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:6 +DTSTAMP:20060302T172952Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20060922T074500 +DTEND;TZID=America/New_York:20060922T194500 +SUMMARY:New Moon +UID:50F46337-1301-4A7B-95E2-C952B145E5AE-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:6 +DTSTAMP:20060302T173407Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20060823T161000 +DTEND;TZID=America/New_York:20060823T161000 +SUMMARY:New Moon +UID:2AC805A6-C9E1-45A6-88DE-DBF18E80D509-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:6 +DTSTAMP:20060302T175546Z +END:VEVENT +BEGIN:VEVENT +DTSTART;VALUE=DATE:20060822 +LOCATION:AYNY +DTEND;VALUE=DATE:20060828 +SUMMARY:Ganesha Chaturthi +UID:AF2D2EE9-B7E6-4182-B6AD-661EA817E942-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:8 +DTSTAMP:20060804T162200Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20060809T185400 +DTEND;TZID=America/New_York:20060809T185400 +SUMMARY:Full Moon +UID:BABE196C-0782-488F-8020-5EE86F4466CB-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:6 +DTSTAMP:20060302T173138Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20060907T144200 +DTEND;TZID=America/New_York:20060907T144200 +SUMMARY:Full Moon +UID:25BF0B7D-1367-407B-A191-1A2B70183F3F-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:6 +DTSTAMP:20060302T173326Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20061220T090100 +DTEND;TZID=America/New_York:20061220T090100 +SUMMARY:New Moon +UID:3F36081E-BE60-4A3A-A912-C023BA5C1B17-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:9 +DTSTAMP:20060302T180144Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20070103T085700 +DTEND;TZID=America/New_York:20070103T205700 +SUMMARY:Full Moon +UID:68396D70-C3A5-451F-8A6C-A6C14D048449-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:6 +DTSTAMP:20060302T174342Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20060621T082600 +DTEND;TZID=America/New_York:20060621T202600 +SUMMARY:Summer Solstice +UID:032EA44A-72A3-4E5F-95B5-F6FD26432D37-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:5 +DTSTAMP:20060114T155356Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20070202T004500 +DTEND;TZID=America/New_York:20070202T004500 +SUMMARY:Full Moon +UID:B0B386E9-48BB-4573-BD89-06D0E1578F03-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:6 +DTSTAMP:20060302T174508Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20070118T230100 +DTEND;TZID=America/New_York:20070119T230100 +SUMMARY:New Moon +UID:99A40CFA-8968-420E-8873-950340AB4920-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:7 +DTSTAMP:20060302T174405Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20060725T003100 +DTEND;TZID=America/New_York:20060725T003100 +SUMMARY:New Moon +UID:FEF1C01E-3BDF-40CD-B569-A7507866A5A0-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:6 +DTSTAMP:20060302T173031Z +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=America/New_York:20061022T011400 +DTEND;TZID=America/New_York:20061022T011400 +SUMMARY:New Moon +UID:E252DE90-9954-430C-9F69-AC6E3B5012CF-36E46F1A-4503-4154-A637-F2B87BC + 040D0 +SEQUENCE:9 +DTSTAMP:20060302T175134Z +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/ProjectCalendar.ics b/framework/iCalendar/tests/fixtures/vTimezone/ProjectCalendar.ics new file mode 100644 index 000000000..16fe534a8 --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/ProjectCalendar.ics @@ -0,0 +1,137 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN +BEGIN:VEVENT +CREATED:20060802T220609Z +LAST-MODIFIED:20060817T200742Z +DTSTAMP:20060817T200742Z +UID:{c640032c-6828-404b-b547-69780fe8c1e3} +SUMMARY:Code slush begins +PRIORITY:0 +CLASS:PUBLIC +DTSTART;TZID=/mozilla.org/20050126_1/America/Chicago:20060825T220000 +DTEND;TZID=/mozilla.org/20050126_1/America/Chicago:20060825T220500 +DESCRIPTION:No high risk patch will be accepted at this point. +END:VEVENT +BEGIN:VEVENT +CREATED:20060802T220716Z +LAST-MODIFIED:20060817T200801Z +DTSTAMP:20060817T200801Z +UID:{035a81e6-5d4e-7642-97e4-e464bf7de96d} +SUMMARY:String freeze +PRIORITY:0 +CLASS:PUBLIC +DTSTART;TZID=/mozilla.org/20050126_1/America/Chicago:20060902T220000 +DTEND;TZID=/mozilla.org/20050126_1/America/Chicago:20060902T220000 +DESCRIPTION:No strings may be changed or added after this point. + Localization can begin. +END:VEVENT +BEGIN:VEVENT +CREATED:20060802T220800Z +LAST-MODIFIED:20060816T191907Z +DTSTAMP:20060816T191907Z +UID:{bbf22425-1530-8040-ad11-aef02ba840d5} +SUMMARY:Release Candidate 1 +PRIORITY:0 +CLASS:PUBLIC +DTSTART;VALUE=DATE;TZID=/mozilla.org/20050126_1/America/Chicago:20060906 +DTEND;VALUE=DATE;TZID=/mozilla.org/20050126_1/America/Chicago:20060907 +DESCRIPTION:A proposed release candidate will be built for each target + platform. Final QA tests begin. +END:VEVENT +BEGIN:VEVENT +CREATED:20060802T220844Z +LAST-MODIFIED:20060816T191940Z +DTSTAMP:20060816T191940Z +UID:{9bd2970a-4dc9-b645-846c-9f68f6860985} +SUMMARY:Sunbird/Lightning 0.3 release +PRIORITY:0 +CLASS:PUBLIC +DTSTART;VALUE=DATE;TZID=/mozilla.org/20050126_1/America/Chicago:20060909 +DTEND;VALUE=DATE;TZID=/mozilla.org/20050126_1/America/Chicago:20060910 +DESCRIPTION:Release of both Sunbird and Lightning 0.3 for en-US on all + platforms. Any other locales which are ready will also be released. +END:VEVENT +BEGIN:VEVENT +CREATED:20060816T192125Z +LAST-MODIFIED:20060817T201332Z +DTSTAMP:20060817T201332Z +UID:{4637c9fa-b45b-4001-a124-aa638db20d20} +SUMMARY:Calendar Test Day +PRIORITY:0 +CLASS:PUBLIC +DTSTART;TZID=/mozilla.org/20050126_1/America/Chicago:20060822T070000 +DTEND;TZID=/mozilla.org/20050126_1/America/Chicago:20060822T210000 +URL:http://wiki.mozilla.org/Calendar:QA_TestDays +LOCATION:#calendar-qa +DESCRIPTION:Join us for the Calendar Test Day!\nhttp: + //wiki.mozilla.org/Calendar:QA_TestDays +END:VEVENT +BEGIN:VEVENT +CREATED:20060816T192330Z +LAST-MODIFIED:20060816T192649Z +DTSTAMP:20060816T192649Z +UID:{81fd8527-d5fd-454a-86ea-050c42ca065b} +SUMMARY:Calendar QA Chat +PRIORITY:0 +CLASS:PUBLIC +RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TH +DTSTART;TZID=/mozilla.org/20050126_1/America/Chicago:20060817T113000 +DTEND;TZID=/mozilla.org/20050126_1/America/Chicago:20060817T123000 +DESCRIPTION:This meeting happens at 16:30 UTC every Thursday and lasts + one hour +LOCATION:#calendar-qa +URL:http://wiki.mozilla.org/Calendar:Current_QA_Chat +END:VEVENT +BEGIN:VEVENT +CREATED:20060817T200857Z +LAST-MODIFIED:20060817T201032Z +DTSTAMP:20060817T201032Z +UID:{4e13cc09-7f21-447b-8c76-00fe558fd46a} +SUMMARY:Status Meeting +PRIORITY:0 +CLASS:PUBLIC +RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE +DTSTART;TZID=/mozilla.org/20050126_1/America/Chicago:20060816T110000 +DTEND;TZID=/mozilla.org/20050126_1/America/Chicago:20060816T120000 +LOCATION:http://wiki.mozilla.org/Calendar:Status +DESCRIPTION:Weekly Calendar Status Meeting\n\nhttp: + //wiki.mozilla.org/Calendar:Status +END:VEVENT +BEGIN:VTIMEZONE +TZID:/mozilla.org/20050126_1/America/Chicago +X-LIC-LOCATION:America/Chicago +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19701025T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19700405T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:/mozilla.org/20050126_1/America/Chicago +X-LIC-LOCATION:America/Chicago +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19700405T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19701025T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/SpanishHolidays.ics b/framework/iCalendar/tests/fixtures/vTimezone/SpanishHolidays.ics new file mode 100644 index 000000000..31dae017e --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/SpanishHolidays.ics @@ -0,0 +1,316 @@ +BEGIN:VCALENDAR +METHOD + :PUBLISH +VERSION + :2.0 +PRODID + :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :946822600 +SUMMARY + :Fiesta del Trabajo +CATEGORIES + :Public Holiday +STATUS + :TENTATIVE +CLASS + :PRIVATE +X-MOZILLA-RECUR-DEFAULT-UNITS + :years +RRULE + :FREQ=YEARLY;INTERVAL=1;BYMONTH=5 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20020501 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20020502 +DTSTAMP + :20020924T114931Z +LAST-MODIFIED + :20041116T225632Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :981227758 +SUMMARY + :Fiesta Nacional +CATEGORIES + :Public Holiday +STATUS + :TENTATIVE +CLASS + :PRIVATE +X-MOZILLA-RECUR-DEFAULT-UNITS + :years +RRULE + :FREQ=YEARLY;INTERVAL=1;BYMONTH=10 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20021012 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20021013 +DTSTAMP + :20020924T115005Z +LAST-MODIFIED + :20041116T225642Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :981227549 +SUMMARY + :Natividad del Señor +CATEGORIES + :Public Holiday +STATUS + :TENTATIVE +CLASS + :PRIVATE +X-MOZILLA-RECUR-DEFAULT-UNITS + :years +RRULE + :FREQ=YEARLY;INTERVAL=1;BYMONTH=12 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20021225 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20021226 +DTSTAMP + :20020924T115110Z +LAST-MODIFIED + :20041116T225700Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :947864734 +SUMMARY + :Todos los Santos +CATEGORIES + :Public Holiday +STATUS + :TENTATIVE +CLASS + :PRIVATE +X-MOZILLA-RECUR-DEFAULT-UNITS + :years +RRULE + :FREQ=YEARLY;INTERVAL=1;BYMONTH=11 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20021101 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20021102 +DTSTAMP + :20020924T115030Z +LAST-MODIFIED + :20041116T225722Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :913583658 +SUMMARY + :Viernes Santo +CATEGORIES + :Public Holiday +STATUS + :TENTATIVE +CLASS + :PRIVATE +X-MOZILLA-RECUR-DEFAULT-UNITS + :years +RRULE + :FREQ=YEARLY;INTERVAL=1;BYMONTH=3 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20020329 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20020330 +DTSTAMP + :20020924T114908Z +LAST-MODIFIED + :20041116T225737Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :959908481 +SUMMARY + :Asunción de la Virgen +CATEGORIES + :Public Holiday +STATUS + :TENTATIVE +CLASS + :PRIVATE +X-MOZILLA-RECUR-DEFAULT-UNITS + :years +RRULE + :FREQ=YEARLY;INTERVAL=1;BYMONTH=8 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20020815 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20020816 +DTSTAMP + :20020924T114948Z +LAST-MODIFIED + :20041116T225750Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :967837191 +SUMMARY + :Año Nuevo +CATEGORIES + :Public Holiday +STATUS + :TENTATIVE +CLASS + :PRIVATE +X-MOZILLA-RECUR-DEFAULT-UNITS + :years +RRULE + :FREQ=YEARLY;INTERVAL=1;BYMONTH=1 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20020101 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20020102 +DTSTAMP + :20020924T114801Z +LAST-MODIFIED + :20041116T225801Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :911083728 +SUMMARY + :Constitución Española +CATEGORIES + :Public Holiday +STATUS + :TENTATIVE +CLASS + :PRIVATE +X-MOZILLA-RECUR-DEFAULT-UNITS + :years +RRULE + :FREQ=YEARLY;INTERVAL=1;BYMONTH=12 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20021206 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20021207 +DTSTAMP + :20020924T115050Z +LAST-MODIFIED + :20041116T225812Z +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/allcategories.vcs b/framework/iCalendar/tests/fixtures/vTimezone/allcategories.vcs new file mode 100644 index 000000000..c66be7468 --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/allcategories.vcs @@ -0,0 +1,166 @@ +BEGIN:VCALENDAR +BEGIN:VTIMEZONE +TZID:US/Eastern +LAST-MODIFIED:19870101T000000Z +TZURL:http://zones.stds_r_us.net/tz/US-Eastern +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE + +BEGIN:VEVENT +UID:18ed77a:10a2cde985c:-2a27 +SUMMARY:NSS ISDC 2006 +LOCATION:Los Angeles\, CA +DTSTART;TZID=US/Eastern:20060504 +DTEND;TZID=US/Eastern:20060507 +DESCRIPTION: Centennial Challenges participation at the NSS ISDC + 2006\, including panel and mini-workshop. +URL:http://isdc.nss.org/2006/ +ORGANIZER;CN="Barry Epstein":MAILTO:barry.epstein@nasa.gov +CATEGORIES:Centennial Challenges Appearances* +STATUS:CONFIRMED +END:VEVENT + +BEGIN:VEVENT +UID:df4bfc:109fa68b68b:-6bd6 +SUMMARY:VSE Trailer Ohio State Tour +LOCATION:Ohio +DTSTART;TZID=US/Eastern:20060508T080000 +DTEND;TZID=US/Eastern:20060604T170000 +DESCRIPTION: In partnership with the Glenn Research Center the trailer + will visit Cleveland\, COlumbus\, Cincinnati\, and + Troy. +ORGANIZER;CN="Derek Wang":MAILTO:derek.wang-1@nasa.gov +CATEGORIES:Outreach* +STATUS:CONFIRMED +END:VEVENT + +BEGIN:VEVENT +UID:18ed77a:10a2cde985c:-2833 +SUMMARY:AIAA International Energy Conversion Conference +LOCATION:San Diego\, CA +DTSTART;TZID=US/Eastern:20060626 +DTEND;TZID=US/Eastern:20060629 +DESCRIPTION: Centennial Challenges participation at AIAA International + Energy Conversion Conference in San Diego\, CA\, including + paper session and mini-workshop. +URL:www.aiaa.org/events/iecec/ +ORGANIZER;CN="Barry Epstein":MAILTO:barry.epstein@nasa.gov +CATEGORIES:Centennial Challenges Appearances* +STATUS:CONFIRMED +END:VEVENT + +BEGIN:VEVENT +UID:18ed77a:10a2cde985c:-26be +SUMMARY:42nd AIAA/ASME/SAE/ASEE Joint Propulsion Conference +LOCATION:Sacramento\, CA +DTSTART;TZID=US/Eastern:20060709 +DTEND;TZID=US/Eastern:20060712 +DESCRIPTION: Centennial Challenges participation at 42nd AIAA/ASME/SAE/ASEE + Joint Propulsion Conference in Sacramento\, CA\, including + panel participation. +URL:http://www.aiaa.org/content.cfm?pageid=230&lumeetingid=1178 +ORGANIZER;CN="Barry Epstein":MAILTO:barry.epstein@nasa.gov +CATEGORIES:Centennial Challenges Appearances* +STATUS:CONFIRMED +END:VEVENT + +BEGIN:VEVENT +UID:18ed77a:10a2cde985c:-1e77 +SUMMARY:2006 Beam Power Challenge +LOCATION:Mountain View\, CA +DTSTART;TZID=US/Eastern:20060804 +DTEND;TZID=US/Eastern:20060806 +URL:http://www.elevator2010.org/site/competitionClimber2006.html +ORGANIZER;CN="Barry Epstein":MAILTO:barry.epstein@nasa.gov +CATEGORIES:Centennial Challenges* +STATUS:CONFIRMED +END:VEVENT + +BEGIN:VEVENT +UID:18ed77a:10a2cde985c:-1dc5 +SUMMARY:2006 Tether Challenge +LOCATION:Mountain View\, CA +DTSTART;TZID=US/Eastern:20060804 +DTEND;TZID=US/Eastern:20060806 +URL:http://www.elevator2010.org/site/competitionTether2006.html +ORGANIZER;CN="Barry Epstein":MAILTO:barry.epstein@nasa.gov +CATEGORIES:Centennial Challenges* +STATUS:CONFIRMED +END:VEVENT + +BEGIN:VEVENT +UID:18ed77a:10a2cde985c:-24c2 +SUMMARY:X PRIZE Cup Spaceflight Exposition +LOCATION:Las Cruces\, NM +DTSTART;TZID=US/Eastern:20061021 +DTEND;TZID=US/Eastern:20061022 +DESCRIPTION: Centennial Challenges Exhibit at X PRIZE Cup Spaceflight + Exposition. +URL:http://www.xpcup.com/ +ORGANIZER;CN="Barry Epstein":MAILTO:barry.epstein@nasa.gov +CATEGORIES:Centennial Challenges Appearances* +STATUS:CONFIRMED +END:VEVENT + +BEGIN:VEVENT +UID:14b2f1a:10aba5a6339:3fcd +SUMMARY:2007 Astronaut Glove Challenge: APRIL DATE TBD +LOCATION:To be determined (TBD) +DTSTART;TZID=US/Eastern:20070401 +DTEND;TZID=US/Eastern:20070401 +URL:www.astronaut-glove.us +ORGANIZER;CN="Barry Epstein":MAILTO:barry.epstein@nasa.gov +CATEGORIES:Centennial Challenges* +STATUS:CONFIRMED +END:VEVENT + +BEGIN:VEVENT +UID:18ed77a:10a2cde985c:-1630 +SUMMARY:2007 Regolith Excavation Challenge +LOCATION:Santa Maria Fair Park\, Santa Maria\, California +DTSTART;TZID=US/Eastern:20070512 +DTEND;TZID=US/Eastern:20070512 +URL:http://www.californiaspaceauthority.org/regolith/ +ORGANIZER;CN="Barry Epstein":MAILTO:barry.epstein@nasa.gov +CATEGORIES:Centennial Challenges* +STATUS:CONFIRMED +END:VEVENT + +BEGIN:VEVENT +UID:14b2f1a:10aba5a6339:437d +SUMMARY:2007 Personal Air Vehicle (PAV) Challenge: DATE TBD +LOCATION:Santa Rosa\, California +DTSTART;TZID=US/Eastern:20070601 +DTEND;TZID=US/Eastern:20070601 +URL:www.cafefoundation.org/pav.htm +ORGANIZER;CN="Barry Epstein":MAILTO:barry.epstein@nasa.gov +CATEGORIES:Centennial Challenges* +STATUS:CONFIRMED +END:VEVENT + +BEGIN:VEVENT +UID:14b2f1a:10aba5a6339:4575 +SUMMARY:2008 MoonROx (Moon Regolith Oxygen) Challenge +LOCATION:To be determined +DTSTART;TZID=US/Eastern:20080601 +DTEND;TZID=US/Eastern:20080601 +URL:www.MoonROx.org +ORGANIZER;CN="Barry Epstein":MAILTO:barry.epstein@nasa.gov +CATEGORIES:Centennial Challenges* +STATUS:CONFIRMED +END:VEVENT + +END:VCALENDAR \ No newline at end of file diff --git a/framework/iCalendar/tests/fixtures/vTimezone/arsenal32FC.ics b/framework/iCalendar/tests/fixtures/vTimezone/arsenal32FC.ics new file mode 100644 index 000000000..e726a4e1e --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/arsenal32FC.ics @@ -0,0 +1,3594 @@ +BEGIN:VCALENDAR +VERSION:2.0 +X-WR-CALNAME:Arsenal32FC +PRODID:-//Apple Computer\, Inc//iCal 2.0//EN +X-WR-RELCALID:546BD00E-C1C1-4EFA-BF00-4CB891A57F6A +X-WR-TIMEZONE:Europe/Oslo +CALSCALE:GREGORIAN +METHOD:PUBLISH +X-WR-CALDESC:All the fixtures (PL\, CL\, FA-cup\, League-cup and friendl + ies) with results and goalscorers. All coming fixtures are updated with + the opposition and kick-off times as they are confirmed by Arsenal FC.\n + \nComments or errors can be reported to piri@start.no +BEGIN:VTIMEZONE +TZID:Europe/Oslo +LAST-MODIFIED:20060901T112450Z +BEGIN:DAYLIGHT +DTSTART:20040328T010000 +TZOFFSETTO:+0200 +TZOFFSETFROM:+0000 +TZNAME:CEST +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20041031T030000 +TZOFFSETTO:+0100 +TZOFFSETFROM:+0200 +TZNAME:CET +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:20050327T030000 +TZOFFSETTO:+0200 +TZOFFSETFROM:+0100 +TZNAME:CEST +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20051030T030000 +TZOFFSETTO:+0100 +TZOFFSETFROM:+0200 +TZNAME:CET +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:20060326T030000 +TZOFFSETTO:+0200 +TZOFFSETFROM:+0100 +TZNAME:CEST +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20061029T030000 +TZOFFSETTO:+0100 +TZOFFSETFROM:+0200 +TZNAME:CET +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:Europe/London +LAST-MODIFIED:20060901T112450Z +BEGIN:DAYLIGHT +DTSTART:20010325T010000 +TZOFFSETTO:+0100 +TZOFFSETFROM:+0000 +TZNAME:BST +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20011028T020000 +TZOFFSETTO:+0000 +TZOFFSETFROM:+0100 +TZNAME:GMT +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:20020331T010000 +TZOFFSETTO:+0100 +TZOFFSETFROM:+0000 +TZNAME:BST +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20021027T020000 +TZOFFSETTO:+0000 +TZOFFSETFROM:+0100 +TZNAME:GMT +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:20030330T010000 +TZOFFSETTO:+0100 +TZOFFSETFROM:+0000 +TZNAME:BST +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20031026T020000 +TZOFFSETTO:+0000 +TZOFFSETFROM:+0100 +TZNAME:GMT +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:20040328T010000 +TZOFFSETTO:+0100 +TZOFFSETFROM:+0000 +TZNAME:BST +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20041031T020000 +TZOFFSETTO:+0000 +TZOFFSETFROM:+0100 +TZNAME:GMT +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:20050327T010000 +TZOFFSETTO:+0100 +TZOFFSETFROM:+0000 +TZNAME:BST +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20051030T020000 +TZOFFSETTO:+0000 +TZOFFSETFROM:+0100 +TZNAME:GMT +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:20060326T010000 +TZOFFSETTO:+0100 +TZOFFSETFROM:+0000 +TZNAME:BST +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20061029T020000 +TZOFFSETTO:+0000 +TZOFFSETFROM:+0100 +TZNAME:GMT +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:20070325T010000 +TZOFFSETTO:+0100 +TZOFFSETFROM:+0000 +TZNAME:BST +END:DAYLIGHT +BEGIN:STANDARD +DTSTART:20071028T020000 +TZOFFSETTO:+0000 +TZOFFSETFROM:+0100 +TZNAME:GMT +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +LOCATION:Bramall Lane\nFA Cup 5th round replay +DTSTAMP:20050521T181342Z +UID:DD11D698-C0BB-4C5F-A5E1-258D877A84F3-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:11 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=259072 +DTSTART;TZID=Europe/London:20050301T200500 +SUMMARY:Sheffield Utd (2)0-0(4) Arsenal +DTEND;TZID=Europe/London:20050301T215000 +DESCRIPTION:SHEFFIELD UNITED 0\n\nARSENAL 0\n\nArsenal win 4-2 on penalt + ies\n\nFA Cup 5th round replay +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20040822T171229Z +UID:BDEE4C5D-5EFF-4568-85EB-48B30B4587C1-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=220756 +DTSTART;TZID=Europe/London:20040822T160500 +SUMMARY:Arsenal 5-3 Middlesbrough +DTEND;TZID=Europe/London:20040822T175000 +DESCRIPTION:ARSENAL 5\nHenry 25\, 90\nBergkamp 54\nPires 65\nReyes 65\n  + \nMIDDLESBROUGH 3\nJob 43\nHasselbaink 50\nQueudrue 53\n\nFA Barclays Pr + emiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Upton Park\nBarclays Premiership +DTSTAMP:20050924T161228Z +UID:0BFCF965-270C-4432-87DC-49E762B7E541-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=309882 +DTSTART;TZID=Europe/London:20050924T150000 +SUMMARY:West Ham Utd 0-0 Arsenal +DTEND;TZID=Europe/London:20050924T164500 +DESCRIPTION:WEST HAM UNITED 0\n\nARSENAL 0\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T151953Z +UID:3DC146C7-3CEB-43B5-ACCF-04C4A12718EC-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235144 +DTSTART;TZID=Europe/London:20031108T150000 +SUMMARY:Arsenal 2-1 Tottenham +DTEND;TZID=Europe/London:20031108T164500 +DESCRIPTION:ARSENAL 2\nRobert Pires 69\nFreddie Ljungberg 79\n\nTOTTENHA + M HOTSPUR 1\nDarren Anderton 5\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:St. Andrews\nFA Barclays Premiership +DTSTAMP:20050522T190846Z +UID:DEBB97E4-FD20-4B4D-A6B9-2AD8064FE5B0-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:13 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=276363 +DTSTART;TZID=Europe/London:20050515T150000 +SUMMARY:Birmingham City 2-1 Arsenal +DTEND;TZID=Europe/London:20050515T164500 +DESCRIPTION:BIRMINGHAM CITY 2\nPandiani 80\nHeskey 90\n\nARSENAL 1\nBerg + kamp 88\n\nFA Barclays Premiership\n\nChelsea 38 29-8-1 72-15 95\ + nARSENAL 38 25-8-5 87-36 83\nMan Utd 38 22-11-5 58-26 77\nEv + erton 38 18-7-13 45-46 61\nLiverpool 38 17-7-14 52-41 58 +END:VEVENT +BEGIN:VEVENT +LOCATION:Millennium Stadium\, Cardiff +DTSTAMP:20060623T173011Z +UID:993737EB-27E0-4587-AF8D-3C871E770AFF-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070225T150000 +SUMMARY:Carling Cup Final +DTEND;TZID=Europe/London:20070225T164500 +DESCRIPTION:Carling Cup Final +END:VEVENT +BEGIN:VEVENT +LOCATION:Craven Cottage\nFA Barclays Premiership +DTSTAMP:20040911T165738Z +UID:C4D0B23D-9911-423F-971E-4B24B97F4C04-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=224868 +DTSTART;TZID=Europe/London:20040911T150000 +SUMMARY:Fulham 0-3 Arsenal +DTEND;TZID=Europe/London:20040911T164500 +DESCRIPTION:FULHAM 0\n\nARSENAL 3\nLjungberg 62\nKnight (og) 65\nReyes 7 + 1\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Cup Third Round\nElland Road +DTSTAMP:20040604T150758Z +UID:E90EF253-43D6-4A8F-AD7F-6575B69D9C0A-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=248109 +DTSTART;TZID=Europe/London:20040104T160500 +SUMMARY:Leeds United 1-4 Arsenal +DTEND;TZID=Europe/London:20040104T175000 +DESCRIPTION:LEEDS UNITED 1\nViduka 8\n\nARSENAL 4\nHenry 26\nEdu 32\nPir + es 87\nToure 92\n\nFA Cup Third Round +END:VEVENT +BEGIN:VEVENT +LOCATION:Stade de France\, Paris\nUEFA Champions League +DTSTAMP:20060809T113424Z +UID:A0718603-83F8-4D8F-BE86-DD628C513434-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:19 +URL;VALUE=URI:http://www.uefa.com/Competitions/UCL/index.html +DTSTART;TZID=Europe/London:20060517T194500 +SUMMARY:Barcelona 2-1 Arsenal +DTEND;TZID=Europe/London:20060517T213000 +DESCRIPTION:BARCELONA 2\nEto`o 77\nBelletti 81\n\nARSENAL 1\nCampbell 37 + \n\nUEFA Champions League Final +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:City of Manchester Stadium\nBarclays Premiership +DTSTAMP:20060809T121458Z +UID:13FA08DC-5869-43FB-A4A3-8F7A8EA8B01B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +DTSTART;TZID=Europe/London:20060504T194500 +SUMMARY:Manchester City 1-3 Arsenal +DESCRIPTION:MANCHESTER CITY 1\nSommeil 39\n\nARSENAL 3\nLjungberg 30\nRe + yes 78\, 84\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060819T193244Z +UID:0F8E5701-6ED3-4742-8FA0-8548906310BA-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20060819T150000 +SUMMARY:Arsenal 1-1 Aston Villa +DTEND;TZID=Europe/London:20060819T164500 +DESCRIPTION:ARSENAL 1\nGilberto 83\n\nASTON VILLA 1\nMellberg 54\n\nBarc + lays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Amsterdam Tournament\nArenA Amsterdam +DTSTAMP:20040801T202146Z +UID:2F72FFCD-A2B5-447D-A25F-C40BD7CEC5EE-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=216698 +DTSTART;TZID=Europe/Oslo:20040730T190000 +SUMMARY:River Plate 0-0 Arsenal +DTEND;TZID=Europe/Oslo:20040730T204500 +DESCRIPTION:RIVER PLATE 0\n\nARSENAL 0\n\nPre-season friendly\nAmsterdam + Tournament +END:VEVENT +BEGIN:VEVENT +LOCATION:Weiz\nPre-Season Friendly +DTSTAMP:20050720T191321Z +UID:5CBA3725-55A6-4665-85AD-36FF841251F7-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:19 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=292922 +DTSTART;TZID=Europe/London:20050720T180000 +SUMMARY:Weiz 0-5 Arsenal +DTEND;TZID=Europe/London:20050720T194500 +DESCRIPTION:WEIZ 0\n\nARSENAL 5\nFlamini 1\nHenry 4\, 37\nBentley 15\nBe + rgkamp 50\n\nAustrian Tour\nPre-Season Friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:Meadow Park +DTSTAMP:20060809T113314Z +UID:738BB2CB-4734-45E0-9BB5-FAB00032399F-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:23 +DTSTART;TZID=Europe/London:20060804T193000 +SUMMARY:Boreham Wood 0-4 Arsenal XI +DTEND;TZID=Europe/London:20060804T211500 +DESCRIPTION:BOREHAM WOOD 0\n\nARSENAL 4\nLupoli 31\, 90\nMerida Perez 49 + \nBarazite 55\n\nFriendly match +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070124T200000 +SUMMARY:Carling Cup Semi-Final (2) +UID:FF3C28A5-1B4B-49DB-8D61-F50C0029DD5A-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +DTSTAMP:20060623T165935Z +DESCRIPTION:Carling Cup Semi-final (2) +SEQUENCE:3 +DURATION:PT1H45M +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060704T214320Z +UID:A3605A71-6D29-496A-91F9-7569E0D8475D-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +DTSTART;TZID=Europe/London:20061112T160000 +SUMMARY:Arsenal - Liverpool +DTEND;TZID=Europe/London:20061112T174500 +DESCRIPTION:Live on Sky Sports\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060622T110924Z +UID:43ED76B3-AFF9-46BE-8CB9-7E24081053ED-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +DTSTART;TZID=Europe/London:20061118T150000 +SUMMARY:Arsenal - Newcastle Utd +DTEND;TZID=Europe/London:20061118T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T150308Z +UID:948C672E-DAAD-472A-AF6C-EE0852365A90-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235084 +DTSTART;TZID=Europe/London:20040320T150000 +SUMMARY:Arsenal 2-1 Bolton Wanderers +DTEND;TZID=Europe/London:20040320T164500 +DESCRIPTION:ARSENAL 2\nPires 16\nBergkamp 24\n\nBOLTON WANDERERS 1\nCamp + o 41\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:The Valley\nFA Barclays Premiership +DTSTAMP:20050101T171929Z +UID:13935549-7B90-406B-9F7A-90819D3E2C3A-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=246972 +DTSTART;TZID=Europe/London:20050101T150000 +SUMMARY:Charlton Athletic 1-3 Arsenal +DTEND;TZID=Europe/London:20050101T164500 +DESCRIPTION:CHARLTON ATHLETIC 1\nEl Karkouri 45\n\nARSENAL 3\nLjungberg + 35\, 48\nVan Persie 71\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070127T150000 +SUMMARY:F.A. Cup 4rth round +UID:5512BB18-D83F-4046-9F9D-C8CD5DFE787C-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +DTSTAMP:20060623T172538Z +DESCRIPTION:F.A. Cup 4rth round +SEQUENCE:7 +DURATION:PT1H45M +END:VEVENT +BEGIN:VEVENT +LOCATION:St. Mary's Stadium\nFA Barclays Premiership +DTSTAMP:20050227T195350Z +UID:C68FEB23-6B11-43D2-8636-AC63B9321FB6-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=258285 +DTSTART;TZID=Europe/London:20050226T124500 +SUMMARY:Southampton 1-1 Arsenal +DTEND;TZID=Europe/London:20050226T143000 +DESCRIPTION:SOUTHAMPTON 1\nCrouch 67\n\nARSENAL 1\nLjungberg 45\n\nFA Ba + rclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Ritzing\nPre-Season Friendly +DTSTAMP:20060809T122610Z +UID:CF304487-DCC8-44F2-9A54-66F71AF6153F-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:17 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=293432 +DTSTART;TZID=Europe/London:20050724T150000 +SUMMARY:Ritzing 2-5 Arsenal +DTEND;TZID=Europe/London:20050724T164500 +DESCRIPTION:RITZING 2\nPajer 38\nSchiffer 75\n\nARSENAL 5\nBergkamp 10\n + Henry 17\nReyes (pen) 35\nHleb 79\nLarsson 90\n\nAustrian Tour\nPre-Seas + on Friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20050402T214701Z +UID:D89D0B30-95D5-4541-8E2A-0E16B1ACD844-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=260128 +DTSTART;TZID=Europe/London:20050305T150000 +SUMMARY:Arsenal 3-0 Portsmouth +DTEND;TZID=Europe/London:20050305T164500 +DESCRIPTION:ARSENAL 3\nHenry 39\, 53\, 85\n\nPORTSMOUTH 0\n\nFA Barclays + Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nKSK Beveren FC +DTSTAMP:20040805T113442Z +UID:3DE04A4B-9A50-41E7-BA56-7CF096E4B93F-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:1 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=217614 +DTSTART;TZID=Europe/Oslo:20040804T193000 +SUMMARY:Beveren 0-0 Arsenal XI +DTEND;TZID=Europe/Oslo:20040804T211500 +DESCRIPTION:KSK BEVEREN 0\n\nARSENAL XI 0\n\nPre-season friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nMolineux +DTSTAMP:20040604T150601Z +UID:FFCDBB9E-50AA-4477-85A3-76532EDFE9DE-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235003 +DTSTART;TZID=Europe/London:20040207T150000 +SUMMARY:Wolverhampton 1-3 Arsenal +DTEND;TZID=Europe/London:20040207T164500 +DESCRIPTION:WOLVERHAMPTON 1\nIoan Ganea 26\n\nARSENAL 3\nBergkamp 9\nHen + ry 58\nToure 63\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Craven Cottage +DTSTAMP:20060622T110755Z +UID:6B4B93A2-4BA4-484F-AE7D-F53E851AA5AF-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:51 +DTSTART;TZID=Europe/London:20061129T194500 +SUMMARY:Fulham - Arsenal +DTEND;TZID=Europe/London:20061129T213000 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:AOL - Arena +DTSTAMP:20060825T091034Z +UID:15AE6DB9-9B00-4870-AAB9-7044922FAEA0-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +DTSTART;TZID=Europe/London:20060913T194500 +SUMMARY:Hamburg - Arsenal +DESCRIPTION:UEFA Champions League matchday 1 +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070306T194500 +SUMMARY:Champions League knockout round 2 +UID:89BB2B1A-C5E0-461E-BD2C-C452C910263C-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +DTSTAMP:20060623T170807Z +DESCRIPTION:Champions League knockout round 2 +SEQUENCE:3 +DURATION:PT1H45M +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20060809T121950Z +UID:808E335F-99F1-4BD9-8ACE-9DD8DB1D31A9-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:3 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235226 +DTSTART;TZID=Europe/London:20030926T200000 +SUMMARY:Arsenal 3-2 Newcastle United +DTEND;TZID=Europe/London:20030926T214500 +DESCRIPTION:ARSENAL 3\nHenry 18\, 79 (pen)\nGilberto 67\n\nNEWCASTLE UNI + TED 2\nRobert 26\nBernard 71\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T150247Z +UID:71A375EE-E5F8-4461-91FB-E3AB0513A9D6-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235094 +DTSTART;TZID=Europe/London:20040328T160500 +SUMMARY:Arsenal 1-1 Manchester United +DTEND;TZID=Europe/London:20040328T175000 +DESCRIPTION:ARSENAL 1\nHenry 50\n\nMANCHESTER UTD 1\nSaha 86\n\nFA Barcl + aycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20060809T122807Z +UID:406FCBBB-339B-459C-81C6-75E044F5E29A-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235064 +DTSTART;TZID=Europe/London:20040201T160500 +SUMMARY:Arsenal 2-1 Manchester City +DTEND;TZID=Europe/London:20040201T175000 +DESCRIPTION:ARSENAL 2\nTarnat (og) 37\nHenry 82\n\nMANCHESTER CITY 1\nAn + elka 88\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:Highbury\nUEFA Champions League +DTSTAMP:20051208T091322Z +UID:E24F789D-7189-4F04-B83C-AE8C7F96BCDB-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=332048 +DTSTART;TZID=Europe/London:20051207T194500 +SUMMARY:Arsenal 0-0 AFC Ajax +DESCRIPTION:ARSENAL 0\n\nAJAX 0\n\nUEFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:UEFA Champions League\nHighbury +DTSTAMP:20040604T152055Z +UID:5FA11B6C-7436-4FB0-BF0F-AB721273C156-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=243484 +DTSTART;TZID=Europe/London:20031210T194500 +SUMMARY:Arsenal 2-0 Lokomotiv Moscow +DTEND;TZID=Europe/London:20031210T213000 +DESCRIPTION:ARSENAL 2\nPires 12\nLjungberg 67\n\nLOKOMOTIV MOSCOW 0\n\nU + EFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:Millennium Stadium\, Cardiff\nFA Cup Final +DTSTAMP:20050521T181209Z +UID:B24D3055-80AC-4069-9D43-448432A86997-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=277548 +STATUS:CONFIRMED +DTSTART;TZID=Europe/London:20050521T150000 +SUMMARY:Arsenal (5)0-0(4) Manchester Utd +DTEND;TZID=Europe/London:20050521T164500 +DESCRIPTION:ARSENAL 0\n\nMANCHESTER UNITED 0\n\nArsenal win 5-4 on penal + ties.\n\nFA Cup Final +END:VEVENT +BEGIN:VEVENT +LOCATION:UEFA Champions League\nLokomotiv Stadium +DTSTAMP:20040604T151803Z +UID:1A5325F2-48CE-43BE-8A0B-31D12B9146D5-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=243418 +DTSTART;TZID=Europe/London:20030930T173000 +SUMMARY:Lokomotiv Moscow 0-0 Arsenal +DTEND;TZID=Europe/London:20030930T191500 +DESCRIPTION:LOKOMOTIV MOSCOW 0\n\nARSENAL 0\n\nUEFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T151836Z +UID:0D2BD950-DA7B-4A87-9CF0-0DB3881463E8-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235184 +DTSTART;TZID=Europe/London:20031018T150000 +SUMMARY:Arsenal 2-1 Chelsea +DTEND;TZID=Europe/London:20031018T164500 +DESCRIPTION:ARSENAL 2\nEdu 4\nHenry 75\n\nCHELSEA 1\nCrespo 8\n\nFA Barc + laycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nOld Trafford +DTSTAMP:20040604T151742Z +UID:83C8DCDD-14B5-43EF-8903-9D1ED17701C9-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:13 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235220 +DTSTART;TZID=Europe/London:20030921T160500 +SUMMARY:Manchester Utd 0-0 Arsenal +DTEND;TZID=Europe/London:20030921T175000 +DESCRIPTION:MANCHESTER UNITED 0\nVan Nistelrooy missed pen 90\n\nARSENAL + 0\nVieira sent off 79\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nClarence Park\, St Albans +DTSTAMP:20040604T151527Z +UID:09F56274-70F9-4938-9C54-345758F27CAD-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=241527 +DTSTART;TZID=Europe/London:20030731T193000 +SUMMARY:St Albans City 1-3 Arsenal XI +DTEND;TZID=Europe/London:20030731T211500 +DESCRIPTION:ST ALBANS CITY 1\nMcDonnell 44\n\nARSENAL XI 3\nVolz 19\, 51 + \nHalls 60\n\nPre-season friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:Stamford Bridge\nBarclays Premiership +DTSTAMP:20050821T175116Z +UID:D1C9C24D-54A8-4F0A-98DE-95664FAFED08-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:15 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=299569 +DTSTART;TZID=Europe/London:20050821T160000 +SUMMARY:Chelsea 1-0 Arsenal +DTEND;TZID=Europe/London:20050821T174500 +DESCRIPTION:CHELSEA 1\nDrogba 73\n\nARSENAL 0\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:City of Manchester Stadium +DTSTAMP:20060826T181937Z +UID:503BC001-B8C4-4AD9-89F0-C640100E1E74-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:17 +DTSTART;TZID=Europe/London:20060826T171500 +SUMMARY:Manchester City 1-0 Arsenal +DTEND;TZID=Europe/London:20060826T190000 +DESCRIPTION:MANCHESTER CITY 1\nBarton 41 (pen)\n\nARSENAL 0\n\nBarclays + Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20060104T074101Z +UID:B5669563-3A5E-44E8-BBD4-56468D1014BB-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:29 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=349879 +DTSTART;TZID=Europe/London:20060103T200000 +SUMMARY:Arsenal 0-0 Manchester Utd +DTEND;TZID=Europe/London:20060103T214500 +DESCRIPTION:ARSENAL 0\n\nMANCHESTER UNITED 0\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Ewood Park\nBarclays Premiership +DTSTAMP:20060225T195303Z +UID:7549B043-643B-4BC9-8E0D-D90646B36C76-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=366342 +DTSTART;TZID=Europe/London:20060225T150000 +SUMMARY:Blackburn Rovers 1-0 Arsenal +DTEND;TZID=Europe/London:20060225T164500 +DESCRIPTION:BLACKBURN ROVERS 1\nPedersen 18\n\nARSENAL 0\n\nBarclays Pre + miership +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:Estadio do Dragao +DTSTAMP:20060825T090935Z +UID:7DEC6928-F5CD-45EB-BEE6-31F026F612F6-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +DTSTART;TZID=Europe/London:20061206T194500 +SUMMARY:FC Porto - Arsenal +DESCRIPTION:UEFA Champions League matchday 6 +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nReebok Stadium +DTSTAMP:20040604T152138Z +UID:4EE0796B-6C1A-4E9E-9683-9440F26018DF-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234966 +DTSTART;TZID=Europe/London:20031220T150000 +SUMMARY:Bolton W 1-1 Arsenal +DTEND;TZID=Europe/London:20031220T164500 +DESCRIPTION:BOLTON WANDERERS 1\nPedersen 83\n\nARSENAL 1\nPires 57\n\nFA + Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Villa Park +DTSTAMP:20060623T172316Z +UID:1FD6BCDD-A429-4451-8ED3-4F3F3AEA7580-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070224T150000 +SUMMARY:Aston Villa - Arsenal +DTEND;TZID=Europe/London:20070224T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Santiago Bernabéu\nUEFA Champions League +DTSTAMP:20060221T231549Z +UID:1658A9A7-CB4E-4592-8521-501A850778FA-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:17 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=365276 +DTSTART;TZID=Europe/London:20060221T194500 +SUMMARY:Real Madrid 0-1 Arsenal +DTEND;TZID=Europe/London:20060221T213000 +DESCRIPTION:REAL MADRID 0\n\nARSENAL 1\nHenry 47\n\nUEFA Champions Leagu + e\nRound of 16 - First leg +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20041120T233806Z +UID:C6261B81-7716-45C5-840F-36304430CDA3-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=238106 +DTSTART;TZID=Europe/London:20041120T150000 +SUMMARY:Arsenal 1-1 West Bromwich Albion +DTEND;TZID=Europe/London:20041120T164500 +DESCRIPTION:ARSENAL 1\nPires 54\n\nWEST BROMWICH ALBION 1\nEarnshaw 79\n + \nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Reebok Stadium\nBarclays Premiership +DTSTAMP:20051203T174744Z +UID:FAB58070-B7CA-4898-B0B2-B738D4BC59BA-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=330807 +DTSTART;TZID=Europe/London:20051203T150000 +SUMMARY:Bolton Wanderers 2-0 Arsenal +DTEND;TZID=Europe/London:20051203T164500 +DESCRIPTION:BOLTON WANDERERS 2\nFaye 20\nStelios 32\n\nARSENAL 0\n\nBarc + lays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Old Trafford +DTSTAMP:20060711T140535Z +UID:8293EFFE-4B34-4E8B-BE3F-6060CD336FF5-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +DTSTART;TZID=Europe/London:20060917T160000 +SUMMARY:Manchester Utd - Arsenal +DTEND;TZID=Europe/London:20060917T174500 +DESCRIPTION:Live on Sky Sports\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060623T172437Z +UID:071EA2F2-ACC6-4B00-915F-A645F5D45C07-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070303T150000 +SUMMARY:Arsenal - Reading +DTEND;TZID=Europe/London:20070303T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20051023T100152Z +UID:17669441-6749-4279-92E6-9C0778D0B794-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=318610 +DTSTART;TZID=Europe/London:20051022T150000 +SUMMARY:Arsenal 1-0 Manchester City +DTEND;TZID=Europe/London:20051022T164500 +DESCRIPTION:ARSENAL 1\nPires 61 (pen)\n\nMANCHESTER CITY 0\n\nBarclays P + remiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060623T172504Z +UID:FADFCA7D-FF68-41D0-8101-DD0705FEED74-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070505T150000 +SUMMARY:Arsenal - Chelsea +DTEND;TZID=Europe/London:20070505T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070307T194500 +SUMMARY:Champions League knockout round 2 +UID:726C05A2-1DCD-4A1B-8EEA-FC8F00D51943-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +DTSTAMP:20060623T170818Z +DESCRIPTION:Champions League knockout round 2 +SEQUENCE:3 +DURATION:PT1H45M +END:VEVENT +BEGIN:VEVENT +LOCATION:DSB Stadium\, Netherlands +DTSTAMP:20060809T113344Z +UID:984B5155-B453-4C54-AB2E-AA1B28D6470F-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:22 +DTSTART;TZID=Europe/Oslo:20060804T190000 +SUMMARY:AZ Alkmaar 0-3 Arsenal +DTEND;TZID=Europe/Oslo:20060804T204500 +DESCRIPTION:AZ ALKMAAR 0\n\nARSENAL 3\nGilberto 36\nAdebayor 52\nVan Per + sie 74 (pen)\n\nPre-Season Friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:Goodison Park\nFA Barclays Premiership +DTSTAMP:20040818T214802Z +UID:CB68CA39-4400-4FA7-8BF0-BF7BF2B4136B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=219470 +DTSTART;TZID=Europe/London:20040815T140000 +SUMMARY:Everton 1-4 Arsenal +DTEND;TZID=Europe/London:20040815T154500 +DESCRIPTION:EVERTON 1\nCarsley 64\n\nARSENAL 4\nBergkamp 23\nReyes 39\nL + jungberg 54\nPires 83\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Madejski Stadium +DTSTAMP:20060704T214235Z +UID:C18A4E98-B99C-4E49-AB4E-FEBE4911102C-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +DTSTART;TZID=Europe/London:20061022T160000 +SUMMARY:Readling - Arsenal +DTEND;TZID=Europe/London:20061022T174500 +DESCRIPTION:Live on Sky Sports\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Riverside Stadium\nBarclays Premiership +DTSTAMP:20050911T092135Z +UID:068F415C-7248-40AA-8568-ACEED555ED5D-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:15 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=305615 +DTSTART;TZID=Europe/London:20050910T171500 +SUMMARY:Middlesbrough 2-1 Arsenal +DTEND;TZID=Europe/London:20050910T190000 +DESCRIPTION:MIDDLESBROUGH 2\nYakubu 40\nMaccarone 58\n\nARSENAL 1\nReyes + 90\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Underhill Stadium\, Barnet FC\nPre-Season Friendly +DTSTAMP:20060809T122551Z +UID:C46CDC63-BCED-4DA4-B35D-FC4B4931528E-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:14 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=290980 +DTSTART;TZID=Europe/London:20050716T150000 +SUMMARY:Barnet 1-4 Arsenal +DTEND;TZID=Europe/London:20050716T164500 +DESCRIPTION:BARNET 1\nSinclair 74\n\nARSENAL 4\nHleb 2\nHenry 15 (pen)\n + Bergkamp 28\,\nHoyte 35\n\nPre-Season Friendly +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070425T194500 +SUMMARY:Champions League semi-final 1 +UID:295A452C-8547-41CF-89CF-2B37B466C42E-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +DTSTAMP:20060623T171714Z +DESCRIPTION:Champions League semi-final 1 +SEQUENCE:3 +DURATION:PT1H45M +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:Dynamo Stadium +DTSTAMP:20060830T131541Z +UID:D0C0E9ED-BAEA-4919-9E42-863C17BC147A-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:22 +DTSTART;TZID=Europe/London:20061017T173000 +SUMMARY:CSKA Moscow - Arsenal +DESCRIPTION:UEFA Champions League matchday 3 +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060809T113404Z +UID:42BC0BBA-940D-4170-89AA-52A38FB515EC-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:30 +DTSTART;TZID=Europe/London:20060722T170000 +SUMMARY:Arsenal 2-1 Ajax +DTEND;TZID=Europe/London:20060722T184500 +DESCRIPTION:ARSENAL 2\nHenry 55\nKanu 80\n\nAJAX 1\nHuntelaar 37\n\nDenn + is Bergkamp testimonial +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20060809T114551Z +UID:61DA3E4F-41A3-40BE-97F7-0DA5DDA65EDA-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=311970 +DTSTART;TZID=Europe/London:20051002T133000 +SUMMARY:Arsenal 1-0 Birmingham City +DTEND;TZID=Europe/London:20051002T151500 +DESCRIPTION:ARSENAL 1\nVan Persie 81\n\nBIRMINGHAM 0\n\nBarclays Premier + ship +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20041030T183137Z +UID:48DEEEF9-0226-4CD2-8B7C-0A14CEDC774C-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=234427 +DTSTART;TZID=Europe/London:20041030T150000 +SUMMARY:Arsenal 2-2 Southampton +DTEND;TZID=Europe/London:20041030T164500 +DESCRIPTION:ARSENAL 2\nHenry 67\nVan Persie 90\n\nSOUTHAMPTON 2\nDelap 8 + 0\, 85\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Goodison Park +DTSTAMP:20060623T172324Z +UID:C62B71C3-B92D-45BA-B6CF-AD07227B6353-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070317T150000 +SUMMARY:Everton - Arsenal +DTEND;TZID=Europe/London:20070317T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Schwadorf\, Austria +DTSTAMP:20060809T113334Z +UID:6F77FE30-994F-4E30-B718-ACAF214649C1-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +DTSTART;TZID=Europe/Oslo:20060731T170000 +SUMMARY:Schwadorf 1-8 Arsenal +DTEND;TZID=Europe/Oslo:20060731T184500 +DESCRIPTION:SCHWADORF 1\nLabaska 86\n\nARSENAL 8\nVan Persie 6\, 47\nDjo + urou 15\nAdebayor 39\, 45\nToure 53\nBendtner 74\nHleb 84\n\nPre-Season + Friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:UEFA Champions League (knock-out)\nEstadio de Balaidos +DTSTAMP:20040604T150508Z +UID:9FBE54FE-5DE4-4E46-8EC5-C7ED4F31B747-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=249279 +DTSTART;TZID=Europe/London:20040224T194500 +SUMMARY:Celta de Vigo 2-3 Arsenal +DTEND;TZID=Europe/London:20040224T213000 +DESCRIPTION:CELTA DE VIGO 2\nEdu 27\nIgnacio 64\n\nARSENAL 3\nEdu 16\, 5 + 8\nPires 80\n\nUEFA Champions League (knock-out) +END:VEVENT +BEGIN:VEVENT +LOCATION:Bramall Lane +DTSTAMP:20060622T110435Z +UID:264BCC4B-23C0-4E62-9DF0-28D65A1FADFA-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +DTSTART;TZID=Europe/London:20061230T150000 +SUMMARY:Sheffield Utd - Arsenal +DTEND;TZID=Europe/London:20061230T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nCarling Cup 4th round +DTSTAMP:20041110T084850Z +UID:B96B3EDA-E4F8-4D4E-A38D-E68A0FAC4DAC-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +DTSTART;TZID=Europe/London:20041109T194500 +SUMMARY:Arsenal 3-1 Everton +DTEND;TZID=Europe/London:20041109T213000 +DESCRIPTION:ARSENAL 3\nOwusu-Abeyie 25\nLupoli 52\, 85\n\nEVERTON 1\nGra + vesen 8\n\nCarling Cup 4th round +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20050814T143934Z +UID:419B8042-6F04-4BFF-BBFB-87ECD69BA6AC-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:19 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=298360 +DTSTART;TZID=Europe/London:20050814T133000 +SUMMARY:Arsenal 2-0 Newcastle +DTEND;TZID=Europe/London:20050814T151500 +DESCRIPTION:ARSENAL 2\nHenry 81 (pen)\nVan Persie 87\n\nNEWCASTLE UNITED + 0\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20060318T171313Z +UID:02D02AAB-CA95-4836-9BFC-7F6070769027-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +DTSTART;TZID=Europe/London:20060318T150000 +SUMMARY:Arsenal 3-0 Charlton Athletic +DTEND;TZID=Europe/London:20060318T164500 +DESCRIPTION:Arsenal 3\nPires 13\, Adebayor 32\, Hleb 49\n\nCharlton Athl + etic 0\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060623T165213Z +UID:A2331E3F-6636-4FCC-976C-A7BE0F267F94-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +DTSTART;TZID=Europe/London:20070101T150000 +SUMMARY:Arsenal - Charlton Athletic +DTEND;TZID=Europe/London:20070101T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060623T172444Z +UID:AE4E258B-D379-497E-B9A1-7705198D684B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070407T150000 +SUMMARY:Arsenal - West Ham +DTEND;TZID=Europe/London:20070407T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Cup 5th round\nHighbury +DTSTAMP:20040604T150528Z +UID:E3CD3E04-6B11-4C2E-9941-D3655DBA30AA-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=249914 +DTSTART;TZID=Europe/London:20040215T113000 +SUMMARY:Arsenal 2-1 Chelsea +DTEND;TZID=Europe/London:20040215T131500 +DESCRIPTION:ARSENAL 2\nReyes 56\, 62\n\nCHELSEA 1\nMutu 40\n\nFA Cup 5th + round +END:VEVENT +BEGIN:VEVENT +LOCATION:Fratton Park\nFA Barclays Premiership +DTSTAMP:20041219T184527Z +UID:3B019F51-AD5D-4D1F-9A08-1B5CDF33D3A6-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=244606 +DTSTART;TZID=Europe/London:20041219T160500 +SUMMARY:Portsmouth 0-1 Arsenal +DTEND;TZID=Europe/London:20041219T175000 +DESCRIPTION:PORTSMOUTH 0\n\nARSENAL 1\nCampbell 75\n\nFA Barclays Premie + rship +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:Highbury\nUEFA Champions League +DTSTAMP:20060809T114753Z +UID:A903EEC3-8FDF-4C88-AD72-027667EDD57B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/matchreport.asp?thisNav=fixtures&fx + id=291995 +DTSTART;TZID=Europe/London:20060308T194500 +SUMMARY:Arsenal 0-0 Real Madrid +DESCRIPTION:ARSENAL 0\n\nREAL MADRID 0\n\n(Arsenal win 1-0 on agg.)\n\nU + EFA Champions League\nRound of 16 - Second leg +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070414T150000 +DTEND;TZID=Europe/London:20070414T164500 +SUMMARY:F.A. Cup Semi-Final +UID:536C873E-82D3-46AE-BF78-18BC335208E3-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +DTSTAMP:20060623T172648Z +DESCRIPTION:F.A. Cup Semi-Final +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070424T194500 +DTEND;TZID=Europe/London:20070424T213000 +SUMMARY:Champions League semi-final 1 +UID:34E0D7F1-6ADA-42D4-83F8-8E7A9D6E199A-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +DTSTAMP:20060623T171711Z +DESCRIPTION:Champions League semi-final 1 +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T152030Z +UID:4E482D40-6A2D-47F1-827C-E43334F989E3-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235164 +DTSTART;TZID=Europe/London:20031130T140000 +SUMMARY:Arsenal 0-0 Fulham +DTEND;TZID=Europe/London:20031130T154500 +DESCRIPTION:ARSENAL 0\n\nFULHAM 0\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20060809T122517Z +UID:3E361BD1-C2F8-4CFA-A461-0190E7EDC18E-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235124 +DTSTART;TZID=Europe/London:20040515T150000 +SUMMARY:Arsenal 2-1 Leicester City +DTEND;TZID=Europe/London:20040515T164500 +DESCRIPTION:ARSENAL 2\nHenry 47 (pen)\nVieira 66\n\nLEICESTER CITY 1\nDi + ckov 26\n\nFA Barclaycard Premiership\n\nARSENAL 38 26 12 0 73-26 90\nCh + elsea 38 24 7 7 67-30 79\nManUtd 38 23 6 9 64-35 75 +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20051106T093933Z +UID:992DC227-70DD-4078-8EDD-E1ECE4B64329-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=322549 +DTSTART;TZID=Europe/London:20051105T150000 +SUMMARY:Arsenal 3-1 Sunderland +DTEND;TZID=Europe/London:20051105T164500 +DESCRIPTION:ARSENAL 3\nVan Persie 12\nHenry 36\, 82\n\nSUNDERLAND 1\nStu + bbs 75\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:UEFA Champions League\nHighbury +DTSTAMP:20040604T151942Z +UID:2BA39EB6-8A68-4CBA-964C-ED241DE756AB-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=243454 +DTSTART;TZID=Europe/London:20031105T194500 +SUMMARY:Arsenal 1-0 Dynamo Kyiv +DTEND;TZID=Europe/London:20031105T213000 +DESCRIPTION:ARSENAL 1\nCole 88\n\nDYNAMO KYIV 0\n\nUEFA Champions League + +END:VEVENT +BEGIN:VEVENT +LOCATION:Bad Waltersdorf\nPre-Season Friendly +DTSTAMP:20060809T122621Z +UID:F6EC7FCD-BF15-4285-81FA-D7F9E12A33BC-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:13 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=294355 +DTSTART;TZID=Europe/London:20050726T170000 +SUMMARY:FC Utrecht 0-3 Arsenal +DTEND;TZID=Europe/London:20050726T184500 +DESCRIPTION:FC UTRECHT 0\n\nARSENAL 3\nPires (pen) 13\nReyes 54\nHenry 7 + 7\n\nAustrian Tour\nPre-Season Friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:UEFA Champions League quarter-final 1st leg\nStamford Bridge +DTSTAMP:20040604T150255Z +UID:5BE9DF57-153E-4C6E-819D-D4A2A8F5F029-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=251918 +DTSTART;TZID=Europe/London:20040324T194500 +SUMMARY:Chelsea 1-1 Arsenal +DTEND;TZID=Europe/London:20040324T213000 +DESCRIPTION:CHELSEA 1\nGudjohnsen 53\nDesailly sent off 83\n\nARSENAL 1\ + nPires 59\n\nUEFA Champions League quarter-final 1st leg +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nCity of Manchester Stadium +DTSTAMP:20040604T151701Z +UID:75E6FF81-7E90-4687-ABDA-E4BE2A7B52B8-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234938 +DTSTART;TZID=Europe/London:20030831T160500 +SUMMARY:Manchester City 1-2 Arsenal +DTEND;TZID=Europe/London:20030831T175000 +DESCRIPTION:MANCHESTER CITY 1\nLauren (og) 10\n\nARSENAL 2\nWiltord 47\n + Ljungberg 71\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Old Trafford\nCarling Cup 5th round +DTSTAMP:20041201T220238Z +UID:2F02A638-9F94-4E40-AC02-BB576C3A9A1E-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:20 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=241175 +DTSTART;TZID=Europe/London:20041201T194500 +SUMMARY:Man Utd 1-0 Arsenal +DTEND;TZID=Europe/London:20041201T213000 +DESCRIPTION:MANCHESTER UNITED 1\nBellion 1\n\nARSENAL 0\n\nCarling Cup 5 + th round +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T152105Z +UID:9AAFC224-471D-4CC5-B774-312462078030-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234954 +DTSTART;TZID=Europe/London:20031214T140000 +SUMMARY:Arsenal 1-0 Blackburn Rovers +DTEND;TZID=Europe/London:20031214T154500 +DESCRIPTION:ARSENAL 1\nBergkamp 11\n\nBLACKBURN ROVERS 0\n\nFA Barclayca + rd Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:JJB Stadium +DTSTAMP:20060704T214914Z +UID:E8745B4A-A27B-459F-8A0C-2A2DDDEFD10A-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:29 +DTSTART;TZID=Europe/London:20061213T194500 +SUMMARY:Wigan Athletic - Arsenal +DTEND;TZID=Europe/London:20061213T213000 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nUEFA Champions League +DTSTAMP:20051102T221749Z +UID:B48AA317-3109-4FE6-8CCF-0DD909DB31AA-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=321734 +DTSTART;TZID=Europe/London:20051102T194500 +SUMMARY:Arsenal 3-0 Sparta Prague +DTEND;TZID=Europe/London:20051102T213000 +DESCRIPTION:ARSENAL 3\nHenry 23\nVan Persie 81\, 86\n\nSPARTA PRAGUE 0\n + \nUEFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20060809T121850Z +UID:BC8BD6D1-A4AF-4DC3-9578-8830BF44CF8D-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:3 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235206 +DTSTART;TZID=Europe/London:20030913T150000 +SUMMARY:Arsenal 1-1 Portsmouth +DTEND;TZID=Europe/London:20030913T164500 +DESCRIPTION:ARSENAL 1\nHenry (pen) 40\n\nPORTSMOUTH 1\nSheringham 26\n\n + FA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:Emirates Stadium +DTSTAMP:20060824T150059Z +UID:DC03BAD0-598F-4EFA-9ED4-353BA396DFBB-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:12 +DTSTART;TZID=Europe/London:20060823T200500 +SUMMARY:Arsenal 2-1 Dinamo Zagreb +DESCRIPTION:ARSENAL 2\nLjungberg 77\nFlamini 90\n\n\nDINAMO ZAGREB 1\nda + Silva 12\n\nUEFA Champions League 3rd Qualification round\, leg 2 +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nSt. Andrews +DTSTAMP:20040604T152004Z +UID:FF5B1C2F-E920-4BA8-A94C-67DAA1B87D82-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235154 +DTSTART;TZID=Europe/London:20031122T150000 +SUMMARY:Birmingham City 0-3 Arsenal +DTEND;TZID=Europe/London:20031122T164500 +DESCRIPTION:BIRMINGHAM CITY 0\n\nARSENAL 3\nFreddie Ljungberg 4\nDennis + Bergkamp 80\nRobert Pires 88\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070404T194500 +SUMMARY:Champions League quarter-final 1 +UID:A40FE1FA-E3A6-48C1-85D7-7DDE8D162D38-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +DTSTAMP:20060623T171102Z +DESCRIPTION:Champions League quarter-final 1 +SEQUENCE:1 +DURATION:PT1H45M +END:VEVENT +BEGIN:VEVENT +LOCATION:Underhill +DTSTAMP:20060715T170512Z +UID:45C4A339-9185-4CD9-9090-3907A4D8D347-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +DTSTART;TZID=Europe/London:20060715T150000 +SUMMARY:Barnet 0-0 Arsenal +DTEND;TZID=Europe/London:20060715T164500 +DESCRIPTION:BARNET 0\n\nARSENAL 0\n\nPre-season friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20040918T141854Z +UID:703995B1-2360-4A6E-B147-F051B35E23D4-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=226030 +DTSTART;TZID=Europe/London:20040918T124500 +SUMMARY:Arsenal 2-2 Bolton Wanderers +DTEND;TZID=Europe/London:20040918T143000 +DESCRIPTION:ARSENAL 2\nHenry 31\nPires 66\n\nBOLTON WANDERERS 2\nJaidi 6 + 3\nPederson 85\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060711T140526Z +UID:1B4A04D1-4777-46BA-8412-2D703EF4E4C2-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +DTSTART;TZID=Europe/London:20060909T150000 +SUMMARY:Arsenal - Middlesbrough +DTEND;TZID=Europe/London:20060909T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:UEFA Champions League\nOlimpiyskiy Stadion +DTSTAMP:20040604T151855Z +UID:13D0B6CF-49EB-41AC-9E81-BB32B522F1A9-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=243432 +DTSTART;TZID=Europe/London:20031021T194500 +SUMMARY:Dynamo Kyiv 2-1 Arsenal +DTEND;TZID=Europe/London:20031021T213000 +DESCRIPTION:DYNAMO KYIV 2\nShatskikh 27\nBelkevich 64\n\nARSENAL 1\nHenr + y 80\n\nUEFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20041016T161511Z +UID:2417891F-6F94-4AD1-8EF5-FB0D01CD5CF5-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=231260 +DTSTART;TZID=Europe/London:20041016T150000 +SUMMARY:Arsenal 3-1 Aston Villa +DTEND;TZID=Europe/London:20041016T164500 +DESCRIPTION:ARSENAL 3\nPires 19\, 72\nHenry 45\n\nASTON VILLA 1\nHendrie + 3\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060622T110841Z +UID:4C08120D-A096-485F-B108-DF82A6A718DE-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +DTSTART;TZID=Europe/London:20061014T150000 +SUMMARY:Arsenal - Watford +DTEND;TZID=Europe/London:20061014T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nFratton Park +DTSTAMP:20040604T145742Z +UID:05A511E4-BE81-4EDA-8C53-491E883B8B48-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:20 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=253047 +DTSTART;TZID=Europe/London:20040504T200000 +SUMMARY:Portsmouth 1-1 Arsenal +DTEND;TZID=Europe/London:20040504T214500 +DESCRIPTION:PORTSMOUTH 1\nYakubu 30\n\nARSENAL 1\nReyes 49\n\nFA Barclay + card Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Letná (Toyota Arena)\nUEFA Champions League +DTSTAMP:20051022T113140Z +UID:C10386CB-577B-40FA-B264-BB452E8F3516-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:14 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=316290 +DTSTART;TZID=Europe/London:20051018T194500 +SUMMARY:Sparta Prague 0-2 Arsenal +DTEND;TZID=Europe/London:20051018T213000 +DESCRIPTION:SPARTA PRAGUE 0\n\nARSENAL 2\nHenry 21\, 74\n(Henry breaks t + he record as Arsenal's top scorer with his 185th and 186th goal for Arse + nal)\n\nUEFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:Reebok Stadium\nFA Cup Quarter-Final +DTSTAMP:20050623T152217Z +UID:C84E4E80-C1A8-403B-A7A2-6E8FBFCA537B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=261752 +DTSTART;TZID=Europe/London:20050312T121500 +SUMMARY:Bolton 0-1 Arsenal +DTEND;TZID=Europe/London:20050312T140000 +DESCRIPTION:BOLTON WANDERERS 0\n\nARSENAL 1\nLjungberg 3\n\nFA Cup Quart + er-Final +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20060211T202910Z +UID:D4F80617-14CD-44C4-A318-1A0C77958BC0-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=362331 +DTSTART;TZID=Europe/London:20060211T150000 +SUMMARY:Arsenal 1-1 Bolton Wanderers +DTEND;TZID=Europe/London:20060211T164500 +DESCRIPTION:ARSENAL 1\nGilberto 93\n\nBOLTON WANDERERS 1\nNolan 11\n\nBa + rclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20051127T063810Z +UID:3E131558-78BD-4D53-B3C9-B6E1D8A026E7-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=328532 +DTSTART;TZID=Europe/London:20051126T150000 +SUMMARY:Arsenal 3-0 Blackburn Rovers +DTEND;TZID=Europe/London:20051126T164500 +DESCRIPTION:ARSENAL 3\nFabregas 4\nHenry 45\nVan Persie 90\n\nBLACKBURN + ROVERS 0\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Community Shield\nMillennium Stadium\, Cardiff +DTSTAMP:20040818T214707Z +UID:3C060C0E-D004-4886-808F-A0253C4C8E7C-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=218062 +DTSTART;TZID=Europe/London:20040808T150000 +SUMMARY:Arsenal 3-1 ManUtd +DTEND;TZID=Europe/London:20040808T164500 +DESCRIPTION:ARSENAL 3\nGilberto 49\nReyes 59 \nSilvestre 79 (og)\n\nMANC + HESTER UNITED 1\nSmith 54\n\nFA Community Shield +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070502T194500 +SUMMARY:Champions League semi-final 2 +UID:52A2AAC0-899A-42C8-9C9C-D761094F8E15-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +DTSTAMP:20060623T171734Z +DESCRIPTION:Champions League semi-final 2 +SEQUENCE:3 +DURATION:PT1H45M +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060704T214926Z +UID:7EF6FEA7-C59E-42E8-BD99-430CDB8A5A74-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +DTSTART;TZID=Europe/London:20070210T150000 +SUMMARY:Arsenal - Wigan Athletic +DTEND;TZID=Europe/London:20070210T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:The Stadium of Light\nBarclays Premiership +DTSTAMP:20060809T121441Z +UID:2A8C05B3-7CCE-4591-8E50-95F0AF8CF449-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:17 +DTSTART;TZID=Europe/London:20060501T171500 +SUMMARY:Sunderland 0-3 Arsenal +DTEND;TZID=Europe/London:20060501T190000 +DESCRIPTION:SUNDERLAND 0\n\nARSENAL 3\nCollins 28 (og)\nFabregas 40\nHen + ry 43\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060717T153613Z +UID:19EBD194-F2D9-406D-B1EF-985E096EF6D9-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:11 +DTSTART;TZID=Europe/London:20061202T124500 +SUMMARY:Arsenal - Tottenham +DTEND;TZID=Europe/London:20061202T143000 +DESCRIPTION:Live on Sky Sports PremPlus\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:El Madrigal\nUEFA Champions League Semi-Final 2nd Leg +DTSTAMP:20060809T121430Z +UID:CF307027-1716-4479-B75A-EE6467E30B28-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:17 +DTSTART;TZID=Europe/London:20060425T194500 +SUMMARY:Villarreal CF 0-0 Arsenal +DTEND;TZID=Europe/London:20060425T213000 +DESCRIPTION:VILLAREAL 0\n\nARSENAL 0\n\nUEFA Champions League Semi-Final + +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060623T172454Z +UID:DFE534AD-2FC2-4AA7-8D7B-8DD017EC4612-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070428T150000 +SUMMARY:Arsenal - Fulham +DTEND;TZID=Europe/London:20070428T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:UEFA Champions League Quarter-final 2nd leg\nHighbury +DTSTAMP:20040604T150211Z +UID:426D2286-0D1E-4CB5-9A79-826BE2B7F2FC-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=251919 +DTSTART;TZID=Europe/London:20040406T194500 +SUMMARY:Arsenal 1-2 Chelsea +DTEND;TZID=Europe/London:20040406T213000 +DESCRIPTION:ARSENAL 1\nReyes 45\n\nCHELSEA 2\nLampard 51\nBridge 87\n\nU + EFA Champions League quarter-final 2nd leg\nChelsea win 3-2 on aggregate + +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070217T150000 +DTEND;TZID=Europe/London:20070217T164500 +SUMMARY:F.A. Cup 5th round +UID:32F08781-3022-44AB-8D66-84E55B90B00C-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +DTSTAMP:20060623T172558Z +DESCRIPTION:F.A. Cup 5th round +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nCarling Cup 4th round +DTSTAMP:20051130T071822Z +UID:A4A1C7D0-7AC8-45A8-888F-B41E30301ED2-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:17 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=329487 +DTSTART;TZID=Europe/London:20051129T194500 +SUMMARY:Arsenal 3-0 Reading +DTEND;TZID=Europe/London:20051129T213000 +DESCRIPTION:ARSENAL 3\nReyes 12\nVan Persie 42\nLupoli 65\n\nREADING 0\n + \nCarling Cup 4th round +END:VEVENT +BEGIN:VEVENT +LOCATION:Millennium Stadium\, Cardiff\nFA Cup Semi-Final +DTSTAMP:20050417T200307Z +UID:70094E6E-6783-4B69-8E16-14FDDA94C047-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=269980 +DTSTART;TZID=Europe/London:20050416T121500 +SUMMARY:Arsenal 3-0 Blackburn Rovers +DTEND;TZID=Europe/London:20050416T140000 +DESCRIPTION:ARSENAL 3\nPires 42\nVan Persie 86\, 90\n\nBLACKBURN ROVERS + 0\n\nFA Cup Semi-Final +END:VEVENT +BEGIN:VEVENT +LOCATION:Anfield\nBarclays Premiership +DTSTAMP:20060215T060540Z +UID:C5D76CAF-567F-44B3-BCCF-9DBA8BECEE67-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:49 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=363382 +DTSTART;TZID=Europe/London:20060214T200000 +SUMMARY:Liverpool 1-0 Arsenal +DTEND;TZID=Europe/London:20060214T214500 +DESCRIPTION:LIVERPOOL 1\nGarcia 87\n\nARSENAL 0\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Amsterdam Tournament\nArenA Amsterdam +DTSTAMP:20060414T115522Z +UID:D0FD6050-D64C-436F-8558-735C4CF9BFFD-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=216699 +DTSTART;TZID=Europe/Oslo:20040801T204500 +SUMMARY:Ajax 0-0 Arsenal +DTEND;TZID=Europe/Oslo:20040801T223000 +DESCRIPTION:AJAX 0\n\nARSENAL 0\n\nPre-season friendly\nAmsterdam Tourna + ment +END:VEVENT +BEGIN:VEVENT +LOCATION:Reebok Stadium\nFA Barclays Premiership +DTSTAMP:20050115T194414Z +UID:897F94A8-1A95-4E30-970A-30807951D575-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=249732 +DTSTART;TZID=Europe/London:20050115T171500 +SUMMARY:Bolton Wanderers 1-0 Arsenal +DTEND;TZID=Europe/London:20050115T190000 +DESCRIPTION:BOLTON WANDERERS 1\nGiannakopoulos 41\n\nARSENAL 0\n\nFA Bar + clays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nCarling Cup Semi-Final 2nd Leg +DTSTAMP:20060129T004945Z +UID:22F348B2-0194-45AC-8247-39E621BCFEA7-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:20 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=356504 +DTSTART;TZID=Europe/London:20060124T194500 +SUMMARY:Arsenal 2-1 Wigan Athletic +DTEND;TZID=Europe/London:20060124T213000 +DESCRIPTION:ARSENAL 2\nHenry 65\nVan Persie 108\n\nWIGAN ATHLETIC 1\nRob + erts 120\n\n(agg. 2-2 Wigan wins on away goals)\n\nCarling Cup Semi-Fina + l +END:VEVENT +BEGIN:VEVENT +LOCATION:Villa Park\nBarclays Premiership +DTSTAMP:20051231T150645Z +UID:48442716-45AD-4A01-8C72-A0D4D85B2C38-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:14 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=346483 +DTSTART;TZID=Europe/London:20051231T124500 +SUMMARY:Aston Villa 0-0 Arsenal +DTEND;TZID=Europe/London:20051231T143000 +DESCRIPTION:ASTON VILLA 0\n\nARSENAL 0\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Maksimir Stadium\, Croatia +DTSTAMP:20060809T113209Z +UID:E186DB7A-0894-448A-89BE-0B0BE1AB626E-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:18 +DTSTART;TZID=Europe/London:20060808T200500 +SUMMARY:Dinamo Zagreb 0-3 Arsenal +DTEND;TZID=Europe/London:20060808T215000 +DESCRIPTION:DINAMO ZAGREB 0\n\nARSENAL 3\nFabregas 63\, 79\nVan Persie 6 + 4\n\nUEFA Champions League 3rd Qualification round\, leg 1 +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070409T150000 +LOCATION:St. James' Park +DTEND;TZID=Europe/London:20070409T164500 +SUMMARY:Newcastle Utd - Arsenal +UID:8EB7AC23-EA1E-4532-8918-EF495E82405F-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +DTSTAMP:20060623T171234Z +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nJudenburg (Austria) +DTSTAMP:20040726T195042Z +UID:1F0EFAA8-F4BF-493E-8812-95A5F56BE2D8-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=208968 +DTSTART;TZID=Europe/Oslo:20040724T180000 +SUMMARY:Grazer AK 1-2 Arsenal +DTEND;TZID=Europe/Oslo:20040724T194500 +DESCRIPTION:GRAZER AK 1\nSkoro 24\n\nARSENAL 2\nBergkamp 6\nVan Persie 5 + 7\n\nPre-season friendly +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070110T200000 +DTEND;TZID=Europe/London:20070110T214500 +SUMMARY:Carling Cup Semi-Final (1) +UID:37140F55-2259-4268-A255-20837322733C-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +DTSTAMP:20060623T165804Z +DESCRIPTION:Carling Cup Semi-final (1) +END:VEVENT +BEGIN:VEVENT +LOCATION:Goodison Park\nBarclays Premiership +DTSTAMP:20060121T171925Z +UID:17A2E135-14AC-4A63-B317-7F6DC3C7C374-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:15 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=355324 +DTSTART;TZID=Europe/London:20060121T124500 +SUMMARY:Everton 1-0 Arsenal +DTEND;TZID=Europe/London:20060121T143000 +DESCRIPTION:EVERTON 1\nBeattie 13\n\nARSENAL 0\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Amsterdam Arena\nPre-Season Friendly +DTSTAMP:20050731T191357Z +UID:66FECE64-263F-4C68-B76A-D3D60AE02240-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:18 +DTSTART;TZID=Europe/London:20050731T173000 +SUMMARY:Porto 1-2 Arsenal +DTEND;TZID=Europe/London:20050731T191500 +DESCRIPTION:PORTO 1\nLisandro 37\n\nARSENAL 2\nLjungberg 49\, 58\n\nAmst + erdam Tournament\nPre-Season Friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:The Olympic Stadium\, Munich\nUEFA Champions League +DTSTAMP:20050222T220730Z +UID:8AD7015D-6C0C-4D33-BB7A-6EC49CD3C735-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=257563 +DTSTART;TZID=Europe/London:20050222T194500 +SUMMARY:Bayern München 3-1 Arsenal +DTEND;TZID=Europe/London:20050222T213000 +DESCRIPTION:BAYERN MUNICH 3\nPizarro 4\, 58\nSalihamidzic 65\n\nARSENAL + 1\nToure 88\n\nUEFA Champions League\nKnockout\, 1st leg +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T150155Z +UID:D4802891-6EC9-4964-975C-1B977B7C4FF1-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234864 +DTSTART;TZID=Europe/London:20040409T123000 +SUMMARY:Arsenal 4-2 Liverpool +DTEND;TZID=Europe/London:20040409T141500 +DESCRIPTION:ARSENAL 4\nHenry 31\, 50\, 78\nPires 49\n\nLIVERPOOL 2\nHyyp + ia 5\nOwen 42\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20060809T114806Z +UID:50E3810D-B9C2-4DB7-8FE1-B8CD479D4B79-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:14 +URL;VALUE=URI:http://www.arsenal.com/matchreport.asp?thisNav=first%20tea + m&fxid=291996&cpid=703&clid=4421 +DTSTART;TZID=Europe/London:20060312T160000 +SUMMARY:Arsenal 2-1 Liverpool +DTEND;TZID=Europe/London:20060312T174500 +DESCRIPTION:ARSENAL 2\nHenry 21\, 84\n\nLIVERPOOL 1\nLuis García 75\n\nB + arclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nUnderhill Stadium\, Barnet +DTSTAMP:20040718T171057Z +UID:5D8C9C3B-72DA-48C7-AAAE-62A382C1A9F9-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:12 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=214145 +DTSTART;TZID=Europe/London:20040717T150000 +SUMMARY:Barnet 1-10 Arsenal +DTEND;TZID=Europe/London:20040717T164500 +DESCRIPTION:BARNET 1\nGraham 12\n\nARSENAL 10\nReyes 19\, 21\, 42\nvan P + ersie 29\nBergkamp 44\, 67\nJeffers 53\, 55\, 64\nOwusu-Abeyie 70\n\nPre + -season friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060622T110941Z +UID:32AC335F-D09A-446B-A321-BC7A56173D5C-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +DTSTART;TZID=Europe/London:20061216T150000 +SUMMARY:Arsenal - Portsmouth +DTEND;TZID=Europe/London:20061216T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Vicarage Road +DTSTAMP:20060704T214454Z +UID:157D0C10-02AA-4459-A812-4ED052F13E0D-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +DTSTART;TZID=Europe/London:20061226T173000 +SUMMARY:Watford - Arsenal +DTEND;TZID=Europe/London:20061226T191500 +DESCRIPTION:Live on Sky Sports\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Carling Cup 3rd Round\nHighbury +DTSTAMP:20040604T151917Z +UID:29050B7B-BC7C-4863-BE79-74E3BD5045CA-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=246035 +DTSTART;TZID=Europe/London:20031028T194500 +SUMMARY:Arsenal 1(9)-1(8) Rotherham United +DTEND;TZID=Europe/London:20031028T213000 +DESCRIPTION:ARSENAL 1(9)\nJeremie Aliadiere 11\n\nROTHERHAM UNITED 1(8)\ + nDarren Byfield 90\nMike Pollitt s.o. 100\n\nCarling Cup 3rd Round +END:VEVENT +BEGIN:VEVENT +LOCATION:Old Trafford\nFA Barclays Premiership +DTSTAMP:20060809T113940Z +UID:4BC6EFC3-2F24-4242-8C36-58DE1B6CCE2F-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:12 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=232920 +DTSTART;TZID=Europe/London:20041024T160500 +SUMMARY:Manchester Utd 2-0 Arsenal +DTEND;TZID=Europe/London:20041024T175000 +DESCRIPTION:MANCHESTER UNITED 2\nVan Nistelrooy 73 (pen)\nRooney 90\n\nA + RSENAL 0\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nVilla Park +DTSTAMP:20060809T122040Z +UID:370B96EE-D9DB-4D94-BDA6-F26AA60EEB7E-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:3 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235054 +DTSTART;TZID=Europe/London:20040118T140000 +SUMMARY:Aston Villa 0-2 Arsenal +DTEND;TZID=Europe/London:20040118T154500 +DESCRIPTION:ASTON VILLA 0\n\nARSENAL 2\nHenry 28\, 52 (pen)\n\nFA Barcla + ycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Meadow Lodge\, Broughinge Road\nPre-Season Friendly +DTSTAMP:20060809T122643Z +UID:2A9156A9-4218-4037-9DCA-9FD4B1121101-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:25 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=297925 +DTSTART;TZID=Europe/London:20050810T193000 +SUMMARY:Boreham Wood 2-6 Arsenal XI +DTEND;TZID=Europe/London:20050810T211500 +DESCRIPTION:BOREHAM WOOD 2\nArcher 55\nCooper 66 (pen)\n\nARSENAL XI 6\n + Van Persie 6\, 14\nReyes 33 (pen)\, 45\, 71 (pen)\nPires 39\n\nPre-Seaso + n Friendly +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070411T194500 +SUMMARY:Champions League quarter-final 2 +UID:1B5492F8-2E40-4667-9225-3432559E98BA-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +DTSTAMP:20060623T171323Z +DESCRIPTION:Champions League quarter-final 2 +SEQUENCE:3 +DURATION:PT1H45M +END:VEVENT +BEGIN:VEVENT +LOCATION:Reebok Stadium\nFA Cup 4th Round +DTSTAMP:20060129T005104Z +UID:6EA00A92-F433-4EE9-AD9E-6EF8A52D4E00-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:17 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=357676 +DTSTART;TZID=Europe/London:20060128T174000 +SUMMARY:Bolton 1-0 Arsenal +DTEND;TZID=Europe/London:20060128T192500 +DESCRIPTION:BOLTON WANDERERS 1\nStelios 84\n\nARSENAL 0\n\nFA Cup 4th Ro + und +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070501T194500 +SUMMARY:Champions League semi-final 2 +UID:A7A4F3CC-AAE6-4B05-BA75-EE65C74C0A05-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +DTSTAMP:20060623T171740Z +DESCRIPTION:Champions League semi-final 2 +SEQUENCE:3 +DURATION:PT1H45M +END:VEVENT +BEGIN:VEVENT +LOCATION:The Hawthorns\nFA Barclays Premiership +DTSTAMP:20050503T142456Z +UID:53BCBAC7-C3E0-4B79-997F-40B9580E3FCD-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:11 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=273320 +DTSTART;TZID=Europe/London:20050502T200000 +SUMMARY:West Bromwich Albion 0-2 Arsenal +DTEND;TZID=Europe/London:20050502T214500 +DESCRIPTION:WEST BROMWICH ALBION 0\n\nARSENAL 2\nVan Persie 66\nEdu 90\n + \nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Rebook Stadium +DTSTAMP:20060717T153551Z +UID:205B447A-02C0-4546-B73A-D186D76E6D7B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +DTSTART;TZID=Europe/London:20061125T171500 +SUMMARY:Bolton Wanderers - Arsenal +DTEND;TZID=Europe/London:20061125T190000 +DESCRIPTION:Live on Sky Sports PremPlus\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Cup 5th round +DTSTAMP:20050220T070742Z +UID:792614F3-3B1A-4D78-8001-FBFDFF33A8B5-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=256784 +DTSTART;TZID=Europe/London:20050219T123000 +SUMMARY:Arsenal 1-1 Sheffield Utd +DTEND;TZID=Europe/London:20050219T141500 +DESCRIPTION:ARSENAL 1\nPires 78\n\nSHEFFIELD UNITED 1\nGray 90 (pen)\n\n + FA Cup 5th round +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060622T110947Z +UID:E674357E-C2E4-409E-93CE-1C18FFA677F3-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +DTSTART;TZID=Europe/London:20061223T150000 +SUMMARY:Arsenal - Blackburn Rovers +DTEND;TZID=Europe/London:20061223T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20061025T200000 +DTEND;TZID=Europe/London:20061025T214500 +SUMMARY:Carling Cup 3rd round +UID:EA2700D9-0FD4-431C-8C5F-38E54619DECD-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +DTSTAMP:20060622T104844Z +DESCRIPTION:Carling Cup 3rd round +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20060809T121242Z +UID:D4479C5C-AA03-4337-9B17-C456D99DCB62-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +DTSTART;TZID=Europe/London:20060401T150000 +SUMMARY:Arsenal 5-0 Aston Villa +DTEND;TZID=Europe/London:20060401T164500 +DESCRIPTION:ARSENAL 5\nAdebayor 18\nHenry 25\, 46\nVan Persie 72\nDiaby + 81\n\nASTON VILLA 0\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Stadium of Light\nCarling Cup 3rd round +DTSTAMP:20051026T130414Z +UID:45C56563-C9C8-43ED-B282-217844AF8744-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:12 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=319640 +DTSTART;TZID=Europe/London:20051025T194500 +SUMMARY:Sunderland 0-3 Arsenal +DTEND;TZID=Europe/London:20051025T213000 +DESCRIPTION:SUNDERLAND 0\n\nARSENAL 3\nEboue 61\nVan Persie 67 (pen)\, 8 + 7\n\nCarling Cup 3rd round +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T150452Z +UID:1F9E3A34-42A9-47C9-84C5-DCA4168BE002-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235024 +DTSTART;TZID=Europe/London:20040228T150000 +SUMMARY:Arsenal 2-1 Charlton Athletic +DTEND;TZID=Europe/London:20040228T164500 +DESCRIPTION:ARSENAL 2\nPires 2\nHenry 4\n\nCHARLTON 1\nJensen 59\n\nFA B + arclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T150741Z +UID:1159A274-CE6A-476A-8E7C-1CFE18881F59-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235044 +DTSTART;TZID=Europe/London:20040110T150000 +SUMMARY:Arsenal 4-1 Middlesbrough +DTEND;TZID=Europe/London:20040110T164500 +DESCRIPTION:ARSENAL 4\nHenry 38 (pen)\nQuedrue 45 (o.g.)\nPires 57\nLjun + gberg 68\n\nMIDDLESBROUGH 1\nMaccarone 86 (pen)\n\nFA Barclaycard Premie + rship +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20050123T200851Z +UID:4098B064-EE52-48BB-8CF2-111CB788DBD6-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:11 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=250892 +DTSTART;TZID=Europe/London:20050123T160500 +SUMMARY:Arsenal 1-0 Newcastle +DTEND;TZID=Europe/London:20050123T175000 +DESCRIPTION:ARSENAL 1\nBergkamp 19\n\nNEWCASTLE UNITED 0\n\nFA Barclays + Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20041229T220436Z +UID:573F2D10-2364-4D2E-9F87-E70556231A45-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=245320 +DTSTART;TZID=Europe/London:20041226T130000 +SUMMARY:Arsenal 2-0 Fulham +DTEND;TZID=Europe/London:20041226T144500 +DESCRIPTION:ARSENAL 2\nHenry 12\nPires 71\n\nFULHAM 0\n\nFA Barclays Pre + miership +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nFreethiel Stadium\, Beveren\, Belgium +DTSTAMP:20040604T151539Z +UID:A3BE1B50-F69A-4375-9EFC-300CCE7FE5B0-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +DTSTART;TZID=Europe/London:20030803T170000 +SUMMARY:KSK Beveren 2-2 Arsenal XI +DTEND;TZID=Europe/London:20030803T184500 +DESCRIPTION:KSK BEVEREN 2\nConstant Kaïper 85\nGilles Yapi Yapo 88\n\nAR + SENAL XI 2\nNicky Nicolau 55\nQuincy Owusu Abeyie 76\n\nPre-season frien + dly +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:Stadio Delle Alpi\nUEFA Champions League Quarter-Final 2nd Leg +DTSTAMP:20060809T121304Z +UID:522D73F1-4887-4556-A62C-EBEF99F7E556-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +DTSTART;TZID=Europe/London:20060405T194500 +SUMMARY:Juventus 0-0 Arsenal +DESCRIPTION:JUVENTUS 0\n\nARSENAL 0\n\n(Arsenal wins 2-0 on aggregate)\n + \nUEFA Champions League Quarter-Final +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20060809T121717Z +UID:0AC7A6F9-CDD8-4635-B760-2914CB284B7F-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:15 +DTSTART;TZID=Europe/London:20060507T150000 +SUMMARY:Arsenal 4-2 Wigan Athletic +DTEND;TZID=Europe/London:20060507T164500 +DESCRIPTION:ARSENAL 4\nPires 8\nHenry 35\, 56\, 76 (pen)\n\nWIGAN ATHLET + IC 2\nScharner 10\nThompson 34\n\nBarclays Premiership\n\nThe final matc + h at Highbury!\n\nChelsea 38 29-4-5 72-22 91\nMan Utd 38 25- + 8-5 72-34 83\nLiverpool 38 25-7-6 57-25 82\nArsenal 38 20-7-1 + 1 68-31 67\nTottenham 38 18-11-9 53-38 65 +END:VEVENT +BEGIN:VEVENT +LOCATION:St James' Park\nFA Barclays Premiership +DTSTAMP:20041229T220527Z +UID:497FA544-3DFC-4EB7-BB1F-C540C8A4748B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +DTSTART;TZID=Europe/London:20041229T200000 +SUMMARY:Newcastle Utd 0-1 Arsenal +DTEND;TZID=Europe/London:20041229T214500 +DESCRIPTION:NEWCASTLE UNITED 0\n\nARSENAL 1\nVieira 45\n\nFA Barclays Pr + emiership +END:VEVENT +BEGIN:VEVENT +LOCATION:City of Manchester Stadium\nFA Barclays Premiership +DTSTAMP:20040925T181218Z +UID:2B9C752E-C90B-47E6-B890-520A90AD2866-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=227192 +DTSTART;TZID=Europe/London:20040925T150000 +SUMMARY:Manchester City 0-1 Arsenal +DTEND;TZID=Europe/London:20040925T164500 +DESCRIPTION:MANCHESTER CITY 0\n\nARSENAL 1\nCole 14\n\nFA Barclays Premi + ership +END:VEVENT +BEGIN:VEVENT +LOCATION:Riverside +DTSTAMP:20051213T180511Z +UID:72978E0E-68EA-4CA6-B9F7-3E574DDCB450-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:13 +URL;VALUE=URI:http://www.arsenal.com/sportsappcontroller.jsp?command=for + wardOnly&nextPage=/matchday/reports/200102/middlesbrough18082001.jsp +STATUS:CONFIRMED +DTSTART;TZID=Europe/London:20010818T150000 +SUMMARY:Middlesbrough 0-4 Arsenal +DTEND;TZID=Europe/London:20010818T164500 +DESCRIPTION:MIDDLESBROUGH 0\n Ugo Ehiogu s.o. 85\n\n ARSENAL 4\n Thierry + Henry 43\n Ray Parlour s.o. 51\n Robert Pires 85 (pen)\n Dennis Bergkam + p 87\, 88\n +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070220T194500 +DTEND;TZID=Europe/London:20070220T213000 +SUMMARY:Champions League knockout round 1 +UID:52155DF8-6458-4074-B277-EFCD4B37AD44-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +DTSTAMP:20060623T170502Z +DESCRIPTION:Champions League knockout round 1 +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nRiverside Stadium +DTSTAMP:20040604T151646Z +UID:4B967B52-4C17-4C3E-A923-D587ED7596D1-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234919 +DTSTART;TZID=Europe/London:20030824T160500 +SUMMARY:Middlesbrough 0-4 Arsenal +DTEND;TZID=Europe/London:20030824T175000 +DESCRIPTION:MIDDLESBROUGH 0\n\nARSENAL 4\nHenry 5\nGilberto 13\nWiltord + 22\, 60\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nGoodison Park +DTSTAMP:20040604T150750Z +UID:72C792B1-55E9-4A51-AD60-28E30464FA0D-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235037 +DTSTART;TZID=Europe/London:20040107T200000 +SUMMARY:Everton 1-1 Arsenal +DTEND;TZID=Europe/London:20040107T214500 +DESCRIPTION:EVERTON 1\nRadzinski 75\n\nARSENAL 1\nKanu 29\n\nFA Barclayc + ard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Fratton Park +DTSTAMP:20060623T172355Z +UID:894B1BF5-97DA-4B14-8B31-3ABC6D0EA6FD-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070513T150000 +SUMMARY:Portsmouth - Arsenal +DTEND;TZID=Europe/London:20070513T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:White Hart Lane\nBarclays Premiership +DTSTAMP:20051029T181848Z +UID:14E6270C-5BB7-4D60-9580-616D767992AD-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:11 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=320563 +DTSTART;TZID=Europe/London:20051029T130000 +SUMMARY:Tottenham Hotspur 1-1 Arsenal +DTEND;TZID=Europe/London:20051029T144500 +DESCRIPTION:TOTTENHAM HOTSPUR 1\nKing 17\n\nARSENAL 1\nPires 77\n\nBarcl + ays Premiership +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070410T194500 +SUMMARY:Champions League quarter-final 2 +UID:D1F4686F-B73D-4E8C-AA3D-8F48900407DE-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +DTSTAMP:20060623T171314Z +DESCRIPTION:Champions League quarter-final 2 +SEQUENCE:3 +DURATION:PT1H45M +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20041204T170053Z +UID:FA62CA4A-3B2D-407A-AC23-D02F996019B4-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=241472 +DTSTART;TZID=Europe/London:20041204T150000 +SUMMARY:Arsenal 3-0 Birmingham City +DTEND;TZID=Europe/London:20041204T164500 +DESCRIPTION:ARSENAL 3\nPires 33\nHenry 79\nHenry 86\n\nBIRMINGHAM CITY 0 + \n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20060809T121347Z +UID:689F407D-FF0B-4C03-808C-0B0DAA92F673-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +DTSTART;TZID=Europe/London:20060415T150000 +SUMMARY:Arsenal 3-1 West Bromwich Albion +DTEND;TZID=Europe/London:20060415T164500 +DESCRIPTION:ARSENAL 3\nHleb 44\nPires 76\nBergkamp 89\n\nWEST BROMWICH A + LBION 1\nQuashie 72\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nElland Road +DTSTAMP:20040604T151928Z +UID:7CEC9125-0F28-459A-94B2-719E36EFB503-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235137 +DTSTART;TZID=Europe/London:20031101T150000 +SUMMARY:Leeds United 1-4 Arsenal +DTEND;TZID=Europe/London:20031101T164500 +DESCRIPTION:LEEDS UNITED 1\nAlan Smith 64\n\nARSENAL 4\nThierry Henry 8\ + , 33\nRobert Pires 18\nGilberto 50\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20041212T201820Z +UID:7BD47DF1-3D25-405C-96E3-53143F3124C9-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=242880 +DTSTART;TZID=Europe/London:20041212T160500 +SUMMARY:Arsenal 2-2 Chelsea +DTEND;TZID=Europe/London:20041212T175000 +DESCRIPTION:ARSENAL 2\nHenry 2\, 29\n\nCHELSEA 2\nTerry 17\nGudjohnsen 4 + 6\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20061108T200000 +DTEND;TZID=Europe/London:20061108T214500 +SUMMARY:Carling Cup 4th round +UID:D55DACF9-4E4A-4E06-8FA3-9BE0D543098F-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +DTSTAMP:20060622T105044Z +DESCRIPTION:Carling Cup 4th round +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nMaribor (Slovenia) +DTSTAMP:20040726T195100Z +UID:DD833159-DEDD-4E8D-A442-56BD95BB8B31-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=215261 +DTSTART;TZID=Europe/Oslo:20040722T193000 +SUMMARY:NK Maribor 2-3 Arsenal +DTEND;TZID=Europe/Oslo:20040722T211500 +DESCRIPTION:NK MARIBOR 2\nRakic 62\, 86\n\nARSENAL 3\nBergkamp 4\nAliadi + ere 16\nvan Persie 84\n\nPre-season friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nUnderhill\, Barnet +DTSTAMP:20040604T151411Z +UID:ECE59CCB-BA5C-4F69-81DA-09CB5DBAE95B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=241305 +DTSTART;TZID=Europe/London:20030719T150000 +SUMMARY:Barnet 0-0 Arsenal +DTEND;TZID=Europe/London:20030719T164500 +DESCRIPTION:BARNET 0\n\nARSENAL 0\n\nPre-season friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:JJB Stadium\nCarling Cup Semi-Final 1st Leg +DTSTAMP:20060111T003811Z +UID:B1F22B2D-EDA2-4F57-A861-317625F5E68C-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:20 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=351860 +DTSTART;TZID=Europe/London:20060110T194500 +SUMMARY:Wigan Athletic 1-0 Arsenal +DTEND;TZID=Europe/London:20060110T213000 +DESCRIPTION:WIGAN ATHLETIC 1\nScharner 77\n\nARSENAL 0\n\nCarling Cup Se + mi-Final +END:VEVENT +BEGIN:VEVENT +LOCATION:Carrow Road\nFA Barclays Premiership +DTSTAMP:20040911T165657Z +UID:FC8E3299-F87C-48F1-810D-3FD04D379FB0-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=222332 +DTSTART;TZID=Europe/London:20040828T171500 +SUMMARY:Norwich City 1-4 Arsenal +DTEND;TZID=Europe/London:20040828T190000 +DESCRIPTION:NORWICH CITY 1\nHuckerby 50 (pen)\n\nARSENAL 4\nReyes 22\nHe + nry 36\nPires 40\nBergkamp 90\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Cup 6th Round\nFratton Park +DTSTAMP:20040604T150343Z +UID:A3533E11-D054-4E19-B2CC-B7F0A4C4E9D3-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:11 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=250685 +DTSTART;TZID=Europe/London:20040306T180000 +SUMMARY:Portsmouth 1-5 Arsenal +DTEND;TZID=Europe/London:20040306T194500 +DESCRIPTION:PORTSMOUTH 1\nSheringham 90\n\nARSENAL 5\nHenry 25\, 50\nLju + ngberg 43\, 57\nToure 45\n\nFA Cup 6th Round +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nEwood Park +DTSTAMP:20040604T150316Z +UID:442C8C92-8482-466E-9993-8D4E326B2FA0-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235075 +DTSTART;TZID=Europe/London:20040313T150000 +SUMMARY:Blackburn Rovers 0-2 Arsenal +DTEND;TZID=Europe/London:20040313T164500 +DESCRIPTION:BLACKBURN ROVERS 0\n \nARSENAL 2\nHenry 56\nPires 87\n\nFA + Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:White Hart Lane +DTSTAMP:20060623T172341Z +UID:9713C2DE-37D8-451B-A358-BBC748AD850D-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070421T150000 +SUMMARY:Tottenham - Arsenal +DTEND;TZID=Europe/London:20070421T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Anfield +DTSTAMP:20060623T172330Z +UID:EC355FCA-B9D6-4269-8B24-86FB5B2107E0-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070331T150000 +SUMMARY:Liverpool - Arsenal +DTEND;TZID=Europe/London:20070331T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:Highbury\nUEFA Champions League +DTSTAMP:20050915T082543Z +UID:9DF1956F-858F-4D58-BF87-A6FA9700BA52-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=307637 +DTSTART;TZID=Europe/London:20050914T194500 +SUMMARY:Arsenal 2-1 FC Thun +DESCRIPTION:ARSENAL 2\nGilberto 51\nBergkamp 90\n\nFC THUN 1\nFerreira 5 + 3 \n\nUEFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:Reebok Stadium +DTSTAMP:20060623T165849Z +UID:B5BD4095-3C40-45D9-B4DF-20BBCC2D3D9E-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070113T150000 +SUMMARY:Blackburn Rovers - Arsenal +DTEND;TZID=Europe/London:20070113T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20040826T080023Z +UID:01E2121F-041C-4232-B922-9386227E81C4-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=221872 +DTSTART;TZID=Europe/London:20040825T194500 +SUMMARY:Arsenal 3-0 Blackburn Rovers +DTEND;TZID=Europe/London:20040825T213000 +DESCRIPTION:ARSENAL 3\nHenry 50\nFabregas 58\nReyes 79\n\nBLACKBURN ROVE + RS 0\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T151653Z +UID:A1568B33-EE9F-4082-BEC7-6B72DAC08F0D-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234924 +DTSTART;TZID=Europe/London:20030827T194500 +SUMMARY:Arsenal 2-0 Aston Villa +DTEND;TZID=Europe/London:20030827T213000 +DESCRIPTION:ARSENAL 2\nCampbell 57\nHenry 90\n\nASTON VILLA 0\n\nFA Barc + laycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Riverside Stadium +DTSTAMP:20060623T172308Z +UID:26BEA88C-A703-4B58-BC90-0CC7D1DD31DF-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070203T150000 +SUMMARY:Middlesbrough - Arsenal +DTEND;TZID=Europe/London:20070203T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Cup 3rd Round +DTSTAMP:20060107T223140Z +UID:97C0F4C8-8966-44BC-9632-92F172E00D4B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:16 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=350760 +DTSTART;TZID=Europe/London:20060107T130000 +SUMMARY:Arsenal 2-1 Cardiff City +DTEND;TZID=Europe/London:20060107T144500 +DESCRIPTION:ARSENAL 2\nPires 6\, 18\n\nCARDIFF CITY 1\nJerome 86\n\nFA C + up 3rd Round +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20050509T142242Z +UID:9B91852C-9DCF-4206-9BCF-64DFCDE45E85-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:11 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=274644 +DTSTART;TZID=Europe/London:20050508T160500 +SUMMARY:Arsenal 3-1 Liverpool +DTEND;TZID=Europe/London:20050508T175000 +DESCRIPTION:ARSENAL 3\nPires 25\nReyes 29\nFabregas 90\n\nLIVERPOOL 1\nG + errard 51\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070403T194500 +DTEND;TZID=Europe/London:20070403T213000 +SUMMARY:Champions League quarter-final 1 +UID:C54107A9-DA6B-42F6-AEB9-52E0897774A5-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +DTSTAMP:20060623T171056Z +DESCRIPTION:Champions League quarter-final 1 +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Cup semi-final\nVilla Park +DTSTAMP:20040604T150235Z +UID:651D5D1B-199C-44B7-B8CA-4DB1E816D8CE-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=251863 +DTSTART;TZID=Europe/London:20040403T120000 +SUMMARY:Arsenal 0-1 Manchester Utd +DTEND;TZID=Europe/London:20040403T134500 +DESCRIPTION:ARSENAL 0\n\nMANCHESTER UTD 1\nScholes 32\n\nFA Cup semi-fin + al\n +END:VEVENT +BEGIN:VEVENT +LOCATION:Riverside Stadium\nFA Barclays Premiership +DTSTAMP:20050410T073659Z +UID:4CD548C4-C06E-4709-B0B5-47D309E77AFE-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=268765 +DTSTART;TZID=Europe/London:20050409T150000 +SUMMARY:Middlesbrough 0-1 Arsenal +DTEND;TZID=Europe/London:20050409T164500 +DESCRIPTION:MIDDLESBROUGH 0\n\nARSENAL 1\nPires 73\n\nFA Barclays Premie + rship +END:VEVENT +BEGIN:VEVENT +LOCATION:Stade de Suisse\nUEFA Champions League +DTSTAMP:20051122T224142Z +UID:AE260A19-3BA3-46E0-B060-2AB0502FD2D0-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:12 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=326177 +DTSTART;TZID=Europe/London:20051122T194500 +SUMMARY:FC Thun 0-1 Arsenal +DTEND;TZID=Europe/London:20051122T213000 +DESCRIPTION:FC THUN 0\n\nARSENAL 1\nPires 88 (pen)\n\nUEFA Champions Lea + gue +END:VEVENT +BEGIN:VEVENT +LOCATION:Apostolos Nikolaidis Stadium\nUEFA Champions League +DTSTAMP:20041020T210440Z +UID:44B78CE2-0B08-47BD-8A44-7FC8512C7296-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=232660 +DTSTART;TZID=Europe/London:20041020T194500 +SUMMARY:Panathinaikos 2-2 Arsenal +DTEND;TZID=Europe/London:20041020T213000 +DESCRIPTION:PANATHINAIKOS 2\nGonzalez 65\nOlisadebe 81\n\nARSENAL 2\nLju + ngberg 17\nHenry 74\n\nUEFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:Upton Park +DTSTAMP:20060704T214300Z +UID:BBD1F297-E666-4847-8177-168652487E1E-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:13 +DTSTART;TZID=Europe/London:20061105T133000 +SUMMARY:West Ham Utd - Arsenal +DTEND;TZID=Europe/London:20061105T151500 +DESCRIPTION:Live on Sky Sports\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nThe Valley +DTSTAMP:20040604T151907Z +UID:A9E5A5D3-5BA6-4E23-B072-DB80657F5602-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235198 +DTSTART;TZID=Europe/London:20031026T140000 +SUMMARY:Charlton Athletic 1-1 Arsenal +DTEND;TZID=Europe/London:20031026T154500 +DESCRIPTION:CHARLTON ATHLETIC 1\nPaolo di Canio 27 (pen)\n\nARSENAL 1\nT + hierry Henry 39\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060622T110850Z +UID:3DC9077C-ADE0-4AD4-8900-85E58FBB7513-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +DTSTART;TZID=Europe/London:20061028T150000 +SUMMARY:Arsenal - Everton +DTEND;TZID=Europe/London:20061028T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20060117T200554Z +UID:3F0EFA88-F26C-46DF-A5EA-35F1C0B97953-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:12 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=353089 +DTSTART;TZID=Europe/London:20060114T150000 +SUMMARY:Arsenal 7-0 Middlesbrough +DTEND;TZID=Europe/London:20060114T164500 +DESCRIPTION:ARSENAL 7\nHenry 20\, 30\, 68\nSenderos 22\nPires 47\nGilber + to 59\nHleb 84\n\nMIDDLESBROUGH 0\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nSt. James' Park +DTSTAMP:20040604T150145Z +UID:382B585F-8359-4082-BDD5-11D1991347CF-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234880 +DTSTART;TZID=Europe/London:20040411T160500 +SUMMARY:Newcastle Utd 0-0 Arsenal +DTEND;TZID=Europe/London:20040411T175000 +DESCRIPTION:NEWCASTLE 0\n\nARSENAL 0\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Philips Stadion\nUEFA Champions League +DTSTAMP:20041124T214054Z +UID:85BB0787-0CFA-4258-8465-3F41309293E6-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +DTSTART;TZID=Europe/London:20041124T194500 +SUMMARY:PSV Eindhoven 1-1 Arsenal +DTEND;TZID=Europe/London:20041124T213000 +DESCRIPTION:PSV EINDHOVEN 1\nOoijer 8\n\nARSENAL 1\nHenry 31\n\nUEFA Cha + mpions League +END:VEVENT +BEGIN:VEVENT +LOCATION:The Valley +DTSTAMP:20060622T110239Z +UID:90619B46-7496-4450-B30C-49FABCB4A0FF-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +DTSTART;TZID=Europe/London:20060930T150000 +SUMMARY:Charlton Athletic - Arsenal +DTEND;TZID=Europe/London:20060930T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nUEFA Champions League Quarter-Final 1st Leg +DTSTAMP:20060809T121227Z +UID:EE9D710E-2EE4-4106-9CA3-BBC363FEAB82-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:16 +DTSTART;TZID=Europe/London:20060328T194500 +SUMMARY:Arsenal 2-0 Juventus +DTEND;TZID=Europe/London:20060328T213000 +DESCRIPTION:ARSENAL 2\nFabregas 40\nHenry 69\n\nJUVENTUS 0\n\nUEFA Champ + ions League Quarter-Final +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070310T150000 +DTEND;TZID=Europe/London:20070310T164500 +SUMMARY:F.A. Cup 6th round +UID:E6958D10-786F-479D-962E-AF00388FC773-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +DTSTAMP:20060623T172621Z +DESCRIPTION:F.A. Cup 6th round +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:Emirates Stadium +DTSTAMP:20060825T090844Z +UID:EF8B2B6B-1A75-4DBB-9C93-D4DA34D639CE-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +DTSTART;TZID=Europe/London:20061121T194500 +SUMMARY:Arsenal - Hamburg +DESCRIPTION:UEFA Champions League matchday 5 +END:VEVENT +BEGIN:VEVENT +LOCATION:Fratton Park\nBarclays Premiership +DTSTAMP:20060809T121330Z +UID:1C81DAEE-369F-4597-9BEB-DC070157D3CC-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:53 +DTSTART;TZID=Europe/London:20060412T200000 +SUMMARY:Portsmouth 1-1 Arsenal +DTEND;TZID=Europe/London:20060412T214500 +DESCRIPTION:PORTSMOUTH 1\nLua Lua 66\n\nARSENAL 1\nHenry 37\n\nBarclays + Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Carling Cup quarter-final\nThe Hawthorns +DTSTAMP:20040604T152130Z +UID:E6E4CB6D-2997-42B5-BF61-EDF582A3DCB0-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=248104 +DTSTART;TZID=Europe/London:20031216T200000 +SUMMARY:West Bromwich Albion 0-2 Arsenal +DTEND;TZID=Europe/London:20031216T214500 +DESCRIPTION:W.B.A. 0\n\nARSENAL 2\nKanu 25\nAliadiere 57\n\nCarling Cup + quarter-final +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070221T194500 +SUMMARY:Champions League knockout round 1 +UID:A15D1562-B880-4CD9-B718-8BE2B7877CCE-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +DTSTAMP:20060623T170505Z +DESCRIPTION:Champions League knockout round 1 +SEQUENCE:1 +DURATION:PT1H45M +END:VEVENT +BEGIN:VEVENT +LOCATION:Higbury\nBarclays Premiership +DTSTAMP:20060809T121417Z +UID:A306990B-5831-4E5D-826F-BCDA1529ABDA-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:18 +DTSTART;TZID=Europe/London:20060422T124500 +SUMMARY:Arsenal 1-1 Tottenham Hotspur +DTEND;TZID=Europe/London:20060422T143000 +DESCRIPTION:ARSENAL 1\nHenry 84\n\nTOTTENHAM HOTSPUR 1\nKeane 66\n\nBarc + lays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Cup 3rd round +DTSTAMP:20050109T161653Z +UID:52CB1ED9-06C5-430C-BBDD-CDE163169675-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=248392 +DTSTART;TZID=Europe/London:20050109T140000 +SUMMARY:Arsenal 2-1 Stoke City +DTEND;TZID=Europe/London:20050109T154500 +DESCRIPTION:ARSENAL 2\nReyes 50\nVan Persie 70\n\nSTOKE CITY 1\nThomas 4 + 5\n\nFA Cup 3rd round +END:VEVENT +BEGIN:VEVENT +LOCATION:St Andrews\nBarclays Premiership +DTSTAMP:20060204T171455Z +UID:C9101475-0446-4183-A7AC-9A97E9CB9F20-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=359958 +DTSTART;TZID=Europe/London:20060204T150000 +SUMMARY:Birmingham City 0-2 Arsenal +DTEND;TZID=Europe/London:20060204T164500 +DESCRIPTION:BIRMINGHAM CITY 0\n\nARSENAL 2\nAdebayor 21\nHenry 63\n\nBar + clays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T150540Z +UID:6E247FD6-13A5-4E96-97ED-D0D0010C4003-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235004 +DTSTART;TZID=Europe/London:20040210T194500 +SUMMARY:Arsenal 2-0 Southampton +DTEND;TZID=Europe/London:20040210T213000 +DESCRIPTION:ARSENAL 2\nHenry 31\, 90\n\nSOUTHAMPTON 0\n\nFA Barclaycard + Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20060202T062136Z +UID:6B926B4F-B15E-4894-A490-401931CFD770-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:30 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=359253 +DTSTART;TZID=Europe/London:20060201T200000 +SUMMARY:Arsenal 2-3 West Ham Utd +DTEND;TZID=Europe/London:20060201T214500 +DESCRIPTION:ARSENAL 2\nHenry 45\nPires 89\n\nWEST HAM UNITED 3\nReo-Coke + r 25\nZamora 32\nEtherington 80\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20051218T203711Z +UID:CC0A5B34-7ADA-45AF-B438-867EB05AF0FC-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:13 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=345687 +DTSTART;TZID=Europe/London:20051218T160000 +SUMMARY:Arsenal 0-2 Chelsea +DTEND;TZID=Europe/London:20051218T174500 +DESCRIPTION:ARSENAL 0\n\nCHELSEA 2\nRobben 39\nCole 73\n\nBarclays Premi + ership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nSt. Mary's Stadium +DTSTAMP:20040604T152155Z +UID:41C6700B-EC5F-4B1B-8CBC-B90FBF4447CB-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234991 +DTSTART;TZID=Europe/London:20031229T200000 +SUMMARY:Southampton 0-1 Arsenal +DTEND;TZID=Europe/London:20031229T214500 +DESCRIPTION:SOUTHAMPTON 0\n\nARSENAL 1\nPires 35\n\nFA Barclaycard Premi + ership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20050104T221511Z +UID:B7BBA94C-C883-4857-8AD0-779E1F2F8EA4-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=247736 +DTSTART;TZID=Europe/London:20050104T194500 +SUMMARY:Arsenal 1-1 Manchester City +DTEND;TZID=Europe/London:20050104T213000 +DESCRIPTION:ARSENAL 1\nLjungberg 75\n\nMANCHESTER CITY 1\nS. Wright-Phil + lips 31\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nWhite Hart Lane +DTSTAMP:20060809T122115Z +UID:4E35FCFA-DD3D-4F6A-AE6C-42E31DC41874-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234903 +DTSTART;TZID=Europe/London:20040425T160500 +SUMMARY:Tottenham 2-2 Arsenal +DTEND;TZID=Europe/London:20040425T175000 +DESCRIPTION:TOTTENHAM HOTSPUR 2\nRedknapp 62\nKeane 94 (pen)\n\nARSENAL + 2\nVieira 3\nPires 35\n\nCHAMPIONS!!!\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nWalkers Stadium +DTSTAMP:20040604T152049Z +UID:116B4332-9E81-4015-8EC2-50F8417CA5A3-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234948 +DTSTART;TZID=Europe/London:20031206T150000 +SUMMARY:Leicester City 1-1 Arsenal +DTEND;TZID=Europe/London:20031206T164500 +DESCRIPTION:LEICESTER CITY 1\nHignett 90\n\nARSENAL 1\nGilberto 60\n\nFA + Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Cup 4th Round\nHighbury +DTSTAMP:20040604T150640Z +UID:EB03F776-88E2-4FDE-8947-3CCFDCA3D3FE-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=249304 +DTSTART;TZID=Europe/London:20040124T150000 +SUMMARY:Arsenal 4-1 Middlesbrough +DTEND;TZID=Europe/London:20040124T164500 +DESCRIPTION:ARSENAL 4\nBergkamp 19\nLjungberg 28\, 68\nBentley 90\n\nMID + DLESBROUGH 1\nJob 23\ns.o. Boateng 86\n\nFA Cup 4th Round +END:VEVENT +BEGIN:VEVENT +LOCATION:White Hart Lane\nFA Barclays Premiership +DTSTAMP:20041113T153253Z +UID:EECD6309-4C3D-4633-94DD-772D77E9ED49-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=237415 +DTSTART;TZID=Europe/London:20041113T120000 +SUMMARY:Tottenham Hotspur 4-5 Arsenal +DTEND;TZID=Europe/London:20041113T134500 +DESCRIPTION:TOTTENHAM HOTSPUR 4\nNaybet 37\nDefoe 61\nKing 74\nKanoute 8 + 8\n\nARSENAL 5\nHenry 45\nLauren 55 (pen)\nVieira 60\nLjungberg 69\nPire + s 81\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20050425T205834Z +UID:3DD81530-4938-4AA7-AD7F-7D8B3B059CA7-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:11 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=272363 +DTSTART;TZID=Europe/London:20050425T200000 +SUMMARY:Arsenal 1-0 Tottenham Hotspur +DTEND;TZID=Europe/London:20050425T214500 +DESCRIPTION:ARSENAL 1\nReyes 22\n\nTOTTENHAM HOTSPUR 0\n\nFA Barclays Pr + emiership +END:VEVENT +BEGIN:VEVENT +LOCATION:St James' Park\nBarclays Premiership +DTSTAMP:20051211T092023Z +UID:CE8D24D4-5A6C-4CB8-BF5B-E92C1C74EF26-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:14 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=332057 +DTSTART;TZID=Europe/London:20051210T171500 +SUMMARY:Newcastle Utd 1-0 Arsenal +DTEND;TZID=Europe/London:20051210T190000 +DESCRIPTION:NEWCASTLE UNITED 1\nSolano 82\n\nARSENAL 0\n\nBarclays Premi + ership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Community Shield\nMillennium Stadium\, Cardiff +DTSTAMP:20040604T151623Z +UID:1998AD3F-D167-409C-BAF8-E69525D73E34-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=241828 +DTSTART;TZID=Europe/London:20030810T140000 +SUMMARY:Arsenal 1(3)-1(4) ManUtd +DTEND;TZID=Europe/London:20030810T154500 +DESCRIPTION:ARSENAL 1(3)\nThierry Henry 20\ns.o. Francis Jeffers 74\npen + Edu\npen Sylvain Wiltord\npen Lauren\n\nMANCHESTER UNITED 1(4)\nMikael + Silvestre 15\npen Paul Scholes\npen Rio Ferdinand\npen Ole Gunnar Solskj + aer\npen Diego Forlan\n\nFA Community Shield +END:VEVENT +BEGIN:VEVENT +LOCATION:UEFA Champions League\nGiuseppe Meazza Stadium (San Siro) +DTSTAMP:20040604T152013Z +UID:552F971A-B238-4DB0-8C7B-4E10E4419023-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=243462 +DTSTART;TZID=Europe/London:20031125T194500 +SUMMARY:Inter Milan 1-5 Arsenal +DTEND;TZID=Europe/London:20031125T213000 +DESCRIPTION:INTER MILAN 1\nVieri 32\n\nARSENAL 5\nHenry 25\, 85\nLjungbe + rg 49\nEdu 87\nPires 89\n\nUEFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:The Hawthorns\nBarclays Premiership +DTSTAMP:20051016T101059Z +UID:7E533838-66CD-47C3-B81A-D47A31433BE2-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:13 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=315472 +DTSTART;TZID=Europe/London:20051015T150000 +SUMMARY:West Bromwich Albion 2-1 Arsenal +DTEND;TZID=Europe/London:20051015T164500 +DESCRIPTION:WEST BROMWICH ALBION 2\nKanu 38\nCarter 77\n\nARSENAL 1\nSen + deros 18\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Ewood Park\nFA Barclays Premiership +DTSTAMP:20050319T232331Z +UID:31469719-54CB-431E-B11C-3058F5D618AC-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=263607 +DTSTART;TZID=Europe/London:20050319T124500 +SUMMARY:Blackburn Rovers 0-1 Arsenal +DTEND;TZID=Europe/London:20050319T143000 +DESCRIPTION:BLACKBURN ROVERS 0\n\nARSENAL 1\nVan Persie 43\n\nFA Barclay + s Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Old Trafford\nBarclays Premiership +DTSTAMP:20060809T121318Z +UID:A9C34DC3-FD26-4B13-BEDB-7667F1380E00-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:13 +DTSTART;TZID=Europe/London:20060409T160000 +SUMMARY:Manchester Utd 2-0 Arsenal +DTEND;TZID=Europe/London:20060409T174500 +DESCRIPTION:MANCHESTER UTD 2\nRooney 54\nPark 78\n\nARSENAL 0\n\nBarclay + s Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nSchwechat Stadium\, Vienna\, Austria +DTSTAMP:20040604T151430Z +UID:69D37CCD-B789-4107-83EE-533A7BD8138D-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=241547 +DTSTART;TZID=Europe/London:20030725T190000 +SUMMARY:Austria Vienna 0-2 Arsenal +DTEND;TZID=Europe/London:20030725T204500 +DESCRIPTION:AUSTRIA VIENNA 0\n\nARSENAL 2\nDennis Bergkamp 29\nFrancis J + effers 44\n\nPre-season friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20060809T121844Z +UID:EA6BDD8F-969D-4D20-B13A-9B40C2C487EF-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:3 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234904 +DTSTART;TZID=Europe/London:20030816T150000 +SUMMARY:Arsenal 2-1 Everton +DTEND;TZID=Europe/London:20030816T164500 +DESCRIPTION:ARSENAL 2\nHenry 35 (pen)\nPires 58\nCampbell sent off 25\n\ + nEVERTON 1\nRadzinski 84\nLi Tie sent off 87\n\nFA Barclaycard Premiersh + ip +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T152148Z +UID:9738F998-0356-499D-B5F4-AAA7442EC126-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234974 +DTSTART;TZID=Europe/London:20031226T120000 +SUMMARY:Arsenal 3-0 Wolverhampton W +DTEND;TZID=Europe/London:20031226T134500 +DESCRIPTION:ARSENAL 3\nCraddock og 13\nHenry 20\, 89\n\nWOLVES 0\n\nFA B + arclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Amsterdam ArenA\nUEFA Champions League +DTSTAMP:20060809T122657Z +UID:00FAFD97-7947-493F-8CE9-DAFB64BBEE0B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:17 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=311047 +DTSTART;TZID=Europe/London:20050927T194500 +SUMMARY:AFC Ajax 1-2 Arsenal +DTEND;TZID=Europe/London:20050927T213000 +DESCRIPTION:AJAX 1\nRosenberg 70\n\nARSENAL 2\nLjungberg 2\nPires (pen) + 68 \n\nUEFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060711T140543Z +UID:1822C525-9209-430E-9B19-1D7D858C44FE-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +DTSTART;TZID=Europe/London:20060923T150000 +SUMMARY:Arsenal - Sheffield Utd +DTEND;TZID=Europe/London:20060923T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:City of Manchester Stadium\nCarling Cup 3rd round +DTSTAMP:20041028T071910Z +UID:07E51C76-F7DD-4259-A3C3-B17D4F53CC11-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=234108 +DTSTART;TZID=Europe/London:20041027T194500 +SUMMARY:Manchester City 1-2 Arsenal +DTEND;TZID=Europe/London:20041027T213000 +DESCRIPTION:MANCHESTER CITY 1\nFowler 90\n\nARSENAL 2\nvan Persie 78 \nK + arbassyioon 90 \n\nCarling Cup 3rd round +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20050511T213934Z +UID:06232CAD-0D08-4C7C-BBCC-5B979297B901-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:13 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=275961 +DTSTART;TZID=Europe/London:20050511T200000 +SUMMARY:Arsenal 7-0 Everton +DTEND;TZID=Europe/London:20050511T214500 +DESCRIPTION:ARSENAL 7\nVan Persie 8\nPires 12\, 50\nVieira 37\nEdu 70 (p + en)\nBergkamp 77\nFlamini 85\n\nEVERTON 0\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Selhurst Park\nFA Barclays Premiership +DTSTAMP:20041107T082059Z +UID:1B876000-2824-415D-BE23-419DF4FA05FA-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=236035 +DTSTART;TZID=Europe/London:20041106T171500 +SUMMARY:Crystal Palace 1-1 Arsenal +DTEND;TZID=Europe/London:20041106T190000 +DESCRIPTION:CRYSTAL PALACE 1\nRiihilahti 65\n\nARSENAL 1\nHenry 63\n\nFA + Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nBad Waltersdorf\, Austria +DTSTAMP:20040604T151440Z +UID:F689C6A4-861D-4FC5-BEFD-9239A88D003E-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=241627 +DTSTART;TZID=Europe/London:20030729T180000 +SUMMARY:Arsenal 1-0 Besiktas +DTEND;TZID=Europe/London:20030729T194500 +DESCRIPTION:ARSENAL 1\nDennis Bergkamp 48\n\nBESIKTAS 0\n\nPre-season fr + iendly +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:Emirates Stadium +DTSTAMP:20060825T091024Z +UID:F11AC3FC-63DA-4BDF-971E-7A57DECB3C95-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20060926T194500 +SUMMARY:Arsenal - FC Porto +DESCRIPTION:UEFA Champions League matchday 2 +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nIbrox\, Glasgow +DTSTAMP:20040604T151611Z +UID:91E54F30-153B-48A6-A660-EB6C79B290F5-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=241307 +DTSTART;TZID=Europe/London:20030805T194500 +SUMMARY:Rangers 0-3 Arsenal +DTEND;TZID=Europe/London:20030805T213000 +DESCRIPTION:RANGERS 0\n\nARSENAL 3\nEdu 31\nLauren 47 (pen)\nSol Campbel + l 58\n\nPre-season friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:Anfield\nFA Barclays Premiership +DTSTAMP:20041128T203220Z +UID:868B9421-E562-4E63-8F19-487B5AB5BE08-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=238116 +DTSTART;TZID=Europe/London:20041128T160500 +SUMMARY:Liverpool 2-1 Arsenal +DTEND;TZID=Europe/London:20041128T175000 +DESCRIPTION:LIVERPOOL 2\nAlonso 41\nMellor 90\n\nARSENAL 1\nVieira 57\n\ + nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nUEFA Champions League +DTSTAMP:20040914T221002Z +UID:F5D8FCCA-0A22-4AF0-AB18-978502AA1022-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=225565 +DTSTART;TZID=Europe/London:20040914T194500 +SUMMARY:Arsenal 1-0 PSV Eindhoven +DTEND;TZID=Europe/London:20040914T213000 +DESCRIPTION:ARSENAL 1\nAlex 42 (og)\n\nPSV EINDHOVEN 0\n\nUEFA Champions + League +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nAnfield +DTSTAMP:20040604T151813Z +UID:CB6539B4-58D6-41D5-AF92-438402ECA1A4-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235177 +DTSTART;TZID=Europe/London:20031004T123000 +SUMMARY:Liverpool 1-2 Arsenal +DTEND;TZID=Europe/London:20031004T141500 +DESCRIPTION:LIVERPOOL 1\nKewell 14\n\nARSENAL 2\nHyypia (og) 31\nPires 6 + 8\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060623T172413Z +UID:6A8F5322-40FE-453F-8533-1C6D25193C3D-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070120T150000 +SUMMARY:Arsenal - Manchester Utd +DTEND;TZID=Europe/London:20070120T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:The Valley\nBarclays Premiership +DTSTAMP:20051226T150410Z +UID:4B295DEE-5F97-4022-BE7A-9D1ED2EDB824-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:16 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=346472 +DTSTART;TZID=Europe/London:20051226T124500 +SUMMARY:Charlton Athletic 0-1 Arsenal +DTEND;TZID=Europe/London:20051226T143000 +DESCRIPTION:CHARLTON ATHLETIC 0\n\nARSENAL 1\nReyes 58\n\nBarclays Premi + ership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nUEFA Champions League +DTSTAMP:20050310T183941Z +UID:75B251E8-B36A-4ACD-AB66-0085283EE048-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=261721 +DTSTART;TZID=Europe/London:20050309T194500 +SUMMARY:Arsenal 1-0 Bayern München +DTEND;TZID=Europe/London:20050309T213000 +DESCRIPTION:ARSENAL 1\nHenry 66\n\nBAYERN MUNICH 0\n\nUEFA Champions Lea + gue\nKnockout\, 2nd leg\n\nBayern München win 3-2 on aggregate +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nUEFA Champions League +DTSTAMP:20041208T010508Z +UID:57BE5241-9FAD-4E87-BDF3-759FF103CB42-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=242378 +DTSTART;TZID=Europe/London:20041207T194500 +SUMMARY:Arsenal 5-1 Rosenborg +DTEND;TZID=Europe/London:20041207T213000 +DESCRIPTION:ARSENAL 5\nReyes 3\nHenry 24\nFabregas 29\nPires 41 (pen)\nV + an Persie 84\n\nROSENBORG 1\nHoftun 38\n\nUEFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:Millennium Stadium\, Cardiff\nFA Community Shield +DTSTAMP:20050807T160523Z +UID:25784440-F3EE-412D-9B90-740FD42D653D-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:15 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=296981 +DTSTART;TZID=Europe/London:20050807T150000 +SUMMARY:Chelsea 2-1 Arsenal +DTEND;TZID=Europe/London:20050807T164500 +DESCRIPTION:ARSENAL 1\nFabregas 65\n\nCHELSEA 2\nDrogba 8\, 57\n\nFA Com + munity Shield +END:VEVENT +BEGIN:VEVENT +LOCATION:The Olympic Stadium\, Athens +DTSTAMP:20060623T172219Z +UID:AF9F83A4-8D24-4964-9141-795073619BB3-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +DTSTART;TZID=Europe/London:20070523T194500 +SUMMARY:Champions League Final +DTEND;TZID=Europe/London:20070523T213000 +DESCRIPTION:Champions League Final +END:VEVENT +BEGIN:VEVENT +LOCATION:UEFA Champions League\nHighbury +DTSTAMP:20040604T151729Z +UID:27230D3A-A02E-4DDF-AD56-0DD26514535C-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=243409 +DTSTART;TZID=Europe/London:20030917T194500 +SUMMARY:Arsenal 0-3 Inter Milan +DTEND;TZID=Europe/London:20030917T213000 +DESCRIPTION:ARSENAL 0\nHenry missed pen 32\n\nINTER MILAN 3\nCruz 22\nVa + n der Meyde 24\nMartins 41\n\nUEFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nLoftus Road +DTSTAMP:20040604T145730Z +UID:A5BBD55C-8552-4734-97AB-C33E59272032-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235116 +DTSTART;TZID=Europe/London:20040509T160500 +SUMMARY:Fulham 0-1 Arsenal +DTEND;TZID=Europe/London:20040509T175000 +DESCRIPTION:FULHAM 0\n\nARSENAL 1\nReyes 9\n\nFA Barclaycard Premiership + +END:VEVENT +BEGIN:VEVENT +LOCATION:Carling Cup semi-final 1st leg\nHighbury +DTSTAMP:20040604T150700Z +UID:502AD471-18AB-4157-9237-61E00A5EAA79-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=249184 +DTSTART;TZID=Europe/London:20040120T194500 +SUMMARY:Arsenal 0-1 Middlesbrough +DTEND;TZID=Europe/London:20040120T213000 +DESCRIPTION:ARSENAL 0\n\nMIDDLESBROUGH 1\nJuninho 53\n\nCarling Cup semi + -final 1st leg +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:Emirates Stadium +DTSTAMP:20060825T090820Z +UID:BBBE4A20-F903-42D0-BC4F-9EEA5962C740-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +DTSTART;TZID=Europe/London:20061101T194500 +SUMMARY:Arsenal - CSKA Moscow +DESCRIPTION:UEFA Champions League matchday 4 +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nUEFA Champions League +DTSTAMP:20041102T223439Z +UID:6FB64DB7-24F6-4980-843A-F6CE7FA476D6-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=235392 +DTSTART;TZID=Europe/London:20041102T194500 +SUMMARY:Arsenal 1-1 Panathinaikos +DTEND;TZID=Europe/London:20041102T213000 +DESCRIPTION:ARSENAL 1\nHenry 16 (pen)\n\nPANATHINAIKOS 1\nCygan 74 (og)\ + n\nUEFA Champions League +END:VEVENT +BEGIN:VEVENT +LOCATION:Stamford Bridge +DTSTAMP:20060704T214429Z +UID:6B16A0FE-9169-4399-A0E9-CC77BA3FE76B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +DTSTART;TZID=Europe/London:20061210T160000 +SUMMARY:Chelsea - Arsenal +DTEND;TZID=Europe/London:20061210T174500 +DESCRIPTION:Live on Sky Sports\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Villa Park\nFA Barclays Premiership +DTSTAMP:20050206T132557Z +UID:9F97ADE0-9344-436C-9899-6E3BA6BF04A5-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:21 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=254039 +DTSTART;TZID=Europe/London:20050205T171500 +SUMMARY:Aston Villa 1-3 Arsenal +DTEND;TZID=Europe/London:20050205T190000 +DESCRIPTION:ASTON VILLA 1\nAngel 74\n\nARSENAL 3\nLjungberg 10\nHenry 14 + \nCole 28\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:UEFA Champions League (knock-out)\nHighbury +DTSTAMP:20040604T150431Z +UID:3FA9A70F-B1CE-4F90-ACB0-E14F4CDE2B13-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:3 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=249288 +DTSTART;TZID=Europe/London:20040310T194500 +SUMMARY:Arsenal 2-0 Celta de Vigo +DTEND;TZID=Europe/London:20040310T213000 +DESCRIPTION:ARSENAL 2\nHenry 14\, 34\n\nCELTA DE VIGO 0\ns.o. Contreras + 74\n\nUEFA Champions League (knock-out)\nArsenal win 5-2 on aggregate +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20060809T122101Z +UID:86FE8303-D009-4952-B90E-99A6C5275F26-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=234884 +DTSTART;TZID=Europe/London:20040416T200000 +SUMMARY:Arsenal 5-0 Leeds +DTEND;TZID=Europe/London:20040416T214500 +DESCRIPTION:ARSENAL 5\nPires 6\nHenry 27\, 33 (pen)\, 50\, 67\n\nLEEDS U + NITED 0\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20050215T095354Z +UID:82D06749-E8E4-4BF2-B2EE-7DAEB7AE7B1C-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20050214T200000 +SUMMARY:Arsenal 5-1 Crystal Palace +DTEND;TZID=Europe/London:20050214T214500 +DESCRIPTION:ARSENAL 5\nBergkamp 32\nReyes 35\nHenry 39\, 37\nVieira 54\n + \nCRYSTAL PALACE 1\nJohnson 63 (pen)\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Craven Cottage\nBarclays Premiership +DTSTAMP:20060304T171231Z +UID:6DBA655D-5522-409A-9EE0-76388DF14F4F-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=368249 +DTSTART;TZID=Europe/London:20060304T150000 +SUMMARY:Fulham 0-4 Arsenal +DTEND;TZID=Europe/London:20060304T164500 +DESCRIPTION:FULHAM 0\n\nARSENAL 4\nHenry 31\, 77\nAdebayor 35\nFabregas + 86\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20051228T230659Z +UID:25470AFA-6111-42A0-964B-E2A3083CE53E-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:12 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=346477 +DTSTART;TZID=Europe/London:20051228T194500 +SUMMARY:Arsenal 4-0 Portsmouth +DTEND;TZID=Europe/London:20051228T213000 +DESCRIPTION:ARSENAL 4\nBergkamp 7\nReyes 13\nHenry 36\, 42 (pen)\n\nPORT + SMOUTH 0\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060623T172419Z +UID:AF026105-91E1-43D2-82AB-BB4EB3A0D6A3-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:56 +DTSTART;TZID=Europe/London:20070130T194500 +SUMMARY:Arsenal - Manchester City +DTEND;TZID=Europe/London:20070130T213000 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nRitzing Stadium\, Ritzing\, Austria +DTSTAMP:20040604T151422Z +UID:56BC0F1C-DCA5-44A0-9859-EDBE3B762A1A-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=241454 +DTSTART;TZID=Europe/London:20030722T190000 +SUMMARY:Ritzing 2-2 Arsenal +DTEND;TZID=Europe/London:20030722T204500 +DESCRIPTION:RITZING 2\nSebasta 20\nEl Senosy 25\n\nARSENAL 2\nCygan 60\n + Ljungberg (pen) 85\n\nPre-season friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20050201T222828Z +UID:A572A1C4-DF43-4FFE-9E71-9168B2DC0234-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:8 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=253081 +DTSTART;TZID=Europe/London:20050201T200000 +SUMMARY:Arsenal 2-4 Manchester Utd +DTEND;TZID=Europe/London:20050201T214500 +DESCRIPTION:ARSENAL 2\nVieira 8\nBergkamp 36\n\nMANCHESTER UNITED 4\nGig + gs 18\nRonaldo 54\, 58\nO'Shea 89\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Emirates Stadium +DTSTAMP:20060623T172449Z +UID:7477F2CC-005E-49AC-941E-86D7F7097136-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:7 +DTSTART;TZID=Europe/London:20070414T150000 +SUMMARY:Arsenal - Bolton Wanderers +DTEND;TZID=Europe/London:20070414T164500 +DESCRIPTION:Barclays Premiership +END:VEVENT +BEGIN:VEVENT +DURATION:PT1H45M +LOCATION:Highbury\nUEFA Champions League Semi-Final 1st Leg +DTSTAMP:20060809T121358Z +UID:6348F912-F6D7-43BE-A143-35CB7BA20358-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:12 +DTSTART;TZID=Europe/London:20060419T194500 +SUMMARY:Arsenal 1-0 Villarreal CF +DESCRIPTION:ARSENAL 1\nToure 41\n\nVILLAREAL 0\n\nUEFA Champions League + Semi-Final +END:VEVENT +BEGIN:VEVENT +LOCATION:Carling Cup 4th Round\nHighbury\n +DTSTAMP:20040604T152039Z +UID:C1F69575-3690-42C5-A4A4-95042ADF4BE5-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=247503 +DTSTART;TZID=Europe/London:20031202T194500 +SUMMARY:Arsenal 5-1 Wolverhampton W. +DTEND;TZID=Europe/London:20031202T213000 +DESCRIPTION:ARSENAL 5\nAliadiere 24\, 71\nKanu 67\nWiltord 79\nFabregas + 88\n\nWOLVERHAMPTON W. 1\nRae 81\n\nCarling Cup 4th Round +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nCeltic Park\, Glasgow +DTSTAMP:20040604T151534Z +UID:01A4C130-ADAD-4A5E-BC8E-6BC4CF12C268-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:3 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=241306 +DTSTART;TZID=Europe/London:20030802T150000 +SUMMARY:Celtic 1-1 Arsenal +DTEND;TZID=Europe/London:20030802T164500 +DESCRIPTION:CELTIC 1\nLiam Miller 57\n\nARSENAL 1\nKanu 70\n\nPre-season + friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:Wembley +DTSTAMP:20060623T172711Z +UID:9F1E2513-7E31-435D-B3AB-6DAE679CE375-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:11 +DTSTART;TZID=Europe/London:20070519T150000 +SUMMARY:F.A. Cup Final +DTEND;TZID=Europe/London:20070519T164500 +DESCRIPTION:F.A. Cup Final +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Cup 4th round +DTSTAMP:20050129T173246Z +UID:C1EAB9E3-FA90-4E6F-8F0B-703586DDE8EB-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:5 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=252357 +DTSTART;TZID=Europe/London:20050129T150000 +SUMMARY:Arsenal 2-0 Wolverhampton Wanderers +DTEND;TZID=Europe/London:20050129T164500 +DESCRIPTION:ARSENAL 2\nVieira 53\nLjungberg 82\n\nWOLVERHAMPTON W. 0\n\n + FA Cup 4th round +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nLondon Road +DTSTAMP:20040604T151400Z +UID:45E12578-92AD-456A-984B-3A6CD212F978-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:6 +DTSTART;TZID=Europe/London:20030711T193000 +SUMMARY:Peterborough 1-0 Arsenal XI +DTEND;TZID=Europe/London:20030711T211500 +DESCRIPTION:PETERBOROUGH UNITED 1\nGreen 29\n\nARSENAL XI 0\n\nPre-seaso + n friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20050919T212818Z +UID:A899DA80-AFD5-463E-9CCF-B1EA5AD27D7B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:18 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=305234 +DTSTART;TZID=Europe/London:20050919T200000 +SUMMARY:Arsenal 2-0 Everton +DTEND;TZID=Europe/London:20050919T214500 +DESCRIPTION:ARSENAL 2\nCampbell 11\, 30\n \nEVERTON 0\n\nBarclays Premie + rship +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20041003T060617Z +UID:7DEFC598-A3B1-4A80-8146-1403DB62A092-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=229026 +DTSTART;TZID=Europe/London:20041002T150000 +SUMMARY:Arsenal 4-0 Charlton Athletic +DTEND;TZID=Europe/London:20041002T164500 +DESCRIPTION:ARSENAL 4\nLjungberg 33\nHenry 48\, 69\nReyes 70\n\nCHARLTON + ATHLETIC 0\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nBarclays Premiership +DTSTAMP:20060809T114516Z +UID:D1D0E52B-9A0E-41A0-96B5-274D27E2021B-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:20 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=301475 +DTSTART;TZID=Europe/London:20050824T194500 +SUMMARY:Arsenal 4-1 Fulham +DTEND;TZID=Europe/London:20050824T213000 +DESCRIPTION:ARSENAL 4\nCygan 32\, 90\nHenry 53\, 83\n\nFULHAM 1\nJensen + 22\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Stamford Bridge\nFA Barclays Premiership +DTSTAMP:20050421T081926Z +UID:8543F179-5E2C-46B0-A76E-74D2D1DE5934-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:10 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=270910 +DTSTART;TZID=Europe/London:20050420T200000 +SUMMARY:Chelsea 0-0 Arsenal +DTEND;TZID=Europe/London:20050420T214500 +DESCRIPTION:CHELSEA 0\n\nARSENAL 0\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Belle Vue Stadium\nCarling Cup 5th Round +DTSTAMP:20051222T114529Z +UID:2924AA1A-8E7B-4F3F-81C1-81898501A027-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:18 +DTSTART;TZID=Europe/London:20051221T194500 +SUMMARY:Doncaster Rovers 2-2P Arsenal +DTEND;TZID=Europe/London:20051221T213000 +DESCRIPTION:DONCASTER ROVERS 2\nMcIndoe 4\nGreen 104\n\nARSENAL 2\nQuinc + y 63\nGilberto 120\n\nArsenal win 3-1 on penalties\n\nCarling Cup 5th Ro + und +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nBad Waltersdorf (Austria) +DTSTAMP:20040728T184023Z +UID:62A1186B-DE78-4F2A-B7B2-E1D55CE4B8C3-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:3 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=216410 +DTSTART;TZID=Europe/Oslo:20040728T183000 +SUMMARY:Sturm Graz 0-2 Arsenal +DTEND;TZID=Europe/Oslo:20040728T201500 +DESCRIPTION:STURM GRAZ 0\n\nARSENAL 2\nReyes 30 (pen)\nJeffers 74\n\nPre + -season friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:Lerkendal stadium\nUEFA Champions League +DTSTAMP:20040930T163019Z +UID:EA88DB10-80AC-4301-A62D-428B6596B8BC-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:3 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=228351 +DTSTART;TZID=Europe/London:20040929T194500 +SUMMARY:Rosenborg 1-1 Arsenal +DTEND;TZID=Europe/London:20040929T213000 +DESCRIPTION:ROSENBORG 1\nStrand 52\n\nARSENAL 1\nLjungberg 6\n\nUEFA Cha + mpions League +END:VEVENT +BEGIN:VEVENT +LOCATION:Keown Testimonial\nHighbury +DTSTAMP:20040604T145655Z +UID:3A11674E-A10F-41FD-8951-53C9471A51DA-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +DTSTART;TZID=Europe/London:20040517T194500 +SUMMARY:Arsenal 6-0 England XI +DTEND;TZID=Europe/London:20040517T213000 +DESCRIPTION:ARSENAL 6\nCole 17\nAliadiere 23\, 77\nReyes 53\, 58\, 66\n\ + nENGLAND XI 0\n\nKeown Testimonial +END:VEVENT +BEGIN:VEVENT +LOCATION:Highbury\nFA Barclays Premiership +DTSTAMP:20050402T214531Z +UID:147595AD-C34A-4AC1-A840-5C5F25347280-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=26500 +DTSTART;TZID=Europe/London:20050402T150000 +SUMMARY:Arsenal 4-1 Norwich City +DTEND;TZID=Europe/London:20050402T164500 +DESCRIPTION:ARSENAL 4\nHenry 19\, 22\, 66\nLjungberg 50\n\nNORWICH CITY + 1\nHuckerby 30\n\nFA Barclays Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nHighbury +DTSTAMP:20040604T145755Z +UID:F4E8FD39-31B9-49C3-8E33-CA2E70BC9699-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:11 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235104 +DTSTART;TZID=Europe/London:20040501T123000 +SUMMARY:Arsenal 0-0 Birmingham City +DTEND;TZID=Europe/London:20040501T141500 +DESCRIPTION:ARSENAL 0\n\nBIRMINGHAM CITY 0\n\nFA Barclaycard Premiership + +END:VEVENT +BEGIN:VEVENT +LOCATION:Carling Cup semi-final 2nd leg\nRiverside Stadium +DTSTAMP:20040604T150613Z +UID:6BE19946-6EFB-4205-B101-8B4F8E6E7CA4-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:12 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=249913 +DTSTART;TZID=Europe/London:20040203T200000 +SUMMARY:Middlesbrough 2-1 Arsenal +DTEND;TZID=Europe/London:20040203T214500 +DESCRIPTION:MIDDLESBROUGH 2\nZenden 69\nReyes o.g. 85\n\nARSENAL 1\nKeow + n sent off 44\nEdu 77\n\nCarling Cup semi-final 2nd leg\nMiddlesbrough w + in 3-1 on aggregate +END:VEVENT +BEGIN:VEVENT +LOCATION:Amsterdam Arena\nPre-Season Friendly +DTSTAMP:20050731T133943Z +UID:AACA0049-8229-4DA7-A2B3-1D49C7C7B885-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:20 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=295084 +DTSTART;TZID=Europe/London:20050729T201500 +SUMMARY:Ajax 0-1 Arsenal +DTEND;TZID=Europe/London:20050729T220000 +DESCRIPTION:AJAX 0\n\nARSENAL 1\nLupoli 87\n\nAmsterdam Tournament\nPre- + Season Friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:FA Barclaycard Premiership\nStamford Bridge +DTSTAMP:20040604T150520Z +UID:A9782F2E-EDCB-4693-8FBD-EAD7C5353F25-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:2 +URL;VALUE=URI:http://www.arsenal.com/matchday.asp?fxid=235017 +DTSTART;TZID=Europe/London:20040221T123000 +SUMMARY:Chelsea 1-2 Arsenal +DTEND;TZID=Europe/London:20040221T141500 +DESCRIPTION:CHELSEA 1\nGudjohnsen 1\nGudjohnsen s.o. 60\n\nARSENAL 2\nVi + eira 15\nEdu 21\n\nFA Barclaycard Premiership +END:VEVENT +BEGIN:VEVENT +LOCATION:Pre-season friendly\nMeadow Lodge\, Broughinge Road +DTSTAMP:20040804T141834Z +UID:FE8DA48F-B209-4ABC-AB74-5E8A1DD57B61-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:3 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=217539 +DTSTART;TZID=Europe/London:20040803T194500 +SUMMARY:Boreham Wood 1-1 Arsenal XI +DTEND;TZID=Europe/London:20040803T213000 +DESCRIPTION:BOREHAM WOOD 1\nMoore 85\n\nARSENAL XI 1\nStokes 47\n\nPre-s + eason friendly +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20061220T200000 +DTEND;TZID=Europe/London:20061220T214500 +SUMMARY:Carling Cup 5th round +UID:C9AA0DA8-F923-49C9-98DB-7B2127062298-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:4 +DTSTAMP:20060622T105658Z +DESCRIPTION:Carling Cup 5th round +END:VEVENT +BEGIN:VEVENT +LOCATION:Freethiel Stadium\, Beveren\nPre-Season Friendly +DTSTAMP:20050803T155047Z +UID:923ACB4C-6B8E-480A-9728-EBEF6604866D-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:14 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=296135 +DTSTART;TZID=Europe/London:20050802T193000 +SUMMARY:KSK Beveren 3-3 Arsenal XI +DTEND;TZID=Europe/London:20050802T211500 +DESCRIPTION:KSK BEVEREN 3\nAlain Koudou 37\nMahamadou Dissa 40\nGerjinho + 84\n\nARSENAL XI 3\nArturo Lupoli 19\nRobin van Persie 74\, 79\n\nPre-S + eason Friendly +END:VEVENT +BEGIN:VEVENT +LOCATION:The JJB Stadium\nBarclays Premiership +DTSTAMP:20051119T210208Z +UID:8B89DDAA-B971-4CAA-8334-B407E8ED2DD7-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:13 +URL;VALUE=URI:http://www.arsenal.com/article.asp?article=326151 +DTSTART;TZID=Europe/London:20051119T124500 +SUMMARY:Wigan Athletic 2-3 Arsenal +DTEND;TZID=Europe/London:20051119T143000 +DESCRIPTION:WIGAN ATHLETIC 2\nCamera 28\nBullard 45\n\nARSENAL 3\nVan Pe + rsie 11\nHenry 21\, 41\n\nBarclays Premiership +END:VEVENT +BEGIN:VEVENT +DTSTART;TZID=Europe/London:20070106T150000 +DTEND;TZID=Europe/London:20070106T164500 +SUMMARY:F.A. Cup 3rd round +UID:B3908DFB-C6D6-403E-AC9E-485F448A2D08-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:9 +DTSTAMP:20060623T172525Z +DESCRIPTION:F.A. Cup 4rth round +END:VEVENT +BEGIN:VEVENT +LOCATION:Pappelstadion\, Austria +DTSTAMP:20060809T113354Z +UID:1D806D3E-B6CF-4257-B5CA-D2A7FA5D8FDC-2793388E-0A6C-4052-AFA4-1B34D1E + 16656 +SEQUENCE:16 +DTSTART;TZID=Europe/Oslo:20060725T190000 +SUMMARY:SV Mattersburg 1-2 Arsenal +DTEND;TZID=Europe/Oslo:20060725T204500 +DESCRIPTION:SV MATTERSBURG 1\nPatocka 68\n\nARSENAL 2\nAliadiere 5\nHoyt + e 53\n\nPre-Season Friendly +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/events.ics b/framework/iCalendar/tests/fixtures/vTimezone/events.ics new file mode 100644 index 000000000..d54c36238 --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/events.ics @@ -0,0 +1,26 @@ +BEGIN:VCALENDAR +VERSION:2.0 +X-WR-CALNAME:Carl Thompson's Calendar +PRODID:-//The Horde Project//Horde_iCalendar Library//EN +METHOD:PUBLISH +BEGIN:VEVENT +DTSTART:20060905T130000Z +DTEND:20060905T140000Z +DTSTAMP:20060905T073750Z +UID:20060905003740.d1f0ts6wocg@carlthompson.net +SUMMARY:test cet 2 +TRANSP:OPAQUE +ORGANIZER;CN=Carl Thompson:MAILTO:cet@carlthompson.net +AALARM:20060905T124500Z +END:VEVENT +BEGIN:VEVENT +DTSTART;VALUE=DATE:20060905 +DTEND;VALUE=DATE:20060906 +DTSTAMP:20060905T073750Z +UID:20060905003407.15x1fdrot9b4@carlthompson.net +SUMMARY:test cet +TRANSP:OPAQUE +ORGANIZER;CN=Carl Thompson:MAILTO:cet@carlthompson.net +AALARM:20060905T064500Z +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/exchange.ics b/framework/iCalendar/tests/fixtures/vTimezone/exchange.ics new file mode 100644 index 000000000..b714cfb83 --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/exchange.ics @@ -0,0 +1,53 @@ +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:Microsoft CDO for Microsoft Exchange +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:Eastern Time (US & Canada) +X-MICROSOFT-CDO-TZID:10 +BEGIN:STANDARD +DTSTART:16010101T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:16010101T020000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=4;BYDAY=1SU +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20011115T211047Z +DTSTART;TZID="Eastern Time (US & Canada)":20011116T140000 +SUMMARY:internal final review of mmc site changes +UID:040000008200E00074C5B7101A82E00800000000B0549C15F06DC101000000000000000 + 0100000008BF784046BEC174CA6706A51BE3E8B33 +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN="MHMN002" +: + MAILTO:MHMN002@bitgroup.com +ORGANIZER;CN="Ann Cave":MAILTO:acave@bitgroup.com +LOCATION:metcalfe +DTEND;TZID="Eastern Time (US & Canada)":20011116T143000 +DESCRIPTION:Let's get together to finalize. Way to go team in the final hom + estretch!\N +SEQUENCE:0 +PRIORITY:5 +CLASS: +CREATED:20011115T212414Z +LAST-MODIFIED:20011115T212414Z +STATUS:CONFIRMED +TRANSP:OPAQUE +X-MICROSOFT-CDO-BUSYSTATUS:BUSY +X-MICROSOFT-CDO-INSTTYPE:0 +X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY +X-MICROSOFT-CDO-ALLDAYEVENT:FALSE +X-MICROSOFT-CDO-IMPORTANCE:1 +BEGIN:VALARM +ACTION:DISPLAY +DESCRIPTION:REMINDER +TRIGGER;RELATED=START:-PT00H15M00S +END:VALARM +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/exdate.ics b/framework/iCalendar/tests/fixtures/vTimezone/exdate.ics new file mode 100644 index 000000000..1b7644cc0 --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/exdate.ics @@ -0,0 +1,16 @@ +BEGIN:VCALENDAR +VERSION:2.0 +X-WR-CALNAME:Nasa History +PRODID:-//Apple Computer\, Inc//iCal 1.0//EN +X-WR-RELCALID:7A58AF63-46A0-11D7-BCDE-000A95673266-CALP +X-WR-TIMEZONE;VALUE=TEXT:US/Central +CALSCALE:GREGORIAN +BEGIN:VEVENT +DURATION:P1D +EXDATE;VALUE=DATE:20030428 +DTSTAMP:20030926T233021Z +UID:D2924923-RID +DTSTART;VALUE=DATE:20020428 +SUMMARY:(1961) Little Joe 5B +RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=4 +END:VEVENT diff --git a/framework/iCalendar/tests/fixtures/vTimezone/iscw.ics b/framework/iCalendar/tests/fixtures/vTimezone/iscw.ics new file mode 100644 index 000000000..a057b370f --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/iscw.ics @@ -0,0 +1,103 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +METHOD:PUBLISH +PRODID:-//Apple Computer\, Inc//iCal 1.0//EN +X-WR-RELCALID;VALUE=TEXT:2C1BAB64-E9F4-11D7-ACE3-000393161A98 +X-WR-CALNAME;VALUE=TEXT:ISCW-related events\, Florida +VERSION:2.0 +BEGIN:VEVENT +SEQUENCE:52 +DTSTAMP:20030918T161429Z +SUMMARY:Ontoweb Day http://nextwebgeneration.com/meetings/ontoweb5/ +DTEND; + TZID=/softwarestudio.org/Olson_20011030_5/America/New_York:20031017T180000 +UID:2C1B765F-E9F4-11D7-ACE3-000393161A98 +DTSTART; + TZID=/softwarestudio.org/Olson_20011030_5/America/New_York:20031017T093000 +END:VEVENT +BEGIN:VEVENT +SEQUENCE:48 +DTSTAMP:20030918T161420Z +SUMMARY:Ontoweb SIG day http://nextwebgeneration.com/meetings/ontoweb5/ +DTEND; + TZID=/softwarestudio.org/Olson_20011030_5/America/New_York:20031018T180000 +UID:2C1B809B-E9F4-11D7-ACE3-000393161A98 +DTSTART; + TZID=/softwarestudio.org/Olson_20011030_5/America/New_York:20031018T093000 +END:VEVENT +BEGIN:VEVENT +SEQUENCE:2 +DTSTAMP:20030918T161218Z +SUMMARY:Beach Barbeque +DTEND; + TZID=/softwarestudio.org/Olson_20011030_5/America/New_York:20031017T210000 +UID:2C1B8490-E9F4-11D7-ACE3-000393161A98 +DTSTART; + TZID=/softwarestudio.org/Olson_20011030_5/America/New_York:20031017T200000 +END:VEVENT +BEGIN:VEVENT +SEQUENCE:4 +UID:2C1B8832-E9F4-11D7-ACE3-000393161A98 +DTSTAMP:20030918T161537Z +SUMMARY:DAML PI meeting - http: + //www.daml.org/listarchive/daml-all/0283.html +DTSTART;VALUE=DATE:20031016 +DTEND;VALUE=DATE:20031019 +END:VEVENT +BEGIN:VEVENT +SEQUENCE:2 +UID:2C1B8BE6-E9F4-11D7-ACE3-000393161A98 +DTSTAMP:20030918T161930Z +SUMMARY:ISCW workshops & tutorials (including one on OWL) +DTSTART;VALUE=DATE:20031020 +DURATION:P1D +END:VEVENT +BEGIN:VEVENT +SEQUENCE:3 +UID:2C1B8F73-E9F4-11D7-ACE3-000393161A98 +DTSTAMP:20030918T162117Z +SUMMARY:ISCW conference - technical program\, including invited talks by + Jim and TBL. +DTSTART;VALUE=DATE:20031021 +DTEND;VALUE=DATE:20031024 +END:VEVENT +BEGIN:VEVENT +SEQUENCE:4 +UID:2C1B9326-E9F4-11D7-ACE3-000393161A98 +DTSTAMP:20030918T162014Z +SUMMARY:K-CAP conference - http://sern.ucalgary.ca/ksi/K-CAP/K-CAP2003/ +DTSTART;VALUE=DATE:20031023 +DTEND;VALUE=DATE:20031026 +END:VEVENT +BEGIN:VEVENT +SEQUENCE:5 +UID:2C1B96D2-E9F4-11D7-ACE3-000393161A98 +DTSTAMP:20030918T162022Z +SUMMARY:K-CAP workshops\, including \"Knowledge Markup and Semantic + Annotation\"\r\"Knowledge Management and the Semantic Web\" - http: + //sern.ucalgary.ca/ksi/K-CAP/K-CAP2003/ +DTSTART;VALUE=DATE:20031025 +DTEND;VALUE=DATE:20031027 +END:VEVENT + +BEGIN:VTIMEZONE +TZID:/softwarestudio.org/Olson_20011030_5/America/New_York +X-LIC-LOCATION:America/New_York +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19701025T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19700405T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 +END:DAYLIGHT +END:VTIMEZONE + +END:VCALENDAR + diff --git a/framework/iCalendar/tests/fixtures/vTimezone/meeting.ics b/framework/iCalendar/tests/fixtures/vTimezone/meeting.ics new file mode 100644 index 000000000..a91e150bb --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/meeting.ics @@ -0,0 +1,71 @@ +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:Microsoft CDO for Microsoft Exchange +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:(GMT-05.00) Eastern Time (US & Canada) +X-MICROSOFT-CDO-TZID:10 +BEGIN:STANDARD +DTSTART:16010101T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:16010101T020000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=4;BYDAY=1SU +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:20060524T175426Z +DTSTART;TZID="(GMT-05.00) Eastern Time (US & Canada)":20060605T130000 +SUMMARY:Updated: Webex Training - Encryption Push +UID:040000008200E00074C5B7101A82E008000000009067FAA5207FC601000000000000000 + 010000000CE96E700B6553147A79107627E39018C +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN="CT-Sales" + :MAILTO:CT-Sales@CipherTrust.com +ORGANIZER;CN="Maribell Buchanan":MAILTO:Maribell.Buchanan@CipherTrust.com +LOCATION: +DTEND;TZID="(GMT-05.00) Eastern Time (US & Canada)":20060605T140000 +DESCRIPTION:Topic: Encryption Push Training (Note unlisted meeting)\NDate: + Monday\, June 5\, 2006 \NTime: 1:00 pm\, Eastern Daylight Time (GMT -04:00 + \, New York) \NMeeting number: 481 417 492 \NMeeting password: ctpush \N\N + Please click the following link to view or edit your meeting information\, + or to start your meeting. \N\N \N\NTeleconference: \NUS Dial In: 877.208.5357 or 770. + 659.4232\NUnited Kingdom Dial In: 08000320432\NConference Code: 67890491 + 98 \N\NTo add this meeting to your calendar program (for example\, Microso + ft Outlook or Lotus Notes)\, do the following: \N\N* For all calendar pro + grams (except Lotus Notes)\, click the following link\, or copy the link a + nd paste it into your Web browser: \N \N\N*For Lotus Notes\, follo + w these steps: \N1.Right-click the attached iCalendar format (*.ics) file\ + , and then choose View. \N2.Click Import All. A new broadcast email messag + e is added to your Inbox. \N3.Open the new message. \N4.Click Respond butt + on. A menu appears. \N5.Click Accept. \N\NTo check for compatibility of ri + ch media players for Universal Communications Format (UCF)\, click the fol + lowing link: \Nhttps://ciphertrust.webex.com/ciphertrust/systemdiagnosis.p + hp \N\Nhttp://www.webex.com\NWe've got to start meeting like this(TM) \N\N + \N +SEQUENCE:0 +PRIORITY:5 +CLASS: +CREATED:20060524T175427Z +LAST-MODIFIED:20060524T175428Z +STATUS:CONFIRMED +TRANSP:OPAQUE +X-MICROSOFT-CDO-BUSYSTATUS:BUSY +X-MICROSOFT-CDO-INSTTYPE:0 +X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY +X-MICROSOFT-CDO-ALLDAYEVENT:FALSE +X-MICROSOFT-CDO-IMPORTANCE:1 +X-MICROSOFT-CDO-OWNERAPPTID:974673878 +BEGIN:VALARM +ACTION:DISPLAY +DESCRIPTION:REMINDER +TRIGGER;RELATED=START:-PT00H15M00S +END:VALARM +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/privacy_events.ics b/framework/iCalendar/tests/fixtures/vTimezone/privacy_events.ics new file mode 100644 index 000000000..14f51bdb9 --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/privacy_events.ics @@ -0,0 +1,263 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN +BEGIN:VEVENT +CREATED:20060719T072322Z +LAST-MODIFIED:20060719T072322Z +DTSTAMP:20060719T072322Z +UID:uuid:1149656622168 +SUMMARY:Australian Smart Card Summit +CLASS:PUBLIC +DTSTART;TZID=/mozilla.org/20050126_1/Australia/Sydney:20060628T140000 +DTEND;TZID=/mozilla.org/20050126_1/Australia/Sydney:20060628T150000 +URL:http://www.acevents.com.au/cards2006/ +DESCRIPTION:The Summit brings together the users and suppliers of smart + card technology to discuss critical industry trends\, partnerships & + alliances\, developing standards\, new applications\, new business + opportunities and future direction. +LOCATION:Sydney Convention and Exhibition Centre +END:VEVENT +BEGIN:VEVENT +CREATED:20060719T072322Z +LAST-MODIFIED:20060719T072322Z +DTSTAMP:20060719T072322Z +UID:uuid:1149657736010 +SUMMARY:Privacy Laws & Business - 19th Annual International Conference +CLASS:PUBLIC +DTSTART;VALUE=DATE:20060702 +DTEND;VALUE=DATE:20060703 +URL:http://www.privacylaws.com/conferences.annual.html +DESCRIPTION:Privacy Crisis Ahead? Investing enough in data protection to + strengthen and defend your reputation\nThe Privacy Laws & Business 19th + Annual International Conference features 50 speakers from 10 countries + over three intensive days. Over half of these speakers are giving a + presentation at this conference for the first time. +LOCATION:St. John's College\, Cambridge\, UK +END:VEVENT +BEGIN:VEVENT +CREATED:20060719T072322Z +LAST-MODIFIED:20060724T033326Z +DTSTAMP:20060724T033326Z +UID:uuid:1151539498937 +SUMMARY:Privacy in Practice 2006 - Introductory and Advanced sessions for + Privacy Contact Officers\, tailored for the public and private sectors +PRIORITY:0 +CLASS:PUBLIC +DTSTART;VALUE=DATE:20061024 +DTEND;VALUE=DATE:20061027 +LOCATION:Sydney CBD +DESCRIPTION:Anna Johnston and Nigel Waters\, former Deputy Privacy + Commissioners for NSW and the Commonwealth respectively\, are offering + Privacy Contact Officers (PCOs) an opportunity to update their knowledge + and upgrade their skills in the practical implementation of privacy + laws.\n\nIntroductory half day sessions on 24 October offer newly + appointed PCOs the opportunity to familiarise themselves with the + relevant privacy principles as they are being interpreted and applied in + practice\, and to learn about the practical role of a PCO\, including + compliance strategies.\n\nSeparate advanced full day sessions will focus + on the law as it applies to the NSW public sector (25 October)\, and to + the private sector in NSW (26 October)\, exploring in more depth the + interpretation and enforcement of privacy laws\, including new laws + covering health information\, workplace surveillance\, and + telecommunications. The advanced sessions will also involve small group + workshopping of scenarios\, to further develop the practical skills and + compliance strategies needed to fulfil the PCO role. +URL:http: + //home.iprimus.com.au/nigelwaters/Privacy%20in%20Practice%20seminar%202006 + .htm +END:VEVENT +BEGIN:VEVENT +CREATED:20060719T072322Z +LAST-MODIFIED:20060719T072322Z +DTSTAMP:20060719T072322Z +UID:uuid:1149656344744 +SUMMARY:Australian Biotechnology Summit 2006 +CLASS:PUBLIC +DTSTART;VALUE=DATE:20060725 +DTEND;VALUE=DATE:20060727 +URL:http://www.acevents.com.au/bio2006 +DESCRIPTION:Now into its 4th year\, this summit attracts leading medical + practitioners\, policy heads\, project financiers\, thought leaders and + scientists. This July\, a distinguished panel of speakers is updating + attendees about advances in a sector valued globally at US$63 billion. + (Source: Chicago Tribune\, April 2006)\n\nBe there this July for a + first-hand look at how the big pharmas\, medical institutions\, partners + and consumers are benefiting from medical discoveries\, commercial + alliances and partnerships\, venture partnerships\, co-development\, as + well as mergers and acquisitions.\n\nMake sure you attend to share + practical and time-saving strategies to:\n\n- DELIVER profits across your + product pipeline\n- MOVE from trials to commercialisation\n- MAXIMISE the + value of your assets\n- STRENGHTEN branding and distribution\n- BENEFIT + from *mergers & acquisitions *co-licensing *joint ventures *capital + raisings\n- READY products for manufacturing and sales +LOCATION:Sydney Convention and Exhibition Centre +END:VEVENT +BEGIN:VEVENT +CREATED:20060719T072322Z +LAST-MODIFIED:20060719T072322Z +DTSTAMP:20060719T072322Z +UID:uuid:1149657358209 +SUMMARY:SOCAP Australia 2006 Symposium +CLASS:PUBLIC +DTSTART;TZID=/mozilla.org/20050126_1/Australia/Sydney:20060815T133000 +DTEND;TZID=/mozilla.org/20050126_1/Australia/Sydney:20060815T160000 +URL:http: + //socap.org.au/html/s02_article/article_view.asp?id=638&nav_cat_id=134&nav + _top_id=58&dsa=20 +DESCRIPTION:The Society of Consumer Affairs Professionals (SOCAP) + Australia Symposium is the oldest and most prestigious consumer affairs + and customer service event in Australia. Supported by the various + industry regulatory bodies in Australia\, the Symposium provides a forum + that promotes best practice and research into customer service and + consumer affairs. +LOCATION:Sydney\, Manly Pacific +END:VEVENT +BEGIN:VEVENT +CREATED:20060719T072322Z +LAST-MODIFIED:20060719T072322Z +DTSTAMP:20060719T072322Z +UID:uuid:1151028064071 +SUMMARY:Health Informatics Conference +CLASS:PUBLIC +DTSTART;VALUE=DATE:20060819 +DTEND;VALUE=DATE:20060822 +URL:http://www.hic.org.au +DESCRIPTION:Bridging the Digital Divide: Consumers\, Clinicians & + Computers\n\nHIC 2006 is Australia's premier health informatics + conference. This event brings national and international experts in + health information technology together to address some of the critical + information systems issues in Australian health care. It is also an + important opportunity to meet and exchange views with colleagues in the + health information technology sector. +LOCATION:Sydney Convention Centre +END:VEVENT +BEGIN:VEVENT +CREATED:20060720T041700Z +LAST-MODIFIED:20060720T042923Z +DTSTAMP:20060720T042923Z +UID:uuid1153369107395 +SUMMARY:Security 2006 +PRIORITY:0 +CLASS:PUBLIC +DTSTART;VALUE=DATE:20060829 +DTEND;VALUE=DATE:20060901 +DESCRIPTION:Security 2006 Conference & Exhibition is the event that + brings the industry's key decision makers\, leaders\, suppliers and + customers together to do business.\n\nNow entering its 21st year\, + Australia's premier security industry event offers a unique platform to + target a highly qualified audience of security professionals. +LOCATION:Hall 5 and 6\, Sydney Convention and Exhibition Centre\, Darling + Harbour +URL:http: + //www.asial.com.au/default.asp?page=security+expo/home&flashver=8.0.22 +END:VEVENT +BEGIN:VEVENT +CREATED:20060720T041921Z +LAST-MODIFIED:20060720T042110Z +DTSTAMP:20060720T042110Z +UID:uuid1153369270069 +SUMMARY:Border Control & Port Security 2006 +PRIORITY:0 +CLASS:PUBLIC +DTSTART;VALUE=DATE:20060807 +DTEND;VALUE=DATE:20060809 +DESCRIPTION:Border Control & Port Security 2006 will focus on the + legislative and technology challenges facilitating the transformation of + inter- agency initiatives to secure ports and strategic points of entry + into Australia. This event will analyse and review the progress\, + achievements and pitfalls of agency and industry initiatives and focus on + future directions. +LOCATION:The Vibe Savoy Hotel\, Melbourne\, Victoria +URL:http: + //www.iir.com.au/conferences/confdetail.html?detail=I0354.html&cat_code=se + curity&conf_code=I0354 +END:VEVENT +BEGIN:VEVENT +CREATED:20060728T011147Z +LAST-MODIFIED:20060728T011338Z +DTSTAMP:20060728T011338Z +UID:uuid1154049185025 +SUMMARY:Identity Fraud Summit +PRIORITY:0 +CLASS:PUBLIC +DTSTART;VALUE=DATE:20061031 +DTEND;VALUE=DATE:20061103 +DESCRIPTION:The key meeting place for those involved with Fraud & + Identity Management in the public and private sector.\nDeveloping a + synthesis between public and private sector to produce a national + response.\n- DISCOVER... the latest Global trends in Identity Fraud\n- + FIND OUT... what the impact and cost of Identity Fraud is on Australia\n- + TAKE PART... in Seven Interactive Discussions\n- MEET... and swap ideas + with your industry peers at the Networking Drinks\n- LEARN... how + collaboration can help to combat Identity Fraud (trust centre concept)... + from Westpac & Australia Post\n- GET INFORMED... on the Hong Kong + National Identity Card featuring Raymond Wai-man Wong\n- UNDERSTAND... + the role and value of the government health and welfare access card +LOCATION:Swissôtel Sydney +URL:http: + //www.iir.com.au/conferences/confdetail.html?conf_code=L1282&cat_code=fina + nce&detail=L1282.html +END:VEVENT +BEGIN:VEVENT +CREATED:20060809T015738Z +LAST-MODIFIED:20060809T023217Z +DTSTAMP:20060809T023217Z +UID:uuid1155089998351 +SUMMARY:Privacy Awareness Week +PRIORITY:0 +CLASS:PUBLIC +DTSTART;VALUE=DATE;TZID=/mozilla.org/20050126_1/Asia/Sakhalin:20060827 +DTEND;VALUE=DATE;TZID=/mozilla.org/20050126_1/Asia/Sakhalin:20060903 +URL:http://www.privacy.gov.au/news/paw.html +LOCATION:Victoria\, NSW\, NT and Federal +DESCRIPTION:The week is an opportunity for organisations and agencies + affected by the Privacy Act 1998 (Cth) to promote privacy awareness to + their staff\, custotmers\, and to the wider community.\n\nPrivacy + Awareness Week is a promotional campaign first initiated by Privacy + Victoria in 2001. This year\, for the first time\, Privacy Awareness Week + has gone national and will be jointly promoted by the Office of the + Privacy Commissioner\, Privacy Victorian and Privacy NSW and the Office + of the Information Commissioner of the Northern Territory.\n\nThe theme + is \"Don't leave privacy to chance\".\n\nOPC - http: + //www.privacy.gov.au/news/paw.html\nVictoria - http: + //www.privacy.vic.gov.au/dir100/priweb.nsf\nNSW - http: + //www.lawlink.nsw.gov.au/lawlink/privacynsw/ll_pnsw.nsf/pages/PNSW_index\n + NT - http://www.privacy.nt.gov.au/ +END:VEVENT +BEGIN:VTIMEZONE +TZID:/mozilla.org/20050126_1/Asia/Sakhalin +X-LIC-LOCATION:Asia/Sakhalin +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:SAKT +DTSTART:19701025T030000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:SAKST +DTSTART:19700329T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3 +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:/mozilla.org/20050126_1/Australia/Sydney +X-LIC-LOCATION:Australia/Sydney +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19700329T030000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:19701025T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/rfc2445.ics b/framework/iCalendar/tests/fixtures/vTimezone/rfc2445.ics new file mode 100644 index 000000000..363231d6f --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/rfc2445.ics @@ -0,0 +1,305 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//hacksw/handcal//NONSGML v1.0//EN +BEGIN:VEVENT +DTSTART:19970714T170000Z +DTEND:19970715T035959Z +SUMMARY:Bastille Day Party +END:VEVENT + +BEGIN:VEVENT +UID:19970901T130000Z-123401@host.com +DTSTAMP:19970901T1300Z +DTSTART:19970903T163000Z +DTEND:19970903T190000Z +SUMMARY:Annual Employee Review +CLASS:PRIVATE +CATEGORIES:BUSINESS,HUMAN RESOURCES +END:VEVENT + +BEGIN:VEVENT +UID:19970901T130000Z-123402@host.com +DTSTAMP:19970901T1300Z +DTSTART:19970401T163000Z +DTEND:19970402T010000Z +SUMMARY:Laurel is in sensitivity awareness class. +CLASS:PUBLIC +CATEGORIES:BUSINESS,HUMAN RESOURCES +TRANSP:TRANSPARENT +END:VEVENT + +BEGIN:VEVENT +UID:19970901T130000Z-123403@host.com +DTSTAMP:19970901T1300Z +DTSTART:19971102 +SUMMARY:Our Blissful Anniversary +CLASS:CONFIDENTIAL +CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION +RRULE:FREQ=YEARLY +END:VEVENT + +BEGIN:VTODO +UID:19970901T130000Z-123404@host.com +DTSTAMP:19970901T1300Z +DTSTART:19970415T133000Z +DUE:19970416T045959Z +SUMMARY:1996 Income Tax Preparation +CLASS:CONFIDENTIAL +CATEGORIES:FAMILY,FINANCE +PRIORITY:1 +STATUS:NEEDS-ACTION +END:VTODO +BEGIN:VJOURNAL +UID:19970901T130000Z-123405@host.com +DTSTAMP:19970901T1300Z +DTSTART;VALUE=DATE:19970317 +SUMMARY:Staff meeting minutes +DESCRIPTION:1. Staff meeting: Participants include Joe\, Lisa + and Bob. Aurora project plans were reviewed. There is currently + no budget reserves for this project. Lisa will escalate to + management. Next meeting on Tuesday.\n + 2. Telephone Conference: ABC Corp. sales representative called + to discuss new printer. Promised to get us a demo by Friday.\n + 3. Henry Miller (Handsoff Insurance): Car was totaled by tree. + Is looking into a loaner car. 654-2323 (tel). +END:VJOURNAL +BEGIN:VFREEBUSY +ORGANIZER:MAILTO:jane_doe@host1.com +ATTENDEE:MAILTO:john_public@host2.com +DTSTART:19971015T050000Z +DTEND:19971016T050000Z +DTSTAMP:19970901T083000Z +END:VFREEBUSY +BEGIN:VFREEBUSY +ORGANIZER:MAILTO:jane_doe@host1.com +ATTENDEE:MAILTO:john_public@host2.com +DTSTAMP:19970901T100000Z +FREEBUSY;VALUE=PERIOD:19971015T050000Z/PT8H30M, + 19971015T160000Z/PT5H30M,19971015T223000Z/PT6H30M +URL:http://host2.com/pub/busy/jpublic-01.ifb +COMMENT:This iCalendar file contains busy time information for + the next three months. +END:VFREEBUSY +BEGIN:VFREEBUSY +ORGANIZER:jsmith@host.com +DTSTART:19980313T141711Z +DTEND:19980410T141711Z +FREEBUSY:19980314T233000Z/19980315T003000Z +FREEBUSY:19980316T153000Z/19980316T163000Z +FREEBUSY:19980318T030000Z/19980318T040000Z +URL:http://www.host.com/calendar/busytime/jsmith.ifb +END:VFREEBUSY +BEGIN:VTIMEZONE +TZID:US-Eastern +LAST-MODIFIED:19870101T000000Z +BEGIN:STANDARD +DTSTART:19971026T020000 +RDATE:19971026T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19971026T020000 +RDATE:19970406T020000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:US-Eastern +LAST-MODIFIED:19870101T000000Z +TZURL:http://zones.stds_r_us.net/tz/US-Eastern +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:US--Fictitious-Eastern +LAST-MODIFIED:19870101T000000Z +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:US--Fictitious-Eastern +LAST-MODIFIED:19870101T000000Z +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +BEGIN:DAYLIGHT +DTSTART:19990424T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=4 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VALARM +TRIGGER;VALUE=DATE-TIME:19970317T133000Z +REPEAT:4 +DURATION:PT15M +ACTION:AUDIO +ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud +END:VALARM +BEGIN:VALARM +TRIGGER:-PT30M +REPEAT:2 +DURATION:PT15M +ACTION:DISPLAY +DESCRIPTION:Breakfast meeting with executive\n + team at 8:30 AM EST. +END:VALARM +BEGIN:VALARM +TRIGGER:-P2D +ACTION:EMAIL +ATTENDEE:MAILTO:john_doe@host.com +SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING *** +DESCRIPTION:A draft agenda needs to be sent out to the attendees + to the weekly managers meeting (MGR-LIST). Attached is a + pointer the document template for the agenda file. +ATTACH;FMTTYPE=application/binary:http://host.com/templates/agen + da.doc +END:VALARM +BEGIN:VALARM +TRIGGER;VALUE=DATE-TIME:19980101T050000Z +REPEAT:23 +DURATION:PT1H +ACTION:PROCEDURE +ATTACH;FMTTYPE=application/binary:ftp://host.com/novo- + procs/felizano.exe +END:VALARM + +BEGIN:VTIMEZONE +TZID:US-Eastern +BEGIN:STANDARD +DTSTART:19981025T020000 +RDATE:19981025T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19990404T020000 +RDATE:19990404T020000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +DTSTAMP:19980309T231000Z +UID:guid-1.host1.com +ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com +ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: + MAILTO:employee-A@host.com +DESCRIPTION:Project XYZ Review Meeting +CATEGORIES:MEETING +CLASS:PUBLIC +CREATED:19980309T130000Z +SUMMARY:XYZ Project Review +DTSTART;TZID=US-Eastern:19980312T083000 +DTEND;TZID=US-Eastern:19980312T093000 +LOCATION:1CP Conference Room 4350 +END:VEVENT + +BEGIN:VEVENT +DTSTAMP:19970324T1200Z +SEQUENCE:0 +UID:uid3@host1.com +ORGANIZER:MAILTO:jdoe@host1.com +DTSTART:19970324T123000Z +DTEND:19970324T210000Z +CATEGORIES:MEETING,PROJECT +CLASS:PUBLIC +SUMMARY:Calendaring Interoperability Planning Meeting +DESCRIPTION:Discuss how we can test c&s interoperability\n + using iCalendar and other IETF standards. +LOCATION:LDB Lobby +ATTACH;FMTTYPE=application/postscript:ftp://xyzCorp.com/pub/ + conf/bkgrnd.ps +END:VEVENT + +BEGIN:VTODO +DTSTAMP:19980130T134500Z +SEQUENCE:2 +UID:uid4@host1.com +ORGANIZER:MAILTO:unclesam@us.gov +ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@host.com +DUE:19980415T235959 +STATUS:NEEDS-ACTION +SUMMARY:Submit Income Taxes +BEGIN:VALARM +ACTION:AUDIO +TRIGGER:19980403T120000 +ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio- + files/ssbanner.aud +REPEAT:4 +DURATION:PT1H +END:VALARM +END:VTODO + +BEGIN:VJOURNAL +DTSTAMP:19970324T120000Z +UID:uid5@host1.com +ORGANIZER:MAILTO:jsmith@host.com +STATUS:DRAFT +CLASS:PUBLIC +CATEGORIES:Project Report, XYZ, Weekly Meeting +DESCRIPTION:Project xyz Review Meeting Minutes\n + Agenda\n1. Review of project version 1.0 requirements.\n2. + Definition + of project processes.\n3. Review of project schedule.\n + Participants: John Smith\, Jane Doe\, Jim Dandy\n-It was + decided that the requirements need to be signed off by + product marketing.\n-Project processes were accepted.\n + -Project schedule needs to account for scheduled holidays + and employee vacation time. Check with HR for specific + dates.\n-New schedule will be distributed by Friday.\n- + Next weeks meeting is cancelled. No meeting until 3/23. +END:VJOURNAL + +BEGIN:VFREEBUSY +ORGANIZER:MAILTO:jsmith@host.com +DTSTART:19980313T141711Z +DTEND:19980410T141711Z +FREEBUSY:19980314T233000Z/19980315T003000Z +FREEBUSY:19980316T153000Z/19980316T163000Z +FREEBUSY:19980318T030000Z/19980318T040000Z +URL:http://www.host.com/calendar/busytime/jsmith.ifb +END:VFREEBUSY +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/test.vcs b/framework/iCalendar/tests/fixtures/vTimezone/test.vcs new file mode 100644 index 000000000..33476d181 --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/test.vcs @@ -0,0 +1,34 @@ +BEGIN:VCALENDAR +BEGIN:VTIMEZONE +TZID:US/Eastern +LAST-MODIFIED:19870101T000000Z +TZURL:http://zones.stds_r_us.net/tz/US-Eastern +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE + +BEGIN:VEVENT +UID:14b2f1a:10aba5a6339:3fcd +SUMMARY:2007 Astronaut Glove Challenge: APRIL DATE TBD +LOCATION:To be determined (TBD) +DTSTART;TZID=US/Eastern:20021101 +DTEND;TZID=US/Eastern:20021101 +URL:www.astronaut-glove.us +ORGANIZER;CN="Barry Epstein":MAILTO:barry.epstein@nasa.gov +CATEGORIES:Centennial Challenges* +STATUS:CONFIRMED +END:VEVENT + +END:VCALENDAR \ No newline at end of file diff --git a/framework/iCalendar/tests/fixtures/vTimezone/test4.vcs b/framework/iCalendar/tests/fixtures/vTimezone/test4.vcs new file mode 100644 index 000000000..ef06c6474 --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/test4.vcs @@ -0,0 +1,39 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +X-WR-TIMEZONE;VALUE=TEXT:America/New_York +METHOD:PUBLISH +PRODID:-//Apple Computer\, Inc//iCal 1.0//EN +X-WR-CALNAME;VALUE=TEXT:Chiefs +X-WR-RELCALID;VALUE=TEXT:D60439DF-C1C9-11D6-9446-003065F198AC +VERSION:2.0 + +BEGIN:VEVENT +DTSTAMP:20020906T031451Z +SUMMARY:Chiefs vs. Buffalo @ Arrowhead Stadium +DTEND; + TZID=/softwarestudio.org/Olson_20011030_5/America/New_York:20021117T170000 +UID:D604022C-C1C9-11D6-9446-003065F198AC +DTSTART; + TZID=/softwarestudio.org/Olson_20011030_5/America/New_York:20021117T140000 +END:VEVENT + +BEGIN:VTIMEZONE +TZID:/softwarestudio.org/Olson_20011030_5/America/New_York +X-LIC-LOCATION:America/New_York +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19701025T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19700405T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 +END:DAYLIGHT +END:VTIMEZONE + +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/test_recurring.vcs b/framework/iCalendar/tests/fixtures/vTimezone/test_recurring.vcs new file mode 100644 index 000000000..8d01f59a7 --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/test_recurring.vcs @@ -0,0 +1,50 @@ +BEGIN:VCALENDAR +X-LOTUS-CHARSET:UTF-8 +VERSION:2.0 +PRODID:-//Lotus Development Corporation//NONSGML Notes 6.0//EN +METHOD:REQUEST +BEGIN:VTIMEZONE +TZID:Central European +BEGIN:STANDARD +DTSTART:19501029T020000 +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +RRULE:FREQ=YEARLY;BYMINUTE=0;BYHOUR=2;BYDAY=-1SU;BYMONTH=10 +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19500326T020000 +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +RRULE:FREQ=YEARLY;BYMINUTE=0;BYHOUR=2;BYDAY=-1SU;BYMONTH=3 +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +DTSTART;TZID="Central European":20040417T110000 +DTEND;TZID="Central European":20040417T113000 +TRANSP:OPAQUE +DTSTAMP:20040416T075254Z +SEQUENCE:0 +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN="XXXX/UNSA" + ;RSVP=FALSE:mailto:XXXX@XXXX.ba +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE + :mailto:XXXX1@XXXX.com +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION + ;CN="XXXX2";RSVP=TRUE:mailto:XXXX2@XXXX.ba +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION + ;CN="XXXX3";RSVP=TRUE:mailto:XXXX3@XXXX.ba +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE + :mailto:XXXX4@XXXX.ba +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE + :mailto:vljubovic@smartnet.ba +CLASS:PUBLIC +SUMMARY:XXXStriked out XXX +ORGANIZER;CN="XXXX/UNSA":mailto:XXXX@XXXX.ba +UID:59A47452891243FCC1256E78002B082C-Lotus_Notes_Generated +X-LOTUS-BROADCAST:FALSE +X-LOTUS-UPDATE-SEQ:1 +X-LOTUS-UPDATE-WISL:$S:1;$L:1;$B:1;$R:1;$E:1 +X-LOTUS-NOTESVERSION:2 +X-LOTUS-NOTICETYPE:I +X-LOTUS-CHILD_UID:59A47452891243FCC1256E78002B082C +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/tests/fixtures/vTimezone/wicca.ics b/framework/iCalendar/tests/fixtures/vTimezone/wicca.ics new file mode 100644 index 000000000..c5b198c2d --- /dev/null +++ b/framework/iCalendar/tests/fixtures/vTimezone/wicca.ics @@ -0,0 +1,568 @@ +BEGIN:VCALENDAR +VERSION + :2.0 +PRODID + :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN +BEGIN:VEVENT +UID + :293f6ec0-7d5c-11d9-9edb-86b60372ed4f +SUMMARY + :Wolf Moon +CATEGORIES + :Religious +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + :20050125T103200 +DTEND + :20050125T103200 +DTSTAMP + :20050213T010920Z +END:VEVENT +BEGIN:VEVENT +UID + :4b796be0-7d5c-11d9-a79e-f521d81ef98e +SUMMARY + :Snow Moon +CATEGORIES + :Religious +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + :20050224T045400 +DTEND + :20050224T045400 +DTSTAMP + :20050213T011118Z +END:VEVENT +BEGIN:VEVENT +UID + :687d6650-7d5c-11d9-b9ce-d66b104d4c5c +SUMMARY + :Worm Moon +CATEGORIES + :Religious +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + :20050325T205800 +DTEND + :20050325T205800 +DTSTAMP + :20050213T011216Z +END:VEVENT +BEGIN:VEVENT +UID + :7fdedfc0-7d5c-11d9-9f01-8a1645cec7bc +SUMMARY + :Pink Moon +CATEGORIES + :Religious +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + :20050424T100600 +DTEND + :20050424T100600 +DTSTAMP + :20050213T011313Z +END:VEVENT +BEGIN:VEVENT +UID + :9b7bc120-7d5c-11d9-b9fd-fddd77a2f4ee +SUMMARY + :Flower Moon +CATEGORIES + :Religious +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + :20050523T201800 +DTEND + :20050523T201800 +DTSTAMP + :20050213T011346Z +END:VEVENT +BEGIN:VEVENT +UID + :b74fa540-7d5c-11d9-8bc4-c07a48ed7f9f +SUMMARY + :Strawberry Moon +CATEGORIES + :Religious +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + :20050622T041400 +DTEND + :20050622T041400 +DTSTAMP + :20050213T011447Z +END:VEVENT +BEGIN:VEVENT +UID + :cac83ae0-7d5c-11d9-83a6-c557260cbb42 +SUMMARY + :Buck Moon +CATEGORIES + :Religious +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + :20050721T110000 +DTEND + :20050721T110000 +DTSTAMP + :20050213T011521Z +END:VEVENT +BEGIN:VEVENT +UID + :e29632a0-7d5c-11d9-8e39-c4ffeaa792b7 +SUMMARY + :Sturgeon Moon +CATEGORIES + :Religious +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + :20050819T175300 +DTEND + :20050819T175300 +DTSTAMP + :20050213T011549Z +END:VEVENT +BEGIN:VEVENT +UID + :f755ca60-7d5c-11d9-834c-eca1a5a058a8 +SUMMARY + :Harvest Moon +CATEGORIES + :Religious +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + :20050918T020100 +DTEND + :20050918T020100 +DTSTAMP + :20050213T011634Z +END:VEVENT +BEGIN:VEVENT +UID + :0e53f0a0-7d5d-11d9-aa77-85a55723aa1a +SUMMARY + :Hunter's Moon +CATEGORIES + :Religious +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + :20041017T121400 +DTEND + :20041017T121400 +DTSTAMP + :20050213T011711Z +END:VEVENT +BEGIN:VEVENT +UID + :1ef9be90-7d5d-11d9-a40c-bbc7de36c237 +SUMMARY + :Beaver Moon +CATEGORIES + :Religious +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + :20051116T005700 +DTEND + :20051116T005700 +DTSTAMP + :20050213T011742Z +END:VEVENT +BEGIN:VEVENT +UID + :311774a0-7d5d-11d9-9276-c725d4bd91bb +SUMMARY + :Cold Moon +CATEGORIES + :Religious +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + :20051215T161500 +DTEND + :20051215T161500 +DTSTAMP + :20050213T011811Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :a35db050-7d57-11d9-acd7-80bf3de81f21 +SUMMARY + :Imbolc +CATEGORIES + :Religious +URL + :http://en.wikipedia.org/wiki/Imbolc +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20050202 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20050203 +DTSTAMP + :20050213T003803Z +LAST-MODIFIED + :20050213T013635Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :ee441e90-7d58-11d9-9cee-8ded43aa4674 +SUMMARY + :Ostara (Spring Equinox) +DESCRIPTION + :Vernal equinox - 2005-03-20 12:31 +CATEGORIES + :Religious +URL + :http://en.wikipedia.org/wiki/Ostara +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20050320 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20050321 +DTSTAMP + :20050213T004630Z +LAST-MODIFIED + :20050213T013646Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :ca2146f0-7d59-11d9-8273-cf31bbadf60d +SUMMARY + :Beltane +CATEGORIES + :Religious +URL + :http://en.wikipedia.org/wiki/Beltane +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20050501 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20050502 +DTSTAMP + :20050213T005347Z +LAST-MODIFIED + :20050213T013657Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :475aa800-7d59-11d9-8ed1-d5e698b9bd8a +SUMMARY + :Litha (Summer Solstice) +DESCRIPTION + :Summer solstice: 2005-06-21 06:37 +CATEGORIES + :Religious +URL + :http://en.wikipedia.org/wiki/Midsummer +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20050621 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20050622 +DTSTAMP + :20050213T004839Z +LAST-MODIFIED + :20050213T013708Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :efb2fd10-7d59-11d9-a277-a16bba33fd3b +SUMMARY + :Lughnasadh +CATEGORIES + :Religious +URL + :http://en.wikipedia.org/wiki/Lughnasadh +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20050801 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20050802 +DTSTAMP + :20050213T005432Z +LAST-MODIFIED + :20050213T013720Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :6bdc5ec0-7d59-11d9-8b46-f9c22fa24f9b +SUMMARY + :Mabon (Autumnal Equinox) +DESCRIPTION + :Autumnal equinox: 2005-09-22 22:15 +CATEGORIES + :Religious +URL + :http://en.wikipedia.org/wiki/Mabon +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20050922 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20050923 +DTSTAMP + :20050213T005052Z +LAST-MODIFIED + :20050213T013736Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :052e88e0-7d5a-11d9-8b11-cf36bfaf3b82 +SUMMARY + :Samhain +CATEGORIES + :Religious +URL + :http://en.wikipedia.org/wiki/Samhain +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20051031 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20051101 +DTSTAMP + :20050213T005533Z +LAST-MODIFIED + :20050213T013749Z +END:VEVENT +BEGIN:VTIMEZONE +TZID + :/Mozilla.org/BasicTimezones/GMT +LOCATION + :GMT +END:VTIMEZONE +BEGIN:VEVENT +UID + :94627ab0-7d59-11d9-baa4-ff7960c01405 +SUMMARY + :Yule (Winter Solstice) +DESCRIPTION + :Winter solstice: 2005-12-21 18:33 +CATEGORIES + :Religious +URL + :http://en.wikipedia.org/wiki/Yule +STATUS + :CONFIRMED +CLASS + :PUBLIC +X-MOZILLA-ALARM-DEFAULT-LENGTH + :0 +DTSTART + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20051221 +DTEND + ;VALUE=DATE + ;TZID=/Mozilla.org/BasicTimezones/GMT + :20051222 +DTSTAMP + :20050213T005154Z +LAST-MODIFIED + :20050213T013804Z +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/tests/geo.phpt b/framework/iCalendar/tests/geo.phpt new file mode 100644 index 000000000..a02df3ed3 --- /dev/null +++ b/framework/iCalendar/tests/geo.phpt @@ -0,0 +1,37 @@ +--TEST-- +GEO test +--FILE-- +parseVCalendar($data); +$vcard = $ical->getComponent(0); +var_export($vcard->getAttribute('GEO')); +echo "\n"; + +$data = 'BEGIN:VCARD +VERSION:3.0 +GEO:37.386013;-122.082932 +END:VCARD'; + +$ical->parseVCalendar($data); +$vcard = $ical->getComponent(0); +var_export($vcard->getAttribute('GEO')); + +?> +--EXPECT-- +array ( + 'latitude' => -17.87, + 'longitude' => 37.24, +) +array ( + 'latitude' => 37.386013, + 'longitude' => -122.082932, +) diff --git a/framework/iCalendar/tests/iCalendar.phpt b/framework/iCalendar/tests/iCalendar.phpt new file mode 100644 index 000000000..03c9dfc63 --- /dev/null +++ b/framework/iCalendar/tests/iCalendar.phpt @@ -0,0 +1,36 @@ +--TEST-- +Tests the date parsing in iCalendar.php +--FILE-- +parseVCalendar($data); + +// Get the vFreeBusy component +$vfb = $ical->getComponent(0); + +var_dump($vfb->getAttribute('DTSTART')); +var_dump($vfb->getAttribute('DTEND')); + +?> +--EXPECT-- +int(0) +string(6) "BORKED" diff --git a/framework/iCalendar/tests/line-folding.phpt b/framework/iCalendar/tests/line-folding.phpt new file mode 100644 index 000000000..2b551db76 --- /dev/null +++ b/framework/iCalendar/tests/line-folding.phpt @@ -0,0 +1,181 @@ +--TEST-- +Line folding tests. +--FILE-- +setAttribute('UID', 'XXX'); +$event->setAttribute('DTSTART', array('year' => 2008, 'month' => 1, 'mday' => 1), array('VALUE' => 'DATE')); +$event->setAttribute('DTSTAMP', array('year' => 2008, 'month' => 1, 'mday' => 1), array('VALUE' => 'DATE')); +$event->setAttribute('DESCRIPTION', 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam sollicitudin faucibus mauris amet.'); +$ical->addComponent($event); +echo $ical->exportVCalendar(); +echo "\n"; + +$ical = new Horde_iCalendar('1.0'); +$event = Horde_iCalendar::newComponent('vevent', $ical); +$event->setAttribute('UID', 'XXX'); +$event->setAttribute('DTSTART', array('year' => 2008, 'month' => 1, 'mday' => 1), array('VALUE' => 'DATE')); +$event->setAttribute('DTSTAMP', array('year' => 2008, 'month' => 1, 'mday' => 1), array('VALUE' => 'DATE')); +$event->setAttribute('DESCRIPTION', 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam sollicitudin faucibus mauris amet.'); +$ical->addComponent($event); +echo $ical->exportVCalendar(); +echo "\n"; + +$ical = new Horde_iCalendar(); +$event = Horde_iCalendar::newComponent('vevent', $ical); +$event->setAttribute('UID', 'XXX'); +$event->setAttribute('DTSTART', array('year' => 2008, 'month' => 1, 'mday' => 1), array('VALUE' => 'DATE')); +$event->setAttribute('DTSTAMP', array('year' => 2008, 'month' => 1, 'mday' => 1), array('VALUE' => 'DATE')); +$event->setAttribute('DESCRIPTION', 'Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.'); +$ical->addComponent($event); +echo $ical->exportVCalendar(); +echo "\n"; + +$ical = new Horde_iCalendar('1.0'); +$event = Horde_iCalendar::newComponent('vevent', $ical); +$event->setAttribute('UID', 'XXX'); +$event->setAttribute('DTSTART', array('year' => 2008, 'month' => 1, 'mday' => 1), array('VALUE' => 'DATE')); +$event->setAttribute('DTSTAMP', array('year' => 2008, 'month' => 1, 'mday' => 1), array('VALUE' => 'DATE')); +$event->setAttribute('DESCRIPTION', 'Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.', array('CHARSET' => 'UTF-8')); +$ical->addComponent($event); +echo $ical->exportVCalendar(); +echo "\n"; + +$ical = new Horde_iCalendar('1.0'); +$event = Horde_iCalendar::newComponent('vevent', $ical); +$event->setAttribute('UID', 'XXX'); +$event->setAttribute('DTSTART', array('year' => 2008, 'month' => 1, 'mday' => 1), array('VALUE' => 'DATE')); +$event->setAttribute('DTSTAMP', array('year' => 2008, 'month' => 1, 'mday' => 1), array('VALUE' => 'DATE')); +$event->setAttribute('DESCRIPTION', 'Löremipsümdölörsitämet,cönsectetüerädipiscingelit.Aliqüämsöllicitüdinfäücibüsmäürisämet. Löremipsümdölörsitämet,cönsectetüerädipiscingelit.Aliqüämsöllicitüdinfäücibüsmäürisämet.', array('CHARSET' => 'UTF-8')); +$ical->addComponent($event); +echo $ical->exportVCalendar(); +echo "\n"; + +$ical = new Horde_iCalendar(); +$event = Horde_iCalendar::newComponent('vevent', $ical); +$event->setAttribute('UID', 'XXX'); +$event->setAttribute('DTSTART', array('year' => 2008, 'month' => 1, 'mday' => 1), array('VALUE' => 'DATE')); +$event->setAttribute('DTSTAMP', array('year' => 2008, 'month' => 1, 'mday' => 1), array('VALUE' => 'DATE')); +$description = <<setAttribute('DESCRIPTION', $description); +$ical->addComponent($event); +echo $ical->exportVCalendar(); + +?> +--EXPECT-- +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//The Horde Project//Horde_iCalendar Library//EN +METHOD:PUBLISH +BEGIN:VEVENT +UID:XXX +DTSTART;VALUE=DATE:20080101 +DTSTAMP;VALUE=DATE:20080101 +DESCRIPTION:Lorem ipsum dolor sit amet\, consectetuer adipiscing elit. + Aliquam sollicitudin faucibus mauris amet. +SUMMARY: +END:VEVENT +END:VCALENDAR + +BEGIN:VCALENDAR +VERSION:1.0 +PRODID:-//The Horde Project//Horde_iCalendar Library//EN +METHOD:PUBLISH +BEGIN:VEVENT +UID:XXX +DTSTART:20080101T000000 +DTSTAMP:20080101T000000 +DESCRIPTION:Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam sollicitudin faucibus mauris amet. +SUMMARY: +END:VEVENT +END:VCALENDAR + +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//The Horde Project//Horde_iCalendar Library//EN +METHOD:PUBLISH +BEGIN:VEVENT +UID:XXX +DTSTART;VALUE=DATE:20080101 +DTSTAMP;VALUE=DATE:20080101 +DESCRIPTION:Lörem ipsüm dölör sit ämet\, cönsectetüer ädipiscing elit. + Aliqüäm söllicitüdin fäücibüs mäüris ämet. +SUMMARY: +END:VEVENT +END:VCALENDAR + +BEGIN:VCALENDAR +VERSION:1.0 +PRODID:-//The Horde Project//Horde_iCalendar Library//EN +METHOD:PUBLISH +BEGIN:VEVENT +UID:XXX +DTSTART:20080101T000000 +DTSTAMP:20080101T000000 +DESCRIPTION;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:L=C3=B6rem ips=C3=BCm d=C3=B6l=C3=B6r sit =C3=A4met,= + c=C3=B6nsectet=C3=BCer =C3=A4dipiscing elit. Aliq=C3=BC=C3=A4m= + s=C3=B6llicit=C3=BCdin f=C3=A4=C3=BCcib=C3=BCs m=C3=A4=C3=BCris =C3=A4met. +SUMMARY: +END:VEVENT +END:VCALENDAR + +BEGIN:VCALENDAR +VERSION:1.0 +PRODID:-//The Horde Project//Horde_iCalendar Library//EN +METHOD:PUBLISH +BEGIN:VEVENT +UID:XXX +DTSTART:20080101T000000 +DTSTAMP:20080101T000000 +DESCRIPTION;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:L=C3=B6remips=C3=BCmd=C3=B6l=C3=B6rsit=C3=A4met,c=C3=B6nsectet=C3=BCer=C3=A= +4dipiscingelit.Aliq=C3=BC=C3=A4ms=C3=B6llicit=C3=BCdinf=C3=A4=C3=BCcib=C3=B= +Csm=C3=A4=C3=BCris=C3=A4met.= + L=C3=B6remips=C3=BCmd=C3=B6l=C3=B6rsit=C3=A4met,c=C3=B6nsectet=C3=BCer=C3== +A4dipiscingelit.Aliq=C3=BC=C3=A4ms=C3=B6llicit=C3=BCdinf=C3=A4=C3=BCcib=C3== +BCsm=C3=A4=C3=BCris=C3=A4met. +SUMMARY: +END:VEVENT +END:VCALENDAR + +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//The Horde Project//Horde_iCalendar Library//EN +METHOD:PUBLISH +BEGIN:VEVENT +UID:XXX +DTSTART;VALUE=DATE:20080101 +DTSTAMP;VALUE=DATE:20080101 +DESCRIPTION:SYLVIE DAGORNE a écrit :\n\nBonjour\,\n\nsuite à mon appel + téléphonique auprès de Jacques Benzerara\, il m'a renvoyé vers vous. En + effet\, je souhaiterais vous rencontrer car:\n1°) au niveau de + l'observatoire local nous devons lancer une enquête sur un suivi de + cohorte à la rentrée prochaine qui concernera tous les étudiants de L1. + Nous souhaiterons faire un questionnaire en ligne ce questionnaire devra + être hébergé sur un serveur.\n\n2°) dans le cadre de l'observatoire + régional\, nos partenaires nous demande également de faire des + questionnaires en ligne. Nous disposons du logiciel Modalisa qui permet + de le réaliser mais du point de vu technique\, nous avons besoin de voir + avec vous\, les difficultés et les limites d'un tel dispositif afin de + voir les démarches à suivre et pouvoir évoquer tous ces problèmes + techniques\, je souhaiterais vous rencontrer. Merci de me précisez vos + disponibilités?\n...\nJe serai accompagné d'un collègue pour + l'observatoire local (David Le foll) et de la chargée d'études de + l'observatoire régional (Amélie Gicquel) pour la partie régionale. +SUMMARY: +END:VEVENT +END:VCALENDAR diff --git a/framework/iCalendar/tests/quoted-params.phpt b/framework/iCalendar/tests/quoted-params.phpt new file mode 100644 index 000000000..f9d011daf --- /dev/null +++ b/framework/iCalendar/tests/quoted-params.phpt @@ -0,0 +1,43 @@ +--TEST-- +Ensure parameters are correctly quoted. +--FILE-- +setAttribute('UID', '20041120-8550-innerjoin-org'); +$event1->setAttribute('DTSTART', array('year' => 2005, 'month' => 5, 'mday' => 3), array('VALUE' => 'DATE')); +$event1->setAttribute('DTSTAMP', array('year' => 2004, 'month' => 11, 'mday' => 20), array('VALUE' => 'DATE')); +$event1->setAttribute('SUMMARY', 'Escaped Comma in Description Field'); +$event1->setAttribute('DESCRIPTION', 'There is a comma (escaped with a baskslash) in this sentence and some important words after it, see anything here?'); +$event1->setAttribute('ORGANIZER', 'mailto:mueller@example.org', array('CN' => "Klä,rc\"hen;\n Mül:ler")); + +$ical->addComponent($event1); + +echo $ical->exportVCalendar(); + +$readIcal->parseVCalendar($ical->exportVCalendar()); +$event1 = $readIcal->getComponent(0); +$attr = $event1->getAttribute('ORGANIZER', true); +echo $attr[0]['CN']; +?> +--EXPECT-- +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//The Horde Project//Horde_iCalendar Library//EN +METHOD:PUBLISH +BEGIN:VEVENT +UID:20041120-8550-innerjoin-org +DTSTART;VALUE=DATE:20050503 +DTSTAMP;VALUE=DATE:20041120 +SUMMARY:Escaped Comma in Description Field +DESCRIPTION:There is a comma (escaped with a baskslash) in this sentence + and some important words after it\, see anything here? +ORGANIZER;CN="Klä,rchen; Mül:ler":mailto:mueller@example.org +END:VEVENT +END:VCALENDAR +Klä,rchen; Mül:ler diff --git a/framework/iCalendar/tests/read-escapes.phpt b/framework/iCalendar/tests/read-escapes.phpt new file mode 100644 index 000000000..e829c5cd6 --- /dev/null +++ b/framework/iCalendar/tests/read-escapes.phpt @@ -0,0 +1,59 @@ +--TEST-- +Read data with escaped values test. +--FILE-- +parseVCalendar($data); +$event1 = $ical->getComponent(0); +$event2 = $ical->getComponent(1); + +var_dump($event1->getAttributeValues('DESCRIPTION'), + $event2->getAttributeValues('DESCRIPTION'), + $event2->getAttributeValues('ORGANIZER')); + +?> +--EXPECT-- +array(1) { + [0]=> + string(114) "There is a comma (escaped with a baskslash) in this sentence and some important words after it, see anything here?" +} +array(1) { + [0]=> + string(85) "There are important words after this dash - see anything here or have the words gone?" +} +array(1) { + [0]=> + string(12) "mailto:a@b.c" +} diff --git a/framework/iCalendar/tests/read-vcard-org.phpt b/framework/iCalendar/tests/read-vcard-org.phpt new file mode 100644 index 000000000..72df9753d --- /dev/null +++ b/framework/iCalendar/tests/read-vcard-org.phpt @@ -0,0 +1,25 @@ +--TEST-- +Test parsing of ORG fields. +--FILE-- +parseVCalendar($data); +$card = $ical->getComponent(0); +var_dump($card->getAttributeValues('ORG')); + +?> +--EXPECT-- +array(2) { + [0]=> + string(15) "My Organization" + [1]=> + string(7) "My Unit" +} diff --git a/framework/iCalendar/tests/read-write-escapes.phpt b/framework/iCalendar/tests/read-write-escapes.phpt new file mode 100644 index 000000000..7ffb244c0 --- /dev/null +++ b/framework/iCalendar/tests/read-write-escapes.phpt @@ -0,0 +1,43 @@ +--TEST-- +Read/write values with proper escaping test +--FILE-- +setAttribute('UID', '20041120-8550-innerjoin-org'); +$event1->setAttribute('DTSTART', array('year' => 2005, 'month' => 5, 'mday' => 3), array('VALUE' => 'DATE')); +$event1->setAttribute('DTSTAMP', array('year' => 2004, 'month' => 11, 'mday' => 20), array('VALUE' => 'DATE')); +$event1->setAttribute('SUMMARY', 'Escaped Comma in Description Field'); +$event1->setAttribute('DESCRIPTION', 'There is a comma (escaped with a baskslash) in this sentence and some important words after it, see anything here?'); + +$event2->setAttribute('UID', '20041120-8549-innerjoin-org'); +$event2->setAttribute('DTSTART', array('year' => 2005, 'month' => 5, 'mday' => 4), array('VALUE' => 'DATE')); +$event2->setAttribute('DTSTAMP', array('year' => 2004, 'month' => 11, 'mday' => 20), array('VALUE' => 'DATE')); +$event2->setAttribute('SUMMARY', 'Dash (rather than Comma) in the Description Field'); +$event2->setAttribute('DESCRIPTION', 'There are important words after this dash - see anything here or have the words gone?'); + +$writeIcal->addComponent($event1); +$writeIcal->addComponent($event2); + +$readIcal->parseVCalendar($writeIcal->exportVCalendar()); +$event3 = $readIcal->getComponent(0); +$event4 = $readIcal->getComponent(1); +var_dump($event3->getAttributeValues('DESCRIPTION')); +var_dump($event4->getAttributeValues('DESCRIPTION')); + +?> +--EXPECT-- +array(1) { + [0]=> + string(114) "There is a comma (escaped with a baskslash) in this sentence and some important words after it, see anything here?" +} +array(1) { + [0]=> + string(85) "There are important words after this dash - see anything here or have the words gone?" +} diff --git a/framework/iCalendar/tests/timezones.phpt b/framework/iCalendar/tests/timezones.phpt new file mode 100644 index 000000000..5db270102 --- /dev/null +++ b/framework/iCalendar/tests/timezones.phpt @@ -0,0 +1,828 @@ +--TEST-- +Timezone handling +--FILE-- +parsevCalendar(file_get_contents($file)); + foreach ($ical->getComponents() as $component) { + if ($component->getType() != 'vEvent') { + continue; + } + $date = $component->getAttribute('DTSTART'); + if (is_array($date)) { + continue; + } + echo $component->getAttribute('SUMMARY') . "\n"; + $d = new Horde_Date($date); + echo $d->format('H:i') . "\n"; + } + echo "\n"; +} + +?> +--EXPECT-- +AuthorChats.ics +FAR Sexy Sunday Chat +14:00 +Lady Aibell Chat +15:00 +Lady Aibell Chat +15:00 +FAR Sexy Sunday Chat +14:00 +Sapphire Phelan's Birthday and She Wants to Party Chat +01:00 +Bianca's Chat +15:00 +Lady Aibell Chat @ Coffeetime Devin Group +15:00 +Live Editor Chat +00:00 +FAR Sexy Sunday Chat +14:00 +Tammy Lee Author Live Chat +18:00 +CPLLC Romance Authors @ Coffeetime +15:00 +CPLLC Romance Authors @ Coffeetime +15:00 +Ella Scopilo's Hump Day chat +01:00 + +MMMPseminar.ics +Jack Murphy +Trojan Horse or Proton Force: Finding the Right Partners for Toxin Translocation +18:00 +Kai Matuschewski +Hitting the Plasmodium Life Cycle Early On: Attenuated Liver Stages +17:00 +Felix Rey +Insights into the Mechanism of Membrane Fusion Derived from Structural Studies of Viral Envelope Proteins +18:00 +Maurizio Del Poeta +Sphingolipid-Mediated Fungal Pathogenesis +18:00 +Jorge Galan +Structure, Assembly, and Function of the Type III Secretion Injectisome +18:00 +Don Ganem +RNAi, MicroRNAs and Viral Infection +18:00 +Barak Cohen +Genomic Analysis of Natural Variation in Saccharomyces +18:00 +Michael Ferguson +The Structure and Biosynthesis of Trypanosome Surface Molecules: Basic Science and Therapeutic Possiblities +18:00 +James M. Musser +Molecular Pathogenomics of Group A Streptococcus, the Flesh-Eater +17:00 +Wayne Yokoyama +Innate Responses to Viral Infections +17:00 +Herbert \"Skip\" Virgin +Host-Herpesvirus Standoff: Good News From the Front in an Ancient Battle +18:00 +New Event +17:00 +Matthew Welch +Exploitation of the Host Actin Cytoskeleton by Bacterial and Viral Pathogens +17:00 +Theresa Koeher +Virulence Gene Expression by Bacillus anthracis and Implications for the Host +17:00 +Eduardo Groisman +Regulatory Networks Controlling Bacterial Physiology and Virulence +18:00 +Brendan Cormack +Transcriptional Silencing and Adherence in the Yeast Pathogen Candida glabrata +17:00 +Andrew Pekosz +Intracellular Transport of Viral Proteins and Particles +18:00 + +Moon_Days.ics +Standard Time resumes +07:00 +New Moon +16:05 +Full Moon +03:13 +Full Moon +12:58 +Full Moon +00:25 +Autumnal Equinox +04:03 +New Moon +22:18 +Full Moon +03:02 +New Moon +11:45 +New Moon +20:10 +Full Moon +22:54 +Full Moon +18:42 +New Moon +14:01 +Full Moon +13:57 +Summer Solstice +12:26 +Full Moon +05:45 +New Moon +04:01 +New Moon +04:31 +New Moon +05:14 + +ProjectCalendar.ics +Code slush begins +03:00 +String freeze +03:00 +Calendar Test Day +12:00 +Calendar QA Chat +16:30 +Status Meeting +16:00 + +SpanishHolidays.ics + +allcategories.vcs +NSS ISDC 2006 +04:00 +VSE Trailer Ohio State Tour +12:00 +AIAA International Energy Conversion Conference +04:00 +42nd AIAA/ASME/SAE/ASEE Joint Propulsion Conference +04:00 +2006 Beam Power Challenge +04:00 +2006 Tether Challenge +04:00 +X PRIZE Cup Spaceflight Exposition +04:00 +2007 Astronaut Glove Challenge: APRIL DATE TBD +05:00 +2007 Regolith Excavation Challenge +04:00 +2007 Personal Air Vehicle (PAV) Challenge: DATE TBD +04:00 +2008 MoonROx (Moon Regolith Oxygen) Challenge +04:00 + +arsenal32FC.ics +Sheffield Utd (2)0-0(4) Arsenal +20:05 +Arsenal 5-3 Middlesbrough +15:05 +West Ham Utd 0-0 Arsenal +14:00 +Arsenal 2-1 Tottenham +15:00 +Birmingham City 2-1 Arsenal +14:00 +Carling Cup Final +15:00 +Fulham 0-3 Arsenal +14:00 +Leeds United 1-4 Arsenal +16:05 +Barcelona 2-1 Arsenal +18:45 +Manchester City 1-3 Arsenal +18:45 +Arsenal 1-1 Aston Villa +14:00 +River Plate 0-0 Arsenal +17:00 +Weiz 0-5 Arsenal +17:00 +Boreham Wood 0-4 Arsenal XI +18:30 +Carling Cup Semi-Final (2) +20:00 +Arsenal - Liverpool +16:00 +Arsenal - Newcastle Utd +15:00 +Arsenal 2-1 Bolton Wanderers +15:00 +Charlton Athletic 1-3 Arsenal +15:00 +F.A. Cup 4rth round +15:00 +Southampton 1-1 Arsenal +12:45 +Ritzing 2-5 Arsenal +14:00 +Arsenal 3-0 Portsmouth +15:00 +Beveren 0-0 Arsenal XI +17:30 +Wolverhampton 1-3 Arsenal +15:00 +Fulham - Arsenal +19:45 +Hamburg - Arsenal +18:45 +Champions League knockout round 2 +19:45 +Arsenal 3-2 Newcastle United +19:00 +Arsenal 1-1 Manchester United +15:05 +Arsenal 2-1 Manchester City +16:05 +Arsenal 0-0 AFC Ajax +19:45 +Arsenal 2-0 Lokomotiv Moscow +19:45 +Arsenal (5)0-0(4) Manchester Utd +14:00 +Lokomotiv Moscow 0-0 Arsenal +16:30 +Arsenal 2-1 Chelsea +14:00 +Manchester Utd 0-0 Arsenal +15:05 +St Albans City 1-3 Arsenal XI +18:30 +Chelsea 1-0 Arsenal +15:00 +Manchester City 1-0 Arsenal +16:15 +Arsenal 0-0 Manchester Utd +20:00 +Blackburn Rovers 1-0 Arsenal +15:00 +FC Porto - Arsenal +19:45 +Bolton W 1-1 Arsenal +15:00 +Aston Villa - Arsenal +15:00 +Real Madrid 0-1 Arsenal +19:45 +Arsenal 1-1 West Bromwich Albion +15:00 +Bolton Wanderers 2-0 Arsenal +15:00 +Manchester Utd - Arsenal +15:00 +Arsenal - Reading +15:00 +Arsenal 1-0 Manchester City +14:00 +Arsenal - Chelsea +14:00 +Champions League knockout round 2 +19:45 +AZ Alkmaar 0-3 Arsenal +17:00 +Everton 1-4 Arsenal +13:00 +Readling - Arsenal +15:00 +Middlesbrough 2-1 Arsenal +16:15 +Barnet 1-4 Arsenal +14:00 +Champions League semi-final 1 +18:45 +CSKA Moscow - Arsenal +16:30 +Arsenal 2-1 Ajax +16:00 +Arsenal 1-0 Birmingham City +12:30 +Arsenal 2-2 Southampton +14:00 +Everton - Arsenal +15:00 +Schwadorf 1-8 Arsenal +15:00 +Celta de Vigo 2-3 Arsenal +19:45 +Sheffield Utd - Arsenal +15:00 +Arsenal 3-1 Everton +19:45 +Arsenal 2-0 Newcastle +12:30 +Arsenal 3-0 Charlton Athletic +15:00 +Arsenal - Charlton Athletic +15:00 +Arsenal - West Ham +14:00 +Arsenal 2-1 Chelsea +11:30 +Portsmouth 0-1 Arsenal +16:05 +Arsenal 0-0 Real Madrid +19:45 +F.A. Cup Semi-Final +14:00 +Champions League semi-final 1 +18:45 +Arsenal 0-0 Fulham +14:00 +Arsenal 2-1 Leicester City +14:00 +Arsenal 3-1 Sunderland +15:00 +Arsenal 1-0 Dynamo Kyiv +19:45 +FC Utrecht 0-3 Arsenal +16:00 +Chelsea 1-1 Arsenal +19:45 +Manchester City 1-2 Arsenal +15:05 +Man Utd 1-0 Arsenal +19:45 +Arsenal 1-0 Blackburn Rovers +14:00 +Wigan Athletic - Arsenal +19:45 +Arsenal 3-0 Sparta Prague +19:45 +Arsenal 1-1 Portsmouth +14:00 +Arsenal 2-1 Dinamo Zagreb +19:05 +Birmingham City 0-3 Arsenal +15:00 +Champions League quarter-final 1 +18:45 +Barnet 0-0 Arsenal +14:00 +Arsenal 2-2 Bolton Wanderers +11:45 +Arsenal - Middlesbrough +14:00 +Dynamo Kyiv 2-1 Arsenal +18:45 +Arsenal 3-1 Aston Villa +14:00 +Arsenal - Watford +14:00 +Portsmouth 1-1 Arsenal +19:00 +Sparta Prague 0-2 Arsenal +18:45 +Bolton 0-1 Arsenal +12:15 +Arsenal 1-1 Bolton Wanderers +15:00 +Arsenal 3-0 Blackburn Rovers +15:00 +Arsenal 3-1 ManUtd +14:00 +Champions League semi-final 2 +18:45 +Arsenal - Wigan Athletic +15:00 +Sunderland 0-3 Arsenal +16:15 +Arsenal - Tottenham +12:45 +Villarreal CF 0-0 Arsenal +18:45 +Arsenal - Fulham +14:00 +Arsenal 1-2 Chelsea +18:45 +F.A. Cup 5th round +15:00 +Arsenal 3-0 Reading +19:45 +Arsenal 3-0 Blackburn Rovers +11:15 +Liverpool 1-0 Arsenal +20:00 +Ajax 0-0 Arsenal +18:45 +Bolton Wanderers 1-0 Arsenal +17:15 +Arsenal 2-1 Wigan Athletic +19:45 +Aston Villa 0-0 Arsenal +12:45 +Dinamo Zagreb 0-3 Arsenal +19:05 +Newcastle Utd - Arsenal +14:00 +Grazer AK 1-2 Arsenal +16:00 +Carling Cup Semi-Final (1) +20:00 +Everton 1-0 Arsenal +12:45 +Porto 1-2 Arsenal +16:30 +Bayern München 3-1 Arsenal +19:45 +Arsenal 4-2 Liverpool +11:30 +Arsenal 2-1 Liverpool +16:00 +Barnet 1-10 Arsenal +14:00 +Arsenal - Portsmouth +15:00 +Watford - Arsenal +17:30 +Arsenal 1(9)-1(8) Rotherham United +19:45 +Manchester Utd 2-0 Arsenal +15:05 +Aston Villa 0-2 Arsenal +14:00 +Boreham Wood 2-6 Arsenal XI +18:30 +Champions League quarter-final 2 +18:45 +Bolton 1-0 Arsenal +17:40 +Champions League semi-final 2 +18:45 +West Bromwich Albion 0-2 Arsenal +19:00 +Bolton Wanderers - Arsenal +17:15 +Arsenal 1-1 Sheffield Utd +12:30 +Arsenal - Blackburn Rovers +15:00 +Carling Cup 3rd round +19:00 +Arsenal 5-0 Aston Villa +14:00 +Sunderland 0-3 Arsenal +18:45 +Arsenal 2-1 Charlton Athletic +15:00 +Arsenal 4-1 Middlesbrough +15:00 +Arsenal 1-0 Newcastle +16:05 +Arsenal 2-0 Fulham +13:00 +KSK Beveren 2-2 Arsenal XI +16:00 +Juventus 0-0 Arsenal +18:45 +Arsenal 4-2 Wigan Athletic +14:00 +Newcastle Utd 0-1 Arsenal +20:00 +Manchester City 0-1 Arsenal +14:00 +Middlesbrough 0-4 Arsenal +14:00 +Champions League knockout round 1 +19:45 +Middlesbrough 0-4 Arsenal +15:05 +Everton 1-1 Arsenal +20:00 +Portsmouth - Arsenal +14:00 +Tottenham Hotspur 1-1 Arsenal +12:00 +Champions League quarter-final 2 +18:45 +Arsenal 3-0 Birmingham City +15:00 +Arsenal 3-1 West Bromwich Albion +14:00 +Leeds United 1-4 Arsenal +15:00 +Arsenal 2-2 Chelsea +16:05 +Carling Cup 4th round +20:00 +NK Maribor 2-3 Arsenal +17:30 +Barnet 0-0 Arsenal +14:00 +Wigan Athletic 1-0 Arsenal +19:45 +Norwich City 1-4 Arsenal +16:15 +Portsmouth 1-5 Arsenal +18:00 +Blackburn Rovers 0-2 Arsenal +15:00 +Tottenham - Arsenal +14:00 +Liverpool - Arsenal +14:00 +Arsenal 2-1 FC Thun +18:45 +Blackburn Rovers - Arsenal +15:00 +Arsenal 3-0 Blackburn Rovers +18:45 +Arsenal 2-0 Aston Villa +18:45 +Middlesbrough - Arsenal +15:00 +Arsenal 2-1 Cardiff City +13:00 +Arsenal 3-1 Liverpool +15:05 +Champions League quarter-final 1 +18:45 +Arsenal 0-1 Manchester Utd +11:00 +Middlesbrough 0-1 Arsenal +14:00 +FC Thun 0-1 Arsenal +19:45 +Panathinaikos 2-2 Arsenal +18:45 +West Ham Utd - Arsenal +13:30 +Charlton Athletic 1-1 Arsenal +14:00 +Arsenal - Everton +14:00 +Arsenal 7-0 Middlesbrough +15:00 +Newcastle Utd 0-0 Arsenal +15:05 +PSV Eindhoven 1-1 Arsenal +19:45 +Charlton Athletic - Arsenal +14:00 +Arsenal 2-0 Juventus +18:45 +F.A. Cup 6th round +15:00 +Arsenal - Hamburg +19:45 +Portsmouth 1-1 Arsenal +19:00 +West Bromwich Albion 0-2 Arsenal +20:00 +Champions League knockout round 1 +19:45 +Arsenal 1-1 Tottenham Hotspur +11:45 +Arsenal 2-1 Stoke City +14:00 +Birmingham City 0-2 Arsenal +15:00 +Arsenal 2-0 Southampton +19:45 +Arsenal 2-3 West Ham Utd +20:00 +Arsenal 0-2 Chelsea +16:00 +Southampton 0-1 Arsenal +20:00 +Arsenal 1-1 Manchester City +19:45 +Tottenham 2-2 Arsenal +15:05 +Leicester City 1-1 Arsenal +15:00 +Arsenal 4-1 Middlesbrough +15:00 +Tottenham Hotspur 4-5 Arsenal +12:00 +Arsenal 1-0 Tottenham Hotspur +19:00 +Newcastle Utd 1-0 Arsenal +17:15 +Arsenal 1(3)-1(4) ManUtd +13:00 +Inter Milan 1-5 Arsenal +19:45 +West Bromwich Albion 2-1 Arsenal +14:00 +Blackburn Rovers 0-1 Arsenal +12:45 +Manchester Utd 2-0 Arsenal +15:00 +Austria Vienna 0-2 Arsenal +18:00 +Arsenal 2-1 Everton +14:00 +Arsenal 3-0 Wolverhampton W +12:00 +AFC Ajax 1-2 Arsenal +18:45 +Arsenal - Sheffield Utd +14:00 +Manchester City 1-2 Arsenal +18:45 +Arsenal 7-0 Everton +19:00 +Crystal Palace 1-1 Arsenal +17:15 +Arsenal 1-0 Besiktas +17:00 +Arsenal - FC Porto +18:45 +Rangers 0-3 Arsenal +18:45 +Liverpool 2-1 Arsenal +16:05 +Arsenal 1-0 PSV Eindhoven +18:45 +Liverpool 1-2 Arsenal +11:30 +Arsenal - Manchester Utd +15:00 +Charlton Athletic 0-1 Arsenal +12:45 +Arsenal 1-0 Bayern München +19:45 +Arsenal 5-1 Rosenborg +19:45 +Chelsea 2-1 Arsenal +14:00 +Champions League Final +18:45 +Arsenal 0-3 Inter Milan +18:45 +Fulham 0-1 Arsenal +15:05 +Arsenal 0-1 Middlesbrough +19:45 +Arsenal - CSKA Moscow +19:45 +Arsenal 1-1 Panathinaikos +19:45 +Chelsea - Arsenal +16:00 +Aston Villa 1-3 Arsenal +17:15 +Arsenal 2-0 Celta de Vigo +19:45 +Arsenal 5-0 Leeds +19:00 +Arsenal 5-1 Crystal Palace +20:00 +Fulham 0-4 Arsenal +15:00 +Arsenal 4-0 Portsmouth +19:45 +Arsenal - Manchester City +19:45 +Ritzing 2-2 Arsenal +18:00 +Arsenal 2-4 Manchester Utd +20:00 +Arsenal - Bolton Wanderers +14:00 +Arsenal 1-0 Villarreal CF +18:45 +Arsenal 5-1 Wolverhampton W. +19:45 +Celtic 1-1 Arsenal +14:00 +F.A. Cup Final +14:00 +Arsenal 2-0 Wolverhampton Wanderers +15:00 +Peterborough 1-0 Arsenal XI +18:30 +Arsenal 2-0 Everton +19:00 +Arsenal 4-0 Charlton Athletic +14:00 +Arsenal 4-1 Fulham +18:45 +Chelsea 0-0 Arsenal +19:00 +Doncaster Rovers 2-2P Arsenal +19:45 +Sturm Graz 0-2 Arsenal +16:30 +Rosenborg 1-1 Arsenal +18:45 +Arsenal 6-0 England XI +18:45 +Arsenal 4-1 Norwich City +14:00 +Arsenal 0-0 Birmingham City +11:30 +Middlesbrough 2-1 Arsenal +20:00 +Ajax 0-1 Arsenal +19:15 +Chelsea 1-2 Arsenal +12:30 +Boreham Wood 1-1 Arsenal XI +18:45 +Carling Cup 5th round +20:00 +KSK Beveren 3-3 Arsenal XI +18:30 +Wigan Athletic 2-3 Arsenal +12:45 +F.A. Cup 3rd round +15:00 +SV Mattersburg 1-2 Arsenal +17:00 + +events.ics +test cet 2 +13:00 + +exchange.ics +internal final review of mmc site changes +19:00 + +exdate.ics + +iscw.ics +Ontoweb Day http://nextwebgeneration.com/meetings/ontoweb5/ +13:30 +Ontoweb SIG day http://nextwebgeneration.com/meetings/ontoweb5/ +13:30 +Beach Barbeque +00:00 + +meeting.ics +Updated: Webex Training - Encryption Push +17:00 + +privacy_events.ics +Australian Smart Card Summit +04:00 +SOCAP Australia 2006 Symposium +03:30 + +rfc2445.ics +Bastille Day Party +17:00 +Annual Employee Review +16:30 +Laurel is in sensitivity awareness class. +16:30 +Our Blissful Anniversary +00:00 +XYZ Project Review +13:30 +Calendaring Interoperability Planning Meeting +12:30 + +test.vcs +2007 Astronaut Glove Challenge: APRIL DATE TBD +05:00 + +test4.vcs +Chiefs vs. Buffalo @ Arrowhead Stadium +19:00 + +test_recurring.vcs +XXXStriked out XXX +09:00 + +wicca.ics +Wolf Moon +10:32 +Snow Moon +04:54 +Worm Moon +20:58 +Pink Moon +10:06 +Flower Moon +20:18 +Strawberry Moon +04:14 +Buck Moon +11:00 +Sturgeon Moon +17:53 +Harvest Moon +02:01 +Hunter's Moon +12:14 +Beaver Moon +00:57 +Cold Moon +16:15 diff --git a/framework/iCalendar/tests/vcal20.phpt b/framework/iCalendar/tests/vcal20.phpt new file mode 100644 index 000000000..2930143c3 --- /dev/null +++ b/framework/iCalendar/tests/vcal20.phpt @@ -0,0 +1,321 @@ +--TEST-- +vCalendar 2.0 (iCalendar) test +--FILE-- +parsevCalendar($data); +var_export($ical->getAllAttributes()); +echo "\n"; +$vevent = $ical->getComponent(0); +var_export($vevent->getAllAttributes()); + +?> +--EXPECT-- +array ( + 0 => + array ( + 'name' => 'PRODID', + 'params' => + array ( + ), + 'value' => '-//Google Inc//Google Calendar 70.9054//EN', + 'values' => + array ( + 0 => '-//Google Inc//Google Calendar 70.9054//EN', + ), + ), + 1 => + array ( + 'name' => 'VERSION', + 'params' => + array ( + ), + 'value' => '2.0', + 'values' => + array ( + 0 => '2.0', + ), + ), + 2 => + array ( + 'name' => 'CALSCALE', + 'params' => + array ( + ), + 'value' => 'GREGORIAN', + 'values' => + array ( + 0 => 'GREGORIAN', + ), + ), + 3 => + array ( + 'name' => 'METHOD', + 'params' => + array ( + ), + 'value' => 'PUBLISH', + 'values' => + array ( + 0 => 'PUBLISH', + ), + ), + 4 => + array ( + 'name' => 'X-WR-CALNAME', + 'params' => + array ( + ), + 'value' => 'PEAR - PHP Extension and Application Repository', + 'values' => + array ( + 0 => 'PEAR - PHP Extension and Application Repository', + ), + ), + 5 => + array ( + 'name' => 'X-WR-TIMEZONE', + 'params' => + array ( + ), + 'value' => 'Atlantic/Reykjavik', + 'values' => + array ( + 0 => 'Atlantic/Reykjavik', + ), + ), + 6 => + array ( + 'name' => 'X-WR-CALDESC', + 'params' => + array ( + ), + 'value' => 'pear.php.net activity calendar, bug triage, group meetings, qa, conferences or similar', + 'values' => + array ( + 0 => 'pear.php.net activity calendar, bug triage, group meetings, qa, conferences or similar', + ), + ), +) +array ( + 0 => + array ( + 'name' => 'DTSTART', + 'params' => + array ( + ), + 'value' => 1224950400, + 'values' => + array ( + 0 => 1224950400, + ), + ), + 1 => + array ( + 'name' => 'DTEND', + 'params' => + array ( + ), + 'value' => 1224968400, + 'values' => + array ( + 0 => 1224968400, + ), + ), + 2 => + array ( + 'name' => 'DTSTAMP', + 'params' => + array ( + ), + 'value' => 1219138073, + 'values' => + array ( + 0 => 1219138073, + ), + ), + 3 => + array ( + 'name' => 'UID', + 'params' => + array ( + ), + 'value' => 'ntnrt4go4482q2trk18bt62c0o@google.com', + 'values' => + array ( + 0 => 'ntnrt4go4482q2trk18bt62c0o@google.com', + ), + ), + 4 => + array ( + 'name' => 'RECURRENCE-ID', + 'params' => + array ( + ), + 'value' => 1224950400, + 'values' => + array ( + 0 => 1224950400, + ), + ), + 5 => + array ( + 'name' => 'CLASS', + 'params' => + array ( + ), + 'value' => 'PUBLIC', + 'values' => + array ( + 0 => 'PUBLIC', + ), + ), + 6 => + array ( + 'name' => 'CREATED', + 'params' => + array ( + ), + 'value' => 1204763165, + 'values' => + array ( + 0 => 1204763165, + ), + ), + 7 => + array ( + 'name' => 'DESCRIPTION', + 'params' => + array ( + ), + 'value' => 'Bug Triage session + +Not been invited ? Want to attend ? Let us know and we\'ll add you!', + 'values' => + array ( + 0 => 'Bug Triage session + +Not been invited ? Want to attend ? Let us know and we\'ll add you!', + ), + ), + 8 => + array ( + 'name' => 'LAST-MODIFIED', + 'params' => + array ( + ), + 'value' => 1216413606, + 'values' => + array ( + 0 => 1216413606, + ), + ), + 9 => + array ( + 'name' => 'LOCATION', + 'params' => + array ( + ), + 'value' => '#pear-bugs Efnet', + 'values' => + array ( + 0 => '#pear-bugs Efnet', + ), + ), + 10 => + array ( + 'name' => 'SEQUENCE', + 'params' => + array ( + ), + 'value' => 2, + 'values' => + array ( + 0 => 2, + ), + ), + 11 => + array ( + 'name' => 'STATUS', + 'params' => + array ( + ), + 'value' => 'CONFIRMED', + 'values' => + array ( + 0 => 'CONFIRMED', + ), + ), + 12 => + array ( + 'name' => 'SUMMARY', + 'params' => + array ( + ), + 'value' => 'Bug Triage', + 'values' => + array ( + 0 => 'Bug Triage', + ), + ), + 13 => + array ( + 'name' => 'TRANSP', + 'params' => + array ( + ), + 'value' => 'OPAQUE', + 'values' => + array ( + 0 => 'OPAQUE', + ), + ), + 14 => + array ( + 'name' => 'CATEGORIES', + 'params' => + array ( + ), + 'value' => 'foo,bar,fuz buz,blah, blah', + 'values' => + array ( + 0 => 'foo', + 1 => 'bar', + 2 => 'fuz buz', + 3 => 'blah, blah', + ), + ), +) diff --git a/framework/iCalendar/tests/vfreebusy.phpt b/framework/iCalendar/tests/vfreebusy.phpt new file mode 100644 index 000000000..a2ac7731c --- /dev/null +++ b/framework/iCalendar/tests/vfreebusy.phpt @@ -0,0 +1,269 @@ +--TEST-- +Test parsing of vFreeBusy information. +--FILE-- +parseVCalendar($data); + +// Get the vFreeBusy component +$vfb = $ical->getComponent(0); + +// Dump the type ("vFreebusy") +var_dump($vfb->getType()); + +// Dump the vfreebusy component again (the duration should be +// converted to start/end +var_dump($vfb->exportvCalendar()); + +// Dump organizer name ("GunnarWrobel") +var_dump($vfb->getName()); + +// Dump organizer mail ("wrobel@demo2.pardus.de") +var_dump($vfb->getEmail()); + +// Dump busy periods (array with two entries) +var_dump($vfb->getBusyPeriods()); + +// Decode the summary information ("testtermin") +$extra = $vfb->getExtraParams(); +var_dump(base64_decode($extra[1164258000]['X-SUMMARY'])); + +// Dump the free periods in between the two given time stamps +var_dump($vfb->getFreePeriods(1164261500, 1164268900)); + +// Dump start of the free/busy information (1164236400) +var_dump($vfb->getStart()); + +// Dump end of the free/busy information (1164236400) +var_dump($vfb->getEnd()); + +// Free periods don't get added +$vfb->addBusyPeriod('FREE',1164261600,1164268800); +var_dump($vfb->getBusyPeriods()); + +// Add a busy period with start/end (11:00 / 12:00) +$vfb->addBusyPeriod('BUSY',1164279600,1164283200); + +// Add a busy period with start/duration (14:00 / 2h) +$vfb->addBusyPeriod('BUSY',1164290400,null,7200, array('X-SUMMARY' => 'dGVzdA==')); + +// Dump busy periods (array with four entries) +var_dump($vfb->getBusyPeriods()); + +// Dump the extra parameters (array with four entries) +var_dump($vfb->getExtraParams()); + +// Create new freebusy object for merging +$mfb = new Horde_iCalendar_vfreebusy(); +// 1. 3:55 / 10 minutes; summary "test4" +$mfb->addBusyPeriod('BUSY',1164254100,null,600, array('X-SUMMARY' => 'dGVzdDQ=')); +// 2. 4:00 / 1 hours 5 Minutes; summary "test3" +$mfb->addBusyPeriod('BUSY',1164254400,null,3900, array('X-SUMMARY' => 'dGVzdDM=')); +// 3. 5:55 / 10 minutes hours; summary "test5" +$mfb->addBusyPeriod('BUSY',1164261300,null,600, array('X-SUMMARY' => 'dGVzdDU==')); +// 4. 7:55 / 10 min +$mfb->addBusyPeriod('BUSY',1164268500,null,600); +// 5. 9:55 / 10 min +$mfb->addBusyPeriod('BUSY',1164275700,null,600); +// 6. 11:00 / 4 hours; summary "test2" +$mfb->addBusyPeriod('BUSY',1164279600,null,14400, array('X-SUMMARY' => 'dGVzdDI=')); +// 7. 14:00 / 2 min +$mfb->addBusyPeriod('BUSY',1164290400,null,120); +// 8. 14:30 / 5 min; summary "test3" +$mfb->addBusyPeriod('BUSY',1164292200,null,300, array('X-SUMMARY' => 'dGVzdDM=')); +// 9. 15:55 / 5 min +$mfb->addBusyPeriod('BUSY',1164297300,1164297600); + +// Dump busy periods (array with seven entries) +var_dump($mfb->getBusyPeriods()); + +$mfb->setAttribute('DTSTART', 1004297300); +$mfb->setAttribute('DTEND', 1014297300); + +// Merge freebusy components without simplification +$vfb->merge($mfb, false); + +var_dump($vfb->getAttribute('DTSTART')); +var_dump($vfb->getAttribute('DTEND')); + +// Dump merged periods (array with eleven entries since there +// are some entries having the same start time -> merged to +// longer of the two) +$busy = $vfb->getBusyPeriods(); +$extra = $vfb->getExtraParams(); +var_dump($busy); + +// Check merging process (should have selected longer period) +// and dump extra information alongside +// 4 hours (instead of 2 hours); summary "test" +var_dump($busy[1164279600] - 1164279600); +var_dump(base64_decode($extra[1164279600]['X-SUMMARY'])); +// 2 hours (instead of 2 minutes); summary "test2" +var_dump($busy[1164290400] - 1164290400); +var_dump(base64_decode($extra[1164290400]['X-SUMMARY'])); + +// Merge freebusy components again, simplify this time +$vfb->merge($mfb); + +// Dump merged periods (array with five entries) +$busy = $vfb->getBusyPeriods(); +$extra = $vfb->getExtraParams(); + +// 1. 3:55 / 10 Minutes / test4 +print "Start:" . $vfb->_exportDateTime(1164254100) . " End:" . $vfb->_exportDateTime($busy[1164254100]) . " Summary:" . base64_decode($extra[1164254100]['X-SUMMARY']) . "\n"; +// 2. 4:05 / 1 hour / test3 +print "Start:" . $vfb->_exportDateTime(1164254700) . " End:" . $vfb->_exportDateTime($busy[1164254700]) . " Summary:" . base64_decode($extra[1164254700]['X-SUMMARY']) . "\n"; +// 3. 5:05 / 55 Minutes / testtermin +print "Start:" . $vfb->_exportDateTime(1164258300) . " End:" . $vfb->_exportDateTime($busy[1164258300]) . " Summary:" . base64_decode($extra[1164258300]['X-SUMMARY']) . "\n"; +// 4. 6:00 / 5 Minutes / test5 +print "Start:" . $vfb->_exportDateTime(1164261600) . " End:" . $vfb->_exportDateTime($busy[1164261600]) . " Summary:" . base64_decode($extra[1164261600]['X-SUMMARY']) . "\n"; +// 5. 7:55 / 2 hours 10 Minutes +print "Start:" . $vfb->_exportDateTime(1164268500) . " End:" . $vfb->_exportDateTime($busy[1164268500]) . " Summary:\n"; +// 6. 11:00 / 4 hours / test2 +print "Start:" . $vfb->_exportDateTime(1164279600) . " End:" . $vfb->_exportDateTime($busy[1164279600]) . " Summary:" . base64_decode($extra[1164279600]['X-SUMMARY']) . "\n"; +// 7. 15:00 / 1 hour / test +print "Start:" . $vfb->_exportDateTime(1164294000) . " End:" . $vfb->_exportDateTime($busy[1164294000]) . " Summary:" . base64_decode($extra[1164294000]['X-SUMMARY']) . "\n"; + +?> +--EXPECT-- +string(9) "vFreebusy" +string(334) "BEGIN:VFREEBUSY +ORGANIZER;CN=GunnarWrobel:MAILTO:wrobel@demo2.pardus.de +DTSTAMP:20061122T230929Z +DTSTART:20061122T230000Z +DTEND:20070121T230000Z +FREEBUSY;X-UID=MmZlNWU3NDRmMGFjNjZkNjRjZjFkZmFmYTE4NGFiZTQ=;X-SUMMARY=dGVzd + HRlcm1pbg==:20061123T050000Z/20061123T060000Z +FREEBUSY:20061123T080000Z/20061123T100000Z +END:VFREEBUSY +" +string(12) "GunnarWrobel" +string(22) "wrobel@demo2.pardus.de" +array(2) { + [1164258000]=> + int(1164261600) + [1164268800]=> + int(1164276000) +} +string(10) "testtermin" +array(1) { + [1164261600]=> + int(1164268800) +} +int(1164236400) +int(1169420400) +array(2) { + [1164258000]=> + int(1164261600) + [1164268800]=> + int(1164276000) +} +array(4) { + [1164258000]=> + int(1164261600) + [1164268800]=> + int(1164276000) + [1164279600]=> + int(1164283200) + [1164290400]=> + int(1164297600) +} +array(4) { + [1164258000]=> + array(2) { + ["X-UID"]=> + string(44) "MmZlNWU3NDRmMGFjNjZkNjRjZjFkZmFmYTE4NGFiZTQ=" + ["X-SUMMARY"]=> + string(16) "dGVzdHRlcm1pbg==" + } + [1164268800]=> + array(0) { + } + [1164279600]=> + array(0) { + } + [1164290400]=> + array(1) { + ["X-SUMMARY"]=> + string(8) "dGVzdA==" + } +} +array(9) { + [1164254100]=> + int(1164254700) + [1164254400]=> + int(1164258300) + [1164261300]=> + int(1164261900) + [1164268500]=> + int(1164269100) + [1164275700]=> + int(1164276300) + [1164279600]=> + int(1164294000) + [1164290400]=> + int(1164290520) + [1164292200]=> + int(1164292500) + [1164297300]=> + int(1164297600) +} +int(1004297300) +int(1169420400) +array(11) { + [1164258000]=> + int(1164261600) + [1164268800]=> + int(1164276000) + [1164279600]=> + int(1164294000) + [1164290400]=> + int(1164297600) + [1164254100]=> + int(1164254700) + [1164254400]=> + int(1164258300) + [1164261300]=> + int(1164261900) + [1164268500]=> + int(1164269100) + [1164275700]=> + int(1164276300) + [1164292200]=> + int(1164292500) + [1164297300]=> + int(1164297600) +} +int(14400) +string(5) "test2" +int(7200) +string(4) "test" +Start:20061123T035500Z End:20061123T040500Z Summary:test4 +Start:20061123T040500Z End:20061123T050500Z Summary:test3 +Start:20061123T050500Z End:20061123T060000Z Summary:testtermin +Start:20061123T060000Z End:20061123T060500Z Summary:test5 +Start:20061123T075500Z End:20061123T100500Z Summary: +Start:20061123T110000Z End:20061123T150000Z Summary:test2 +Start:20061123T150000Z End:20061123T160000Z Summary:test diff --git a/framework/iCalendar/tests/write-escapes.phpt b/framework/iCalendar/tests/write-escapes.phpt new file mode 100644 index 000000000..b56accfff --- /dev/null +++ b/framework/iCalendar/tests/write-escapes.phpt @@ -0,0 +1,51 @@ +--TEST-- +Write values with proper escaping test +--FILE-- +setAttribute('UID', '20041120-8550-innerjoin-org'); +$event1->setAttribute('DTSTART', array('year' => 2005, 'month' => 5, 'mday' => 3), array('VALUE' => 'DATE')); +$event1->setAttribute('DTSTAMP', array('year' => 2004, 'month' => 11, 'mday' => 20), array('VALUE' => 'DATE')); +$event1->setAttribute('SUMMARY', 'Escaped Comma in Description Field'); +$event1->setAttribute('DESCRIPTION', 'There is a comma (escaped with a baskslash) in this sentence and some important words after it, see anything here?'); + +$event2->setAttribute('UID', '20041120-8549-innerjoin-org'); +$event2->setAttribute('DTSTART', array('year' => 2005, 'month' => 5, 'mday' => 4), array('VALUE' => 'DATE')); +$event2->setAttribute('DTSTAMP', array('year' => 2004, 'month' => 11, 'mday' => 20), array('VALUE' => 'DATE')); +$event2->setAttribute('SUMMARY', 'Dash (rather than Comma) in the Description Field'); +$event2->setAttribute('DESCRIPTION', 'There are important words after this dash - see anything here or have the words gone?'); + +$ical->addComponent($event1); +$ical->addComponent($event2); + +echo $ical->exportVCalendar(); + +?> +--EXPECT-- +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//The Horde Project//Horde_iCalendar Library//EN +METHOD:PUBLISH +BEGIN:VEVENT +UID:20041120-8550-innerjoin-org +DTSTART;VALUE=DATE:20050503 +DTSTAMP;VALUE=DATE:20041120 +SUMMARY:Escaped Comma in Description Field +DESCRIPTION:There is a comma (escaped with a baskslash) in this sentence + and some important words after it\, see anything here? +END:VEVENT +BEGIN:VEVENT +UID:20041120-8549-innerjoin-org +DTSTART;VALUE=DATE:20050504 +DTSTAMP;VALUE=DATE:20041120 +SUMMARY:Dash (rather than Comma) in the Description Field +DESCRIPTION:There are important words after this dash - see anything here + or have the words gone? +END:VEVENT +END:VCALENDAR