summaryrefslogtreecommitdiff
path: root/vendor/eluceo/ical/src/Eluceo/iCal/Component
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/eluceo/ical/src/Eluceo/iCal/Component')
-rw-r--r--vendor/eluceo/ical/src/Eluceo/iCal/Component/Alarm.php151
-rw-r--r--vendor/eluceo/ical/src/Eluceo/iCal/Component/Calendar.php323
-rw-r--r--vendor/eluceo/ical/src/Eluceo/iCal/Component/Event.php783
-rw-r--r--vendor/eluceo/ical/src/Eluceo/iCal/Component/Timezone.php57
-rw-r--r--vendor/eluceo/ical/src/Eluceo/iCal/Component/TimezoneRule.php215
5 files changed, 1529 insertions, 0 deletions
diff --git a/vendor/eluceo/ical/src/Eluceo/iCal/Component/Alarm.php b/vendor/eluceo/ical/src/Eluceo/iCal/Component/Alarm.php
new file mode 100644
index 00000000..9e0f0c1b
--- /dev/null
+++ b/vendor/eluceo/ical/src/Eluceo/iCal/Component/Alarm.php
@@ -0,0 +1,151 @@
+<?php
+
+/*
+ * This file is part of the eluceo/iCal package.
+ *
+ * (c) Markus Poerschke <markus@eluceo.de>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Eluceo\iCal\Component;
+
+use Eluceo\iCal\Component;
+use Eluceo\iCal\PropertyBag;
+use Eluceo\iCal\Property;
+
+/**
+ * Implementation of the VALARM component.
+ */
+class Alarm extends Component
+{
+ /**
+ * Alarm ACTION property.
+ *
+ * According to RFC 5545: 3.8.6.1. Action
+ *
+ * @link http://tools.ietf.org/html/rfc5545#section-3.8.6.1
+ */
+ const ACTION_AUDIO = 'AUDIO';
+ const ACTION_DISPLAY = 'DISPLAY';
+ const ACTION_EMAIL = 'EMAIL';
+
+ protected $action;
+ protected $repeat;
+ protected $duration;
+ protected $description;
+ protected $attendee;
+ protected $trigger;
+
+ public function getType()
+ {
+ return 'VALARM';
+ }
+
+ public function getAction()
+ {
+ return $this->action;
+ }
+
+ public function getRepeat()
+ {
+ return $this->repeat;
+ }
+
+ public function getDuration()
+ {
+ return $this->duration;
+ }
+
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ public function getAttendee()
+ {
+ return $this->attendee;
+ }
+
+ public function getTrigger()
+ {
+ return $this->trigger;
+ }
+
+ public function setAction($action)
+ {
+ $this->action = $action;
+
+ return $this;
+ }
+
+ public function setRepeat($repeat)
+ {
+ $this->repeat = $repeat;
+
+ return $this;
+ }
+
+ public function setDuration($duration)
+ {
+ $this->duration = $duration;
+
+ return $this;
+ }
+
+ public function setDescription($description)
+ {
+ $this->description = $description;
+
+ return $this;
+ }
+
+ public function setAttendee($attendee)
+ {
+ $this->attendee = $attendee;
+
+ return $this;
+ }
+
+ public function setTrigger($trigger)
+ {
+ $this->trigger = $trigger;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function buildPropertyBag()
+ {
+ $propertyBag = new PropertyBag();
+
+ if (null != $this->trigger) {
+ $propertyBag->set('TRIGGER', $this->trigger);
+ }
+
+ if (null != $this->action) {
+ $propertyBag->set('ACTION', $this->action);
+ }
+
+ if (null != $this->repeat) {
+ $propertyBag->set('REPEAT', $this->repeat);
+ }
+
+ if (null != $this->duration) {
+ $propertyBag->set('DURATION', $this->duration);
+ }
+
+ if (null != $this->description) {
+ $propertyBag->set('DESCRIPTION', $this->description);
+ }
+
+ if (null != $this->attendee) {
+ $propertyBag->set('ATTENDEE', $this->attendee);
+ }
+
+ return $propertyBag;
+ }
+}
diff --git a/vendor/eluceo/ical/src/Eluceo/iCal/Component/Calendar.php b/vendor/eluceo/ical/src/Eluceo/iCal/Component/Calendar.php
new file mode 100644
index 00000000..db3dd98d
--- /dev/null
+++ b/vendor/eluceo/ical/src/Eluceo/iCal/Component/Calendar.php
@@ -0,0 +1,323 @@
+<?php
+
+/*
+ * This file is part of the eluceo/iCal package.
+ *
+ * (c) Markus Poerschke <markus@eluceo.de>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Eluceo\iCal\Component;
+
+use Eluceo\iCal\Component;
+use Eluceo\iCal\PropertyBag;
+
+class Calendar extends Component
+{
+ /**
+ * Methods for calendar components.
+ *
+ * According to RFP 5545: 3.7.2. Method
+ *
+ * @link http://tools.ietf.org/html/rfc5545#section-3.7.2
+ *
+ * And then according to RFC 2446: 3 APPLICATION PROTOCOL ELEMENTS
+ * @link https://www.ietf.org/rfc/rfc2446.txt
+ */
+ const METHOD_PUBLISH = 'PUBLISH';
+ const METHOD_REQUEST = 'REQUEST';
+ const METHOD_REPLY = 'REPLY';
+ const METHOD_ADD = 'ADD';
+ const METHOD_CANCEL = 'CANCEL';
+ const METHOD_REFRESH = 'REFRESH';
+ const METHOD_COUNTER = 'COUNTER';
+ const METHOD_DECLINECOUNTER = 'DECLINECOUNTER';
+
+ /**
+ * This property defines the calendar scale used for the calendar information specified in the iCalendar object.
+ *
+ * According to RFC 5545: 3.7.1. Calendar Scale
+ *
+ * @link http://tools.ietf.org/html/rfc5545#section-3.7
+ */
+ const CALSCALE_GREGORIAN = 'GREGORIAN';
+
+ /**
+ * The Product Identifier.
+ *
+ * According to RFC 2445: 4.7.3 Product Identifier
+ *
+ * This property specifies the identifier for the product that created the Calendar object.
+ *
+ * @link http://www.ietf.org/rfc/rfc2445.txt
+ *
+ * @var string
+ */
+ protected $prodId = null;
+ protected $method = null;
+ protected $name = null;
+ protected $description = null;
+ protected $timezone = null;
+
+ /**
+ * This property defines the calendar scale used for the
+ * calendar information specified in the iCalendar object.
+ *
+ * Also identifies the calendar type of a non-Gregorian recurring appointment.
+ *
+ * @var string
+ *
+ * @see http://tools.ietf.org/html/rfc5545#section-3.7
+ * @see http://msdn.microsoft.com/en-us/library/ee237520(v=exchg.80).aspx
+ */
+ protected $calendarScale = null;
+
+ /**
+ * Specifies whether or not the iCalendar file only contains one appointment.
+ *
+ * @var bool
+ *
+ * @see http://msdn.microsoft.com/en-us/library/ee203486(v=exchg.80).aspx
+ */
+ protected $forceInspectOrOpen = false;
+
+ /**
+ * Specifies a globally unique identifier for the calendar.
+ *
+ * @var string
+ *
+ * @see http://msdn.microsoft.com/en-us/library/ee179588(v=exchg.80).aspx
+ */
+ protected $calId = null;
+
+ /**
+ * Specifies a suggested iCalendar file download frequency for clients and
+ * servers with sync capabilities.
+ *
+ * @var string
+ *
+ * @see http://msdn.microsoft.com/en-us/library/ee178699(v=exchg.80).aspx
+ */
+ protected $publishedTTL = 'P1W';
+
+ /**
+ * Specifies a color for the calendar in calendar for Apple/Outlook.
+ *
+ * @var string
+ *
+ * @see http://msdn.microsoft.com/en-us/library/ee179588(v=exchg.80).aspx
+ */
+ protected $calendarColor = null;
+
+ public function __construct($prodId)
+ {
+ if (empty($prodId)) {
+ throw new \UnexpectedValueException('PRODID cannot be empty');
+ }
+
+ $this->prodId = $prodId;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getType()
+ {
+ return 'VCALENDAR';
+ }
+
+ /**
+ * @param $method
+ *
+ * @return $this
+ */
+ public function setMethod($method)
+ {
+ $this->method = $method;
+
+ return $this;
+ }
+
+ /**
+ * @param $name
+ *
+ * @return $this
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+
+ return $this;
+ }
+
+ /**
+ * @param $description
+ *
+ * @return $this
+ */
+ public function setDescription($description)
+ {
+ $this->description = $description;
+
+ return $this;
+ }
+
+ /**
+ * @param $timezone
+ *
+ * @return $this
+ */
+ public function setTimezone($timezone)
+ {
+ $this->timezone = $timezone;
+
+ return $this;
+ }
+
+ /**
+ * @param $calendarColor
+ *
+ * @return $this
+ */
+ public function setCalendarColor($calendarColor)
+ {
+ $this->calendarColor = $calendarColor;
+
+ return $this;
+ }
+
+ /**
+ * @param $calendarScale
+ *
+ * @return $this
+ */
+ public function setCalendarScale($calendarScale)
+ {
+ $this->calendarScale = $calendarScale;
+
+ return $this;
+ }
+
+ /**
+ * @param bool $forceInspectOrOpen
+ *
+ * @return $this
+ */
+ public function setForceInspectOrOpen($forceInspectOrOpen)
+ {
+ $this->forceInspectOrOpen = $forceInspectOrOpen;
+
+ return $this;
+ }
+
+ /**
+ * @param string $calId
+ *
+ * @return $this
+ */
+ public function setCalId($calId)
+ {
+ $this->calId = $calId;
+
+ return $this;
+ }
+
+ /**
+ * @param string $ttl
+ *
+ * @return $this
+ */
+ public function setPublishedTTL($ttl)
+ {
+ $this->publishedTTL = $ttl;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function buildPropertyBag()
+ {
+ $propertyBag = new PropertyBag();
+ $propertyBag->set('VERSION', '2.0');
+ $propertyBag->set('PRODID', $this->prodId);
+
+ if ($this->method) {
+ $propertyBag->set('METHOD', $this->method);
+ }
+
+ if ($this->calendarColor) {
+ $propertyBag->set('X-APPLE-CALENDAR-COLOR', $this->calendarColor);
+ $propertyBag->set('X-OUTLOOK-COLOR', $this->calendarColor);
+ $propertyBag->set('X-FUNAMBOL-COLOR', $this->calendarColor);
+ }
+
+ if ($this->calendarScale) {
+ $propertyBag->set('CALSCALE', $this->calendarScale);
+ $propertyBag->set('X-MICROSOFT-CALSCALE', $this->calendarScale);
+ }
+
+ if ($this->name) {
+ $propertyBag->set('X-WR-CALNAME', $this->name);
+ }
+
+ if ($this->description) {
+ $propertyBag->set('X-WR-CALDESC', $this->description);
+ }
+
+ if ($this->timezone) {
+ if ($this->timezone instanceof Timezone) {
+ $propertyBag->set('X-WR-TIMEZONE', $this->timezone->getZoneIdentifier());
+ $this->addComponent($this->timezone);
+ } else {
+ $propertyBag->set('X-WR-TIMEZONE', $this->timezone);
+ $this->addComponent(new Timezone($this->timezone));
+ }
+ }
+
+ if ($this->forceInspectOrOpen) {
+ $propertyBag->set('X-MS-OLK-FORCEINSPECTOROPEN', $this->forceInspectOrOpen);
+ }
+
+ if ($this->calId) {
+ $propertyBag->set('X-WR-RELCALID', $this->calId);
+ }
+
+ if ($this->publishedTTL) {
+ $propertyBag->set('X-PUBLISHED-TTL', $this->publishedTTL);
+ }
+
+ return $propertyBag;
+ }
+
+ /**
+ * Adds an Event to the Calendar.
+ *
+ * Wrapper for addComponent()
+ *
+ * @see Eluceo\iCal::addComponent
+ * @deprecated Please, use public method addComponent() from abstract Component class
+ *
+ * @param Event $event
+ */
+ public function addEvent(Event $event)
+ {
+ $this->addComponent($event);
+ }
+
+ /**
+ * @return null|string
+ */
+ public function getProdId()
+ {
+ return $this->prodId;
+ }
+
+ public function getMethod()
+ {
+ return $this->method;
+ }
+}
diff --git a/vendor/eluceo/ical/src/Eluceo/iCal/Component/Event.php b/vendor/eluceo/ical/src/Eluceo/iCal/Component/Event.php
new file mode 100644
index 00000000..e93d506c
--- /dev/null
+++ b/vendor/eluceo/ical/src/Eluceo/iCal/Component/Event.php
@@ -0,0 +1,783 @@
+<?php
+
+/*
+ * This file is part of the eluceo/iCal package.
+ *
+ * (c) Markus Poerschke <markus@eluceo.de>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Eluceo\iCal\Component;
+
+use Eluceo\iCal\Component;
+use Eluceo\iCal\Property;
+use Eluceo\iCal\Property\DateTimeProperty;
+use Eluceo\iCal\Property\Event\Attendees;
+use Eluceo\iCal\Property\Event\Organizer;
+use Eluceo\iCal\Property\Event\RecurrenceRule;
+use Eluceo\iCal\Property\Event\Description;
+use Eluceo\iCal\PropertyBag;
+use Eluceo\iCal\Property\Event\RecurrenceId;
+use Eluceo\iCal\Property\DateTimesProperty;
+
+/**
+ * Implementation of the EVENT component.
+ */
+class Event extends Component
+{
+ const TIME_TRANSPARENCY_OPAQUE = 'OPAQUE';
+ const TIME_TRANSPARENCY_TRANSPARENT = 'TRANSPARENT';
+
+ const STATUS_TENTATIVE = 'TENTATIVE';
+ const STATUS_CONFIRMED = 'CONFIRMED';
+ const STATUS_CANCELLED = 'CANCELLED';
+
+ /**
+ * @var string
+ */
+ protected $uniqueId;
+
+ /**
+ * The property indicates the date/time that the instance of
+ * the iCalendar object was created.
+ *
+ * The value MUST be specified in the UTC time format.
+ *
+ * @var \DateTime
+ */
+ protected $dtStamp;
+
+ /**
+ * @var \DateTime
+ */
+ protected $dtStart;
+
+ /**
+ * Preferentially chosen over the duration if both are set.
+ *
+ * @var \DateTime
+ */
+ protected $dtEnd;
+
+ /**
+ * @var \DateInterval
+ */
+ protected $duration;
+
+ /**
+ * @var bool
+ */
+ protected $noTime = false;
+
+ /**
+ * @var string
+ */
+ protected $url;
+
+ /**
+ * @var string
+ */
+ protected $location;
+
+ /**
+ * @var string
+ */
+ protected $locationTitle;
+
+ /**
+ * @var string
+ */
+ protected $locationGeo;
+
+ /**
+ * @var string
+ */
+ protected $summary;
+
+ /**
+ * @var Organizer
+ */
+ protected $organizer;
+
+ /**
+ * @see http://www.ietf.org/rfc/rfc2445.txt 4.8.2.7 Time Transparency
+ *
+ * @var string
+ */
+ protected $transparency = self::TIME_TRANSPARENCY_OPAQUE;
+
+ /**
+ * If set to true the timezone will be added to the event.
+ *
+ * @var bool
+ */
+ protected $useTimezone = false;
+
+ /**
+ * @var int
+ */
+ protected $sequence = 0;
+
+ /**
+ * @var Attendees
+ */
+ protected $attendees;
+
+ /**
+ * @var string
+ */
+ protected $description;
+
+ /**
+ * @var string
+ */
+ protected $descriptionHTML;
+
+ /**
+ * @var string
+ */
+ protected $status;
+
+ /**
+ * @var RecurrenceRule
+ */
+ protected $recurrenceRule;
+
+ /**
+ * This property specifies the date and time that the calendar
+ * information was created.
+ *
+ * The value MUST be specified in the UTC time format.
+ *
+ * @var \DateTime
+ */
+ protected $created;
+
+ /**
+ * The property specifies the date and time that the information
+ * associated with the calendar component was last revised.
+ *
+ * The value MUST be specified in the UTC time format.
+ *
+ * @var \DateTime
+ */
+ protected $modified;
+
+ /**
+ * Indicates if the UTC time should be used or not.
+ *
+ * @var bool
+ */
+ protected $useUtc = true;
+
+ /**
+ * @var bool
+ */
+ protected $cancelled;
+
+ /**
+ * This property is used to specify categories or subtypes
+ * of the calendar component. The categories are useful in searching
+ * for a calendar component of a particular type and category.
+ *
+ * @see https://tools.ietf.org/html/rfc5545#section-3.8.1.2
+ *
+ * @var array
+ */
+ protected $categories;
+
+ /**
+ * https://tools.ietf.org/html/rfc5545#section-3.8.1.3.
+ *
+ * @var bool
+ */
+ protected $isPrivate = false;
+
+ /**
+ * Dates to be excluded from a series of events.
+ *
+ * @var \DateTime[]
+ */
+ protected $exDates = array();
+
+ /**
+ * @var RecurrenceId
+ */
+ protected $recurrenceId;
+
+ public function __construct($uniqueId = null)
+ {
+ if (null == $uniqueId) {
+ $uniqueId = uniqid();
+ }
+
+ $this->uniqueId = $uniqueId;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getType()
+ {
+ return 'VEVENT';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function buildPropertyBag()
+ {
+ $propertyBag = new PropertyBag();
+
+ // mandatory information
+ $propertyBag->set('UID', $this->uniqueId);
+
+ $propertyBag->add(new DateTimeProperty('DTSTART', $this->dtStart, $this->noTime, $this->useTimezone, $this->useUtc));
+ $propertyBag->set('SEQUENCE', $this->sequence);
+ $propertyBag->set('TRANSP', $this->transparency);
+
+ if ($this->status) {
+ $propertyBag->set('STATUS', $this->status);
+ }
+
+ // An event can have a 'dtend' or 'duration', but not both.
+ if (null != $this->dtEnd) {
+ $propertyBag->add(new DateTimeProperty('DTEND', $this->dtEnd, $this->noTime, $this->useTimezone, $this->useUtc));
+ } elseif (null != $this->duration) {
+ $propertyBag->set('DURATION', $this->duration->format('P%dDT%hH%iM%sS'));
+ }
+
+ // optional information
+ if (null != $this->url) {
+ $propertyBag->set('URL', $this->url);
+ }
+
+ if (null != $this->location) {
+ $propertyBag->set('LOCATION', $this->location);
+
+ if (null != $this->locationGeo) {
+ $propertyBag->add(
+ new Property(
+ 'X-APPLE-STRUCTURED-LOCATION',
+ 'geo:' . $this->locationGeo,
+ array(
+ 'VALUE' => 'URI',
+ 'X-ADDRESS' => $this->location,
+ 'X-APPLE-RADIUS' => 49,
+ 'X-TITLE' => $this->locationTitle,
+ )
+ )
+ );
+ $propertyBag->set('GEO', str_replace(',', ';', $this->locationGeo));
+ }
+ }
+
+ if (null != $this->summary) {
+ $propertyBag->set('SUMMARY', $this->summary);
+ }
+
+ if (null != $this->attendees) {
+ $propertyBag->add($this->attendees);
+ }
+
+ $propertyBag->set('CLASS', $this->isPrivate ? 'PRIVATE' : 'PUBLIC');
+
+ if (null != $this->description) {
+ $propertyBag->set('DESCRIPTION', new Description($this->description));
+ }
+
+ if (null != $this->descriptionHTML) {
+ $propertyBag->add(
+ new Property(
+ 'X-ALT-DESC',
+ $this->descriptionHTML,
+ array(
+ 'FMTTYPE' => 'text/html',
+ )
+ )
+ );
+ }
+
+ if (null != $this->recurrenceRule) {
+ $propertyBag->set('RRULE', $this->recurrenceRule);
+ }
+
+ if (null != $this->recurrenceId) {
+ $this->recurrenceId->applyTimeSettings($this->noTime, $this->useTimezone, $this->useUtc);
+ $propertyBag->add($this->recurrenceId);
+ }
+
+ if (!empty($this->exDates)) {
+ $propertyBag->add(new DateTimesProperty('EXDATE', $this->exDates, $this->noTime, $this->useTimezone, $this->useUtc));
+ }
+
+ if ($this->cancelled) {
+ $propertyBag->set('STATUS', 'CANCELLED');
+ }
+
+ if (null != $this->organizer) {
+ $propertyBag->add($this->organizer);
+ }
+
+ if ($this->noTime) {
+ $propertyBag->set('X-MICROSOFT-CDO-ALLDAYEVENT', 'TRUE');
+ }
+
+ if (null != $this->categories) {
+ $propertyBag->set('CATEGORIES', $this->categories);
+ }
+
+ $propertyBag->add(
+ new DateTimeProperty('DTSTAMP', $this->dtStamp ?: new \DateTime(), false, false, true)
+ );
+
+ if ($this->created) {
+ $propertyBag->add(new DateTimeProperty('CREATED', $this->created, false, false, true));
+ }
+
+ if ($this->modified) {
+ $propertyBag->add(new DateTimeProperty('LAST-MODIFIED', $this->modified, false, false, true));
+ }
+
+ return $propertyBag;
+ }
+
+ /**
+ * @param $dtEnd
+ *
+ * @return $this
+ */
+ public function setDtEnd($dtEnd)
+ {
+ $this->dtEnd = $dtEnd;
+
+ return $this;
+ }
+
+ public function getDtEnd()
+ {
+ return $this->dtEnd;
+ }
+
+ public function setDtStart($dtStart)
+ {
+ $this->dtStart = $dtStart;
+
+ return $this;
+ }
+
+ /**
+ * @param $dtStamp
+ *
+ * @return $this
+ */
+ public function setDtStamp($dtStamp)
+ {
+ $this->dtStamp = $dtStamp;
+
+ return $this;
+ }
+
+ /**
+ * @param $duration
+ *
+ * @return $this
+ */
+ public function setDuration($duration)
+ {
+ $this->duration = $duration;
+
+ return $this;
+ }
+
+ /**
+ * @param $location
+ * @param string $title
+ * @param null $geo
+ *
+ * @return $this
+ */
+ public function setLocation($location, $title = '', $geo = null)
+ {
+ $this->location = $location;
+ $this->locationTitle = $title;
+ $this->locationGeo = $geo;
+
+ return $this;
+ }
+
+ /**
+ * @param $noTime
+ *
+ * @return $this
+ */
+ public function setNoTime($noTime)
+ {
+ $this->noTime = $noTime;
+
+ return $this;
+ }
+
+ /**
+ * @param int $sequence
+ *
+ * @return $this
+ */
+ public function setSequence($sequence)
+ {
+ $this->sequence = $sequence;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getSequence()
+ {
+ return $this->sequence;
+ }
+
+ /**
+ * @param Organizer $organizer
+ *
+ * @return $this
+ */
+ public function setOrganizer(Organizer $organizer)
+ {
+ $this->organizer = $organizer;
+
+ return $this;
+ }
+
+ /**
+ * @param $summary
+ *
+ * @return $this
+ */
+ public function setSummary($summary)
+ {
+ $this->summary = $summary;
+
+ return $this;
+ }
+
+ /**
+ * @param $uniqueId
+ *
+ * @return $this
+ */
+ public function setUniqueId($uniqueId)
+ {
+ $this->uniqueId = $uniqueId;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUniqueId()
+ {
+ return $this->uniqueId;
+ }
+
+ /**
+ * @param $url
+ *
+ * @return $this
+ */
+ public function setUrl($url)
+ {
+ $this->url = $url;
+
+ return $this;
+ }
+
+ /**
+ * @param $useTimezone
+ *
+ * @return $this
+ */
+ public function setUseTimezone($useTimezone)
+ {
+ $this->useTimezone = $useTimezone;
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ */
+ public function getUseTimezone()
+ {
+ return $this->useTimezone;
+ }
+
+ /**
+ * @param Attendees $attendees
+ *
+ * @return $this
+ */
+ public function setAttendees(Attendees $attendees)
+ {
+ $this->attendees = $attendees;
+
+ return $this;
+ }
+
+ /**
+ * @param string $attendee
+ * @param array $params
+ *
+ * @return $this
+ */
+ public function addAttendee($attendee, $params = array())
+ {
+ if (!isset($this->attendees)) {
+ $this->attendees = new Attendees();
+ }
+ $this->attendees->add($attendee, $params);
+
+ return $this;
+ }
+
+ /**
+ * @return Attendees
+ */
+ public function getAttendees()
+ {
+ return $this->attendees;
+ }
+
+ /**
+ * @param $description
+ *
+ * @return $this
+ */
+ public function setDescription($description)
+ {
+ $this->description = $description;
+
+ return $this;
+ }
+
+ /**
+ * @param $descriptionHTML
+ *
+ * @return $this
+ */
+ public function setDescriptionHTML($descriptionHTML)
+ {
+ $this->descriptionHTML = $descriptionHTML;
+
+ return $this;
+ }
+
+ /**
+ * @param bool $useUtc
+ *
+ * @return $this
+ */
+ public function setUseUtc($useUtc = true)
+ {
+ $this->useUtc = $useUtc;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDescriptionHTML()
+ {
+ return $this->descriptionHTML;
+ }
+
+ /**
+ * @param $status
+ *
+ * @return $this
+ */
+ public function setCancelled($status)
+ {
+ $this->cancelled = (bool) $status;
+
+ return $this;
+ }
+
+ /**
+ * @param $transparency
+ *
+ * @return $this
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setTimeTransparency($transparency)
+ {
+ $transparency = strtoupper($transparency);
+ if ($transparency === self::TIME_TRANSPARENCY_OPAQUE
+ || $transparency === self::TIME_TRANSPARENCY_TRANSPARENT
+ ) {
+ $this->transparency = $transparency;
+ } else {
+ throw new \InvalidArgumentException('Invalid value for transparancy');
+ }
+
+ return $this;
+ }
+
+ /**
+ * @param $status
+ *
+ * @return $this
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setStatus($status)
+ {
+ $status = strtoupper($status);
+ if ($status == self::STATUS_CANCELLED
+ || $status == self::STATUS_CONFIRMED
+ || $status == self::STATUS_TENTATIVE
+ ) {
+ $this->status = $status;
+ } else {
+ throw new \InvalidArgumentException('Invalid value for status');
+ }
+
+ return $this;
+ }
+
+ /**
+ * @param RecurrenceRule $recurrenceRule
+ *
+ * @return $this
+ */
+ public function setRecurrenceRule(RecurrenceRule $recurrenceRule)
+ {
+ $this->recurrenceRule = $recurrenceRule;
+
+ return $this;
+ }
+
+ /**
+ * @return RecurrenceRule
+ */
+ public function getRecurrenceRule()
+ {
+ return $this->recurrenceRule;
+ }
+
+ /**
+ * @param $dtStamp
+ *
+ * @return $this
+ */
+ public function setCreated($dtStamp)
+ {
+ $this->created = $dtStamp;
+
+ return $this;
+ }
+
+ /**
+ * @param $dtStamp
+ *
+ * @return $this
+ */
+ public function setModified($dtStamp)
+ {
+ $this->modified = $dtStamp;
+
+ return $this;
+ }
+
+ /**
+ * @param $categories
+ *
+ * @return $this
+ */
+ public function setCategories($categories)
+ {
+ $this->categories = $categories;
+
+ return $this;
+ }
+
+ /**
+ * Sets the event privacy.
+ *
+ * @param bool $flag
+ *
+ * @return $this
+ */
+ public function setIsPrivate($flag)
+ {
+ $this->isPrivate = (bool) $flag;
+
+ return $this;
+ }
+
+ /**
+ * @param \DateTime $dateTime
+ *
+ * @return \Eluceo\iCal\Component\Event
+ */
+ public function addExDate(\DateTime $dateTime)
+ {
+ $this->exDates[] = $dateTime;
+
+ return $this;
+ }
+
+ /**
+ * @return \DateTime[]
+ */
+ public function getExDates()
+ {
+ return $this->exDates;
+ }
+
+ /**
+ * @param \DateTime[]
+ *
+ * @return \Eluceo\iCal\Component\Event
+ */
+ public function setExDates(array $exDates)
+ {
+ $this->exDates = $exDates;
+
+ return $this;
+ }
+
+ /**
+ * @return \Eluceo\iCal\Property\Event\RecurrenceId
+ */
+ public function getRecurrenceId()
+ {
+ return $this->recurrenceId;
+ }
+
+ /**
+ * @param RecurrenceId $recurrenceId
+ *
+ * @return \Eluceo\iCal\Component\Event
+ */
+ public function setRecurrenceId(RecurrenceId $recurrenceId)
+ {
+ $this->recurrenceId = $recurrenceId;
+
+ return $this;
+ }
+}
diff --git a/vendor/eluceo/ical/src/Eluceo/iCal/Component/Timezone.php b/vendor/eluceo/ical/src/Eluceo/iCal/Component/Timezone.php
new file mode 100644
index 00000000..c820d75b
--- /dev/null
+++ b/vendor/eluceo/ical/src/Eluceo/iCal/Component/Timezone.php
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ * This file is part of the eluceo/iCal package.
+ *
+ * (c) Markus Poerschke <markus@eluceo.de>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Eluceo\iCal\Component;
+
+use Eluceo\iCal\Component;
+use Eluceo\iCal\PropertyBag;
+
+/**
+ * Implementation of the TIMEZONE component.
+ */
+class Timezone extends Component
+{
+ /**
+ * @var string
+ */
+ protected $timezone;
+
+ public function __construct($timezone)
+ {
+ $this->timezone = $timezone;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getType()
+ {
+ return 'VTIMEZONE';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function buildPropertyBag()
+ {
+ $propertyBag = new PropertyBag();
+
+ $propertyBag->set('TZID', $this->timezone);
+ $propertyBag->set('X-LIC-LOCATION', $this->timezone);
+
+ return $propertyBag;
+ }
+
+ public function getZoneIdentifier()
+ {
+ return $this->timezone;
+ }
+}
diff --git a/vendor/eluceo/ical/src/Eluceo/iCal/Component/TimezoneRule.php b/vendor/eluceo/ical/src/Eluceo/iCal/Component/TimezoneRule.php
new file mode 100644
index 00000000..97da4911
--- /dev/null
+++ b/vendor/eluceo/ical/src/Eluceo/iCal/Component/TimezoneRule.php
@@ -0,0 +1,215 @@
+<?php
+
+/*
+ * This file is part of the eluceo/iCal package.
+ *
+ * (c) Markus Poerschke <markus@eluceo.de>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Eluceo\iCal\Component;
+
+use Eluceo\iCal\Component;
+use Eluceo\iCal\PropertyBag;
+use Eluceo\iCal\Property\Event\RecurrenceRule;
+
+/**
+ * Implementation of Standard Time and Daylight Saving Time observances (or rules)
+ * which define the TIMEZONE component.
+ */
+class TimezoneRule extends Component
+{
+ const TYPE_DAYLIGHT = 'DAYLIGHT';
+ const TYPE_STANDARD = 'STANDARD';
+
+ /**
+ * @var string
+ */
+ protected $type;
+
+ /**
+ * @var string
+ */
+ protected $tzOffsetFrom;
+
+ /**
+ * @var string
+ */
+ protected $tzOffsetTo;
+
+ /**
+ * @var string
+ */
+ protected $tzName;
+
+ /**
+ * @var \DateTime
+ */
+ protected $dtStart;
+
+ /**
+ * @var RecurrenceRule
+ */
+ protected $recurrenceRule;
+
+ /**
+ * create new Timezone Rule object by giving a rule type identifier.
+ *
+ * @param string $ruleType one of DAYLIGHT or STANDARD
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function __construct($ruleType)
+ {
+ $ruleType = strtoupper($ruleType);
+ if ($ruleType === self::TYPE_DAYLIGHT || $ruleType === self::TYPE_STANDARD) {
+ $this->type = $ruleType;
+ } else {
+ throw new \InvalidArgumentException('Invalid value for timezone rule type');
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function buildPropertyBag()
+ {
+ $propertyBag = new PropertyBag();
+
+ if ($this->getTzName()) {
+ $propertyBag->set('TZNAME', $this->getTzName());
+ }
+
+ if ($this->getTzOffsetFrom()) {
+ $propertyBag->set('TZOFFSETFROM', $this->getTzOffsetFrom());
+ }
+
+ if ($this->getTzOffsetTo()) {
+ $propertyBag->set('TZOFFSETTO', $this->getTzOffsetTo());
+ }
+
+ if ($this->getDtStart()) {
+ $propertyBag->set('DTSTART', $this->getDtStart());
+ }
+
+ if ($this->recurrenceRule) {
+ $propertyBag->set('RRULE', $this->recurrenceRule);
+ }
+
+ return $propertyBag;
+ }
+
+ /**
+ * @param $offset
+ *
+ * @return $this
+ */
+ public function setTzOffsetFrom($offset)
+ {
+ $this->tzOffsetFrom = $offset;
+
+ return $this;
+ }
+
+ /**
+ * @param $offset
+ *
+ * @return $this
+ */
+ public function setTzOffsetTo($offset)
+ {
+ $this->tzOffsetTo = $offset;
+
+ return $this;
+ }
+
+ /**
+ * @param $name
+ *
+ * @return $this
+ */
+ public function setTzName($name)
+ {
+ $this->tzName = $name;
+
+ return $this;
+ }
+
+ /**
+ * @param \DateTime $dtStart
+ *
+ * @return $this
+ */
+ public function setDtStart(\DateTime $dtStart)
+ {
+ $this->dtStart = $dtStart;
+
+ return $this;
+ }
+
+ /**
+ * @param RecurrenceRule $recurrenceRule
+ *
+ * @return $this
+ */
+ public function setRecurrenceRule(RecurrenceRule $recurrenceRule)
+ {
+ $this->recurrenceRule = $recurrenceRule;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTzOffsetFrom()
+ {
+ return $this->tzOffsetFrom;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTzOffsetTo()
+ {
+ return $this->tzOffsetTo;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTzName()
+ {
+ return $this->tzName;
+ }
+
+ /**
+ * @return RecurrenceRule
+ */
+ public function getRecurrenceRule()
+ {
+ return $this->recurrenceRule;
+ }
+
+ /**
+ * @return mixed return string representation of start date or NULL if no date was given
+ */
+ public function getDtStart()
+ {
+ if ($this->dtStart) {
+ return $this->dtStart->format('Ymd\THis');
+ }
+
+ return;
+ }
+}