]> git.mxchange.org Git - friendica-addons.git/blob - dav/main.php
Merge branch 'master' of git://github.com/friendica/friendica-addons
[friendica-addons.git] / dav / main.php
1 <?php
2
3 require_once('include/security.php');
4
5 function dav_install()
6 {
7         register_hook('event_created', 'addon/dav/dav.php', 'dav_event_created_hook');
8         register_hook('event_updated', 'addon/dav/dav.php', 'dav_event_updated_hook');
9         register_hook('profile_tabs', 'addon/dav/dav.php', 'dav_profile_tabs_hook');
10 }
11
12
13 function dav_uninstall()
14 {
15         unregister_hook('event_created', 'addon/dav/dav.php', 'dav_event_created_hook');
16         unregister_hook('event_updated', 'addon/dav/dav.php', 'dav_event_updated_hook');
17         unregister_hook('profile_tabs', 'addon/dav/dav.php', 'dav_profile_tabs_hook');
18 }
19
20
21 function dav_module()
22 {
23 }
24
25 function dav_include_files()
26 {
27         /*
28                         require_once (__DIR__ . "/SabreDAV/lib/Sabre.includes.php");
29                         require_once (__DIR__ . "/SabreDAV/lib/Sabre/VObject/includes.php");
30                         require_once (__DIR__ . "/SabreDAV/lib/Sabre/DAVACL/includes.php");
31                         require_once (__DIR__ . "/SabreDAV/lib/Sabre/CalDAV/includes.php");
32                         */
33         require_once (__DIR__ . "/SabreDAV/lib/Sabre/autoload.php");
34
35         require_once (__DIR__ . "/common/calendar.fnk.php");
36         require_once (__DIR__ . "/common/calendar_rendering.fnk.php");
37         require_once (__DIR__ . "/common/dav_caldav_backend_common.inc.php");
38         require_once (__DIR__ . "/common/dav_caldav_backend_private.inc.php");
39         require_once (__DIR__ . "/common/dav_caldav_backend_virtual.inc.php");
40         require_once (__DIR__ . "/common/dav_caldav_root.inc.php");
41         require_once (__DIR__ . "/common/dav_user_calendars.inc.php");
42         require_once (__DIR__ . "/common/dav_carddav_root.inc.php");
43         require_once (__DIR__ . "/common/dav_carddav_backend_std.inc.php");
44         require_once (__DIR__ . "/common/dav_user_addressbooks.inc.php");
45         require_once (__DIR__ . "/common/dav_caldav_calendar_virtual.inc.php");
46         require_once (__DIR__ . "/common/wdcal_configuration.php");
47         require_once (__DIR__ . "/common/wdcal_backend.inc.php");
48
49         require_once (__DIR__ . "/dav_friendica_principal.inc.php");
50         require_once (__DIR__ . "/dav_friendica_auth.inc.php");
51         require_once (__DIR__ . "/dav_carddav_backend_virtual_friendica.inc.php");
52         require_once (__DIR__ . "/dav_caldav_backend_virtual_friendica.inc.php");
53         require_once (__DIR__ . "/FriendicaACLPlugin.inc.php");
54
55         require_once (__DIR__ . "/common/wdcal_edit.inc.php");
56         require_once (__DIR__ . "/calendar.friendica.fnk.php");
57         require_once (__DIR__ . "/layout.fnk.php");
58 }
59
60
61 /**
62  * @param App $a
63  */
64 function dav_init(&$a)
65 {
66
67         /*
68          * Recommended settings:
69          * ALTER TABLE `photo` ADD INDEX ( `contact-id` )
70          */
71
72         dav_include_files();
73
74         if (true) {
75                 dbg(true);
76                 error_reporting(E_ALL);
77                 ini_set("display_errors", 1);
78         }
79
80         wdcal_create_std_calendars();
81         wdcal_addRequiredHeaders();
82
83         if ($a->argc >= 2 && $a->argv[1] == "wdcal") {
84
85                 if ($a->argc >= 3 && $a->argv[2] == "feed") {
86                         wdcal_print_feed($a->get_baseurl() . "/dav/wdcal/");
87                         killme();
88                 }
89                 return;
90         }
91         if ($a->argc >= 2 && $a->argv[1] == "getExceptionDates") {
92                 echo wdcal_getEditPage_exception_selector();
93                 killme();
94         }
95
96         if ($a->argc >= 2 && $a->argv[1] == "settings") {
97                 return;
98         }
99
100
101         if (isset($_REQUEST["test"])) {
102                 renderAllCalDavEntries();
103         }
104
105
106         $server = dav_create_server();
107         $browser = new Sabre_DAV_Browser_Plugin();
108         $server->addPlugin($browser);
109         $server->exec();
110
111         killme();
112 }
113
114 /**
115  * @return string
116  */
117 function dav_content()
118 {
119         $a = get_app();
120         if (!isset($a->user["uid"]) || $a->user["uid"] == 0) {
121                 return login();
122         }
123
124         $x = "";
125
126         if ($a->argv[1] == "settings") {
127                 return wdcal_getSettingsPage($a);
128         } elseif ($a->argv[1] == "wdcal") {
129                 if (isset($a->argv[2]) && strlen($a->argv[2]) > 0) {
130                         if ($a->argv[2] == "new") {
131                                 $o = "";
132                                 if (isset($_REQUEST["save"])) {
133                                         check_form_security_token_redirectOnErr($a->get_baseurl() . "/dav/wdcal/", "caledit");
134                                         $ret = wdcal_postEditPage("new", "", $a->user["uid"], $a->timezone, $a->get_baseurl() . "/dav/wdcal/");
135                                         if ($ret["ok"]) notice($ret["msg"]);
136                                         else info($ret["msg"]);
137                                         goaway($a->get_baseurl() . "/dav/wdcal/");
138                                 }
139                                 $o .= wdcal_getNewPage();
140                                 return $o;
141                         } else {
142                                 $calendar_id = IntVal($a->argv[2]);
143                                 if (isset($a->argv[3]) && $a->argv[3] == "ics-export") {
144                                         wdcal_print_user_ics($calendar_id);
145                                 } elseif (isset($a->argv[3]) && $a->argv[3] == "ics-import") {
146                                         return wdcal_import_user_ics($calendar_id);
147                                 } elseif (isset($a->argv[3]) && $a->argv[3] > 0) {
148                                         $recurr_uri = ""; // @TODO
149                                         if (isset($a->argv[4]) && $a->argv[4] == "edit") {
150                                                 $o = "";
151                                                 if (isset($_REQUEST["save"])) {
152                                                         check_form_security_token_redirectOnErr($a->get_baseurl() . "/dav/wdcal/", "caledit");
153                                                         $ret = wdcal_postEditPage($a->argv[3], $recurr_uri, $a->user["uid"], $a->timezone, $a->get_baseurl() . "/dav/wdcal/");
154                                                         if ($ret["ok"]) notice($ret["msg"]);
155                                                         else info($ret["msg"]);
156                                                         goaway($a->get_baseurl() . "/dav/wdcal/");
157                                                 }
158                                                 $o .= wdcal_getEditPage($calendar_id, $a->argv[3], $recurr_uri);
159                                                 return $o;
160                                         } else {
161                                                 return wdcal_getDetailPage($calendar_id, $a->argv[3], $recurr_uri);
162                                         }
163                                 } else {
164                                         // @TODO Edit Calendar
165                                 }
166                         }
167                 } else {
168                         $server = dav_create_server(true, true, false);
169                         $cals = dav_get_current_user_calendars($server, DAV_ACL_READ);
170                         $x = wdcal_printCalendar($cals, array(), $a->get_baseurl() . "/dav/wdcal/feed/", "week", 0, 200);
171                 }
172         }
173         return $x;
174 }
175
176
177 /**
178  * @param App $a
179  * @param object $b
180  */
181 function dav_event_created_hook(&$a, &$b)
182 {
183         dav_include_files();
184         // @TODO Updating the cache instead of completely invalidating and rebuilding it
185         Sabre_CalDAV_Backend_Friendica::invalidateCache($a->user["uid"], CALDAV_FRIENDICA_CONTACTS);
186         Sabre_CalDAV_Backend_Friendica::invalidateCache($a->user["uid"], CALDAV_FRIENDICA_MINE);
187 }
188
189 /**
190  * @param App $a
191  * @param object $b
192  */
193 function dav_event_updated_hook(&$a, &$b)
194 {
195         dav_include_files();
196         // @TODO Updating the cache instead of completely invalidating and rebuilding it
197         Sabre_CalDAV_Backend_Friendica::invalidateCache($a->user["uid"], CALDAV_FRIENDICA_CONTACTS);
198         Sabre_CalDAV_Backend_Friendica::invalidateCache($a->user["uid"], CALDAV_FRIENDICA_MINE);
199 }
200
201 /**
202  * @param App $a
203  * @param object $b
204  */
205 function dav_profile_tabs_hook(&$a, &$b)
206 {
207         $b["tabs"][] = array(
208                 "label" => t('Calendar'),
209                 "url"   => $a->get_baseurl() . "/dav/wdcal/",
210                 "sel"   => "",
211                 "title" => t('Extended calendar with CalDAV-support'),
212         );
213 }
214
215 /**
216  * @param App $a
217  * @param null|object $o
218  */
219 function dav_plugin_admin_post(&$a = null, &$o = null)
220 {
221         check_form_security_token_redirectOnErr('/admin/plugins/dav', 'dav_admin_save');
222
223         dav_include_files();
224         require_once(__DIR__ . "/database-init.inc.php");
225
226         if (isset($_REQUEST["install"])) {
227                 $errs = dav_create_tables();
228                 if (count($errs) == 0) info(t('The database tables have been installed.') . EOL);
229                 else notice(t("An error occurred during the installation.") . EOL);
230         }
231         if (isset($_REQUEST["upgrade"])) {
232                 $errs = dav_upgrade_tables();
233                 if (count($errs) == 0) info(t('The database tables have been updated.') . EOL);
234                 else notice(t("An error occurred during the update.") . EOL);
235         }
236 }
237
238 /**
239  * @param App $a
240  * @param string $o
241  */
242 function dav_plugin_admin(&$a, &$o)
243 {
244         dav_include_files();
245         require_once(__DIR__ . "/database-init.inc.php");
246
247         $dbstatus = dav_check_tables();
248
249         $o = '<input type="hidden" name="form_security_token" value="' . get_form_security_token("dav_admin_save") . '">';
250         $o .= '<i>' . t("No system-wide settings yet.") . '</i><br><br>';
251
252
253         $o .= '<h3>' . t('Database status') . '</h3>';
254         switch ($dbstatus) {
255                 case 0:
256                         $o .= t('Installed');
257                         break;
258                 case 1:
259                         $o .= t('Upgrade needed') . "<br><br><input type='submit' name='upgrade' value='" . t('Upgrade') . "'>";
260                         break;
261                 case -1:
262                         $o .= t('Not installed') . "<br><br><input type='submit' name='install' value='" . t('Install') . "'>";
263                         break;
264         }
265         $o .= "<br><br>";
266
267         $o .= "<h3>" . t("Troubleshooting") . "</h3>";
268         $o .= "<h4>" . t("Manual creation of the database tables:") . "</h4>";
269         $o .= "<a href='#' onClick='\$(\"#sqlstatements\").show(); return false;'>" . t("Show SQL-statements") . "</a><blockquote style='display: none;' id='sqlstatements'><pre>";
270         $tables = dav_get_create_statements();
271         foreach ($tables as $t) $o .= escape_tags($t . "\n\n");
272         $o .= "</pre></blockquote>";
273 }