mirror of
https://git.friendi.ca/friendica/friendica-addons.git
synced 2024-08-21 09:20:26 +00:00
276 lines
7.3 KiB
PHP
276 lines
7.3 KiB
PHP
<?php
|
|
|
|
use Friendica\Core\L10n;
|
|
|
|
$a = get_app();
|
|
$uri = parse_url($a->get_baseurl());
|
|
$path = "/";
|
|
if (isset($uri["path"]) && strlen($uri["path"]) > 1) {
|
|
$path = $uri["path"] . "/";
|
|
}
|
|
|
|
define("CALDAV_SQL_DB", "");
|
|
define("CALDAV_SQL_PREFIX", "dav_");
|
|
define("CALDAV_URL_PREFIX", $path . "dav/");
|
|
define("DAV_APPNAME", "Friendica");
|
|
|
|
define("CALDAV_NAMESPACE_PRIVATE", 1);
|
|
define("CALDAV_FRIENDICA_MINE", "friendica-mine");
|
|
define("CALDAV_FRIENDICA_CONTACTS", "friendica-contacts");
|
|
|
|
$GLOBALS["CALDAV_PRIVATE_SYSTEM_CALENDARS"] = [CALDAV_FRIENDICA_MINE, CALDAV_FRIENDICA_CONTACTS];
|
|
$GLOBALS["CALDAV_PRIVATE_SYSTEM_BACKENDS"] = ["Sabre_CalDAV_Backend_Friendica"];
|
|
|
|
define("CARDDAV_NAMESPACE_PRIVATE", 1);
|
|
define("CARDDAV_FRIENDICA_CONTACT", "friendica");
|
|
$GLOBALS["CARDDAV_PRIVATE_SYSTEM_ADDRESSBOOKS"] = [CARDDAV_FRIENDICA_CONTACT];
|
|
$GLOBALS["CARDDAV_PRIVATE_SYSTEM_BACKENDS"] = ["Sabre_CardDAV_Backend_Friendica"];
|
|
|
|
$GLOBALS["CALDAV_ACL_PLUGIN_CLASS"] = "Sabre_DAVACL_Plugin_Friendica";
|
|
|
|
define("CALDAV_MAX_YEAR", date("Y") + 5);
|
|
|
|
/**
|
|
* @return int
|
|
*/
|
|
function getCurMicrotime()
|
|
{
|
|
list($usec, $sec) = explode(" ", microtime());
|
|
return sprintf("%14.0f", $sec * 10000 + $usec * 10000);
|
|
} // function getCurMicrotime
|
|
|
|
/**
|
|
*
|
|
*/
|
|
function debug_time()
|
|
{
|
|
$cur = getCurMicrotime();
|
|
if ($GLOBALS["debug_time_last"] > 0) {
|
|
echo "Zeit: " . ($cur - $GLOBALS["debug_time_last"]) . "<br>\n";
|
|
}
|
|
$GLOBALS["debug_time_last"] = $cur;
|
|
}
|
|
|
|
|
|
/**
|
|
* @param string $username
|
|
* @return int|null
|
|
*/
|
|
function dav_compat_username2id($username = "")
|
|
{
|
|
$x = q("SELECT `uid` FROM `user` WHERE `nickname`='%s' AND `account_removed` = 0 AND `account_expired` = 0", dbesc($username));
|
|
if (count($x) == 1) return $x[0]["uid"];
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @param int $id
|
|
* @return string
|
|
*/
|
|
function dav_compat_id2username($id = 0)
|
|
{
|
|
$x = q("SELECT `nickname` FROM `user` WHERE `uid` = %i AND `account_removed` = 0 AND `account_expired` = 0", IntVal($id));
|
|
if (count($x) == 1) return $x[0]["nickname"];
|
|
return "";
|
|
}
|
|
|
|
/**
|
|
* @return int
|
|
*/
|
|
function dav_compat_get_curr_user_id()
|
|
{
|
|
$a = get_app();
|
|
return IntVal($a->user["uid"]);
|
|
}
|
|
|
|
|
|
/**
|
|
* @param string $principalUri
|
|
* @return int|null
|
|
*/
|
|
function dav_compat_principal2uid($principalUri = "")
|
|
{
|
|
if (strlen($principalUri) == 0) return null;
|
|
if ($principalUri[0] == "/") $principalUri = substr($principalUri, 1);
|
|
if (strpos($principalUri, "principals/users/") !== 0) return null;
|
|
$username = substr($principalUri, strlen("principals/users/"));
|
|
return dav_compat_username2id($username);
|
|
}
|
|
|
|
/**
|
|
* @param string $principalUri
|
|
* @return array|null
|
|
*/
|
|
function dav_compat_principal2namespace($principalUri = "")
|
|
{
|
|
if (strlen($principalUri) == 0) return null;
|
|
if ($principalUri[0] == "/") $principalUri = substr($principalUri, 1);
|
|
|
|
if (strpos($principalUri, "principals/users/") !== 0) return null;
|
|
$username = substr($principalUri, strlen("principals/users/"));
|
|
return ["namespace" => CALDAV_NAMESPACE_PRIVATE, "namespace_id" => dav_compat_username2id($username)];
|
|
}
|
|
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
function dav_compat_currentUserPrincipal()
|
|
{
|
|
$a = get_app();
|
|
return "principals/users/" . strtolower($a->user["nickname"]);
|
|
}
|
|
|
|
|
|
/**
|
|
* @param string $name
|
|
* @return null|string
|
|
*/
|
|
function dav_compat_getRequestVar($name = "")
|
|
{
|
|
if (isset($_REQUEST[$name])) return $_REQUEST[$name];
|
|
else return null;
|
|
}
|
|
|
|
/**
|
|
* @param $text
|
|
* @return null|string
|
|
*/
|
|
function dav_compat_parse_text_serverside($text)
|
|
{
|
|
return dav_compat_getRequestVar($text);
|
|
}
|
|
|
|
/**
|
|
* @param string $uri
|
|
*/
|
|
function dav_compat_redirect($uri = "")
|
|
{
|
|
goaway($uri);
|
|
}
|
|
|
|
|
|
/**
|
|
* @return null|int
|
|
*/
|
|
function dav_compat_get_max_private_calendars()
|
|
{
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
function dav_compat_get_hostname() {
|
|
$a = get_app();
|
|
return $a->get_hostname();
|
|
}
|
|
|
|
/**
|
|
* @param int $namespace
|
|
* @param int $namespace_id
|
|
* @param string $uri
|
|
* @param array $calendar
|
|
* @return Sabre_CalDAV_Backend_Common
|
|
* @throws Exception
|
|
*/
|
|
function wdcal_calendar_factory($namespace, $namespace_id, $uri, $calendar = null)
|
|
{
|
|
switch ($namespace) {
|
|
case CALDAV_NAMESPACE_PRIVATE:
|
|
if ($uri == CALDAV_FRIENDICA_MINE || $uri == CALDAV_FRIENDICA_CONTACTS) return Sabre_CalDAV_Backend_Friendica::getInstance();
|
|
else return Sabre_CalDAV_Backend_Private::getInstance();
|
|
}
|
|
throw new Exception("Calendar Namespace not found");
|
|
}
|
|
|
|
/**
|
|
* @param int $calendar_id
|
|
* @return Sabre_CalDAV_Backend_Common
|
|
* @throws Exception
|
|
*/
|
|
function wdcal_calendar_factory_by_id($calendar_id)
|
|
{
|
|
$calendar = Sabre_CalDAV_Backend_Common::loadCalendarById($calendar_id);
|
|
return wdcal_calendar_factory($calendar["namespace"], $calendar["namespace_id"], $calendar["uri"], $calendar);
|
|
}
|
|
|
|
/**
|
|
* @param int $user_id
|
|
* @param bool $withcheck
|
|
* @return array
|
|
*/
|
|
function wdcal_create_std_calendars_get_statements($user_id, $withcheck = true)
|
|
{
|
|
$stms = [];
|
|
$a = get_app();
|
|
$uris = [
|
|
'private' => L10n::t("Private Calendar"),
|
|
CALDAV_FRIENDICA_MINE => L10n::t("Friendica Events: Mine"),
|
|
CALDAV_FRIENDICA_CONTACTS => L10n::t("Friendica Events: Contacts"),
|
|
];
|
|
foreach ($uris as $uri => $name) {
|
|
$cals = q("SELECT * FROM %s%scalendars WHERE `namespace` = %d AND `namespace_id` = %d AND `uri` = '%s'",
|
|
CALDAV_SQL_DB, CALDAV_SQL_PREFIX, CALDAV_NAMESPACE_PRIVATE, IntVal($user_id), dbesc($uri));
|
|
if (count($cals) == 0 || !$withcheck) $stms[] =
|
|
sprintf("INSERT INTO %s%scalendars (`namespace`, `namespace_id`, `displayname`, `timezone`, `ctag`, `uri`, `has_vevent`, `has_vtodo`)
|
|
VALUES (%d, %d, '%s', '%s', 1, '%s', 1, 0)",
|
|
CALDAV_SQL_DB, CALDAV_SQL_PREFIX, CALDAV_NAMESPACE_PRIVATE, IntVal($user_id), dbesc($name), dbesc($a->timezone), dbesc($uri));
|
|
}
|
|
return $stms;
|
|
}
|
|
|
|
/**
|
|
*/
|
|
function wdcal_create_std_calendars()
|
|
{
|
|
$a = get_app();
|
|
if (!local_user()) return;
|
|
|
|
$privates = q("SELECT COUNT(*) num FROM %s%scalendars WHERE `namespace` = %d AND `namespace_id` = %d", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, CALDAV_NAMESPACE_PRIVATE, IntVal($a->user["uid"]));
|
|
if ($privates[0]["num"] > 0) return;
|
|
|
|
$stms = wdcal_create_std_calendars_get_statements($a->user["uid"]);
|
|
foreach ($stms as $stmt) q($stmt);
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* @param int $user_id
|
|
* @param bool $withcheck
|
|
* @return array
|
|
*/
|
|
function wdcal_create_std_addressbooks_get_statements($user_id, $withcheck = true)
|
|
{
|
|
$stms = [];
|
|
$a = get_app();
|
|
$uris = [
|
|
'private' => L10n::t("Private Addresses"),
|
|
CARDDAV_FRIENDICA_CONTACT => L10n::t("Friendica Contacts"),
|
|
];
|
|
foreach ($uris as $uri => $name) {
|
|
$cals = q("SELECT * FROM %s%saddressbooks WHERE `namespace` = %d AND `namespace_id` = %d AND `uri` = '%s'",
|
|
CALDAV_SQL_DB, CALDAV_SQL_PREFIX, CALDAV_NAMESPACE_PRIVATE, IntVal($user_id), dbesc($uri));
|
|
if (count($cals) == 0 || !$withcheck) $stms[] =
|
|
sprintf("INSERT INTO %s%saddressbooks (`namespace`, `namespace_id`, `displayname`, `ctag`, `uri`)
|
|
VALUES (%d, %d, '%s', 1, '%s')",
|
|
CALDAV_SQL_DB, CALDAV_SQL_PREFIX, CARDDAV_NAMESPACE_PRIVATE, IntVal($user_id), dbesc($name), dbesc($uri));
|
|
}
|
|
return $stms;
|
|
}
|
|
|
|
/**
|
|
*/
|
|
function wdcal_create_std_addressbooks()
|
|
{
|
|
$a = get_app();
|
|
if (!local_user()) return;
|
|
|
|
$privates = q("SELECT COUNT(*) num FROM %s%addressbooks WHERE `namespace` = %d AND `namespace_id` = %d", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, CARDDAV_NAMESPACE_PRIVATE, IntVal($a->user["uid"]));
|
|
if ($privates[0]["num"] > 0) return;
|
|
|
|
$stms = wdcal_create_std_addressbooks_get_statements($a->user["uid"]);
|
|
foreach ($stms as $stmt) q($stmt);
|
|
}
|