Files
server/usr/share/psa-horde/kronolith/lib/Event/Ical.php
2026-01-07 20:52:11 +01:00

125 lines
3.5 KiB
PHP

<?php
/**
* Copyright 2004-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.horde.org/licenses/gpl.
*
* @author Chuck Hagenbuch <chuck@horde.org>
* @author Jan Schneider <jan@horde.org>
* @package Kronolith
*/
class Kronolith_Event_Ical extends Kronolith_Event
{
/**
* The status of this event.
*
* @var integer
*/
public $status = Kronolith::STATUS_FREE;
/**
* The type of the calender this event exists on.
*
* @var string
*/
public $calendarType = 'remote';
/**
* The Horde_Perms permissions mask matching the CalDAV ACL of this event's
* calendar.
*
* @var integer
*/
public $permission = 0;
/**
* Imports a backend specific event object.
*
* @param Horde_Icalendar_Vevent Backend specific event object that this
* object will represent.
*/
public function fromDriver($vEvent)
{
$this->fromiCalendar($vEvent);
$this->initialized = true;
$this->stored = true;
}
/**
* Encapsulates permissions checking.
*
* $user is being ignored.
*
* @param integer $permission The permission to check for.
* @param string $user The user to check permissions for.
*
* @return boolean
*/
public function hasPermission($permission, $user = null)
{
return $this->permission & $permission;
}
/**
* Returns the title of this event.
*
* @param string $user The current user.
*
* @return string The title of this event.
*/
public function getTitle($user = null)
{
return !empty($this->title) ? $this->title : _("[Unnamed event]");
}
/**
* @param array $params
*
* @return Horde_Url
*/
public function getViewUrl($params = array(), $full = false, $encoded = true)
{
if ($this->url) {
return new Horde_Url($this->url, !$encoded);
}
return parent::getViewUrl($params, $full, $encoded);
}
/**
* Parses the various exception related fields. Only deal with the EXDATE
* field here.
*
* @param Horde_Icalendar $vEvent The vEvent part.
*/
protected function _handlevEventRecurrence($vEvent)
{
// Recurrence.
try {
$rrule = $vEvent->getAttribute('RRULE');
if (!is_array($rrule)) {
$this->recurrence = new Horde_Date_Recurrence($this->start);
if (strpos($rrule, '=') !== false) {
$this->recurrence->fromRRule20($rrule);
} else {
$this->recurrence->fromRRule10($rrule);
}
// Exceptions. EXDATE represents deleted events, just add the
// exception, no new event is needed.
$exdates = $vEvent->getAttributeValues('EXDATE');
if (is_array($exdates)) {
foreach ($exdates as $exdate) {
if (is_array($exdate)) {
$this->recurrence->addException((int)$exdate['year'],
(int)$exdate['month'],
(int)$exdate['mday']);
}
}
}
}
} catch (Horde_Icalendar_Exception $e) {}
}
}