181 lines
4.6 KiB
PHP
181 lines
4.6 KiB
PHP
<?php
|
|
/**
|
|
* Kronolith_Calendar_Remote defines an API for single external WebDAV or
|
|
* CalDAV calendars.
|
|
*
|
|
* Copyright 2010-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 Jan Schneider <jan@horde.org>
|
|
* @package Kronolith
|
|
*/
|
|
class Kronolith_Calendar_Remote extends Kronolith_Calendar
|
|
{
|
|
/**
|
|
* The URL of this calendar.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $_url;
|
|
|
|
/**
|
|
* The name of this calendar.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $_name;
|
|
|
|
/**
|
|
* The description of this calendar.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $_desc = '';
|
|
|
|
/**
|
|
* The HTTP user name for this calendar.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $_user;
|
|
|
|
/**
|
|
* The HTTP password for this calendar.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $_password;
|
|
|
|
/**
|
|
* The color of this calendar.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $_color;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param array $params A hash with any parameters that this calendar
|
|
* might need.
|
|
* Required parameters:
|
|
* - share: The share of this calendar.
|
|
*/
|
|
public function __construct($params = array())
|
|
{
|
|
if (!isset($params['url'])) {
|
|
throw new BadMethodCallException('url parameter is missing');
|
|
}
|
|
if (!isset($params['name'])) {
|
|
throw new BadMethodCallException('name parameter is missing');
|
|
}
|
|
$key = $GLOBALS['registry']->getAuthCredential('password');
|
|
if ($key) {
|
|
$secret = $GLOBALS['injector']->getInstance('Horde_Secret');
|
|
if (!empty($params['user'])) {
|
|
$params['user'] = $secret->read($key, base64_decode($params['user']));
|
|
}
|
|
if (!empty($params['password'])) {
|
|
$params['password'] = $secret->read($key, base64_decode($params['password']));
|
|
}
|
|
}
|
|
parent::__construct($params);
|
|
}
|
|
|
|
/**
|
|
* Returns the name of this calendar.
|
|
*
|
|
* @return string This calendar's name.
|
|
*/
|
|
public function name()
|
|
{
|
|
return $this->_name;
|
|
}
|
|
|
|
/**
|
|
* Returns the description of this calendar.
|
|
*
|
|
* @return string This calendar's description.
|
|
*/
|
|
public function description()
|
|
{
|
|
return $this->_desc;
|
|
}
|
|
|
|
/**
|
|
* Returns the background color for this calendar.
|
|
*
|
|
* @return string A HTML color code.
|
|
*/
|
|
public function background()
|
|
{
|
|
return empty($this->_color) ? parent::background() : $this->_color;
|
|
}
|
|
|
|
/**
|
|
* Encapsulates permissions checking.
|
|
*
|
|
* @param integer $permission The permission to check for.
|
|
* @param string $user The user to check permissions for. Defaults
|
|
* to the current user.
|
|
* @param string $creator An event creator, to check for creator
|
|
* permissions.
|
|
*
|
|
* @return boolean Whether the user has the permission on this calendar.
|
|
*/
|
|
public function hasPermission($permission, $user = null, $creator = null)
|
|
{
|
|
return (boolean)(Kronolith::getDriver('Ical', $this->_url)->getPermission() & $permission);
|
|
}
|
|
|
|
/**
|
|
* Whether this calendar is supposed to be displayed in lists.
|
|
*
|
|
* @return boolean True if this calendar should be displayed.
|
|
*/
|
|
public function display()
|
|
{
|
|
return in_array($this->_url, $GLOBALS['calendar_manager']->get(Kronolith::DISPLAY_REMOTE_CALENDARS));
|
|
}
|
|
|
|
/**
|
|
* Returns the URL of this calendar.
|
|
*
|
|
* @return string This calendar's URL.
|
|
*/
|
|
public function url()
|
|
{
|
|
return $this->_url;
|
|
}
|
|
|
|
/**
|
|
* Returns the authentication credentials for this calendar.
|
|
*
|
|
* @return array This calendar's credentials.
|
|
*/
|
|
public function credentials()
|
|
{
|
|
if (!empty($this->_user)) {
|
|
return array('user' => $this->_user, 'password' => $this->_password);
|
|
}
|
|
return array();
|
|
}
|
|
|
|
/**
|
|
* Returns a hash representing this calendar.
|
|
*
|
|
* @return array A simple hash.
|
|
*/
|
|
public function toHash()
|
|
{
|
|
return array_merge(
|
|
parent::toHash(),
|
|
array('show' => in_array($this->_url, $GLOBALS['calendar_manager']->get(Kronolith::DISPLAY_REMOTE_CALENDARS)),
|
|
'edit' => $this->hasPermission(Horde_Perms::EDIT)),
|
|
$this->credentials()
|
|
);
|
|
}
|
|
}
|