From: Michael M Slusarz Date: Tue, 3 Aug 2010 07:04:53 +0000 (-0600) Subject: Convert Icalendar to H4. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=09a0ade1f7c7d156a3158532a338c7989498ddfb;p=horde.git Convert Icalendar to H4. This removes the last use of PEAR_Errors in IMP. Yay. I've tried to go through framework, turba, and kronolith and convert to using Exceptions, but there is no guarantee that I caught all the locations we are using Icalendar objects. --- diff --git a/framework/Data/lib/Horde/Data/Imc.php b/framework/Data/lib/Horde/Data/Imc.php index ab2f6b93c..c4729c55c 100644 --- a/framework/Data/lib/Horde/Data/Imc.php +++ b/framework/Data/lib/Horde/Data/Imc.php @@ -27,7 +27,7 @@ class Horde_Data_Imc extends Horde_Data_Base */ public function importData($text) { - $this->_iCal = new Horde_iCalendar(); + $this->_iCal = new Horde_Icalendar(); if (!$this->_iCal->parsevCalendar($text)) { throw new Horde_Data_Exception('There was an error importing the iCalendar data.'); } @@ -39,7 +39,7 @@ class Horde_Data_Imc extends Horde_Data_Base * Builds an iCalendar file from a given data structure and * returns it as a string. * - * @param array $data An array containing Horde_iCalendar_vevent + * @param array $data An array containing Horde_Icalendar_Vevent * objects * @param string $method The iTip method to use. * @@ -47,7 +47,7 @@ class Horde_Data_Imc extends Horde_Data_Base */ public function exportData($data, $method = 'REQUEST') { - $this->_iCal = new Horde_iCalendar(); + $this->_iCal = new Horde_Icalendar(); $this->_iCal->setAttribute('METHOD', $method); foreach ($data as $event) { @@ -63,7 +63,7 @@ class Horde_Data_Imc extends Horde_Data_Base * only outputs the correct headers and data. * * @param string $filename The name of the file to be downloaded. - * @param array $data An array containing Horde_iCalendar_vevents + * @param array $data An array containing Horde_Icalendar_Vevents */ public function exportFile($filename, $data) { diff --git a/framework/Data/lib/Horde/Data/Vcard.php b/framework/Data/lib/Horde/Data/Vcard.php index 89f6b8d5f..143a973a7 100644 --- a/framework/Data/lib/Horde/Data/Vcard.php +++ b/framework/Data/lib/Horde/Data/Vcard.php @@ -17,7 +17,7 @@ class Horde_Data_Vcard extends Horde_Data_Imc { * Exports vcalendar data as a string. Unlike vEvent, vCard data * is not enclosed in BEGIN|END:vCalendar. * - * @param array $data An array containing Horde_iCalendar_Vcard + * @param array $data An array containing Horde_Icalendar_Vcard * objects. * @param string $method The iTip method to use. * diff --git a/framework/Data/lib/Horde/Data/Vnote.php b/framework/Data/lib/Horde/Data/Vnote.php index 068ce153f..696654331 100644 --- a/framework/Data/lib/Horde/Data/Vnote.php +++ b/framework/Data/lib/Horde/Data/Vnote.php @@ -18,7 +18,7 @@ class Horde_Data_Vnote extends Horde_Data_Imc * Exports vcalendar data as a string. Unlike vEvent, vNote data * is not enclosed in BEGIN|END:vCalendar. * - * @param array $data An array containing Horde_iCalendar_Vnote + * @param array $data An array containing Horde_Icalendar_Vnote * objects. * @param string $method The iTip method to use. * @@ -26,7 +26,7 @@ class Horde_Data_Vnote extends Horde_Data_Imc */ public function exportData($data, $method = 'REQUEST') { - $this->_iCal = new Horde_iCalendar(); + $this->_iCal = new Horde_Icalendar(); $this->_iCal->setAttribute('METHOD', $method); $s = ''; diff --git a/framework/Data/package.xml b/framework/Data/package.xml index 65f616147..21a7f9a28 100644 --- a/framework/Data/package.xml +++ b/framework/Data/package.xml @@ -89,15 +89,15 @@ http://pear.php.net/dtd/package-2.0.xsd"> pear.horde.org - Mime + Icalendar pear.horde.org - Util + Mime pear.horde.org - iCalendar + Util pear.horde.org diff --git a/framework/Date/lib/Horde/Date/Recurrence.php b/framework/Date/lib/Horde/Date/Recurrence.php index 1d475a950..86476e3a1 100644 --- a/framework/Date/lib/Horde/Date/Recurrence.php +++ b/framework/Date/lib/Horde/Date/Recurrence.php @@ -958,7 +958,7 @@ class Horde_Date_Recurrence * @link http://www.imc.org/pdi/vcal-10.txt * @link http://www.shuchow.com/vCalAddendum.html * - * @param Horde_iCalendar $calendar A Horde_iCalendar object instance. + * @param Horde_Icalendar $calendar A Horde_Icalendar object instance. * * @return string A vCalendar 1.0 conform RRULE value. */ @@ -1124,7 +1124,7 @@ class Horde_Date_Recurrence * @link http://rfc.net/rfc2445.html#s4.8.5 * @link http://www.shuchow.com/vCalAddendum.html * - * @param Horde_iCalendar $calendar A Horde_iCalendar object instance. + * @param Horde_Icalendar $calendar A Horde_Icalendar object instance. * * @return string An iCalendar 2.0 conform RRULE value. */ diff --git a/framework/Date/test/Horde/Date/RecurrenceTest.php b/framework/Date/test/Horde/Date/RecurrenceTest.php index e9eaefdd8..85d2cf264 100644 --- a/framework/Date/test/Horde/Date/RecurrenceTest.php +++ b/framework/Date/test/Horde/Date/RecurrenceTest.php @@ -7,7 +7,7 @@ require_once 'Horde/String.php'; require_once 'Horde/Util.php'; -require_once 'Horde/iCalendar.php'; +require_once 'Horde/Icalendar.php'; require_once dirname(__FILE__) . '/../../../lib/Horde/Date.php'; require_once dirname(__FILE__) . '/../../../lib/Horde/Date/Recurrence.php'; require_once dirname(__FILE__) . '/../../../lib/Horde/Date/Utils.php'; @@ -22,7 +22,7 @@ class Horde_Date_RecurrenceTest extends PHPUnit_Framework_TestCase protected function setUp() { Horde_String::setDefaultCharset('UTF-8'); - $this->ical = new Horde_iCalendar(); + $this->ical = new Horde_Icalendar(); $this->_oldTimezone = date_default_timezone_get(); date_default_timezone_set('Europe/Berlin'); } @@ -911,14 +911,14 @@ class Horde_Date_RecurrenceTest extends PHPUnit_Framework_TestCase { require_once 'PEAR.php'; - $iCal = new Horde_iCalendar(); + $iCal = new Horde_Icalendar(); $iCal->parsevCalendar(file_get_contents(dirname(__FILE__) . '/fixtures/bug2813.ics')); $components = $iCal->getComponents(); date_default_timezone_set('US/Eastern'); foreach ($components as $content) { - if ($content instanceof Horde_iCalendar_vevent) { + if ($content instanceof Horde_Icalendar_Vevent) { $start = new Horde_Date($content->getAttribute('DTSTART')); $end = new Horde_Date($content->getAttribute('DTEND')); $rrule = $content->getAttribute('RRULE'); @@ -946,8 +946,8 @@ class Horde_Date_RecurrenceTest extends PHPUnit_Framework_TestCase $rrule->setRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_WEEKDAY); $rrule->setRecurOnDay(Horde_Date::MASK_SATURDAY); - $this->assertEquals('MP1 1+ SA #0', $rrule->toRRule10(new Horde_iCalendar())); - $this->assertEquals('FREQ=MONTHLY;INTERVAL=1;BYDAY=1SA', $rrule->toRRule20(new Horde_iCalendar())); + $this->assertEquals('MP1 1+ SA #0', $rrule->toRRule10(new Horde_Icalendar())); + $this->assertEquals('FREQ=MONTHLY;INTERVAL=1;BYDAY=1SA', $rrule->toRRule20(new Horde_Icalendar())); } } diff --git a/framework/Icalendar/examples/Horde/Icalendar/exchange.ics b/framework/Icalendar/examples/Horde/Icalendar/exchange.ics new file mode 100644 index 000000000..b714cfb83 --- /dev/null +++ b/framework/Icalendar/examples/Horde/Icalendar/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/examples/Horde/Icalendar/exdate.ics b/framework/Icalendar/examples/Horde/Icalendar/exdate.ics new file mode 100644 index 000000000..1b7644cc0 --- /dev/null +++ b/framework/Icalendar/examples/Horde/Icalendar/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/examples/Horde/Icalendar/ical.ics b/framework/Icalendar/examples/Horde/Icalendar/ical.ics new file mode 100644 index 000000000..6ed057e49 --- /dev/null +++ b/framework/Icalendar/examples/Horde/Icalendar/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/examples/Horde/Icalendar/parser.php b/framework/Icalendar/examples/Horde/Icalendar/parser.php new file mode 100755 index 000000000..6f69c457e --- /dev/null +++ b/framework/Icalendar/examples/Horde/Icalendar/parser.php @@ -0,0 +1,49 @@ +#!/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/examples/Horde/Icalendar/test_recurring.vcs b/framework/Icalendar/examples/Horde/Icalendar/test_recurring.vcs new file mode 100644 index 000000000..8d01f59a7 --- /dev/null +++ b/framework/Icalendar/examples/Horde/Icalendar/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/examples/Horde/Icalendar/vnote.txt b/framework/Icalendar/examples/Horde/Icalendar/vnote.txt new file mode 100644 index 000000000..6bd5fd5e8 --- /dev/null +++ b/framework/Icalendar/examples/Horde/Icalendar/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/lib/Horde/Icalendar.php b/framework/Icalendar/lib/Horde/Icalendar.php new file mode 100644 index 000000000..8ee462f01 --- /dev/null +++ b/framework/Icalendar/lib/Horde/Icalendar.php @@ -0,0 +1,1490 @@ + + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Icalendar + */ +class Horde_Icalendar +{ + /** + * The component type of this class. + * + * @var string + */ + public $type = 'vcalendar'; + + /** + * The parent (containing) iCalendar object. + * + * @var Horde_Icalendar + */ + protected $_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 + */ + protected $_attributes = array(); + + /** + * Any children (contained) iCalendar components of this object. + * + * @var array + */ + protected $_components = array(); + + /** + * According to RFC 2425, we should always use CRLF-terminated lines. + * + * @var string + */ + protected $_newline = "\r\n"; + + /** + * iCalendar format version (different behavior for 1.0 and 2.0 especially + * with recurring events). + * + * @var string + */ + protected $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. + */ + protected $oldFormat = true; + + /** + * Constructor. + * + * @var string $version Version. + */ + public function __construct($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 public function newComponent($type, $container) + { + $type = Horde_String::lower($type); + $class = __CLASS__ . '_' . Horde_String::ucfirst($type); + + 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 $version A float-like version string. + */ + public 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. + */ + public 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. + */ + public 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 (string) The value of the attribute. + * (array) The parameters for the attribute or + * multiple values for an attribute. + * @throws Horde_Icalendar_Exception + */ + public function getAttribute($name, $params = false) + { + $result = array(); + foreach ($this->_attributes as $attribute) { + if ($attribute['name'] == $name) { + $result[] = $params + ? $attribute['params'] + : $attribute['value']; + } + } + + if (!count($result)) { + throw new Horde_Icalendar_Exception('Attribute "' . $name . '" Not Found'); + } elseif (count($result) == 1 && !$params) { + return $result[0]; + } + + return $result; + } + + /** + * Gets the values of an attribute as an array. Multiple values + * are possible due to: + * + * a) multiple 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 array Multiple values for an attribute. + * @throws Horde_Icalendar_Exception + */ + public function getAttributeValues($name) + { + $result = array(); + foreach ($this->_attributes as $attribute) { + if ($attribute['name'] == $name) { + $result = array_merge($attribute['values'], $result); + } + } + + if (!count($result)) { + throw new Horde_Icalendar_Exception('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. + */ + public function getAttributeDefault($name, $default = '') + { + try { + return $this->getAttribute($name); + } catch (Horde_Icalendar_Exception $e) { + return $default; + } + } + + /** + * Remove all occurences of an attribute. + * + * @param string $name The name of the attribute. + */ + public function removeAttribute($name) + { + foreach (array_keys($this->_attributes) 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. + */ + public 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 mixed Either a Horde_Icalendar component (subclass) or an array + * of them. + */ + public function addComponent($components) + { + if (!is_array($components)) { + $components = array($components); + } + + foreach ($components as $component) { + if ($component instanceof Horde_Icalendar) { + $component->_container = $this; + $this->_components[] = $component; + } + } + } + + /** + * Retrieve all the components. + * + * @return array Array of Horde_Icalendar objects. + */ + public function getComponents() + { + return $this->_components; + } + + /** + * TODO + * + * @return TODO + */ + public 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. + */ + public 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. + */ + public 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. + */ + public function getComponent($idx) + { + return isset($this->_components[$idx]) + ? $this->_components[$idx] + : 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 the + * requested component. + */ + public function findComponent($childclass) + { + $childclass = __CLASS__ . '_' . Horde_String::lower($childclass); + + foreach (array_keys($this->_components) as $key) { + if ($this->_components[$key] instanceof $childclass) { + return $this->_components[$key]; + } + } + + return false; + } + + /** + * 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 + * the requested component. + */ + public function findComponentByAttribute($childclass, $attribute, + $value = null) + { + $childclass = __CLASS__ . '_' . Horde_String::lower($childclass); + + foreach (array_keys($this->_components) as $key) { + if ($this->_components[$key] instanceof $childclass) { + try { + $attr = $this->_components[$key]->getAttribute($attribute); + } catch (Horde_Icalendar_Exception $e) { + continue; + } + + if (is_null($value) || $value == $attr) { + return $this->_components[$key]; + } + } + } + + return false; + } + + /** + * Clears the iCalendar object (resets the components and attributes + * arrays). + */ + public function clear() + { + $this->_attributes = $this->_components = array(); + } + + /** + * Export as vCalendar format. + * + * @return TODO + */ + public function exportvCalendar() + { + // Default values. + // TODO: HORDE_VERSION does not exist. + $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) { + try { + $this->getAttribute($name); + } catch (Horde_Icalendar_Exception $e) { + $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. + */ + public 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. + * @throws Horde_Icalendar_Exception + */ + public 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 = $this->newComponent($type, $this); + if ($component === false) { + throw new Horde_Icalendar_Exception('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 = $this->newComponent($type, $this); + if ($component === false) { + throw new Horde_Icalendar_Exception('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. + $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. + */ + protected 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'] = $GLOBALS['registry']->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', + Horde_Mime::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. + * + * @param $text TODO + * + * @return TODO + */ + protected 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; + } + + return false; + } + + /** + * Export a UTC Offset field. + * + * @param $value TODO + * + * @return TODO + */ + function _exportUtcOffset($value) + { + $offset = ($value['ahead'] ? '+' : '-') . + sprintf('%02d%02d', $value['hour'], $value['minute']); + + if (isset($value['second'])) { + $offset .= sprintf('%02d', $value['second']); + } + + return $offset; + } + + /** + * Parse a Time Period field. + * + * @param $text TODO + * + * @return array TODO + */ + protected 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. + * + * @param $value TODO + * + * @return TODO + */ + protected function _exportPeriod($value) + { + $period = $this->_exportDateTime($value['start']) . '/'; + + return isset($value['duration']) + ? $period . $this->_exportDuration($value['duration']) + : $period . $this->_exportDateTime($value['end']); + } + + /** + * Grok the TZID and return an offset in seconds from UTC for this + * date and time. + * + * @param $date TODO + * @param $time TODO + * @param $tzid TODO + * + * @return TODO + */ + protected 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. + * + * @param $time TODO + * @param $tzid TODO + * + * @return TODO + */ + protected 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 = $this->_parseDate($dateParts[0])) || + !($time = $this->_parseTime($dateParts[1]))) { + return $text; + } + + // Get timezone info for date fields from $tzid and container. + $tzoffset = ($time['zone'] == 'Local' && $tzid && + ($this->_container instanceof 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. + * + * @todo A bunch of code calls this function outside this class, so it + * needs to be marked public for now. + * + * @param $value TODO + * + * @return TODO + */ + public 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 $this->_exportDateTime($dateOb->timestamp()); + } + + return $this->_exportDate($temp) . 'T' . $this->_exportTime($temp); + } + + /** + * Parses a Time field. + * + * @param $text TODO + * + * @return TODO + */ + protected function _parseTime($text) + { + if (!preg_match('/([0-9]{2})([0-9]{2})([0-9]{2})(Z)?/', $text, $timeParts)) { + return false; + } + + return array( + 'hour' => $timeParts[1], + 'minute' => $timeParts[2], + 'second' => $timeParts[3], + 'zone' => isset($timeParts[4]) ? 'UTC' : 'Local' + ); + } + + /** + * Exports a Time field. + * + * @param $value TODO + * + * @return TODO + */ + protected 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. + * + * @param $text TODO + * + * @return array TODO + */ + protected 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' + * + * @return TODO + */ + protected function _exportDate($value, $autoconvert = false) + { + if (is_object($value)) { + $value = array('year' => $value->year, 'month' => $value->month, 'mday' => $value->mday); + } + + return ($autoconvert !== false && $this->oldFormat) + ? sprintf('%04d%02d%02dT%s', $value['year'], $value['month'], $value['mday'], $autoconvert) + : sprintf('%04d%02d%02d', $value['year'], $value['month'], $value['mday']); + } + + /** + * Parse a Duration Value field. + * + * @param $text TODO + * + * @return TODO + */ + protected 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)) { + return false; + } + + // 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; + } + + /** + * Export a duration value. + * + * @param $value TODO + */ + protected 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; + } + +} diff --git a/framework/Icalendar/lib/Horde/Icalendar/Daylight.php b/framework/Icalendar/lib/Horde/Icalendar/Daylight.php new file mode 100644 index 000000000..590851882 --- /dev/null +++ b/framework/Icalendar/lib/Horde/Icalendar/Daylight.php @@ -0,0 +1,44 @@ + + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Icalendar + */ +class Horde_Icalendar_Daylight extends Horde_Icalendar +{ + /** + * The component type of this class. + * + * @var string + */ + public $type = 'daylight'; + + /** + * TODO + * + * @param $data TODO + */ + public function parsevCalendar($data) + { + parent::parsevCalendar($data, 'DAYLIGHT'); + } + + /** + * TODO + * + * @return TODO + */ + public function exportvCalendar() + { + return $this->_exportvData('DAYLIGHT'); + } + +} diff --git a/framework/Icalendar/lib/Horde/Icalendar/Exception.php b/framework/Icalendar/lib/Horde/Icalendar/Exception.php new file mode 100644 index 000000000..5409068bc --- /dev/null +++ b/framework/Icalendar/lib/Horde/Icalendar/Exception.php @@ -0,0 +1,17 @@ + + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Icalendar + */ +class Horde_Icalendar_Exception extends Horde_Exception_Prior +{ +} diff --git a/framework/Icalendar/lib/Horde/Icalendar/Standard.php b/framework/Icalendar/lib/Horde/Icalendar/Standard.php new file mode 100644 index 000000000..90dad1f9d --- /dev/null +++ b/framework/Icalendar/lib/Horde/Icalendar/Standard.php @@ -0,0 +1,44 @@ + + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Icalendar + */ +class Horde_Icalendar_Standard extends Horde_Icalendar +{ + /** + * The component type of this class. + * + * @var string + */ + public $type = 'standard'; + + /** + * TODO + * + * @param $data TODO + */ + public function parsevCalendar($data) + { + parent::parsevCalendar($data, 'STANDARD'); + } + + /** + * TODO + * + * @return TODO + */ + public function exportvCalendar() + { + return $this->_exportvData('STANDARD'); + } + +} diff --git a/framework/Icalendar/lib/Horde/Icalendar/Valarm.php b/framework/Icalendar/lib/Horde/Icalendar/Valarm.php new file mode 100644 index 000000000..da2d4b035 --- /dev/null +++ b/framework/Icalendar/lib/Horde/Icalendar/Valarm.php @@ -0,0 +1,34 @@ + + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Icalendar + */ +class Horde_Icalendar_Valarm extends Horde_Icalendar +{ + /** + * The component type of this class. + * + * @var string + */ + public $type = 'vAlarm'; + + /** + * TODO + * + * @return TODO + */ + public function exportvCalendar() + { + return $this->_exportvData('VALARM'); + } + +} diff --git a/framework/Icalendar/lib/Horde/Icalendar/Vcard.php b/framework/Icalendar/lib/Horde/Icalendar/Vcard.php new file mode 100644 index 000000000..eb4cff10e --- /dev/null +++ b/framework/Icalendar/lib/Horde/Icalendar/Vcard.php @@ -0,0 +1,133 @@ + + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Icalendar + */ +class Horde_Icalendar_Vcard extends Horde_Icalendar +{ + // The following were shamelessly yoinked from Contact_Vcard_Build + // Part numbers for N components. + const N_FAMILY = 0; + const N_GIVEN = 1; + const N_ADDL = 2; + const N_PREFIX = 3; + const N_SUFFIX = 4; + + // Part numbers for ADR components. + const ADR_POB = 0; + const ADR_EXTEND = 1; + const ADR_STREET = 2; + const ADR_LOCALITY = 3; + const ADR_REGION = 4; + const ADR_POSTCODE = 5; + const ADR_COUNTRY = 6; + + // Part numbers for GEO components. + const GEO_LAT = 0; + const GEO_LON = 1; + + /** + * The component type of this class. + * + * @var string + */ + public $type = 'vcard'; + + /** + * Constructor. + */ + public function __construct($version = '2.1') + { + parent::__construct($version); + } + + /** + * Sets the version of this component. + * + * @see $version + * @see $oldFormat + * + * @param string A float-like version string. + */ + public 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) + * + * @return TODO + */ + public function exportvCalendar() + { + $requiredAttributes['VERSION'] = $this->version; + $requiredAttributes['N'] = ';;;;;;'; + if ($this->version == '3.0') { + $requiredAttributes['FN'] = ''; + } + + foreach ($requiredAttributes as $name => $default_value) { + try { + $this->getAttribute($name); + } catch (Horde_Icalendar_Exception $e) { + $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. + */ + public function printableName() + { + try { + $name_parts = $this->getAttributeValues('N'); + } catch (Horde_Icalendar_Exception $e) { + return null; + } + + $name_arr = array(); + + foreach (array(self::N_PREFIX, self::N_GIVEN, self::N_ADDL, self::N_FAMILY, self::N_SUFFIX) as $val) { + if (!empty($name_parts[$val])) { + $name_arr[] = $name_parts[$val]; + } + } + + 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. + */ + static function getBareEmail($address) + { + return Horde_Mime_Address::bareAddress($address); + } + +} diff --git a/framework/Icalendar/lib/Horde/Icalendar/Vevent.php b/framework/Icalendar/lib/Horde/Icalendar/Vevent.php new file mode 100644 index 000000000..3c4d62559 --- /dev/null +++ b/framework/Icalendar/lib/Horde/Icalendar/Vevent.php @@ -0,0 +1,244 @@ + + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Icalendar + */ +class Horde_Icalendar_Vevent extends Horde_Icalendar +{ + /** + * The component type of this class. + * + * @var string + */ + public $type = 'vEvent'; + + /** + * TODO + * + * @return TODO + */ + public function exportvCalendar() + { + // Default values. + $requiredAttributes = array( + 'DTSTAMP' => time(), + 'UID' => strval(new Horde_Support_Uuid()) + ); + + $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) { + try { + $this->getAttribute($name); + } catch (Horde_Icalendar_Exception $e) { + $this->setAttribute($name, $default_value); + } + } + + return $this->_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. + */ + public 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. + */ + public function organizerName() + { + try { + $organizer = $this->getAttribute('ORGANIZER', true); + } catch (Horde_Icalendar_Exception $e) { + 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. + */ + public function updateFromvEvent($vevent) + { + $newAttributes = $vevent->getAllAttributes(); + foreach ($newAttributes as $newAttribute) { + try { + $currentValue = $this->getAttribute($newAttribute['name']); + } catch (Horde_Icalendar_Exception $e) { + // Already exists so just add it. + $this->setAttribute($newAttribute['name'], + $newAttribute['value'], + $newAttribute['params']); + continue; + } + + // 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 + */ + public function updateAttendeesFromvEvent($vevent) + { + $newAttributes = $vevent->getAllAttributes(); + foreach ($newAttributes as $newAttribute) { + if ($newAttribute['name'] != 'ATTENDEE') { + continue; + } + + try { + $currentValue = $this->getAttribute($newAttribute['name']); + } catch (Horde_Icalendar_Exception $e) { + // Already exists so just add it. + $this->setAttribute($newAttribute['name'], + $newAttribute['value'], + $newAttribute['params']); + continue; + } + + // 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/lib/Horde/Icalendar/Vfreebusy.php b/framework/Icalendar/lib/Horde/Icalendar/Vfreebusy.php new file mode 100644 index 000000000..f66f4e41d --- /dev/null +++ b/framework/Icalendar/lib/Horde/Icalendar/Vfreebusy.php @@ -0,0 +1,502 @@ + + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Icalendar + */ +class Horde_ICalendar_Vfreebusy extends Horde_Icalendar +{ + /** + * The component type of this class. + * + * @var string + */ + public $type = 'vFreebusy'; + + /** + * TODO + * + * @var array + */ + protected $_busyPeriods = array(); + + /** + * TODO + * + * @var array + */ + protected $_extraParams = array(); + + /** + * Parses a string containing vFreebusy data. + * + * @param string $data The data to parse. + * @param $type TODO + * @param $charset TODO + */ + public 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 + * iCalendar format specification. + */ + public 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 = $this->_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. + */ + public function getName() + { + $name = ''; + + try { + $method = !empty($this->_container) + ? $this->_container->getAttribute('METHOD') + : 'PUBLISH'; + if ($method == 'PUBLISH') { + $attr = 'ORGANIZER'; + } elseif ($method == 'REPLY') { + $attr = 'ATTENDEE'; + } + } catch (Horde_Icalendar_Exception $e) { + $attr = 'ORGANIZER'; + } + + try { + $name = $this->getAttribute($attr, true); + if (isset($name[0]['CN'])) { + return $name[0]['CN']; + } + } catch (Horde_Icalendar_Exception $e) {} + + try { + $name = parse_url($this->getAttribute($attr)); + return $name['path']; + } catch (Horde_Icalendar_Exception $e) { + return ''; + } + } + + /** + * Returns the email address for this object. + * + * @return string The email address of this object's owner. + */ + public function getEmail() + { + $name = ''; + + try { + $method = !empty($this->_container) + ? $this->_container->getAttribute('METHOD') + : 'PUBLISH'; + if ($method == 'PUBLISH') { + $attr = 'ORGANIZER'; + } elseif ($method == 'REPLY') { + $attr = 'ATTENDEE'; + } + } catch (Horde_Icalendar_Exception $e) { + $attr = 'ORGANIZER'; + } + + try { + $name = parse_url($this->getAttribute($attr)); + return $name['path']; + } catch (Horde_Icalendar_Exception $e) { + return ''; + } + } + + /** + * Returns the busy periods. + * + * @return array All busy periods. + */ + public function getBusyPeriods() + { + return $this->_busyPeriods; + } + + /** + * Returns any additional freebusy parameters. + * + * @return array Additional parameters of the freebusy periods. + */ + public 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. + */ + public 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. + */ + public 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. + */ + public function getStart() + { + try { + return $this->getAttribute('DTSTART'); + } catch (Horde_Icalendar_Exception $e) { + return count($this->_busyPeriods) + ? min(array_keys($this->_busyPeriods)) + : false; + } + } + + /** + * Returns the timestamp of the end of the time period this free busy + * information covers. + * + * @return integer A timestamp. + */ + public function getEnd() + { + try { + return $this->getAttribute('DTEND'); + } catch (Horde_Icalendar_Exception $e) { + return count($this->_busyPeriods) + ? max(array_values($this->_busyPeriods)) + : 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. + */ + public function merge(Horde_Icalendar_Vfreebusy $freebusy, + $simplify = true) + { + $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()); + } + + foreach (array('DTSTART', 'DTEND') as $val) { + try { + $thisattr = $this->getAttribute($val); + } catch (Horde_Icalendar_Exception $e) { + $thisattr = null; + } + + try { + $thatattr = $freebusy->getAttribute($val); + } catch (Horde_Icalendar_Exception $e) { + $thatattr = null; + } + + if (is_null($thisattr) && !is_null($thatattr)) { + $this->setAttribute($val, $thatattr, array(), false); + } elseif (!is_null($thatattr)) { + switch ($val) { + case 'DTSTART': + $set = ($thatattr < $thisattr); + break; + + case 'DTEND': + $set = ($thatattr > $thisattr); + break; + } + + if ($set) { + $this->setAttribute($val, $thatattr, array(), false); + } + } + } + + if ($simplify) { + $this->simplify(); + } + + return true; + } + + /** + * Removes all overlaps and simplifies the busy periods array as much as + * possible. + */ + public 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]; + } + + /** + * TODO + * + * @param $busyPeriods TODO + * @param array $extraParams TODO + * + * @return array TODO + */ + protected function _simplify($busyPeriods, $extraParams = array()) + { + $checked = $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/lib/Horde/Icalendar/Vjournal.php b/framework/Icalendar/lib/Horde/Icalendar/Vjournal.php new file mode 100644 index 000000000..5dcbee11c --- /dev/null +++ b/framework/Icalendar/lib/Horde/Icalendar/Vjournal.php @@ -0,0 +1,34 @@ + + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Icalendar + */ +class Horde_Icalendar_Vjournal extends Horde_Icalendar { + + /** + * The component type of this class. + * + * @var string + */ + public $type = 'vJournal'; + + /** + * TODO + * + * @return TODO + */ + public function exportvCalendar() + { + return $this->_exportvData('VJOURNAL'); + } + +} diff --git a/framework/Icalendar/lib/Horde/Icalendar/Vnote.php b/framework/Icalendar/lib/Horde/Icalendar/Vnote.php new file mode 100644 index 000000000..95558e120 --- /dev/null +++ b/framework/Icalendar/lib/Horde/Icalendar/Vnote.php @@ -0,0 +1,69 @@ + + * @author Karsten Fourmont + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Icalendar + */ +class Horde_Icalendar_Vnote extends Horde_Icalendar +{ + /** + * The component type of this class. + * + * @var string + */ + public $type = 'vNote'; + + /** + * Constructor. + */ + public function __construct($version = '1.1') + { + parent::__construct($version); + } + + /** + * Sets the version of this component. + * + * @see $version + * @see $oldFormat + * + * @param string A float-like version string. + */ + public 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) + * + * @return TODO + */ + public function exportvCalendar() + { + $requiredAttributes['BODY'] = ''; + $requiredAttributes['VERSION'] = '1.1'; + + foreach ($requiredAttributes as $name => $default_value) { + try { + $this->getAttribute($name); + } catch (Horde_Icalendar_Exception $e) { + $this->setAttribute($name, $default_value); + } + } + + return $this->_exportvData('VNOTE'); + } + +} diff --git a/framework/Icalendar/lib/Horde/Icalendar/Vtimezone.php b/framework/Icalendar/lib/Horde/Icalendar/Vtimezone.php new file mode 100644 index 000000000..6c63a5b88 --- /dev/null +++ b/framework/Icalendar/lib/Horde/Icalendar/Vtimezone.php @@ -0,0 +1,177 @@ + + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Icalendar + */ +class Horde_Icalendar_Vtimezone extends Horde_Icalendar +{ + /** + * The component type of this class. + * + * @var string + */ + public $type = 'vTimeZone'; + + /** + * TODO + * + * @return TODO + */ + public function exportvCalendar() + { + return $this->_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. + * + * @param &$child TODO + * @param $year TODO + * + * @return TODO + */ + public function parseChild(&$child, $year) + { + // Make sure 'time' key is first for sort(). + $result['time'] = 0; + + try { + $t = $child->getAttribute('TZOFFSETFROM'); + } catch (Horde_Icalendar_Exception $e) { + return false; + } + $result['from'] = ($t['hour'] * 60 * 60 + $t['minute'] * 60) * ($t['ahead'] ? 1 : -1); + + try { + $t = $child->getAttribute('TZOFFSETTO'); + } catch (Horde_Icalendar_Exception $e) { + return false; + } + $result['to'] = ($t['hour'] * 60 * 60 + $t['minute'] * 60) * ($t['ahead'] ? 1 : -1); + + try { + $switch_time = $child->getAttribute('DTSTART'); + } catch (Horde_Icalendar_Exception $e) { + return false; + } + + try { + $rrules = $child->getAttribute('RRULE'); + } catch (Horde_Icalendar_Exception $e) { + 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; + } + +} diff --git a/framework/Icalendar/lib/Horde/Icalendar/Vtodo.php b/framework/Icalendar/lib/Horde/Icalendar/Vtodo.php new file mode 100644 index 000000000..dd7be532e --- /dev/null +++ b/framework/Icalendar/lib/Horde/Icalendar/Vtodo.php @@ -0,0 +1,99 @@ + + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Icalendar + */ +class Horde_Icalendar_Vtodo extends Horde_Icalendar +{ + /** + * The component type of this class. + * + * @var string + */ + public $type = 'vTodo'; + + /** + * TODO + * + * @return TODO + */ + public function exportvCalendar() + { + return $this->_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. + */ + public function toArray() + { + $todo = array(); + + try { + $name = $this->getAttribute('SUMMARY'); + if (!is_array($name)) { + $todo['name'] = $name; + } + } catch (Horde_Icalendar_Exception $e) {} + + try { + $desc = $this->getAttribute('DESCRIPTION'); + if (!is_array($desc)) { + $todo['desc'] = $desc; + } + } catch (Horde_Icalendar_Exception $e) {} + + try { + $priority = $this->getAttribute('PRIORITY'); + if (!is_array($priority)) { + $todo['priority'] = $priority; + } + } catch (Horde_Icalendar_Exception $e) {} + + try { + $due = $this->getAttribute('DTSTAMP'); + if (!is_array($due)) { + $todo['due'] = $due; + } + } catch (Horde_Icalendar_Exception $e) {} + + 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. + */ + public 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..8756e9914 --- /dev/null +++ b/framework/Icalendar/package.xml @@ -0,0 +1,240 @@ + + + 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 + + 2010-08-02 + + 0.2.0 + 0.2.0 + + + beta + beta + + LGPL + * Initial Horde 4 package. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5.2.0 + + + 1.7.0 + + + Exception + pear.horde.org + + + Mime + pear.horde.org + + + Support + pear.horde.org + + + Util + pear.horde.org + + + + + + + + + + + + + + + + + + + + 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. + + + + 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/test/.cvsignore b/framework/Icalendar/test/.cvsignore new file mode 100644 index 000000000..4fce866b4 --- /dev/null +++ b/framework/Icalendar/test/.cvsignore @@ -0,0 +1,5 @@ +*.diff +*.log +*.exp +*.php +*.out diff --git a/framework/Icalendar/test/Horde/Icalendar/bug_7423.phpt b/framework/Icalendar/test/Horde/Icalendar/bug_7423.phpt new file mode 100644 index 000000000..cf3e3a8fb --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/charset1.phpt b/framework/Icalendar/test/Horde/Icalendar/charset1.phpt new file mode 100644 index 000000000..1bbd030c2 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/empty_data.phpt b/framework/Icalendar/test/Horde/Icalendar/empty_data.phpt new file mode 100644 index 000000000..9640f4636 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/AuthorChats.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/AuthorChats.ics new file mode 100644 index 000000000..49956a13e --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/MMMPseminar.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/MMMPseminar.ics new file mode 100644 index 000000000..f5082cd77 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/Moon_Days.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/Moon_Days.ics new file mode 100644 index 000000000..ccd6c71c2 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/ProjectCalendar.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/ProjectCalendar.ics new file mode 100644 index 000000000..16fe534a8 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/SpanishHolidays.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/SpanishHolidays.ics new file mode 100644 index 000000000..31dae017e --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/allcategories.vcs b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/allcategories.vcs new file mode 100644 index 000000000..c66be7468 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/arsenal32FC.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/arsenal32FC.ics new file mode 100644 index 000000000..e726a4e1e --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/events.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/events.ics new file mode 100644 index 000000000..d422cb135 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/exchange.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/exchange.ics new file mode 100644 index 000000000..b714cfb83 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/exdate.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/exdate.ics new file mode 100644 index 000000000..1b7644cc0 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/iscw.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/iscw.ics new file mode 100644 index 000000000..a057b370f --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/meeting.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/meeting.ics new file mode 100644 index 000000000..a91e150bb --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/privacy_events.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/privacy_events.ics new file mode 100644 index 000000000..14f51bdb9 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/rfc2445.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/rfc2445.ics new file mode 100644 index 000000000..363231d6f --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/test.vcs b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/test.vcs new file mode 100644 index 000000000..33476d181 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/test4.vcs b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/test4.vcs new file mode 100644 index 000000000..ef06c6474 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/test_recurring.vcs b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/test_recurring.vcs new file mode 100644 index 000000000..8d01f59a7 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/fixtures/vTimezone/wicca.ics b/framework/Icalendar/test/Horde/Icalendar/fixtures/vTimezone/wicca.ics new file mode 100644 index 000000000..c5b198c2d --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/geo.phpt b/framework/Icalendar/test/Horde/Icalendar/geo.phpt new file mode 100644 index 000000000..fa9d5e7a7 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/iCalendar.phpt b/framework/Icalendar/test/Horde/Icalendar/iCalendar.phpt new file mode 100644 index 000000000..e1c225e66 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/line-folding.phpt b/framework/Icalendar/test/Horde/Icalendar/line-folding.phpt new file mode 100644 index 000000000..f7762ecc4 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/line-folding.phpt @@ -0,0 +1,180 @@ +--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=BC= +cib=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=A4= +dipiscingelit.Aliq=C3=BC=C3=A4ms=C3=B6llicit=C3=BCdinf=C3=A4=C3=BCcib=C3=BCs= +m=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/test/Horde/Icalendar/quoted-params.phpt b/framework/Icalendar/test/Horde/Icalendar/quoted-params.phpt new file mode 100644 index 000000000..b9c587840 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/read-escapes.phpt b/framework/Icalendar/test/Horde/Icalendar/read-escapes.phpt new file mode 100644 index 000000000..8a17ed887 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/read-vcard-org.phpt b/framework/Icalendar/test/Horde/Icalendar/read-vcard-org.phpt new file mode 100644 index 000000000..ad2a8d55d --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/read-write-escapes.phpt b/framework/Icalendar/test/Horde/Icalendar/read-write-escapes.phpt new file mode 100644 index 000000000..72f99ea47 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/timezones.phpt b/framework/Icalendar/test/Horde/Icalendar/timezones.phpt new file mode 100644 index 000000000..dc6fca8e1 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/timezones.phpt @@ -0,0 +1,827 @@ +--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/test/Horde/Icalendar/vcal20.phpt b/framework/Icalendar/test/Horde/Icalendar/vcal20.phpt new file mode 100644 index 000000000..7543dd3ae --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/vfreebusy.phpt b/framework/Icalendar/test/Horde/Icalendar/vfreebusy.phpt new file mode 100644 index 000000000..eb01d3ce2 --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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/test/Horde/Icalendar/write-escapes.phpt b/framework/Icalendar/test/Horde/Icalendar/write-escapes.phpt new file mode 100644 index 000000000..8a6b0848c --- /dev/null +++ b/framework/Icalendar/test/Horde/Icalendar/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 diff --git a/framework/Kolab_Filter/lib/Horde/Kolab/Filter/Outlook.php b/framework/Kolab_Filter/lib/Horde/Kolab/Filter/Outlook.php index 94ce53d62..1de94669d 100644 --- a/framework/Kolab_Filter/lib/Horde/Kolab/Filter/Outlook.php +++ b/framework/Kolab_Filter/lib/Horde/Kolab/Filter/Outlook.php @@ -4,7 +4,7 @@ */ /* Load the iCal handling */ -require_once 'Horde/iCalendar.php'; +require_once 'Horde/Icalendar.php'; /* Load MIME handlers */ require_once 'Horde/MIME.php'; @@ -96,7 +96,7 @@ class Kolab_Filter_Outlook $email_domain = 'localhost'; } - $iCal = new Horde_iCalendar(); + $iCal = new Horde_Icalendar(); $iCal->parsevCalendar($icaltxt); $vevent =& $iCal->findComponent('VEVENT'); if ($vevent) { diff --git a/framework/Kolab_Filter/package.xml b/framework/Kolab_Filter/package.xml index 7146a159a..8b1287c9c 100644 --- a/framework/Kolab_Filter/package.xml +++ b/framework/Kolab_Filter/package.xml @@ -44,7 +44,7 @@ http://pear.php.net/dtd/package-2.0.xsd"> * Extended iTip reply delivery to support different transport mechanisms. * Splitted Free/Busy functionality in a separate driver class. * kolab/issue4257 ("Always accept" policy doesn't set atendee status to - "accepted") + "accepted") * kolab/issue3962 (Names of config variables for "untrusted" text missleading) * kolab/issue3967 (UNTRUSTED vs. UNAUTHENTICATED, distinction considered harmful) @@ -196,7 +196,7 @@ http://pear.php.net/dtd/package-2.0.xsd"> 0.0.2 - Horde_iCalendar + Icalendar pear.horde.org 0.0.3 diff --git a/framework/Kolab_Filter/test/Horde/Kolab/Filter/ResourceTest.php b/framework/Kolab_Filter/test/Horde/Kolab/Filter/ResourceTest.php index 5fa0fbd27..69d1274ea 100644 --- a/framework/Kolab_Filter/test/Horde/Kolab/Filter/ResourceTest.php +++ b/framework/Kolab_Filter/test/Horde/Kolab/Filter/ResourceTest.php @@ -13,8 +13,8 @@ require_once 'Horde/Kolab/Test/Filter.php'; require_once 'Horde.php'; require_once 'Horde/Kolab/Resource.php'; require_once 'Horde/Kolab/Filter/Incoming.php'; -require_once 'Horde/iCalendar.php'; -require_once 'Horde/iCalendar/vfreebusy.php'; +require_once 'Horde/Icalendar.php'; +require_once 'Horde/Icalendar/Vfreebusy.php'; /** * Test resource handling @@ -103,9 +103,9 @@ class Horde_Kolab_Filter_ResourceTest extends Horde_Kolab_Test_Filter { $this->markTestIncomplete('Fails for unknown reason.'); - $GLOBALS['KOLAB_FILTER_TESTING'] = &new Horde_iCalendar_vfreebusy(); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_iCalendar::_parseDateTime('20080926T000000Z')); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_iCalendar::_parseDateTime('20081126T000000Z')); + $GLOBALS['KOLAB_FILTER_TESTING'] = new Horde_Icalendar_Vfreebusy(); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_Icalendar::_parseDateTime('20080926T000000Z')); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_Icalendar::_parseDateTime('20081126T000000Z')); $params = array('unmodified_content' => true, 'incoming' => true); @@ -134,10 +134,10 @@ class Horde_Kolab_Filter_ResourceTest extends Horde_Kolab_Test_Filter { $this->markTestIncomplete('Fails for unknown reason.'); - require_once 'Horde/iCalendar/vfreebusy.php'; - $GLOBALS['KOLAB_FILTER_TESTING'] = &new Horde_iCalendar_vfreebusy(); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_iCalendar::_parseDateTime('20080926T000000Z')); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_iCalendar::_parseDateTime('20081126T000000Z')); + require_once 'Horde/Icalendar/Vfreebusy.php'; + $GLOBALS['KOLAB_FILTER_TESTING'] = new Horde_Icalendar_Vfreebusy(); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_Icalendar::_parseDateTime('20080926T000000Z')); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_Icalendar::_parseDateTime('20081126T000000Z')); $params = array('unmodified_content' => true, 'incoming' => true); @@ -168,10 +168,10 @@ class Horde_Kolab_Filter_ResourceTest extends Horde_Kolab_Test_Filter */ public function testWholeDayInvitation() { - require_once 'Horde/iCalendar/vfreebusy.php'; - $GLOBALS['KOLAB_FILTER_TESTING'] = &new Horde_iCalendar_vfreebusy(); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_iCalendar::_parseDateTime('20090401T000000Z')); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_iCalendar::_parseDateTime('20090601T000000Z')); + require_once 'Horde/Icalendar/Vfreebusy.php'; + $GLOBALS['KOLAB_FILTER_TESTING'] = new Horde_Icalendar_Vfreebusy(); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_Icalendar::_parseDateTime('20090401T000000Z')); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_Icalendar::_parseDateTime('20090601T000000Z')); $params = array('unmodified_content' => true, 'incoming' => true); @@ -202,10 +202,10 @@ class Horde_Kolab_Filter_ResourceTest extends Horde_Kolab_Test_Filter */ public function testInvitationWithPlusAddressing() { - require_once 'Horde/iCalendar/vfreebusy.php'; - $GLOBALS['KOLAB_FILTER_TESTING'] = &new Horde_iCalendar_vfreebusy(); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_iCalendar::_parseDateTime('20090401T000000Z')); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_iCalendar::_parseDateTime('20090601T000000Z')); + require_once 'Horde/Icalendar/Vfreebusy.php'; + $GLOBALS['KOLAB_FILTER_TESTING'] = new Horde_Icalendar_Vfreebusy(); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_Icalendar::_parseDateTime('20090401T000000Z')); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_Icalendar::_parseDateTime('20090601T000000Z')); $params = array('unmodified_content' => true, 'incoming' => true); @@ -236,9 +236,9 @@ class Horde_Kolab_Filter_ResourceTest extends Horde_Kolab_Test_Filter */ public function testRecurrenceNodefault() { - $GLOBALS['KOLAB_FILTER_TESTING'] = &new Horde_iCalendar_vfreebusy(); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_iCalendar::_parseDateTime('20080926T000000Z')); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_iCalendar::_parseDateTime('20081126T000000Z')); + $GLOBALS['KOLAB_FILTER_TESTING'] = new Horde_Icalendar_Vfreebusy(); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_Icalendar::_parseDateTime('20080926T000000Z')); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_Icalendar::_parseDateTime('20081126T000000Z')); $params = array('unmodified_content' => true, 'incoming' => true); @@ -258,9 +258,9 @@ class Horde_Kolab_Filter_ResourceTest extends Horde_Kolab_Test_Filter { $this->markTestIncomplete('Fails for unknown reason.'); - $GLOBALS['KOLAB_FILTER_TESTING'] = &new Horde_iCalendar_vfreebusy(); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_iCalendar::_parseDateTime('20090901T000000Z')); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_iCalendar::_parseDateTime('20091101T000000Z')); + $GLOBALS['KOLAB_FILTER_TESTING'] = new Horde_Icalendar_Vfreebusy(); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_Icalendar::_parseDateTime('20090901T000000Z')); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_Icalendar::_parseDateTime('20091101T000000Z')); $params = array('unmodified_content' => true, 'incoming' => true); @@ -287,9 +287,9 @@ class Horde_Kolab_Filter_ResourceTest extends Horde_Kolab_Test_Filter */ public function testAllDay() { - $GLOBALS['KOLAB_FILTER_TESTING'] = &new Horde_iCalendar_vfreebusy(); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_iCalendar::_parseDateTime('20090901T000000Z')); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_iCalendar::_parseDateTime('20091101T000000Z')); + $GLOBALS['KOLAB_FILTER_TESTING'] = new Horde_Icalendar_Vfreebusy(); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_Icalendar::_parseDateTime('20090901T000000Z')); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_Icalendar::_parseDateTime('20091101T000000Z')); $params = array('unmodified_content' => true, 'incoming' => true); @@ -320,10 +320,10 @@ class Horde_Kolab_Filter_ResourceTest extends Horde_Kolab_Test_Filter { $this->markTestIncomplete('Sends mail'); - require_once 'Horde/iCalendar/vfreebusy.php'; - $GLOBALS['KOLAB_FILTER_TESTING'] = &new Horde_iCalendar_vfreebusy(); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_iCalendar::_parseDateTime('20080926T000000Z')); - $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_iCalendar::_parseDateTime('20081126T000000Z')); + require_once 'Horde/Icalendar/Vfreebusy.php'; + $GLOBALS['KOLAB_FILTER_TESTING'] = new Horde_Icalendar_Vfreebusy(); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTSTART', Horde_Icalendar::_parseDateTime('20080926T000000Z')); + $GLOBALS['KOLAB_FILTER_TESTING']->setAttribute('DTEND', Horde_Icalendar::_parseDateTime('20081126T000000Z')); $params = array('unmodified_content' => true, 'incoming' => true); diff --git a/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/Cache.php b/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/Cache.php index 8d135daa8..bf42cdaf0 100644 --- a/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/Cache.php +++ b/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/Cache.php @@ -6,8 +6,8 @@ */ /** We require the iCalendar library to build the free/busy list */ -require_once 'Horde/iCalendar.php'; -require_once 'Horde/iCalendar/vfreebusy.php'; +require_once 'Horde/Icalendar.php'; +require_once 'Horde/Icalendar/Vfreebusy.php'; /** * The Horde_Kolab_FreeBusy_Cache:: class provides functionality to store @@ -191,7 +191,7 @@ class Horde_Kolab_FreeBusy_Cache { * @param boolean $extended Should the data hold the extended * free/busy information? * - * @return Horde_iCalendar|PEAR_Error The free/busy data of a + * @return Horde_Icalendar|PEAR_Error The free/busy data of a * single calendar. */ function &loadPartial(&$access, $extended) @@ -297,7 +297,7 @@ class Horde_Kolab_FreeBusy_Cache { Horde::logMessage($message, 'INFO'); } - $rvCal = new Horde_iCalendar(); + $rvCal = new Horde_Icalendar(); $result = $rvCal->parsevCalendar($remote); if (is_a($result, 'PEAR_Error')) { diff --git a/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/Driver/Freebusy/Base.php b/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/Driver/Freebusy/Base.php index 295e7e885..8dff13fc4 100644 --- a/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/Driver/Freebusy/Base.php +++ b/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/Driver/Freebusy/Base.php @@ -87,12 +87,12 @@ class Horde_Kolab_FreeBusy_Driver_Freebusy_Base extends Horde_Kolab_FreeBusy_Dri } // Create the new iCalendar. - $vCal = new Horde_iCalendar(); + $vCal = new Horde_Icalendar(); $vCal->setAttribute('PRODID', '-//kolab.org//NONSGML Kolab Server 2//EN'); $vCal->setAttribute('METHOD', 'PUBLISH'); // Create new vFreebusy. - $vFb = &Horde_iCalendar::newComponent('vfreebusy', $vCal); + $vFb = Horde_Icalendar::newComponent('vfreebusy', $vCal); $params = array(); $cn = $access->owner_object->get(Horde_Kolab_Server_Object_Kolab_User::ATTRIBUTE_CN); diff --git a/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/Imap.php b/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/Imap.php index c10d607f6..aaac73bbd 100644 --- a/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/Imap.php +++ b/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/Imap.php @@ -304,14 +304,14 @@ class Horde_Kolab_FreeBusy_Imap { * @param string $user Set organizer to this user. * @param string $cn Set the common name of this user. * - * @return Horde_iCalendar The iCal object or a PEAR error. + * @return Horde_Icalendar The iCal object or a PEAR error. */ function &generate($startstamp = null, $endstamp = null, $fbpast = 0, $fbfuture = 60, $user = null, $cn = null) { /* Get the iCalendar library at this point */ - require_once 'Horde/iCalendar.php'; + require_once 'Horde/Icalendar.php'; /* Default the start date to today. */ if (is_null($startstamp)) { @@ -347,12 +347,12 @@ class Horde_Kolab_FreeBusy_Imap { } /* Create the new iCalendar. */ - $vCal = new Horde_iCalendar(); + $vCal = new Horde_Icalendar(); $vCal->setAttribute('PRODID', '-//kolab.org//NONSGML Kolab Server 2//EN'); $vCal->setAttribute('METHOD', 'PUBLISH'); /* Create new vFreebusy. */ - $vFb = &Horde_iCalendar::newComponent('vfreebusy', $vCal); + $vFb = Horde_Icalendar::newComponent('vfreebusy', $vCal); $params = array(); if ($cn) { $params['cn'] = $cn; diff --git a/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/View.php b/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/View.php index 85cc25c2c..4930689ce 100644 --- a/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/View.php +++ b/framework/Kolab_FreeBusy/lib/Horde/Kolab/FreeBusy/View.php @@ -62,7 +62,7 @@ class Horde_Kolab_FreeBusy_View_vfb extends Horde_Kolab_FreeBusy_View { /** * The free/busy data that should be displayed. * - * @var Horde_iCalendar + * @var Horde_Icalendar */ var $_vfb; @@ -76,7 +76,7 @@ class Horde_Kolab_FreeBusy_View_vfb extends Horde_Kolab_FreeBusy_View { /** * Constructor. * - * @param Horde_iCalendar $vfb The free/busy data to display. + * @param Horde_Icalendar $vfb The free/busy data to display. */ function Horde_Kolab_FreeBusy_View_vfb(&$data) { diff --git a/framework/Kolab_FreeBusy/package.xml b/framework/Kolab_FreeBusy/package.xml index f699b5c21..029b63492 100644 --- a/framework/Kolab_FreeBusy/package.xml +++ b/framework/Kolab_FreeBusy/package.xml @@ -139,7 +139,7 @@ pear.horde.org - Horde_iCalendar + Icalendar pear.horde.org diff --git a/framework/Kolab_Resource/lib/Horde/Kolab/Resource.php b/framework/Kolab_Resource/lib/Horde/Kolab/Resource.php index 3f2624067..623f3bba8 100644 --- a/framework/Kolab_Resource/lib/Horde/Kolab/Resource.php +++ b/framework/Kolab_Resource/lib/Horde/Kolab/Resource.php @@ -13,7 +13,7 @@ */ /** Load the iCal handling */ -require_once 'Horde/iCalendar.php'; +require_once 'Horde/Icalendar.php'; /** Load MIME handlers */ require_once 'Horde/MIME.php'; @@ -163,7 +163,7 @@ class Kolab_Resource if ($conttype == 'text/calendar') { $part = $mime->getPart($mimeid); - $iCalendar = new Horde_iCalendar(); + $iCalendar = new Horde_Icalendar(); $iCalendar->parsevCalendar($part->transferDecode()); return $iCalendar; @@ -613,7 +613,7 @@ class Kolab_Resource * @param string $cn Common name to be used in the iTip * response. * @param string $resource Resource we send the reply for. - * @param string $Horde_iCalendar_vevent The iTip information. + * @param string $Horde_Icalendar_Vevent The iTip information. * @param int $type Type of response. * @param string $organiser The event organiser. * @param string $uid The UID of the event. @@ -626,13 +626,13 @@ class Kolab_Resource $cn, $resource, get_class($itip), $type), 'DEBUG'); // Build the reply. - $vCal = new Horde_iCalendar(); + $vCal = new Horde_Icalendar(); $vCal->setAttribute('PRODID', '-//kolab.org//NONSGML Kolab Server 2//EN'); $vCal->setAttribute('METHOD', 'REPLY'); $summary = _('No summary available'); - $itip_reply =& Horde_iCalendar::newComponent('VEVENT', $vCal); + $itip_reply = Horde_Icalendar::newComponent('VEVENT', $vCal); $itip_reply->setAttribute('UID', $uid); if (!is_a($itip->getAttribute('SUMMARY'), 'PEAR_error')) { $itip_reply->setAttribute('SUMMARY', $itip->getAttribute('SUMMARY')); diff --git a/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Freebusy.php b/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Freebusy.php index 8ba2806b5..e13149993 100644 --- a/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Freebusy.php +++ b/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Freebusy.php @@ -3,7 +3,7 @@ * Provides methods to retrieve free/busy data for resources. * * PHP version 5 - * + * * @todo Merge this class with Kolab_FreeBusy and Kronolith_FreeBusy into a * single Horde_Freebusy handler. * @@ -151,16 +151,16 @@ class Horde_Kolab_Resource_Freebusy * @param string $resource Fetch the Free/Busy data for this resource * (usually a mail address). * - * @return Horde_iCalendar_vfreebusy The Free/Busy data. + * @return Horde_Icalendar_vfreebusy The Free/Busy data. */ public function get($resource) { /* Return an empty VFB object. */ - $vCal = new Horde_iCalendar(); - $vFb = Horde_iCalendar::newComponent('vfreebusy', $vCal); + $vCal = new Horde_Icalendar(); + $vFb = Horde_Icalendar::newComponent('vfreebusy', $vCal); $vFb->setAttribute('ORGANIZER', $resource); return $vFb; } -} \ No newline at end of file +} diff --git a/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Freebusy/Kolab.php b/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Freebusy/Kolab.php index 0560bc5b7..23bfcc08b 100644 --- a/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Freebusy/Kolab.php +++ b/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Freebusy/Kolab.php @@ -50,7 +50,7 @@ class Horde_Kolab_Resource_Freebusy_Kolab extends Horde_Kolab_Resource_Freebusy * * @param string $resource Fetch the Free/Busy data for this resource. * - * @return Horde_iCalendar_vfreebusy The Free/Busy data. + * @return Horde_Icalendar_Vfreebusy The Free/Busy data. */ public function get($resource) { @@ -100,7 +100,7 @@ class Horde_Kolab_Resource_Freebusy_Kolab extends Horde_Kolab_Resource_Freebusy $charset = 'UTF-8'; } - $iCal = new Horde_iCalendar; + $iCal = new Horde_Icalendar(); $iCal->parsevCalendar($vfb_text, 'VCALENDAR', $charset); $vfb = &$iCal->findComponent('VFREEBUSY'); diff --git a/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Freebusy/Mock.php b/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Freebusy/Mock.php index 9169b051b..75ba126ff 100644 --- a/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Freebusy/Mock.php +++ b/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Freebusy/Mock.php @@ -46,10 +46,10 @@ class Horde_Kolab_Resource_Freebusy_Mock extends Horde_Kolab_Resource_Freebusy * @param string $resource Fetch the Free/Busy data for this resource * (usually a mail address). * - * @return Horde_iCalendar_vfreebusy The Free/Busy data. + * @return Horde_Icalendar_Vfreebusy The Free/Busy data. */ public function get($resource) { return $this->_params['data']; } -} \ No newline at end of file +} diff --git a/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Itip.php b/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Itip.php index fea369788..9d0926a1a 100644 --- a/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Itip.php +++ b/framework/Kolab_Resource/lib/Horde/Kolab/Resource/Itip.php @@ -32,16 +32,16 @@ class Horde_Kolab_Resource_Itip { /** - * Reference to the iCalendar iTip object. + * Reference to the Icalendar iTip object. * - * @var Horde_iCalendar_vevent + * @var Horde_Icalendar_Vevent */ private $_itip; /** * Constructor. * - * @param Horde_iCalendar_vevent $itip Reference to the iCalendar iTip object. + * @param Horde_Icalendar_Vevent $itip An iCalendar iTip object. */ public function __construct($itip) { @@ -254,4 +254,4 @@ class Horde_Kolab_Resource_Itip } } -} \ No newline at end of file +} diff --git a/framework/Kolab_Resource/package.xml b/framework/Kolab_Resource/package.xml index 2b4694af1..a2e6e0c88 100644 --- a/framework/Kolab_Resource/package.xml +++ b/framework/Kolab_Resource/package.xml @@ -92,7 +92,7 @@ 0.0.2 - Horde_iCalendar + Icalendar pear.horde.org 0.0.3 diff --git a/framework/Mime_Viewer/lib/Horde/Mime/Viewer/Vcard.php b/framework/Mime_Viewer/lib/Horde/Mime/Viewer/Vcard.php index 4394cb07c..c7c90e4a8 100644 --- a/framework/Mime_Viewer/lib/Horde/Mime/Viewer/Vcard.php +++ b/framework/Mime_Viewer/lib/Horde/Mime/Viewer/Vcard.php @@ -69,7 +69,7 @@ class Horde_Mime_Viewer_Vcard extends Horde_Mime_Viewer_Base $import_msg = null; $title = _("vCard"); - $iCal = new Horde_iCalendar(); + $iCal = new Horde_Icalendar(); if (!$iCal->parsevCalendar($data, 'VCALENDAR', $this->_mimepart->getCharset())) { $notification->push(_("There was an error reading the contact data."), 'horde.error'); } @@ -80,7 +80,7 @@ class Horde_Mime_Viewer_Vcard extends Horde_Mime_Viewer_Base $source = Horde_Util::getFormData('source'); $count = 0; foreach ($iCal->getComponents() as $c) { - if ($c instanceof Horde_iCalendar_vcard) { + if ($c->getType() == 'vcard') { try { $contacts = $registry->call('contacts/import', array($c, null, $source)); ++$count; @@ -207,23 +207,23 @@ class Horde_Mime_Viewer_Vcard extends Horde_Mime_Viewer_Base } else { $item['params']['TYPE'] = array_keys($item['params']); } + $address = $item['values']; $a = array(); - if (isset($address[VCARD_ADR_STREET])) { - $a[] = $address[VCARD_ADR_STREET]; - } - if (isset($address[VCARD_ADR_LOCALITY])) { - $a[] = $address[VCARD_ADR_LOCALITY]; - } - if (isset($address[VCARD_ADR_REGION])) { - $a[] = $address[VCARD_ADR_REGION]; - } - if (isset($address[VCARD_ADR_POSTCODE])) { - $a[] = $address[VCARD_ADR_POSTCODE]; - } - if (isset($address[VCARD_ADR_COUNTRY])) { - $a[] = $address[VCARD_ADR_COUNTRY]; + $a_list = array( + Horde_Icalendar_Vcard::ADR_STREET, + Horde_Icalendar_Vcard::ADR_LOCALITY, + Horde_Icalendar_Vcard::ADR_REGION, + Horde_Icalendar_Vcard::ADR_POSTCODE, + Horde_Icalendar_Vcard::ADR_COUNTRY + ); + + foreach ($a_list as $val) { + if (isset($address[$val])) { + $a[] = $address[$val]; + } } + $types = array(); foreach ($item['params']['TYPE'] as $type) { switch(Horde_String::upper($type)) { diff --git a/framework/Mime_Viewer/package.xml b/framework/Mime_Viewer/package.xml index 757aef40d..1a85f0ca8 100644 --- a/framework/Mime_Viewer/package.xml +++ b/framework/Mime_Viewer/package.xml @@ -132,7 +132,7 @@ http://pear.php.net/dtd/package-2.0.xsd"> pear.horde.org - iCalendar + Icalendar pear.horde.org diff --git a/framework/SyncML/SyncML/Device.php b/framework/SyncML/SyncML/Device.php index 93a121cff..85b421099 100644 --- a/framework/SyncML/SyncML/Device.php +++ b/framework/SyncML/SyncML/Device.php @@ -270,8 +270,8 @@ class SyncML_Device { function convertUTC2LocalTime($utc) { $dateParts = explode('T', $utc[0]); - $date = Horde_iCalendar::_parseDate($dateParts[0]); - $time = Horde_iCalendar::_parseTime($dateParts[1]); + $date = Horde_Icalendar::_parseDate($dateParts[0]); + $time = Horde_Icalendar::_parseTime($dateParts[1]); // We don't know the timezone so assume local timezone. $ts = @gmmktime($time['hour'], $time['minute'], $time['second'], diff --git a/framework/SyncML/SyncML/Device/Sync4j.php b/framework/SyncML/SyncML/Device/Sync4j.php index 8f436b08f..cef52c60a 100644 --- a/framework/SyncML/SyncML/Device/Sync4j.php +++ b/framework/SyncML/SyncML/Device/Sync4j.php @@ -7,7 +7,7 @@ require_once 'Horde/Date.php'; /** Horde_iCalendar */ -require_once 'Horde/iCalendar.php'; +require_once 'Horde/Icalendar.php'; /** * Sync4j (www.sync4j.org) @@ -224,12 +224,12 @@ class SyncML_Device_sync4j extends SyncML_Device { { $a = SyncML_Device_sync4j::sif2array($sif); - $iCal = new Horde_iCalendar(); + $iCal = new Horde_Icalendar(); $iCal->setAttribute('VERSION', '1.1'); $iCal->setAttribute('PRODID', '-//The Horde Project//SyncML//EN'); $iCal->setAttribute('METHOD', 'PUBLISH'); - $vnote = &Horde_iCalendar::newComponent('vnote', $iCal); + $vnote = Horde_Icalendar::newComponent('vnote', $iCal); $vnote->setAttribute('BODY', isset($a['Body']) ? $a['Body'] : ''); if (isset($a['Subject'])) { $vnote->setAttribute('SUMMARY', $a['Subject']); @@ -245,12 +245,12 @@ class SyncML_Device_sync4j extends SyncML_Device { { $a = SyncML_Device_sync4j::sif2array($sif); - $iCal = new Horde_iCalendar(); + $iCal = new Horde_Icalendar(); $iCal->setAttribute('VERSION', '3.0'); $iCal->setAttribute('PRODID', '-//The Horde Project//SyncML//EN'); $iCal->setAttribute('METHOD', 'PUBLISH'); - $vcard = &Horde_iCalendar::newComponent('vcard', $iCal); + $vcard = Horde_Icalendar::newComponent('vcard', $iCal); $map = array( 'FileAs' => array('FN'), @@ -295,44 +295,44 @@ class SyncML_Device_sync4j extends SyncML_Device { $map = array( array( 'N', - array(VCARD_N_FAMILY => 'LastName', - VCARD_N_GIVEN => 'FirstName', - VCARD_N_ADDL => 'MiddleName', - VCARD_N_PREFIX => 'Title', - VCARD_N_SUFFIX => 'Suffix'), + array(Horde_Icalendar_Vcard::N_FAMILY => 'LastName', + Horde_Icalendar_Vcard::N_GIVEN => 'FirstName', + Horde_Icalendar_Vcard::N_ADDL => 'MiddleName', + Horde_Icalendar_Vcard::N_PREFIX => 'Title', + Horde_Icalendar_Vcard::N_SUFFIX => 'Suffix'), array(), false), array( 'ADR', - array(VCARD_ADR_POB => 'HomeAddressPostOfficeBox', - VCARD_ADR_EXTEND => '', - VCARD_ADR_STREET => 'HomeAddressStreet', - VCARD_ADR_LOCALITY => 'HomeAddressCity', - VCARD_ADR_REGION => 'HomeAddressState', - VCARD_ADR_POSTCODE => 'HomeAddressPostalCode', - VCARD_ADR_COUNTRY => 'HomeAddressCountry'), + array(Horde_Icalendar_Vcard::ADR_POB => 'HomeAddressPostOfficeBox', + Horde_Icalendar_Vcard::ADR_EXTEND => '', + Horde_Icalendar_Vcard::ADR_STREET => 'HomeAddressStreet', + Horde_Icalendar_Vcard::ADR_LOCALITY => 'HomeAddressCity', + Horde_Icalendar_Vcard::ADR_REGION => 'HomeAddressState', + Horde_Icalendar_Vcard::ADR_POSTCODE => 'HomeAddressPostalCode', + Horde_Icalendar_Vcard::ADR_COUNTRY => 'HomeAddressCountry'), array('TYPE' => 'HOME'), true), array( 'ADR', - array(VCARD_ADR_POB => 'BusinessAddressPostOfficeBox', - VCARD_ADR_EXTEND => '', - VCARD_ADR_STREET => 'BusinessAddressStreet', - VCARD_ADR_LOCALITY => 'BusinessAddressCity', - VCARD_ADR_REGION => 'BusinessAddressState', - VCARD_ADR_POSTCODE => 'BusinessAddressPostalCode', - VCARD_ADR_COUNTRY => 'BusinessAddressCountry'), + array(Horde_Icalendar_Vcard::ADR_POB => 'BusinessAddressPostOfficeBox', + Horde_Icalendar_Vcard::ADR_EXTEND => '', + Horde_Icalendar_Vcard::ADR_STREET => 'BusinessAddressStreet', + Horde_Icalendar_Vcard::ADR_LOCALITY => 'BusinessAddressCity', + Horde_Icalendar_Vcard::ADR_REGION => 'BusinessAddressState', + Horde_Icalendar_Vcard::ADR_POSTCODE => 'BusinessAddressPostalCode', + Horde_Icalendar_Vcard::ADR_COUNTRY => 'BusinessAddressCountry'), array('TYPE' => 'WORK'), true), array( 'ADR', - array(VCARD_ADR_POB => 'OtherAddressPostOfficeBox', - VCARD_ADR_EXTEND => '', - VCARD_ADR_STREET => 'OtherAddressStreet', - VCARD_ADR_LOCALITY => 'OtherAddressCity', - VCARD_ADR_REGION => 'OtherAddressState', - VCARD_ADR_POSTCODE => 'OtherAddressPostalCode', - VCARD_ADR_COUNTRY => 'OtherAddressCountry'), + array(Horde_Icalendar_Vcard::ADR_POB => 'OtherAddressPostOfficeBox', + Horde_Icalendar_Vcard::ADR_EXTEND => '', + Horde_Icalendar_Vcard::ADR_STREET => 'OtherAddressStreet', + Horde_Icalendar_Vcard::ADR_LOCALITY => 'OtherAddressCity', + Horde_Icalendar_Vcard::ADR_REGION => 'OtherAddressState', + Horde_Icalendar_Vcard::ADR_POSTCODE => 'OtherAddressPostalCode', + Horde_Icalendar_Vcard::ADR_COUNTRY => 'OtherAddressCountry'), array(), true), ); @@ -369,11 +369,11 @@ class SyncML_Device_sync4j extends SyncML_Device { { $a = SyncML_Device_sync4j::sif2array($sif); - $iCal = new Horde_iCalendar(); + $iCal = new Horde_Icalendar(); $iCal->setAttribute('PRODID', '-//The Horde Project//SyncML//EN'); $iCal->setAttribute('METHOD', 'PUBLISH'); - $vEvent = &Horde_iCalendar::newComponent('vevent', $iCal); + $vEvent = Horde_Icalendar::newComponent('vevent', $iCal); $vEvent->setAttribute('DTSTAMP', time()); $map = array('Subject' => 'SUMMARY', @@ -546,11 +546,11 @@ class SyncML_Device_sync4j extends SyncML_Device { { $a = SyncML_Device_sync4j::sif2array($sif); - $iCal = new Horde_iCalendar(); + $iCal = new Horde_Icalendar(); $iCal->setAttribute('PRODID', '-//The Horde Project//SyncML//EN'); $iCal->setAttribute('METHOD', 'PUBLISH'); - $vtodo = &Horde_iCalendar::newComponent('vtodo', $iCal); + $vtodo = Horde_Icalendar::newComponent('vtodo', $iCal); $vtodo->setAttribute('SUMMARY', $a['Subject']); $vtodo->setAttribute('DESCRIPTION', $a['Body']); @@ -603,7 +603,7 @@ class SyncML_Device_sync4j extends SyncML_Device { function vnote2sif($vnote) { - $iCal = new Horde_iCalendar(); + $iCal = new Horde_Icalendar(); if (!$iCal->parsevCalendar($vnote)) { // handle plain text: $a = array('Body' => $vnote); @@ -628,7 +628,7 @@ class SyncML_Device_sync4j extends SyncML_Device { function vcard2sif($vcard) { - $iCal = new Horde_iCalendar(); + $iCal = new Horde_Icalendar(); if (!$iCal->parsevCalendar($vcard)) { // @TODO: NEVER use die() in a library. die("There was an error importing the data."); @@ -662,11 +662,11 @@ class SyncML_Device_sync4j extends SyncML_Device { case 'N': $name = $item['values']; - $hash['LastName'] = $name[VCARD_N_FAMILY]; - $hash['FirstName'] = $name[VCARD_N_GIVEN]; - $hash['MiddleName'] = $name[VCARD_N_ADDL]; - $hash['Title'] = $name[VCARD_N_PREFIX]; - $hash['Suffix'] = $name[VCARD_N_SUFFIX]; + $hash['LastName'] = $name[Horde_Icalendar_Vcard::N_FAMILY]; + $hash['FirstName'] = $name[Horde_Icalendar_Vcard::N_GIVEN]; + $hash['MiddleName'] = $name[Horde_Icalendar_Vcard::N_ADDL]; + $hash['Title'] = $name[Horde_Icalendar_Vcard::N_PREFIX]; + $hash['Suffix'] = $name[Horde_Icalendar_Vcard::N_SUFFIX]; break; case 'NICKNAME': @@ -706,28 +706,28 @@ class SyncML_Device_sync4j extends SyncML_Device { if ($prefix) { $hash[$prefix . 'Street'] = - isset($address[VCARD_ADR_STREET]) - ? $address[VCARD_ADR_STREET] + isset($address[Horde_Icalendar_Vcard::ADR_STREET]) + ? $address[Horde_Icalendar_Vcard::ADR_STREET] : null; $hash[$prefix . 'City'] = - isset($address[VCARD_ADR_LOCALITY]) - ? $address[VCARD_ADR_LOCALITY] + isset($address[Horde_Icalendar_Vcard::ADR_LOCALITY]) + ? $address[Horde_Icalendar_Vcard::ADR_LOCALITY] : null; $hash[$prefix . 'State'] = - isset($address[VCARD_ADR_REGION]) - ? $address[VCARD_ADR_REGION] + isset($address[Horde_Icalendar_Vcard::ADR_REGION]) + ? $address[Horde_Icalendar_Vcard::ADR_REGION] : null; $hash[$prefix . 'PostalCode'] = - isset($address[VCARD_ADR_POSTCODE]) - ? $address[VCARD_ADR_POSTCODE] + isset($address[Horde_Icalendar_Vcard::ADR_POSTCODE]) + ? $address[Horde_Icalendar_Vcard::ADR_POSTCODE] : null; $hash[$prefix . 'Country'] = - isset($address[VCARD_ADR_COUNTRY]) - ? $address[VCARD_ADR_COUNTRY] + isset($address[Horde_Icalendar_Vcard::ADR_COUNTRY]) + ? $address[Horde_Icalendar_Vcard::ADR_COUNTRY] : null; $hash[$prefix . 'PostOfficeBox'] = - isset($address[VCARD_ADR_POB]) - ? $address[VCARD_ADR_POB] + isset($address[Horde_Icalendar_Vcard::ADR_POB]) + ? $address[Horde_Icalendar_Vcard::ADR_POB] : null; } } @@ -775,28 +775,28 @@ class SyncML_Device_sync4j extends SyncML_Device { $email_set = false; if (isset($item['params']['HOME']) && (!isset($hash['Email2Address']) || isset($item['params']['PREF']))) { - $hash['Email2Address'] = Horde_iCalendar_vcard::getBareEmail($item['value']); + $hash['Email2Address'] = Horde_Icalendar_Vcard::getBareEmail($item['value']); $email_set = true; - } elseif (isset($item['params']['WORK']) && (!isset($hash['Email3Address']) || + } elseif (isset($item['params']['WORK']) && (!isset($hash['Email3Address']) || isset($item['params']['PREF']))) { - $hash['Email3Address'] = Horde_iCalendar_vcard::getBareEmail($item['value']); + $hash['Email3Address'] = Horde_Icalendar_Vcard::getBareEmail($item['value']); $email_set = true; } elseif (isset($item['params']['TYPE'])) { if (!is_array($item['params']['TYPE'])) { $item['params']['TYPE'] = array($item['params']['TYPE']); } - if (in_array('HOME', $item['params']['TYPE']) && + if (in_array('HOME', $item['params']['TYPE']) && (!isset($hash['Email2Address']) || in_array('PREF', $item['params']['TYPE']))) { - $hash['Email2Address'] = Horde_iCalendar_vcard::getBareEmail($item['value']); + $hash['Email2Address'] = Horde_Icalendar_Vcard::getBareEmail($item['value']); $email_set = true; } elseif (in_array('WORK', $item['params']['TYPE']) && (!isset($hash['Email3Address']) || in_array('PREF', $item['params']['TYPE']))) { - $hash['Email3Address'] = Horde_iCalendar_vcard::getBareEmail($item['value']); + $hash['Email3Address'] = Horde_Icalendar_Vcard::getBareEmail($item['value']); $email_set = true; } } if (!$email_set && (!isset($hash['Email1Address']) || isset($item['params']['PREF']))) { - $hash['Email1Address'] = Horde_iCalendar_vcard::getBareEmail($item['value']); + $hash['Email1Address'] = Horde_Icalendar_Vcard::getBareEmail($item['value']); } break; @@ -869,7 +869,7 @@ class SyncML_Device_sync4j extends SyncML_Device { } // @TODO: else: handle case with DTEND= T240000 } - $iCal = new Horde_iCalendar(); + $iCal = new Horde_Icalendar(); if (!$iCal->parsevCalendar($vcard)) { // @TODO: NEVER use die() in a library. die("There was an error importing the data."); @@ -910,7 +910,7 @@ class SyncML_Device_sync4j extends SyncML_Device { $start['value']['year']); } else { $hash['AllDayEvent'] = 0; - $hash['Start'] = Horde_iCalendar::_exportDateTime($start); + $hash['Start'] = Horde_Icalendar::_exportDateTime($start); $start = $start; } } @@ -938,7 +938,7 @@ class SyncML_Device_sync4j extends SyncML_Device { $end = $date->datestamp(); } else { $hash['AllDayEvent'] = 0; - $hash['End'] = Horde_iCalendar::_exportDateTime($item['value']); + $hash['End'] = Horde_Icalendar::_exportDateTime($item['value']); $end = $item['value']; } break; @@ -1091,7 +1091,7 @@ class SyncML_Device_sync4j extends SyncML_Device { $d->correct(); $hash['Exceptions'][] = array('ExcludeDate' => $d->format('Y-m-d')); } else { - $hash['Exceptions'][] = array('ExcludeDate' => Horde_iCalendar::_exportDate($date)); + $hash['Exceptions'][] = array('ExcludeDate' => Horde_Icalendar::_exportDate($date)); } } break; @@ -1104,7 +1104,7 @@ class SyncML_Device_sync4j extends SyncML_Device { } else { // Parse VALARM components. foreach ($content->getComponents() as $component) { - if (!is_a($component, 'Horde_iCalendar_valarm') || + if ($component->getType != 'vAlarm') || is_a($trigger = $component->getAttribute('TRIGGER'), 'PEAR_Error') || is_array($trigger) || empty($trigger)) { @@ -1132,7 +1132,7 @@ class SyncML_Device_sync4j extends SyncML_Device { function vtodo2sif($vcard) { - $iCal = new Horde_iCalendar(); + $iCal = new Horde_Icalendar(); if (!$iCal->parsevCalendar($vcard)) { return PEAR::raiseError('There was an error importing the data.'); } @@ -1176,11 +1176,11 @@ class SyncML_Device_sync4j extends SyncML_Device { break; case 'DTSTART': - $hash['StartDate'] = Horde_iCalendar::_exportDateTime($item['value']); + $hash['StartDate'] = Horde_Icalendar::_exportDateTime($item['value']); break; case 'DUE': - $hash['DueDate'] = Horde_iCalendar::_exportDateTime($item['value']); + $hash['DueDate'] = Horde_Icalendar::_exportDateTime($item['value']); $due = $item['value']; break; @@ -1218,14 +1218,14 @@ class SyncML_Device_sync4j extends SyncML_Device { if ($due && !isset($hash['ReminderSet'])) { // Parse VALARM components. foreach ($content->getComponents() as $component) { - if (!is_a($component, 'Horde_iCalendar_valarm') || + if ($component->getType() != 'vAlarm' || is_a($trigger = $component->getAttribute('TRIGGER'), 'PEAR_Error') || is_array($trigger) || empty($trigger)) { continue; } $hash['ReminderSet'] = 1; - $hash['ReminderTime'] = Horde_iCalendar::_exportDateTime($due - $trigger); + $hash['ReminderTime'] = Horde_Icalendar::_exportDateTime($due - $trigger); } } diff --git a/framework/SyncML/SyncML/Device/Synthesis.php b/framework/SyncML/SyncML/Device/Synthesis.php index 53ef72271..da1ab8803 100644 --- a/framework/SyncML/SyncML/Device/Synthesis.php +++ b/framework/SyncML/SyncML/Device/Synthesis.php @@ -98,7 +98,7 @@ class SyncML_Device_Synthesis extends SyncML_Device { */ function UTC2LocalDate($s) { - $t = Horde_iCalendar::_parseDateTime($s); + $t = Horde_Icalendar::_parseDateTime($s); return date('Ymd', $t) . 'T000000'; } } diff --git a/framework/SyncML/tests/sif.phpt b/framework/SyncML/tests/sif.phpt index 36dc0e7cb..8c36b66af 100644 --- a/framework/SyncML/tests/sif.phpt +++ b/framework/SyncML/tests/sif.phpt @@ -17,7 +17,7 @@ $data = << -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 deleted file mode 100755 index ee4ab1f6e..000000000 --- a/framework/iCalendar/docs/examples/parser.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/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 deleted file mode 100644 index 8d01f59a7..000000000 --- a/framework/iCalendar/docs/examples/test_recurring.vcs +++ /dev/null @@ -1,50 +0,0 @@ -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 deleted file mode 100644 index 6bd5fd5e8..000000000 --- a/framework/iCalendar/docs/examples/vnote.txt +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index 874e7c78b..000000000 --- a/framework/iCalendar/iCalendar.php +++ /dev/null @@ -1,1490 +0,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)) { - return new PEAR_Error('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 mixed Either a Horde_iCalendar component (subclass) or an array - * of them. - */ - function addComponent($components) - { - if (!is_array($components)) { - $components = array($components); - } - - foreach ($components as $component) { - if ($component instanceOf 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 ($this->_components[$key] instanceOf $childclass) { - $attr = $this->_components[$key]->getAttribute($attribute); - if ($attr instanceOf 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'] = $GLOBALS['registry']->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 && - $this->_container instanceOf 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 deleted file mode 100644 index 6803c78f5..000000000 --- a/framework/iCalendar/iCalendar/valarm.php +++ /dev/null @@ -1,27 +0,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 deleted file mode 100644 index bc4d3338f..000000000 --- a/framework/iCalendar/iCalendar/vcard.php +++ /dev/null @@ -1,141 +0,0 @@ - - * @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. - */ - static function getBareEmail($address) - { - // Empty values are still empty. - if (!$address) { - return $address; - } - - $rfc822 = new Horde_Mail_Rfc822(); - return $rfc822->validateMailbox($address) - ? Horde_Mime_Address::writeAddress($address->mailbox, $address->host) - : $address; - } - -} diff --git a/framework/iCalendar/iCalendar/vevent.php b/framework/iCalendar/iCalendar/vevent.php deleted file mode 100644 index 3043c82a7..000000000 --- a/framework/iCalendar/iCalendar/vevent.php +++ /dev/null @@ -1,227 +0,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'] = strval(new Horde_Support_Uuid()); - - $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 deleted file mode 100644 index 730beef9a..000000000 --- a/framework/iCalendar/iCalendar/vfreebusy.php +++ /dev/null @@ -1,453 +0,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 deleted file mode 100644 index 94e07b45b..000000000 --- a/framework/iCalendar/iCalendar/vjournal.php +++ /dev/null @@ -1,27 +0,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 deleted file mode 100644 index f2418e314..000000000 --- a/framework/iCalendar/iCalendar/vnote.php +++ /dev/null @@ -1,60 +0,0 @@ - - * @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 deleted file mode 100644 index bcb883a87..000000000 --- a/framework/iCalendar/iCalendar/vtimezone.php +++ /dev/null @@ -1,205 +0,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 ($t instanceOf PEAR_Error) { - return false; - } - $result['from'] = ($t['hour'] * 60 * 60 + $t['minute'] * 60) * ($t['ahead'] ? 1 : -1); - - $t = $child->getAttribute('TZOFFSETTO'); - if ($t instanceOf PEAR_Error) { - return false; - } - $result['to'] = ($t['hour'] * 60 * 60 + $t['minute'] * 60) * ($t['ahead'] ? 1 : -1); - - $switch_time = $child->getAttribute('DTSTART'); - if ($switch_time instanceOf PEAR_Error) { - return false; - } - - $rrules = $child->getAttribute('RRULE'); - if ($rrules instanceOf 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 deleted file mode 100644 index ef81d505a..000000000 --- a/framework/iCalendar/iCalendar/vtodo.php +++ /dev/null @@ -1,83 +0,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 deleted file mode 100644 index dd19af553..000000000 --- a/framework/iCalendar/package.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - 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 - - - Mail - pear.horde.org - - - Support - pear.horde.org - - - 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 deleted file mode 100644 index 4fce866b4..000000000 --- a/framework/iCalendar/tests/.cvsignore +++ /dev/null @@ -1,5 +0,0 @@ -*.diff -*.log -*.exp -*.php -*.out diff --git a/framework/iCalendar/tests/bug_7423.phpt b/framework/iCalendar/tests/bug_7423.phpt deleted file mode 100644 index 56cc9a273..000000000 --- a/framework/iCalendar/tests/bug_7423.phpt +++ /dev/null @@ -1,32 +0,0 @@ ---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 deleted file mode 100644 index b9aec0b8a..000000000 --- a/framework/iCalendar/tests/charset1.phpt +++ /dev/null @@ -1,50 +0,0 @@ ---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 deleted file mode 100644 index d29a82bd1..000000000 --- a/framework/iCalendar/tests/empty_data.phpt +++ /dev/null @@ -1,30 +0,0 @@ ---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 deleted file mode 100644 index 49956a13e..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/AuthorChats.ics +++ /dev/null @@ -1,208 +0,0 @@ -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 deleted file mode 100644 index f5082cd77..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/MMMPseminar.ics +++ /dev/null @@ -1,180 +0,0 @@ -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 deleted file mode 100644 index ccd6c71c2..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/Moon_Days.ics +++ /dev/null @@ -1,226 +0,0 @@ -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 deleted file mode 100644 index 16fe534a8..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/ProjectCalendar.ics +++ /dev/null @@ -1,137 +0,0 @@ -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 deleted file mode 100644 index 31dae017e..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/SpanishHolidays.ics +++ /dev/null @@ -1,316 +0,0 @@ -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 deleted file mode 100644 index c66be7468..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/allcategories.vcs +++ /dev/null @@ -1,166 +0,0 @@ -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 deleted file mode 100644 index e726a4e1e..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/arsenal32FC.ics +++ /dev/null @@ -1,3594 +0,0 @@ -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 deleted file mode 100644 index d54c36238..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/events.ics +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index b714cfb83..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/exchange.ics +++ /dev/null @@ -1,53 +0,0 @@ -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 deleted file mode 100644 index 1b7644cc0..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/exdate.ics +++ /dev/null @@ -1,16 +0,0 @@ -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 deleted file mode 100644 index a057b370f..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/iscw.ics +++ /dev/null @@ -1,103 +0,0 @@ -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 deleted file mode 100644 index a91e150bb..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/meeting.ics +++ /dev/null @@ -1,71 +0,0 @@ -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 deleted file mode 100644 index 14f51bdb9..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/privacy_events.ics +++ /dev/null @@ -1,263 +0,0 @@ -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 deleted file mode 100644 index 363231d6f..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/rfc2445.ics +++ /dev/null @@ -1,305 +0,0 @@ -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 deleted file mode 100644 index 33476d181..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/test.vcs +++ /dev/null @@ -1,34 +0,0 @@ -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 deleted file mode 100644 index ef06c6474..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/test4.vcs +++ /dev/null @@ -1,39 +0,0 @@ -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 deleted file mode 100644 index 8d01f59a7..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/test_recurring.vcs +++ /dev/null @@ -1,50 +0,0 @@ -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 deleted file mode 100644 index c5b198c2d..000000000 --- a/framework/iCalendar/tests/fixtures/vTimezone/wicca.ics +++ /dev/null @@ -1,568 +0,0 @@ -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 deleted file mode 100644 index a02df3ed3..000000000 --- a/framework/iCalendar/tests/geo.phpt +++ /dev/null @@ -1,37 +0,0 @@ ---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 deleted file mode 100644 index 03c9dfc63..000000000 --- a/framework/iCalendar/tests/iCalendar.phpt +++ /dev/null @@ -1,36 +0,0 @@ ---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 deleted file mode 100644 index 2b551db76..000000000 --- a/framework/iCalendar/tests/line-folding.phpt +++ /dev/null @@ -1,181 +0,0 @@ ---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 deleted file mode 100644 index f9d011daf..000000000 --- a/framework/iCalendar/tests/quoted-params.phpt +++ /dev/null @@ -1,43 +0,0 @@ ---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 deleted file mode 100644 index e829c5cd6..000000000 --- a/framework/iCalendar/tests/read-escapes.phpt +++ /dev/null @@ -1,59 +0,0 @@ ---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 deleted file mode 100644 index 72df9753d..000000000 --- a/framework/iCalendar/tests/read-vcard-org.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---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 deleted file mode 100644 index 7ffb244c0..000000000 --- a/framework/iCalendar/tests/read-write-escapes.phpt +++ /dev/null @@ -1,43 +0,0 @@ ---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 deleted file mode 100644 index 5db270102..000000000 --- a/framework/iCalendar/tests/timezones.phpt +++ /dev/null @@ -1,828 +0,0 @@ ---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 deleted file mode 100644 index 2930143c3..000000000 --- a/framework/iCalendar/tests/vcal20.phpt +++ /dev/null @@ -1,321 +0,0 @@ ---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 deleted file mode 100644 index a2ac7731c..000000000 --- a/framework/iCalendar/tests/vfreebusy.phpt +++ /dev/null @@ -1,269 +0,0 @@ ---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 deleted file mode 100644 index b56accfff..000000000 --- a/framework/iCalendar/tests/write-escapes.phpt +++ /dev/null @@ -1,51 +0,0 @@ ---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 diff --git a/imp/lib/Mime/Viewer/Itip.php b/imp/lib/Mime/Viewer/Itip.php index 5f63be0ff..260be4b91 100644 --- a/imp/lib/Mime/Viewer/Itip.php +++ b/imp/lib/Mime/Viewer/Itip.php @@ -80,7 +80,7 @@ class IMP_Horde_Mime_Viewer_Itip extends Horde_Mime_Viewer_Base $mime_id = $this->_mimepart->getMimeId(); // Parse the iCal file. - $vCal = new Horde_iCalendar(); + $vCal = new Horde_Icalendar(); if (!$vCal->parsevCalendar($data, 'VCALENDAR', $this->_mimepart->getCharset())) { return array( $mime_id => array( @@ -98,8 +98,9 @@ class IMP_Horde_Mime_Viewer_Itip extends Horde_Mime_Viewer_Base } // Get the method type. - $method = $vCal->getAttribute('METHOD'); - if ($method instanceof PEAR_Error) { + try { + $method = $vCal->getAttribute('METHOD'); + } catch (Horde_Icalendar_Exception $e) { $method = ''; } @@ -116,8 +117,9 @@ class IMP_Horde_Mime_Viewer_Itip extends Horde_Mime_Viewer_Base if ($registry->hasMethod('calendar/delete')) { $guid = $components[$key]->getAttribute('UID'); $deleteParams = array('guid' => $guid); - $instance = $components[$key]->getAttribute('RECURRENCE-ID'); - if (!($instance instanceof PEAR_Error)) { + try { + $instance = $components[$key]->getAttribute('RECURRENCE-ID'); + } catch (Horde_Icalendar_Exception $e) { // This is a cancellation of a recurring event instance. $deleteParams['recurrenceId'] = $instance; } @@ -244,8 +246,9 @@ class IMP_Horde_Mime_Viewer_Itip extends Horde_Mime_Viewer_Base $vEvent = $components[$key]; // Get the organizer details. - $organizer = $vEvent->getAttribute('ORGANIZER'); - if ($organizer instanceof PEAR_Error) { + try { + $organizer = $vEvent->getAttribute('ORGANIZER'); + } catch (Horde_Icalendar_Exception $e) { break; } $organizer = parse_url($organizer); @@ -255,30 +258,34 @@ class IMP_Horde_Mime_Viewer_Itip extends Horde_Mime_Viewer_Base // Build the reply. $msg_headers = new Horde_Mime_Headers(); - $vCal = new Horde_iCalendar(); + $vCal = new Horde_Icalendar(); $vCal->setAttribute('PRODID', '-//The Horde Project//' . $msg_headers->getUserAgent() . '//EN'); $vCal->setAttribute('METHOD', 'REPLY'); - $vEvent_reply = Horde_iCalendar::newComponent('vevent', $vCal); + $vEvent_reply = Horde_Icalendar::newComponent('vevent', $vCal); $vEvent_reply->setAttribute('UID', $vEvent->getAttribute('UID')); - if (!($vEvent->getAttribute('SUMMARY') instanceof PEAR_Error)) { + try { + $vEvent->getAttribute('SUMMARY'); $vEvent_reply->setAttribute('SUMMARY', $vEvent->getAttribute('SUMMARY')); - } - if (!($vEvent->getAttribute('DESCRIPTION') instanceof PEAR_Error)) { + } catch (Horde_Icalendar_Exception $e) {} + try { + $vEvent->getAttribute('DESCRIPTION'); $vEvent_reply->setAttribute('DESCRIPTION', $vEvent->getAttribute('DESCRIPTION')); - } + } catch (Horde_Icalendar_Exception $e) {} $dtstart = $vEvent->getAttribute('DTSTART', true); $vEvent_reply->setAttribute('DTSTART', $vEvent->getAttribute('DTSTART'), array_pop($dtstart)); - if (!($vEvent->getAttribute('DTEND') instanceof PEAR_Error)) { + try { + $vEvent->getAttribute('DTEND'); $dtend = $vEvent->getAttribute('DTEND', true); $vEvent_reply->setAttribute('DTEND', $vEvent->getAttribute('DTEND'), array_pop($dtend)); - } else { + } catch (Horde_Icalendar_Exception $e) { $duration = $vEvent->getAttribute('DURATION', true); $vEvent_reply->setAttribute('DURATION', $vEvent->getAttribute('DURATION'), array_pop($duration)); } - if (!($vEvent->getAttribute('SEQUENCE') instanceof PEAR_Error)) { + try { + $vEvent->getAttribute('SEQUENCE'); $vEvent_reply->setAttribute('SEQUENCE', $vEvent->getAttribute('SEQUENCE')); - } + } catch (Horde_Icalendar_Exception $e) {} $vEvent_reply->setAttribute('ORGANIZER', $vEvent->getAttribute('ORGANIZER'), array_pop($organizer)); // Find out who we are and update status. @@ -388,8 +395,9 @@ class IMP_Horde_Mime_Viewer_Itip extends Horde_Mime_Viewer_Base $vFb = $components[$key]; // Get the organizer details. - $organizer = $vFb->getAttribute('ORGANIZER'); - if ($organizer instanceof PEAR_Error) { + try { + $organizer = $vFb->getAttribute('ORGANIZER'); + } catch (Horde_Icalendar_Exception $e) { break; } $organizer = parse_url($organizer); @@ -401,17 +409,22 @@ class IMP_Horde_Mime_Viewer_Itip extends Horde_Mime_Viewer_Base $startStamp = time(); $endStamp = $startStamp + (60 * 24 * 3600); } else { - $startStamp = $vFb->getAttribute('DTSTART'); - if ($startStamp instanceof PEAR_Error) { + try { + $startStamp = $vFb->getAttribute('DTSTART'); + } catch (Horde_Icalendar_Exception $e) { $startStamp = time(); } - $endStamp = $vFb->getAttribute('DTEND'); - if ($endStamp instanceof PEAR_Error) { - $duration = $vFb->getAttribute('DURATION'); - if ($duration instanceof PEAR_Error) { - $endStamp = $startStamp + (60 * 24 * 3600); - } else { + + try { + $endStamp = $vFb->getAttribute('DTEND'); + } catch (Horde_Icalendar_Exception $e) {} + + if (!$endStamp) { + try { + $duration = $vFb->getAttribute('DURATION'); $endStamp = $startStamp + $duration; + } catch (Horde_Icalendar_Exception $e) { + $endStamp = $startStamp + (60 * 24 * 3600); } } } @@ -424,7 +437,7 @@ class IMP_Horde_Mime_Viewer_Itip extends Horde_Mime_Viewer_Base // Build the reply. $msg_headers = new Horde_Mime_Headers(); - $vCal = new Horde_iCalendar(); + $vCal = new Horde_Icalendar(); $vCal->setAttribute('PRODID', '-//The Horde Project//' . $msg_headers->getUserAgent() . '//EN'); $vCal->setAttribute('METHOD', 'REPLY'); $vCal->addComponent($vfb_reply); @@ -570,23 +583,23 @@ class IMP_Horde_Mime_Viewer_Itip extends Horde_Mime_Viewer_Base $html .= '

