summaryrefslogtreecommitdiffstats
path: root/modules-available/locationinfo
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/locationinfo')
-rw-r--r--modules-available/locationinfo/inc/coursebackend.inc.php12
-rw-r--r--modules-available/locationinfo/install.inc.php10
2 files changed, 18 insertions, 4 deletions
diff --git a/modules-available/locationinfo/inc/coursebackend.inc.php b/modules-available/locationinfo/inc/coursebackend.inc.php
index 2eb3f55d..f8389c78 100644
--- a/modules-available/locationinfo/inc/coursebackend.inc.php
+++ b/modules-available/locationinfo/inc/coursebackend.inc.php
@@ -167,10 +167,11 @@ abstract class CourseBackend
}
if (empty($requestedLocationIds))
return array();
+ $requestedLocationIds = array_values($requestedLocationIds);
$NOW = time();
$dbquery1 = Database::simpleQuery("SELECT locationid, calendar, serverlocationid, lastcalendarupdate
FROM locationinfo_locationconfig WHERE locationid IN (:locations)",
- array('locations' => array_values($requestedLocationIds)));
+ array('locations' => $requestedLocationIds));
$returnValue = [];
$remoteIds = [];
while ($row = $dbquery1->fetch(PDO::FETCH_ASSOC)) {
@@ -186,17 +187,20 @@ abstract class CourseBackend
if (empty($remoteIds)) {
return $returnValue;
}
+ // Mark requested locations as used
+ Database::exec("UPDATE locationinfo_locationconfig SET lastuse = :now WHERE locationid IN (:locations)",
+ ['locations' => $requestedLocationIds]);
// Check if we should refresh other rooms recently requested by front ends
$extraLocs = self::TRY_NUM_LOCATIONS - count($remoteIds);
if ($this->getRefreshTime() > $this->getCacheTime() && $extraLocs > 0) {
$dbquery4 = Database::simpleQuery("SELECT locationid, serverlocationid FROM locationinfo_locationconfig
WHERE serverid = :serverid AND serverlocationid NOT IN (:skiplist)
- AND lastcalendarupdate BETWEEN :lowerage AND :upperage
+ AND lastcalendarupdate < :minage AND lastuse > :lastuse
LIMIT $extraLocs", array(
'serverid' => $this->serverId,
'skiplist' => array_values($remoteIds),
- 'lowerage' => $NOW - $this->getRefreshTime(),
- 'upperage' => $NOW - $this->getCacheTime(),
+ 'lastuse' => $NOW - $this->getRefreshTime(),
+ 'minage' => $NOW - $this->getCacheTime(),
));
while ($row = $dbquery4->fetch(PDO::FETCH_ASSOC)) {
$remoteIds[$row['locationid']] = $row['serverlocationid'];
diff --git a/modules-available/locationinfo/install.inc.php b/modules-available/locationinfo/install.inc.php
index bbba3741..3a27d696 100644
--- a/modules-available/locationinfo/install.inc.php
+++ b/modules-available/locationinfo/install.inc.php
@@ -9,6 +9,7 @@ $t1 = $res[] = tableCreate('locationinfo_locationconfig', '
`openingtime` BLOB,
`calendar` BLOB,
`lastcalendarupdate` INT(10) UNSIGNED NOT NULL DEFAULT 0,
+ `lastuse` INT(10) UNSIGNED NOT NULL DEFAULT 0,
`lastchange` int(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`locationid`)
');
@@ -79,6 +80,15 @@ if ($t3 === UPDATE_NOOP) {
// 2017-07-26 Add servername key
Database::exec("ALTER TABLE `locationinfo_coursebackend` ADD KEY `servername` (`servername`)");
+// 2019-02-20 Add lastuse column
+if (!tableHasColumn('locationinfo_locationconfig', 'lastuse')) {
+ if (Database::exec("ALTER TABLE locationinfo_locationconfig
+ ADD `lastuse` INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER `lastcalendarupdate`") === false) {
+ finalResponse(UPDATE_FAILED, 'Could not add lastuse column');
+ }
+ $res[] = UPDATE_DONE;
+}
+
// Create response for browser
if (in_array(UPDATE_RETRY, $res)) {