diff options
Diffstat (limited to 'vendor/eluceo/ical/src/Eluceo/iCal/Component/Calendar.php')
-rw-r--r-- | vendor/eluceo/ical/src/Eluceo/iCal/Component/Calendar.php | 323 |
1 files changed, 323 insertions, 0 deletions
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; + } +} |