' . Horde::img('alerts/' . $msg[0] . '.png') . $msg[1] . '

'; } - $start = $vfb->getAttribute('DTSTART'); - if (!($start instanceof PEAR_Error)) { + try { + $start = $vfb->getAttribute('DTSTART'); if (is_array($start)) { $html .= '

' . _("Start:") . ' ' . strftime($prefs->getValue('date_format'), mktime(0, 0, 0, $start['month'], $start['mday'], $start['year'])) . '

'; } else { $html .= '

' . _("Start:") . ' ' . strftime($prefs->getValue('date_format'), $start) . ' ' . date($prefs->getValue('twentyFour') ? ' G:i' : ' g:i a', $start) . '

'; } - } + } catch (Horde_Icalendar_Exception $e) {} - $end = $vfb->getAttribute('DTEND'); - if (!($end instanceof PEAR_Error)) { + try { + $end = $vfb->getAttribute('DTEND'); if (is_array($end)) { $html .= '

' . _("End:") . ' ' . strftime($prefs->getValue('date_format'), mktime(0, 0, 0, $end['month'], $end['mday'], $end['year'])) . '

'; } else { $html .= '

' . _("End:") . ' ' . strftime($prefs->getValue('date_format'), $end) . ' ' . date($prefs->getValue('twentyFour') ? ' G:i' : ' g:i a', $end) . '

'; } - } + } catch (Horde_Icalendar_Exception $e) {} $html .= '

' . _("Actions") . '

' . '