mirror of
https://git.friendi.ca/friendica/friendica-addons.git
synced 2024-12-28 12:02:23 +00:00
174 lines
5.4 KiB
PHP
174 lines
5.4 KiB
PHP
<?php
|
|
|
|
class Sabre_CalDAV_Backend_Std extends Sabre_CalDAV_Backend_Common
|
|
{
|
|
|
|
public function getNamespace()
|
|
{
|
|
return CALDAV_NAMESPACE_PRIVATE;
|
|
}
|
|
|
|
public function getCalUrlPrefix()
|
|
{
|
|
return "private";
|
|
}
|
|
|
|
/**
|
|
* Creates a new calendar for a principal.
|
|
*
|
|
* If the creation was a success, an id must be returned that can be used to reference
|
|
* this calendar in other methods, such as updateCalendar.
|
|
*
|
|
* @param string $principalUri
|
|
* @param string $calendarUri
|
|
* @param array $properties
|
|
* @return void
|
|
*/
|
|
public function createCalendar($principalUri, $calendarUri, array $properties)
|
|
{
|
|
// TODO: Implement createCalendar() method.
|
|
}
|
|
|
|
/**
|
|
* Delete a calendar and all it's objects
|
|
*
|
|
* @param string $calendarId
|
|
* @return void
|
|
*/
|
|
public function deleteCalendar($calendarId)
|
|
{
|
|
// TODO: Implement deleteCalendar() method.
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns all calendar objects within a calendar.
|
|
*
|
|
* Every item contains an array with the following keys:
|
|
* * id - unique identifier which will be used for subsequent updates
|
|
* * calendardata - The iCalendar-compatible calendar data
|
|
* * uri - a unique key which will be used to construct the uri. This can be any arbitrary string.
|
|
* * lastmodified - a timestamp of the last modification time
|
|
* * etag - An arbitrary string, surrounded by double-quotes. (e.g.:
|
|
* ' "abcdef"')
|
|
* * calendarid - The calendarid as it was passed to this function.
|
|
* * size - The size of the calendar objects, in bytes.
|
|
*
|
|
* Note that the etag is optional, but it's highly encouraged to return for
|
|
* speed reasons.
|
|
*
|
|
* The calendardata is also optional. If it's not returned
|
|
* 'getCalendarObject' will be called later, which *is* expected to return
|
|
* calendardata.
|
|
*
|
|
* If neither etag or size are specified, the calendardata will be
|
|
* used/fetched to determine these numbers. If both are specified the
|
|
* amount of times this is needed is reduced by a great degree.
|
|
*
|
|
* @param string $calendarId
|
|
* @return array
|
|
*/
|
|
function getCalendarObjects($calendarId)
|
|
{
|
|
$x = explode("-", $calendarId);
|
|
$objs = q("SELECT * FROM %s%scalendarobjects WHERE `namespace` = %d AND `namespace_id` = %d", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, IntVal($x[0]), IntVal($x[1]));
|
|
$ret = array();
|
|
foreach ($objs as $obj) {
|
|
$ret[] = array(
|
|
"id" => IntVal($obj["id"]),
|
|
"calendardata" => $obj["calendardata"],
|
|
"uri" => $obj["uri"],
|
|
"lastmodified" => $obj["lastmodified"],
|
|
"calendarid" => $calendarId,
|
|
"etag" => $obj["etag"],
|
|
"size" => IntVal($obj["size"]),
|
|
);
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* Returns information from a single calendar object, based on it's object
|
|
* uri.
|
|
*
|
|
* The returned array must have the same keys as getCalendarObjects. The
|
|
* 'calendardata' object is required here though, while it's not required
|
|
* for getCalendarObjects.
|
|
*
|
|
* @param string $calendarId
|
|
* @param string $objectUri
|
|
* @throws Sabre_DAV_Exception_FileNotFound
|
|
* @return array
|
|
*/
|
|
function getCalendarObject($calendarId, $objectUri)
|
|
{
|
|
$x = explode("-", $calendarId);
|
|
|
|
$o = q("SELECT * FROM %s%scalendarobjects WHERE `namespace` = %d AND `namespace_id` = %d AND `uri` = '%s'",
|
|
CALDAV_SQL_DB, CALDAV_SQL_PREFIX, IntVal($x[0]), IntVal($x[1]), dbesc($objectUri));
|
|
if (count($o) > 0) {
|
|
$o[0]["calendarid"] = $calendarId;
|
|
$o[0]["calendardata"] = str_ireplace("Europe/Belgrade", "Europe/Berlin", $o[0]["calendardata"]);
|
|
return $o[0];
|
|
} else throw new Sabre_DAV_Exception_FileNotFound($calendarId . " / " . $objectUri);
|
|
}
|
|
|
|
/**
|
|
* Creates a new calendar object.
|
|
*
|
|
* @param string $calendarId
|
|
* @param string $objectUri
|
|
* @param string $calendarData
|
|
* @return null|string|void
|
|
*/
|
|
function createCalendarObject($calendarId, $objectUri, $calendarData)
|
|
{
|
|
$x = explode("-", $calendarId);
|
|
|
|
q("INSERT INTO %s%scalendarobjects (`namespace`, `namespace_id`, `uri`, `calendardata`, `lastmodified`, `etag`, `size`) VALUES (%d, %d, '%s', '%s', NOW(), '%s', %d)",
|
|
CALDAV_SQL_DB, CALDAV_SQL_PREFIX,
|
|
IntVal($x[0]), IntVal($x[1]), dbesc($objectUri), addslashes($calendarData), md5($calendarData), strlen($calendarData)
|
|
);
|
|
|
|
$this->increaseCalendarCtag($x[0], $x[1]);
|
|
renderCalDavEntry_uri($objectUri);
|
|
}
|
|
|
|
/**
|
|
* Updates an existing calendarobject, based on it's uri.
|
|
*
|
|
* @param string $calendarId
|
|
* @param string $objectUri
|
|
* @param string $calendarData
|
|
* @return null|string|void
|
|
*/
|
|
function updateCalendarObject($calendarId, $objectUri, $calendarData)
|
|
{
|
|
$x = explode("-", $calendarId);
|
|
|
|
q("UPDATE %s%scalendarobjects SET `calendardata` = '%s', `lastmodified` = NOW(), `etag` = '%s', `size` = %d WHERE `namespace` = %d AND `namespace_id` = %d AND `uri` = '%s'",
|
|
CALDAV_SQL_DB, CALDAV_SQL_PREFIX, dbesc($calendarData), md5($calendarData), strlen($calendarData), IntVal($x[0]), IntVal($x[1]), dbesc($objectUri));
|
|
|
|
$this->increaseCalendarCtag($x[0], $x[1]);
|
|
renderCalDavEntry_uri($objectUri);
|
|
}
|
|
|
|
/**
|
|
* Deletes an existing calendar object.
|
|
*
|
|
* @param string $calendarId
|
|
* @param string $objectUri
|
|
* @return void
|
|
*/
|
|
function deleteCalendarObject($calendarId, $objectUri)
|
|
{
|
|
$x = explode("-", $calendarId);
|
|
|
|
q("DELETE FROM %s%scalendarobjects WHERE `namespace` = %d AND `namespace_id` = %d AND `uri` = '%s'",
|
|
CALDAV_SQL_DB, CALDAV_SQL_PREFIX, IntVal($x[0]), IntVal($x[1]), dbesc($objectUri)
|
|
);
|
|
|
|
$this->increaseCalendarCtag($x[0], $x[1]);
|
|
renderCalDavEntry_uri($objectUri);
|
|
}
|
|
}
|