From c535ce5e2f78f5223662c97543f718334abf2a35 Mon Sep 17 00:00:00 2001 From: Christian Hofmaier Date: Tue, 8 Sep 2020 20:56:19 +0200 Subject: [locations] Migrate openingtimes from infoscreen to locations module - move openingtimes from infoscreen db to locations db - read-only openingtimes in infoscreen --- modules-available/locationinfo/page.inc.php | 97 +++-------------------------- 1 file changed, 10 insertions(+), 87 deletions(-) (limited to 'modules-available/locationinfo/page.inc.php') diff --git a/modules-available/locationinfo/page.inc.php b/modules-available/locationinfo/page.inc.php index ee50bc9c..8032642d 100644 --- a/modules-available/locationinfo/page.inc.php +++ b/modules-available/locationinfo/page.inc.php @@ -167,101 +167,20 @@ class Page_LocationInfo extends Page $ignoreServer = 0; } - // Opening times - $openingtimes = Request::post('openingtimes', '', 'string'); - if ($openingtimes !== '') { - $openingtimes = json_decode($openingtimes, true); - if (!is_array($openingtimes)) { - $openingtimes = ''; - } else { - $mangled = array(); - foreach (array_keys($openingtimes) as $key) { - $entry = $openingtimes[$key]; - if (!isset($entry['days']) || !is_array($entry['days']) || empty($entry['days'])) { - Message::addError('ignored-line-no-days'); - continue; - } - $s = $this->getTime($entry['openingtime']); - $e = $this->getTime($entry['closingtime']); - if ($s === false) { - Message::addError('ignored-invalid-start', $entry['openingtime']); - continue; - } - if ($e === false) { - Message::addError('ignored-invalid-end', $entry['closingtime']); - continue; - } - if ($e <= $s) { - Message::addError('ignored-invalid-range', $entry['openingtime'], $entry['closingtime']); - continue; - } - unset($entry['tag']); - $mangled[] = $entry; - } - if (empty($mangled)) { - $openingtimes = null; - } else { - $openingtimes = json_encode($mangled); - } - } - } $NOW = time(); - // Check if openingtimes changed - $res = Database::queryFirst('SELECT openingtime FROM locationinfo_locationconfig WHERE locationid = :locationid', compact('locationid')); - $otChanged = $res === false || $res['openingtime'] !== $openingtimes; - Database::exec("INSERT INTO `locationinfo_locationconfig` (locationid, serverid, serverlocationid, openingtime, lastcalendarupdate, lastchange) - VALUES (:id, :insertserverid, :serverlocationid, :openingtimes, 0, :now) + Database::exec("INSERT INTO `locationinfo_locationconfig` (locationid, serverid, serverlocationid, lastcalendarupdate, lastchange) + VALUES (:id, :insertserverid, :serverlocationid, 0, :now) ON DUPLICATE KEY UPDATE serverid = IF(:ignore_server AND serverid IS NULL, NULL, :serverid), serverlocationid = VALUES(serverlocationid), - openingtime = VALUES(openingtime), lastcalendarupdate = 0, lastchange = VALUES(lastchange)", array( + lastcalendarupdate = 0, lastchange = VALUES(lastchange)", array( 'id' => $locationid, 'insertserverid' => $insertServerId, 'serverid' => $serverid, - 'openingtimes' => $openingtimes, 'serverlocationid' => $serverlocationid, 'ignore_server' => $ignoreServer, 'now' => $NOW, )); - if ($otChanged) { - $tree = Location::getLocationsAssoc(); - $todo = array(); - $done = array(); - foreach ($tree as $l) { - if ($l['parentlocationid'] == $locationid) { - $todo[] = $l['locationid']; - } - } - while (!empty($todo)) { - $loc = array_pop($todo); - if (in_array($loc, $done)) - continue; - $done[] = $loc; - // See if this one inherits - $res = Database::queryFirst('SELECT openingtime FROM locationinfo_locationconfig WHERE locationid = :loc', compact('loc')); - if ($res === false) { - $res = Database::exec('INSERT INTO locationinfo_locationconfig (locationid, lastchange) - VALUES (:locationid, :now) ON DUPLICATE KEY UPDATE lastchange = :now', - array('locationid' => $loc, 'now' => $NOW)); - } elseif (strlen($res['openingtime']) < 5) { - $res = Database::exec('UPDATE locationinfo_locationconfig SET lastchange = :now, openingtime = NULL - WHERE locationid = :locationid', - array('locationid' => $loc, 'now' => $NOW)); - } else { - $res = 0; - } - if ($res > 0) { - // Row was updated, which means the openingtime column was empty, which means the openingtime is inherited, descend further - $todo = array_merge($todo, $tree[$loc]['children']); - foreach ($tree as $l) { - if ($l['parentlocationid'] == $loc) { - $todo[] = $l['locationid']; - } - } - } - } - } - if ($changeServerRecursive) { // Recursive overwriting of serverid $children = Location::getRecursiveFlat($locationid); @@ -612,9 +531,10 @@ class Page_LocationInfo extends Page $locations = Location::getLocations(0, 0, false, true); // Get hidden state of all locations - $dbquery = Database::simpleQuery("SELECT li.locationid, li.serverid, li.serverlocationid, li.openingtime, li.lastcalendarupdate, cb.servertype, cb.servername + $dbquery = Database::simpleQuery("SELECT li.locationid, li.serverid, li.serverlocationid, loc.openingtime, li.lastcalendarupdate, cb.servertype, cb.servername FROM `locationinfo_locationconfig` AS li - LEFT JOIN `locationinfo_coursebackend` AS cb USING (serverid)"); + LEFT JOIN `locationinfo_coursebackend` AS cb USING (serverid) + LEFT JOIN `location` AS loc USING (locationid)"); while ($row = $dbquery->fetch(PDO::FETCH_ASSOC)) { $locid = (int)$row['locationid']; @@ -780,7 +700,10 @@ class Page_LocationInfo extends Page private function ajaxConfigLocation($id) { User::assertPermission('location.edit', $id); - $locConfig = Database::queryFirst("SELECT serverid, serverlocationid, openingtime FROM `locationinfo_locationconfig` WHERE locationid = :id", array('id' => $id)); + $locConfig = Database::queryFirst("SELECT info.serverid, info.serverlocationid, loc.openingtime + FROM `locationinfo_locationconfig` AS info + LEFT JOIN `location` AS loc USING (locationid) + WHERE locationid = :id", array('id' => $id)); if ($locConfig !== false) { $openingtimes = json_decode($locConfig['openingtime'], true); } else { -- cgit v1.2.3-55-g7522