]> git.mxchange.org Git - friendica-addons.git/blob - dav/calendar.friendica.fnk.php
Libertree: Posting works again (new "source" field)
[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 (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
14 define("CALDAV_NAMESPACE_PRIVATE", 1);
15 define("CALDAV_NAMESPACE_FRIENDICA_NATIVE", 2);
16
17 define("CALDAV_FRIENDICA_MINE", 1);
18 define("CALDAV_FRIENDICA_CONTACTS", 2);
19
20 define("CARDDAV_NAMESPACE_COMMUNITYCONTACTS", 1);
21 define("CARDDAV_NAMESPACE_PHONECONTACTS", 2);
22
23 define("CALDAV_DB_VERSION", 1);
24
25 /**
26  * @return int
27  */
28 function getCurMicrotime () {
29         list($usec, $sec) = explode(" ", microtime());
30         return sprintf("%14.0f", $sec * 10000 + $usec * 10000);
31 } // function getCurMicrotime
32
33 /**
34  *
35  */
36 function debug_time() {
37         $cur = getCurMicrotime();
38         if ($GLOBALS["debug_time_last"] > 0) {
39                 echo "Zeit: " . ($cur - $GLOBALS["debug_time_last"]) . "<br>\n";
40         }
41         $GLOBALS["debug_time_last"] = $cur;
42 }
43
44
45 /**
46  * @param string $username
47  * @return int|null
48  */
49 function dav_compat_username2id($username = "")
50 {
51         $x = q("SELECT `uid` FROM user WHERE nickname='%s' AND account_removed = 0 AND account_expired = 0", dbesc($username));
52         if (count($x) == 1) return $x[0]["uid"];
53         return null;
54 }
55
56 /**
57  * @param int $id
58  * @return string
59  */
60 function dav_compat_id2username($id = 0)
61 {
62         $x = q("SELECT `nickname` FROM user WHERE uid = %i AND account_removed = 0 AND account_expired = 0", IntVal($id));
63         if (count($x) == 1) return $x[0]["nickname"];
64         return "";
65 }
66
67 /**
68  * @return int
69  */
70 function dav_compat_get_curr_user_id() {
71         $a = get_app();
72         return IntVal($a->user["uid"]);
73 }
74
75
76 /**
77  * @param string $principalUri
78  * @return int|null
79  */
80 function dav_compat_principal2uid($principalUri = "")
81 {
82         if (strlen($principalUri) == 0) return null;
83         if ($principalUri[0] == "/") $principalUri = substr($principalUri, 1);
84         if (strpos($principalUri, "principals/users/") !== 0) return null;
85         $username = substr($principalUri, strlen("principals/users/"));
86         return dav_compat_username2id($username);
87 }
88
89
90 /**
91  * @param string $name
92  * @return null|string
93  */
94 function dav_compat_getRequestVar($name = "") {
95         if (x($_REQUEST, $name)) return $_REQUEST[$name];
96         else return null;
97 }
98
99 /**
100  * @param $text
101  * @return null|string
102  */
103 function dav_compat_parse_text_serverside($text)
104 {
105         return dav_compat_getRequestVar($text);
106 }
107
108 /**
109  * @param string $uri
110  */
111 function dav_compat_redirect($uri = "") {
112         goaway($uri);
113 }
114
115 /**
116  * @param int $user_id
117  * @param int $namespace
118  * @param int $namespace_id
119  * @return AnimexxCalSource
120  * @throws Exception
121  */
122 function wdcal_calendar_factory($user_id, $namespace, $namespace_id)
123 {
124         switch ($namespace) {
125                 case CALDAV_NAMESPACE_PRIVATE:
126                         return new AnimexxCalSourcePrivate($user_id, $namespace_id);
127                 case CALDAV_NAMESPACE_FRIENDICA_NATIVE:
128                         return new FriendicaCalSourceEvents($user_id, $namespace_id);
129         }
130         throw new Exception("Calendar Namespace not found");
131 }
132
133
134 /**
135  */
136 function wdcal_create_std_calendars()
137 {
138         $a = get_app();
139         if (!local_user()) return;
140
141         $cals = q("SELECT * FROM %s%scalendars WHERE `uid` = %d AND `namespace` = %d", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, $a->user["uid"], CALDAV_NAMESPACE_PRIVATE);
142         if (count($cals) == 0) {
143                 $maxid = q("SELECT MAX(`namespace_id`) maxid FROM %s%scalendars WHERE `namespace` = %d", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, CALDAV_NAMESPACE_PRIVATE);
144                 if (!$maxid) {
145                         notification("Something went wrong when trying to create your calendar.");
146                         goaway("/");
147                         killme();
148                 }
149                 $nextid = IntVal($maxid[0]["maxid"]) + 1;
150                 q("INSERT INTO %s%scalendars (`namespace`, `namespace_id`, `uid`, `displayname`, `timezone`, `ctag`) VALUES (%d, %d, %d, '%s', '%s', 1)",
151                         CALDAV_SQL_DB, CALDAV_SQL_PREFIX, CALDAV_NAMESPACE_PRIVATE, $nextid, $a->user["uid"], dbesc(t("Private Calendar")), dbesc($a->timezone)
152                 );
153         }
154
155         $cals = q("SELECT * FROM %s%scalendars WHERE `uid` = %d AND `namespace` = %d", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, $a->user["uid"], CALDAV_NAMESPACE_FRIENDICA_NATIVE);
156         if (count($cals) < 2) {
157                 q("INSERT INTO %s%scalendars (`namespace`, `namespace_id`, `uid`, `displayname`, `timezone`, `ctag`) VALUES (%d, %d, %d, '%s', '%s', 1)",
158                         CALDAV_SQL_DB, CALDAV_SQL_PREFIX, CALDAV_NAMESPACE_FRIENDICA_NATIVE, CALDAV_FRIENDICA_MINE, $a->user["uid"], dbesc(t("Friendica Events: Mine")), dbesc($a->timezone)
159                 );
160                 q("INSERT INTO %s%scalendars (`namespace`, `namespace_id`, `uid`, `displayname`, `timezone`, `ctag`) VALUES (%d, %d, %d, '%s', '%s', 1)",
161                         CALDAV_SQL_DB, CALDAV_SQL_PREFIX, CALDAV_NAMESPACE_FRIENDICA_NATIVE, CALDAV_FRIENDICA_CONTACTS, $a->user["uid"], dbesc(t("Friendica Events: Contacts")), dbesc($a->timezone)
162                 );
163         }
164 }