X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=dav%2Fcommon%2Fcalendar.fnk.php;h=10177b347bba7b3841bec3a917da3379aae08cf1;hb=a30ee1587f4662e8d21235d0e7f1ea2e2eea24cd;hp=01af64fb248b42af861d71e7877894a5d2833f63;hpb=8196f9b9002c69f9c75927c123ac91760e8ffeba;p=friendica-addons.git diff --git a/dav/common/calendar.fnk.php b/dav/common/calendar.fnk.php index 01af64fb..10177b34 100644 --- a/dav/common/calendar.fnk.php +++ b/dav/common/calendar.fnk.php @@ -7,6 +7,8 @@ define("DAV_DISPLAYNAME", "{DAV:}displayname"); define("DAV_CALENDARCOLOR", "{http://apple.com/ns/ical/}calendar-color"); +class DAVVersionMismatchException extends Exception {} + class vcard_source_data_email { @@ -97,51 +99,6 @@ class vcard_source_data public $photo; } -; - - -/** - * @param vcard_source_data $vcardsource - * @return string - */ -function vcard_source_compile($vcardsource) -{ - $str = "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Friendica//DAV-Plugin//EN\r\n"; - $str .= "N:" . str_replace(";", ",", $vcardsource->name_last) . ";" . str_replace(";", ",", $vcardsource->name_first) . ";" . str_replace(";", ",", $vcardsource->name_middle) . ";;\r\n"; - $str .= "FN:" . str_replace(";", ",", $vcardsource->name_first) . " " . str_replace(";", ",", $vcardsource->name_middle) . " " . str_replace(";", ",", $vcardsource->name_last) . "\r\n"; - $str .= "REV:" . str_replace(" ", "T", $vcardsource->last_update) . "Z\r\n"; - - $item_count = 0; - for ($i = 0; $i < count($vcardsource->homepages); $i++) { - if ($i == 0) $str .= "URL;type=" . $vcardsource->homepages[0]->type . ":" . $vcardsource->homepages[0]->homepage . "\r\n"; - else { - $c = ++$item_count; - $str .= "item$c.URL;type=" . $vcardsource->homepages[0]->type . ":" . $vcardsource->homepages[0]->homepage . "\r\n"; - $str .= "item$c.X-ABLabel:_\$!!\$_\r\n"; - } - } - - if (is_object($vcardsource->photo)) { - $data = base64_encode($vcardsource->photo->binarydata); - $str .= "PHOTO;ENCODING=BASE64;TYPE=" . $vcardsource->photo->type . ":" . $data . "\r\n"; - } - - if (isset($vcardsource->socialnetworks) && is_array($vcardsource->socialnetworks)) foreach ($vcardsource->socialnetworks as $netw) switch ($netw->type) { - case "dfrn": - $str .= "X-SOCIALPROFILE;type=dfrn;x-user=" . $netw->nick . ":" . $netw->url . "\r\n"; - break; - case "facebook": - $str .= "X-SOCIALPROFILE;type=facebook;x-user=" . $netw->nick . ":" . $netw->url . "\r\n"; - break; - case "twitter": - $str .= "X-SOCIALPROFILE;type=twitter;x-user=" . $netw->nick . ":" . $netw->url . "\r\n"; - break; - } - - $str .= "END:VCARD\r\n"; - return $str; -} - /** * @param int $phpDate (UTC) @@ -194,13 +151,9 @@ function icalendar_sanitize_string($str = "") */ function dav_createRootCalendarNode() { - $caldavBackend_std = Sabre_CalDAV_Backend_Private::getInstance(); - $caldavBackend_community = Sabre_CalDAV_Backend_Friendica::getInstance(); - - return new Sabre_CalDAV_AnimexxCalendarRootNode(Sabre_DAVACL_PrincipalBackend_Std::getInstance(), array( - $caldavBackend_std, - $caldavBackend_community, - )); + $backends = array(Sabre_CalDAV_Backend_Private::getInstance()); + foreach ($GLOBALS["CALDAV_PRIVATE_SYSTEM_BACKENDS"] as $backendclass) $backends[] = $backendclass::getInstance(); + return new Sabre_CalDAV_AnimexxCalendarRootNode(Sabre_DAVACL_PrincipalBackend_Std::getInstance(), $backends); } /** @@ -208,13 +161,10 @@ function dav_createRootCalendarNode() */ function dav_createRootContactsNode() { - $carddavBackend_std = Sabre_CardDAV_Backend_Std::getInstance(); - $carddavBackend_community = Sabre_CardDAV_Backend_FriendicaCommunity::getInstance(); + $backends = array(Sabre_CardDAV_Backend_Std::getInstance()); + foreach ($GLOBALS["CARDDAV_PRIVATE_SYSTEM_BACKENDS"] as $backendclass) $backends[] = $backendclass::getInstance(); - return new Sabre_CardDAV_AddressBookRootFriendica(Sabre_DAVACL_PrincipalBackend_Std::getInstance(), array( - $carddavBackend_std, - $carddavBackend_community, - )); + return new Sabre_CardDAV_AddressBookRootFriendica(Sabre_DAVACL_PrincipalBackend_Std::getInstance(), $backends); } @@ -240,15 +190,11 @@ function dav_create_server($force_authentication = false, $needs_caldav = true, // The object tree needs in turn to be passed to the server class $server = new Sabre_DAV_Server($tree); - $server->setBaseUri(CALDAV_URL_PREFIX); + if (CALDAV_URL_PREFIX != "") $server->setBaseUri(CALDAV_URL_PREFIX); - $authPlugin = new Sabre_DAV_Auth_Plugin(Sabre_DAV_Auth_Backend_Std::getInstance(), 'SabreDAV'); + $authPlugin = new Sabre_DAV_Auth_Plugin(Sabre_DAV_Auth_Backend_Std::getInstance(), DAV_APPNAME); $server->addPlugin($authPlugin); - $aclPlugin = new Sabre_DAVACL_Plugin_Friendica(); - $aclPlugin->defaultUsernamePath = "principals/users"; - $server->addPlugin($aclPlugin); - if ($needs_caldav) { $caldavPlugin = new Sabre_CalDAV_Plugin(); $server->addPlugin($caldavPlugin); @@ -258,6 +204,16 @@ function dav_create_server($force_authentication = false, $needs_caldav = true, $server->addPlugin($carddavPlugin); } + if ($GLOBALS["CALDAV_ACL_PLUGIN_CLASS"] != "") { + $aclPlugin = new $GLOBALS["CALDAV_ACL_PLUGIN_CLASS"](); + $aclPlugin->defaultUsernamePath = "principals/users"; + $server->addPlugin($aclPlugin); + } else { + $aclPlugin = new Sabre_DAVACL_Plugin(); + $aclPlugin->defaultUsernamePath = "principals/users"; + $server->addPlugin($aclPlugin); + } + if ($force_authentication) $server->broadcastEvent('beforeMethod', array("GET", "/")); // Make it authenticate return $server; @@ -284,7 +240,7 @@ function dav_get_current_user_calendars(&$server, $with_privilege = "") $calendars = array(); /** @var Sabre_DAVACL_Plugin $aclplugin */ $aclplugin = $server->getPlugin("acl"); - foreach ($children as $child) if (is_a($child, "Sabre_CalDAV_Calendar")) { + foreach ($children as $child) if (is_a($child, "Sabre_CalDAV_Calendar") || is_subclass_of($child, "Sabre_CalDAV_Calendar")) { if ($with_privilege != "") { $caluri = $calendar_path . $child->getName(); if ($aclplugin->checkPrivileges($caluri, $with_privilege, Sabre_DAVACL_Plugin::R_PARENT, false)) $calendars[] = $child; @@ -301,7 +257,7 @@ function dav_get_current_user_calendars(&$server, $with_privilege = "") * @param Sabre_CalDAV_Calendar $calendar * @param string $calendarobject_uri * @param string $with_privilege - * @return null|Sabre_VObject_Component_VCalendar + * @return null|Sabre\VObject\Component\VCalendar */ function dav_get_current_user_calendarobject(&$server, &$calendar, $calendarobject_uri, $with_privilege = "") { @@ -317,7 +273,7 @@ function dav_get_current_user_calendarobject(&$server, &$calendar, $calendarobje if (!$aclplugin->checkPrivileges($uri, $with_privilege, Sabre_DAVACL_Plugin::R_PARENT, false)) return null; $data = $obj->get(); - $vObject = Sabre_VObject_Reader::read($data); + $vObject = Sabre\VObject\Reader::read($data); return $vObject; } @@ -345,20 +301,19 @@ function dav_get_current_user_calendar_by_id(&$server, $id, $with_privilege = "" /** * @param string $uid - * @return Sabre_VObject_Component_VEvent $vObject + * @return Sabre\VObject\Component\VCalendar $vObject */ function dav_create_empty_vevent($uid = "") { - $a = get_app(); if ($uid == "") $uid = uniqid(); - return Sabre_VObject_Reader::read("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//Friendica//DAV-Plugin//EN\r\nBEGIN:VEVENT\r\nUID:" . $uid . "@" . $a->get_hostname() . + return Sabre\VObject\Reader::read("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//" . DAV_APPNAME . "//DAV-Plugin//EN\r\nBEGIN:VEVENT\r\nUID:" . $uid . "@" . dav_compat_get_hostname() . "\r\nDTSTAMP:" . date("Ymd") . "T" . date("His") . "Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); } /** - * @param Sabre_VObject_Component_VCalendar $vObject - * @return Sabre_VObject_Component_VEvent|null + * @param Sabre\VObject\Component\VCalendar $vObject + * @return Sabre\VObject\Component\VEvent|null */ function dav_get_eventComponent(&$vObject) {