From 8347d6579555478ae77146e1e562c9336f58e3a0 Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Thu, 28 Apr 2022 14:34:13 +0200 Subject: [PATCH] feat: add preinstalled sources --- calendar.php | 27 +++++++++++++++++++++++++++ drivers/caldav/caldav_driver.php | 3 +++ 2 files changed, 30 insertions(+) diff --git a/calendar.php b/calendar.php index 5debec6..2ceef7a 100644 --- a/calendar.php +++ b/calendar.php @@ -184,6 +184,33 @@ class calendar extends rcube_plugin // @TODO: do EXPUNGE on kolab objects? } } + // loading preinstalled sources + $preinstalled_sources = $this->rc->config->get('calendar_preinstalled_sources', FALSE); + if ($preinstalled_sources && is_array($preinstalled_sources)) { + $username = $this->rc->get_user_name(); + $password = $this->rc->get_user_password(); + + foreach ($preinstalled_sources as $cal){ + $url = $cal['caldav_url']; + $user = $cal['caldav_user']; + $pass = $cal['caldav_pass']; + + $url = str_replace('%u', $username, $url); + $user = str_replace('%u', $username, $user); + $pass = str_replace('%p', $password, $pass); + + $cal['caldav_url'] = $url; + $cal['caldav_user'] = $user; + $cal['caldav_pass'] = $pass; + + $cal['new-source'] = true; + + if (!$this->driver->create_calendar($cal)) { + $error_msg = 'Unable to add default calendars' . ($this->driver && $thi->driver->last_error ? ': ' . $this->driver->last_error :''); + $this->rc->output->show_message($error_msg, 'error'); + } + } + } } else if ($args['task'] == 'settings') { // add hooks for Calendar settings diff --git a/drivers/caldav/caldav_driver.php b/drivers/caldav/caldav_driver.php index 6ebf666..d17c2e7 100644 --- a/drivers/caldav/caldav_driver.php +++ b/drivers/caldav/caldav_driver.php @@ -302,6 +302,9 @@ class caldav_driver extends calendar_driver { $source['caldav_url'] = self::_encode_url($source['caldav_url']); + $result = $this->rc->db->query("SELECT user_id, caldav_url, caldav_user FROM " . $this->db_sources . " WHERE user_id=? AND caldav_url=? AND caldav_user=?", $this->rc->user->ID, $source['caldav_url'], $source['caldav_user']); + if($this->rc->db->affected_rows($result)) return true; + try { $calendars = $this->_autodiscover_calendars($source); }