]> git.mxchange.org Git - friendica-addons.git/blob - dav/calendar.friendica.fnk.php
Refactoring to make common/ more independent of the framework
[friendica-addons.git] / dav / calendar.friendica.fnk.php
1 <?php
2
3 $a    = get_app();
4 $uri  = parse_url($a->get_baseurl());
5 $path = "/";
6 if (isset($uri["path"]) && strlen($uri["path"]) > 1) {
7         $path = $uri["path"] . "/";
8 }
9
10 define("CALDAV_SQL_DB", "");
11 define("CALDAV_SQL_PREFIX", "dav_");
12 define("CALDAV_URL_PREFIX", $path . "dav/");
13 define("DAV_APPNAME", "Friendica");
14
15 define("CALDAV_NAMESPACE_PRIVATE", 1);
16
17 define("CALDAV_FRIENDICA_MINE", "friendica-mine");
18 define("CALDAV_FRIENDICA_CONTACTS", "friendica-contacts");
19
20 $GLOBALS["CALDAV_PRIVATE_SYSTEM_CALENDARS"] = array(CALDAV_FRIENDICA_MINE, CALDAV_FRIENDICA_CONTACTS);
21 $GLOBALS["CALDAV_PRIVATE_SYSTEM_BACKENDS"] = array("Sabre_CalDAV_Backend_Friendica");
22
23 define("CARDDAV_NAMESPACE_COMMUNITYCONTACTS", 1);
24 define("CARDDAV_NAMESPACE_PHONECONTACTS", 2);
25 $GLOBALS["CARDDAV_PRIVATE_SYSTEM_BACKENDS"] = array("Sabre_CardDAV_Backend_FriendicaCommunity");
26
27 define("CALDAV_MAX_YEAR", date("Y") + 5);
28
29 /**
30  * @return int
31  */
32 function getCurMicrotime()
33 {
34         list($usec, $sec) = explode(" ", microtime());
35         return sprintf("%14.0f", $sec * 10000 + $usec * 10000);
36 } // function getCurMicrotime
37
38 /**
39  *
40  */
41 function debug_time()
42 {
43         $cur = getCurMicrotime();
44         if ($GLOBALS["debug_time_last"] > 0) {
45                 echo "Zeit: " . ($cur - $GLOBALS["debug_time_last"]) . "<br>\n";
46         }
47         $GLOBALS["debug_time_last"] = $cur;
48 }
49
50
51 /**
52  * @param string $username
53  * @return int|null
54  */
55 function dav_compat_username2id($username = "")
56 {
57         $x = q("SELECT `uid` FROM `user` WHERE `nickname`='%s' AND `account_removed` = 0 AND `account_expired` = 0", dbesc($username));
58         if (count($x) == 1) return $x[0]["uid"];
59         return null;
60 }
61
62 /**
63  * @param int $id
64  * @return string
65  */
66 function dav_compat_id2username($id = 0)
67 {
68         $x = q("SELECT `nickname` FROM `user` WHERE `uid` = %i AND `account_removed` = 0 AND `account_expired` = 0", IntVal($id));
69         if (count($x) == 1) return $x[0]["nickname"];
70         return "";
71 }
72
73 /**
74  * @return int
75  */
76 function dav_compat_get_curr_user_id()
77 {
78         $a = get_app();
79         return IntVal($a->user["uid"]);
80 }
81
82
83 /**
84  * @param string $principalUri
85  * @return int|null
86  */
87 function dav_compat_principal2uid($principalUri = "")
88 {
89         if (strlen($principalUri) == 0) return null;
90         if ($principalUri[0] == "/") $principalUri = substr($principalUri, 1);
91         if (strpos($principalUri, "principals/users/") !== 0) return null;
92         $username = substr($principalUri, strlen("principals/users/"));
93         return dav_compat_username2id($username);
94 }
95
96 /**
97  * @param string $principalUri
98  * @return array|null
99  */
100 function dav_compat_principal2namespace($principalUri = "")
101 {
102         if (strlen($principalUri) == 0) return null;
103         if ($principalUri[0] == "/") $principalUri = substr($principalUri, 1);
104
105         if (strpos($principalUri, "principals/users/") !== 0) return null;
106         $username = substr($principalUri, strlen("principals/users/"));
107         return array("namespace" => CALDAV_NAMESPACE_PRIVATE, "namespace_id" => dav_compat_username2id($username));
108 }
109
110
111 /**
112  * @return string
113  */
114 function dav_compat_currentUserPrincipal()
115 {
116         $a = get_app();
117         return "principals/users/" . strtolower($a->user["nickname"]);
118 }
119
120
121 /**
122  * @param string $name
123  * @return null|string
124  */
125 function dav_compat_getRequestVar($name = "")
126 {
127         if (isset($_REQUEST[$name])) return $_REQUEST[$name];
128         else return null;
129 }
130
131 /**
132  * @param $text
133  * @return null|string
134  */
135 function dav_compat_parse_text_serverside($text)
136 {
137         return dav_compat_getRequestVar($text);
138 }
139
140 /**
141  * @param string $uri
142  */
143 function dav_compat_redirect($uri = "")
144 {
145         goaway($uri);
146 }
147
148
149 /**
150  * @return null|int
151  */
152 function dav_compat_get_max_private_calendars()
153 {
154         return null;
155 }
156
157 /**
158  * @return string
159  */
160 function dav_compat_get_hostname() {
161         $a = get_app();
162         return $a->get_hostname();
163 }
164
165 /**
166  * @param int $namespace
167  * @param int $namespace_id
168  * @param string $uri
169  * @param array $calendar
170  * @return Sabre_CalDAV_Backend_Common
171  * @throws Exception
172  */
173 function wdcal_calendar_factory($namespace, $namespace_id, $uri, $calendar = null)
174 {
175         switch ($namespace) {
176                 case CALDAV_NAMESPACE_PRIVATE:
177                         if ($uri == CALDAV_FRIENDICA_MINE || $uri == CALDAV_FRIENDICA_CONTACTS) return Sabre_CalDAV_Backend_Friendica::getInstance();
178                         else return Sabre_CalDAV_Backend_Private::getInstance();
179         }
180         throw new Exception("Calendar Namespace not found");
181 }
182
183 /**
184  * @param int $calendar_id
185  * @return Sabre_CalDAV_Backend_Common
186  * @throws Exception
187  */
188 function wdcal_calendar_factory_by_id($calendar_id)
189 {
190         $calendar = Sabre_CalDAV_Backend_Common::loadCalendarById($calendar_id);
191         return wdcal_calendar_factory($calendar["namespace"], $calendar["namespace_id"], $calendar["uri"], $calendar);
192 }
193
194 /**
195  * @param int $user_id
196  * @param bool $withcheck
197  * @return array
198  */
199 function wdcal_create_std_calendars_get_statements($user_id, $withcheck = true)
200 {
201         $stms = array();
202         $a = get_app();
203         $uris = array(
204                 'private'                 => t("Private Calendar"),
205                 CALDAV_FRIENDICA_MINE     => t("Friendica Events: Mine"),
206                 CALDAV_FRIENDICA_CONTACTS => t("Friendica Events: Contacts"),
207         );
208         foreach ($uris as $uri => $name) {
209                 $cals = q("SELECT * FROM %s%scalendars WHERE `namespace` = %d AND `namespace_id` = %d AND `uri` = '%s'",
210                         CALDAV_SQL_DB, CALDAV_SQL_PREFIX, CALDAV_NAMESPACE_PRIVATE, IntVal($user_id), dbesc($uri));
211                 if (count($cals) == 0 || !$withcheck) $stms[] =
212                         sprintf("INSERT INTO %s%scalendars (`namespace`, `namespace_id`, `displayname`, `timezone`, `ctag`, `uri`, `has_vevent`, `has_vtodo`)
213                                 VALUES (%d, %d, '%s', '%s', 1, '%s', 1, 0)",
214                                 CALDAV_SQL_DB, CALDAV_SQL_PREFIX, CALDAV_NAMESPACE_PRIVATE, IntVal($user_id), dbesc($name), dbesc($a->timezone), dbesc($uri));
215         }
216         return $stms;
217 }
218
219 /**
220  */
221 function wdcal_create_std_calendars()
222 {
223         $a = get_app();
224         if (!local_user()) return;
225
226         $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"]));
227         if ($privates[0]["num"] > 0) return;
228
229         $stms = wdcal_create_std_calendars_get_statements($a->user["uid"]);
230         foreach ($stms as $stmt) q($stmt);
231 }