| Server IP : 104.21.37.246 / Your IP : 172.71.28.146 [ Web Server : Apache System : Linux cpanel01wh.bkk1.cloud.z.com 2.6.32-954.3.5.lve1.4.59.el6.x86_64 #1 SMP Thu Dec 6 05:11:00 EST 2018 x86_64 User : cp648411 ( 1354) PHP Version : 7.2.34 Disable Function : NONE Domains : 0 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/2388322/root/proc/2388322/cwd/3rdparty/roundcube/plugins/calendar/SQL/ |
Upload File : |
/**
* Roundcube Calendar
*
* Plugin to add a calendar to Roundcube.
*
* @author Lazlo Westerhof
* @author Thomas Bruederli
* @author Albert Lee
* @licence GNU AGPL
* @copyright (c) 2010 Lazlo Westerhof - Netherlands
* @copyright (c) 2014 Kolab Systems AG
* Adapted/modified for SQLite by cPanel, L.L.C. <cpanel.net> 2019-2023
**/
CREATE TABLE IF NOT EXISTS calendars (
calendar_id integer NOT NULL PRIMARY KEY,
user_id integer NOT NULL default '0',
name varchar(255) NOT NULL default '',
color varchar(255) NOT NULL default '',
showalarms tinyint(1) NOT NULL default '1',
driver varchar(255) NOT NULL default 'database',
CONSTRAINT fk_calendars_user_id FOREIGN KEY (user_id)
REFERENCES users(user_id)
);
CREATE UNIQUE INDEX calendar_name_idx ON calendars(name);
CREATE TABLE IF NOT EXISTS events (
event_id integer NOT NULL PRIMARY KEY,
calendar_id integer NOT NULL default '0',
recurrence_id integer NOT NULL default '0',
uid varchar(255) NOT NULL default '',
instance varchar(16) NOT NULL default '',
isexception tinyint(1) NOT NULL default '0',
created datetime NOT NULL default '1000-01-01 00:00:00',
changed datetime NOT NULL default '1000-01-01 00:00:00',
sequence integer NOT NULL default '0',
start datetime NOT NULL default '1000-01-01 00:00:00',
end datetime NOT NULL default '1000-01-01 00:00:00',
recurrence varchar(255) default NULL,
title varchar(255) NOT NULL,
description text NOT NULL,
location varchar(255) NOT NULL default '',
categories varchar(255) NOT NULL default '',
url varchar(255) NOT NULL default '',
all_day tinyint(1) NOT NULL default '0',
free_busy tinyint(1) NOT NULL default '0',
priority tinyint(1) NOT NULL default '0',
sensitivity tinyint(1) NOT NULL default '0',
status varchar(32) NOT NULL default '',
alarms text default NULL,
attendees text default NULL,
notifyat datetime default NULL,
CONSTRAINT fk_events_calendar_id FOREIGN KEY (calendar_id)
REFERENCES calendars(calendar_id)
);
CREATE TABLE IF NOT EXISTS attachments (
attachment_id integer NOT NULL PRIMARY KEY,
event_id integer NOT NULL default '0',
filename varchar(255) NOT NULL default '',
mimetype varchar(255) NOT NULL default '',
size integer NOT NULL default '0',
data text NOT NULL default '',
CONSTRAINT fk_attachment_event_id FOREIGN KEY (event_id)
REFERENCES events(event_id)
);
CREATE TABLE IF NOT EXISTS itipinvitations (
token varchar(64) NOT NULL PRIMARY KEY,
event_uid varchar(255) NOT NULL,
user_id integer NOT NULL default '0',
event text NOT NULL,
expires datetime NOT NULL default '1000-01-01 00:00:00',
cancelled tinyint(1) NOT NULL default '0',
CONSTRAINT fk_itipinvitations_user_id FOREIGN KEY (user_id)
REFERENCES users(user_id)
);
CREATE INDEX IF NOT EXISTS ix_itipinvitations_uid ON itipinvitations(user_id, event_uid);
INSERT OR REPLACE INTO system (name, value) VALUES ('calendar-database-version', '2023100600');
/**
* CalDAV Client
*
* @version @package_version@
* @author Daniel Morlock <[email protected]>
*
* Copyright (C) Awesome IT GbR <[email protected]>
* Adapted for SQLite for cPanel, L.L.C. <cpanel.net> in 2019
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
CREATE TABLE IF NOT EXISTS caldav_calendars (
id integer NOT NULL PRIMARY KEY,
calendar_id integer NOT NULL,
readonly tinyint(1) NOT NULL DEFAULT '1',
caldav_url varchar(255) NOT NULL,
caldav_tag varchar(255) DEFAULT NULL,
caldav_user varchar(255) DEFAULT NULL,
caldav_pass varchar(1024) DEFAULT NULL,
caldav_oauth_provider varchar(255) DEFAULT NULL,
caldav_last_change timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_caldav_calendars_calendar_id FOREIGN KEY (calendar_id)
REFERENCES calendars(calendar_id) ON DELETE CASCADE
);
CREATE TRIGGER IF NOT EXISTS UpdateLastTimeForCaldavCalendar
AFTER UPDATE
ON caldav_calendars
FOR EACH ROW
BEGIN
UPDATE caldav_calendars SET caldav_last_change = CURRENT_TIMESTAMP WHERE calendar_id = old.calendar_id; END;
/* Create a "writeable" view via triggers to simplify the code */
CREATE VIEW IF NOT EXISTS caldav_calendars_merged AS
SELECT c.calendar_id, c.user_id, c.name, c.color, c.showalarms, c.driver, cc.readonly, cc.caldav_url, cc.caldav_tag, cc.caldav_user, cc.caldav_pass, cc.caldav_oauth_provider, cc.caldav_last_change, c.calendar_id AS id
FROM calendars as c JOIN caldav_calendars as cc ON c.calendar_id = cc.calendar_id
WHERE c.driver='caldav';
CREATE TRIGGER IF NOT EXISTS caldav_calendars_merged_insert
INSTEAD OF INSERT ON caldav_calendars_merged
BEGIN
INSERT INTO calendars (calendar_id, user_id, color, showalarms, driver)
VALUES (NEW.calendar_id, NEW.user_id, NEW.color, NEW.showalarms, NEW.driver);
INSERT INTO caldav_calendars (calendar_id, readonly, caldav_url, caldav_tag, caldav_user, caldav_pass, caldav_oauth_provider, caldav_last_change)
VALUES ((SELECT calendar_id FROM calendars ORDER BY calendar_id DESC LIMIT 1), NEW.readonly, NEW.caldav_url, NEW.caldav_tag, NEW.caldav_user, NEW.caldav_pass, NEW.caldav_oauth_provider, coalesce(NEW.caldav_last_change,CURRENT_TIMESTAMP));
END;
CREATE TRIGGER IF NOT EXISTS caldav_calendars_merged_update
INSTEAD OF UPDATE OF name, color, showalarms, readonly, caldav_url, caldav_tag, caldav_user, caldav_pass, caldav_oauth_provider, caldav_last_change ON caldav_calendars_merged
BEGIN
UPDATE calendars SET name=coalesce(NEW.name,(SELECT name FROM calendars WHERE calendar_id=NEW.calendar_id)), color=NEW.color, showalarms=NEW.showalarms WHERE calendar_id=NEW.calendar_id;
UPDATE caldav_calendars SET readonly=NEW.readonly, caldav_url=NEW.caldav_url, caldav_tag=NEW.caldav_tag, caldav_user=NEW.caldav_user, caldav_pass=NEW.caldav_pass, caldav_oauth_provider=NEW.caldav_oauth_provider, caldav_last_change=coalesce(NEW.caldav_last_change,CURRENT_TIMESTAMP);
END;
/* NOTE: I am only allowing deletion *by calendar_id*. Since that's what happens in code, I consider this acceptable. */
CREATE TRIGGER IF NOT EXISTS caldav_calendars_merged_delete
INSTEAD OF DELETE ON caldav_calendars_merged
BEGIN
DELETE FROM calendars WHERE calendar_id=OLD.calendar_id;
DELETE FROM caldav_calendars WHERE calendar_id=OLD.calendar_id;
END;
CREATE TABLE IF NOT EXISTS caldav_events (
event_id integer NOT NULL PRIMARY KEY,
calendar_id integer NOT NULL,
recurrence_id integer NOT NULL DEFAULT '0',
uid varchar(255) NOT NULL DEFAULT '',
instance varchar(16) NOT NULL DEFAULT '',
isexception tinyint(1) NOT NULL DEFAULT '0',
created datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
changed datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
sequence integer NOT NULL DEFAULT '0',
start datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
end datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
recurrence varchar(255) DEFAULT NULL,
title varchar(255) NOT NULL,
description text NOT NULL,
location varchar(255) NOT NULL DEFAULT '',
categories varchar(255) NOT NULL DEFAULT '',
url varchar(255) NOT NULL DEFAULT '',
all_day tinyint(1) NOT NULL DEFAULT '0',
free_busy tinyint(1) NOT NULL DEFAULT '0',
priority tinyint(1) NOT NULL DEFAULT '0',
sensitivity tinyint(1) NOT NULL DEFAULT '0',
status varchar(32) NOT NULL DEFAULT '',
alarms text NULL DEFAULT NULL,
attendees text DEFAULT NULL,
notifyat datetime DEFAULT NULL,
caldav_url varchar(255) NOT NULL,
caldav_tag varchar(255) DEFAULT NULL,
caldav_last_change timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT uk_caldav_event UNIQUE (calendar_id,recurrence_id,uid,caldav_tag,instance),
CONSTRAINT fk_caldav_events_calendar_id FOREIGN KEY (calendar_id)
REFERENCES calendars(calendar_id)
);
CREATE INDEX IF NOT EXISTS caldav_uid_idx ON caldav_events(uid);
CREATE INDEX IF NOT EXISTS caldav_recurrence_idx ON caldav_events(recurrence_id);
CREATE INDEX IF NOT EXISTS caldav_calendar_notify_idx ON caldav_events(calendar_id,notifyat);
CREATE TRIGGER IF NOT EXISTS UpdateLastTimeForCalDAVEvents
AFTER UPDATE
ON caldav_events
FOR EACH ROW
BEGIN
UPDATE caldav_events SET caldav_last_change = CURRENT_TIMESTAMP WHERE event_id = old.event_id; END;
CREATE TABLE IF NOT EXISTS caldav_attachments (
attachment_id integer NOT NULL PRIMARY KEY,
event_id integer NOT NULL DEFAULT '0',
filename varchar(255) NOT NULL DEFAULT '',
mimetype varchar(255) NOT NULL DEFAULT '',
size integer NOT NULL DEFAULT '0',
data longtext NOT NULL,
CONSTRAINT fk_caldav_attachments_event_id FOREIGN KEY (event_id)
REFERENCES caldav_events(event_id)
);
REPLACE INTO system (name, value) VALUES ('calendar-caldav-version', '2023100600');