summaryrefslogtreecommitdiffstats
path: root/modules-available/locationinfo/install.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/locationinfo/install.inc.php')
-rw-r--r--modules-available/locationinfo/install.inc.php88
1 files changed, 88 insertions, 0 deletions
diff --git a/modules-available/locationinfo/install.inc.php b/modules-available/locationinfo/install.inc.php
new file mode 100644
index 00000000..7c47ac90
--- /dev/null
+++ b/modules-available/locationinfo/install.inc.php
@@ -0,0 +1,88 @@
+<?php
+
+$res = array();
+
+$t1 = $res[] = tableCreate('locationinfo_locationconfig', '
+ `locationid` INT(11) NOT NULL,
+ `serverid` INT(10) UNSIGNED,
+ `serverlocationid` VARCHAR(150),
+ `openingtime` BLOB,
+ `calendar` BLOB,
+ `lastcalendarupdate` INT(10) UNSIGNED NOT NULL DEFAULT 0,
+ `lastchange` int(10) UNSIGNED NOT NULL DEFAULT 0,
+ PRIMARY KEY (`locationid`)
+');
+
+$t2 = $res[] = tableCreate('locationinfo_coursebackend', '
+ `serverid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `servername` VARCHAR(200) NOT NULL,
+ `servertype` VARCHAR(100) NOT NULL,
+ `credentials` BLOB,
+ `error` VARCHAR(500),
+ PRIMARY KEY (`serverid`),
+ KEY `servername` (`servername`)
+');
+
+$t3 = $res[] = tableCreate('locationinfo_panel', "
+ `paneluuid` char(36) CHARACTER SET ascii NOT NULL,
+ `panelname` varchar(30) NOT NULL,
+ `locationids` varchar(20) CHARACTER SET ascii NOT NULL,
+ `paneltype` enum('DEFAULT','SUMMARY', 'URL') NOT NULL,
+ `panelconfig` blob NOT NULL,
+ `lastchange` int(10) UNSIGNED NOT NULL DEFAULT 0,
+ PRIMARY KEY (`paneluuid`),
+ KEY `panelname` (`panelname`)
+");
+
+// Update
+
+if ($t1 === UPDATE_NOOP) {
+ if ($t3 === UPDATE_DONE) {
+ // Upgrade from old beta version - convert panels
+ Database::exec('INSERT INTO locationinfo_panel (paneluuid, panelname, locationids, paneltype, panelconfig, lastchange)'
+ . " SELECT UUID(), Concat('Import: ', l.locationname), o.locationid, 'DEFAULT', o.config, 0 "
+ . " FROM locationinfo_locationconfig o INNER JOIN location l USING (locationid)"
+ . ' WHERE Length(o.config) > 10 OR Length(o.openingtime) > 10');
+ }
+ Database::exec("ALTER TABLE locationinfo_locationconfig CHANGE `serverid` `serverid` INT(10) UNSIGNED NULL");
+ tableDropColumn('locationinfo_locationconfig', 'hidden');
+ tableDropColumn('locationinfo_locationconfig', 'config');
+ if (!tableHasColumn('locationinfo_locationconfig', 'lastchange')) {
+ $ret = Database::exec('ALTER TABLE locationinfo_locationconfig ADD `lastchange` INT(10) UNSIGNED NOT NULL DEFAULT 0');
+ if ($ret === false) {
+ finalResponse(UPDATE_FAILED, 'Could not add lastchange field');
+ } elseif ($ret > 0) {
+ $ret[] = UPDATE_DONE;
+ }
+ }
+}
+if ($t1 === UPDATE_DONE || $t2 === UPDATE_DONE) {
+ Database::exec('UPDATE locationinfo_locationconfig SET serverid = NULL WHERE serverid = 0');
+ Database::exec('ALTER TABLE `locationinfo_locationconfig` ADD CONSTRAINT `locationinfo_locationconfig_ibfk_1` FOREIGN KEY ( `serverid` )
+ REFERENCES `openslx`.`locationinfo_coursebackend` (`serverid`) ON DELETE SET NULL ON UPDATE CASCADE');
+}
+if ($t1 === UPDATE_DONE) {
+ if (false === Database::exec('ALTER TABLE `locationinfo_locationconfig` ADD CONSTRAINT `locationinfo_locationconfig_ibfk_2` FOREIGN KEY ( `locationid` )
+ REFERENCES `openslx`.`location` (`locationid`) ON DELETE CASCADE ON UPDATE CASCADE')) {
+ $res[] = UPDATE_RETRY;
+ }
+}
+
+if ($t3 === UPDATE_NOOP) {
+ Database::exec("ALTER TABLE `locationinfo_panel` CHANGE `paneltype`
+ `paneltype` ENUM('DEFAULT', 'SUMMARY', 'URL') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL");
+}
+
+// 2017-07-26 Add servername key
+Database::exec("ALTER TABLE `locationinfo_coursebackend` ADD KEY `servername` (`servername`)");
+
+// Create response for browser
+
+if (in_array(UPDATE_RETRY, $res)) {
+ finalResponse(UPDATE_RETRY, 'Please retry: ' . Database::lastError());
+}
+if (in_array(UPDATE_DONE, $res)) {
+ finalResponse(UPDATE_DONE, 'Tables created successfully');
+}
+
+finalResponse(UPDATE_NOOP, 'Everything already up to date');