summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2018-02-08 15:05:58 +0100
committerSimon Rettberg2018-02-08 15:05:58 +0100
commitce10ff7a848985f44e6c3c371f6075f67a8b7aeb (patch)
treea99a41c91f5b036aa28c0f9da52c640a8c6c4e2d
parentUpdate translations (diff)
downloadslx-admin-ce10ff7a848985f44e6c3c371f6075f67a8b7aeb.tar.gz
slx-admin-ce10ff7a848985f44e6c3c371f6075f67a8b7aeb.tar.xz
slx-admin-ce10ff7a848985f44e6c3c371f6075f67a8b7aeb.zip
[exams/roomplanner] Hybrid PVS managers become dedicated in exam mode
Hopefully fixes #3066
-rw-r--r--modules-available/baseconfig/api.inc.php21
-rw-r--r--modules-available/exams/baseconfig/getconfig.inc.php1
-rw-r--r--modules-available/roomplanner/baseconfig/getconfig.inc.php21
-rw-r--r--modules-available/roomplanner/inc/pvsgenerator.inc.php1
4 files changed, 42 insertions, 2 deletions
diff --git a/modules-available/baseconfig/api.inc.php b/modules-available/baseconfig/api.inc.php
index a4024c5e..853c6f51 100644
--- a/modules-available/baseconfig/api.inc.php
+++ b/modules-available/baseconfig/api.inc.php
@@ -16,6 +16,8 @@ class ConfigHolder
private static $context = '';
+ private static $postHooks = [];
+
public static function setContext($name)
{
self::$context = $name;
@@ -54,8 +56,26 @@ class ConfigHolder
return self::$config[$key][0]['value'];
}
+ /**
+ * @param callable $func
+ */
+ public static function addPostHook($func)
+ {
+ self::$postHooks[] = array('context' => self::$context, 'function' => $func);
+ }
+
+ public static function applyPostHooks()
+ {
+ foreach (self::$postHooks as $hook) {
+ self::$context = $hook['context'] . ':post';
+ $hook['function']();
+ }
+ self::$postHooks = [];
+ }
+
public static function getConfig()
{
+ self::applyPostHooks();
$ret = [];
foreach (self::$config as $key => $list) {
if ($list[0]['value'] === false)
@@ -67,6 +87,7 @@ class ConfigHolder
public static function outputConfig()
{
+ self::applyPostHooks();
foreach (self::$config as $key => $list) {
echo '##', $key, "\n";
foreach ($list as $pos => $item) {
diff --git a/modules-available/exams/baseconfig/getconfig.inc.php b/modules-available/exams/baseconfig/getconfig.inc.php
index 37a2caf4..e5dd01c9 100644
--- a/modules-available/exams/baseconfig/getconfig.inc.php
+++ b/modules-available/exams/baseconfig/getconfig.inc.php
@@ -15,5 +15,4 @@ if (Exams::isInExamMode($locationIds, $lectureId, $autoLogin)) {
ConfigHolder::add('SLX_AUTOLOGIN', $autoLogin, 10000);
}
ConfigHolder::add('SLX_SYSTEMD_TARGET', 'exam-mode', 10000);
- ConfigHolder::add("SLX_PVS_HYBRID", false, 10000);
}
diff --git a/modules-available/roomplanner/baseconfig/getconfig.inc.php b/modules-available/roomplanner/baseconfig/getconfig.inc.php
index f4708547..79af974b 100644
--- a/modules-available/roomplanner/baseconfig/getconfig.inc.php
+++ b/modules-available/roomplanner/baseconfig/getconfig.inc.php
@@ -1,3 +1,24 @@
<?php
ConfigHolder::add("SLX_PVS_CONFIG_URL", 'http://' . $_SERVER['SERVER_ADDR'] . $_SERVER['SCRIPT_NAME'] . '?do=roomplanner');
+
+/**
+ * Make sure we switch to dedicated mode if this is a hybrid mode
+ * manager and we're in exam mode.
+ * Also disable exam mode for any kind of manager.
+ */
+ConfigHolder::addPostHook(function() {
+ $exam = (bool)ConfigHolder::get('SLX_EXAM');
+ $hybrid = ConfigHolder::get('SLX_PVS_HYBRID') === 'yes';
+ $dedi = (bool)ConfigHolder::get('SLX_PVS_DEDICATED');
+ if ($exam) {
+ if ($dedi || $hybrid) {
+ ConfigHolder::add('SLX_EXAM', false, 100000);
+ ConfigHolder::add('SLX_SYSTEMD_TARGET', false, 100000);
+ }
+ if ($hybrid) {
+ ConfigHolder::add('SLX_PVS_HYBRID', false, 100000);
+ ConfigHolder::add('SLX_PVS_DEDICATED', 'yes', 100000);
+ }
+ }
+}); \ No newline at end of file
diff --git a/modules-available/roomplanner/inc/pvsgenerator.inc.php b/modules-available/roomplanner/inc/pvsgenerator.inc.php
index cda32fce..5a7de9f0 100644
--- a/modules-available/roomplanner/inc/pvsgenerator.inc.php
+++ b/modules-available/roomplanner/inc/pvsgenerator.inc.php
@@ -222,7 +222,6 @@ class PvsGenerator
if (isset($data['dedicatedmgr']) && $data['dedicatedmgr']) {
ConfigHolder::add("SLX_ADDONS", false, 100000);
ConfigHolder::add("SLX_PVS_DEDICATED", 'yes');
- ConfigHolder::add("SLX_EXAM", false, 100000);
ConfigHolder::add("SLX_AUTOLOGIN", 'ON', 100000);
} else {
ConfigHolder::add("SLX_PVS_HYBRID", 'yes');