summaryrefslogtreecommitdiffstats
path: root/modules-available/sysconfig
diff options
context:
space:
mode:
authorUdo Walter2017-11-21 17:52:04 +0100
committerUdo Walter2017-11-21 17:52:04 +0100
commit653851f35d0eea172c2302e9f1b6f0d03c70096c (patch)
tree42f267c360104b98d2e3199273adba62a1e2023b /modules-available/sysconfig
parent[internetaccess] reworked permission system from "click and you get error" to... (diff)
parent[statistics] Also adapt MAC-UUID fixing code to mltk changes (diff)
downloadslx-admin-653851f35d0eea172c2302e9f1b6f0d03c70096c.tar.gz
slx-admin-653851f35d0eea172c2302e9f1b6f0d03c70096c.tar.xz
slx-admin-653851f35d0eea172c2302e9f1b6f0d03c70096c.zip
Merge remote-tracking branch 'origin/master' into permission-manager
# Conflicts: # modules-available/backup/templates/_page.html # style/default.css
Diffstat (limited to 'modules-available/sysconfig')
-rw-r--r--modules-available/sysconfig/addconfig.inc.php5
-rw-r--r--modules-available/sysconfig/api.inc.php85
-rw-r--r--modules-available/sysconfig/inc/configtgz.inc.php49
-rw-r--r--modules-available/sysconfig/inc/sysconfig.inc.php2
-rw-r--r--modules-available/sysconfig/page.inc.php2
5 files changed, 87 insertions, 56 deletions
diff --git a/modules-available/sysconfig/addconfig.inc.php b/modules-available/sysconfig/addconfig.inc.php
index 34a46d52..f66bc508 100644
--- a/modules-available/sysconfig/addconfig.inc.php
+++ b/modules-available/sysconfig/addconfig.inc.php
@@ -21,7 +21,7 @@ abstract class AddConfig_Base
/**
*
- * @param type $step
+ * @param string $step
* @return \AddConfig_Base
*/
public static function setStep($step)
@@ -161,10 +161,11 @@ class AddConfig_Start extends AddConfig_Base
} else {
$title = '';
}
+ $dummy = 0;
foreach ($modGroups as &$mod) {
if (!empty($mod['modules']) && $mod['unique']) {
array_unshift($mod['modules'], array(
- 'moduleid' => 0,
+ 'moduleid' => 'x' . (++$dummy),
'title' => Dictionary::translate('lang_noModuleFromThisGroup'),
));
}
diff --git a/modules-available/sysconfig/api.inc.php b/modules-available/sysconfig/api.inc.php
index d6cdc0e6..897b44a7 100644
--- a/modules-available/sysconfig/api.inc.php
+++ b/modules-available/sysconfig/api.inc.php
@@ -9,18 +9,6 @@ $uuid = Request::any('uuid', false, 'string');
if ($uuid !== false && strlen($uuid) !== 36) {
$uuid = false;
}
-$locationId = false;
-if (Module::isAvailable('locations')) {
- $locationId = Location::getFromIpAndUuid($ip, $uuid);
- if ($locationId !== false) {
- $locationChain = Location::getLocationRootChain($locationId);
- $locationChain[] = 0;
- }
-}
-if ($locationId === false) {
- $locationId = 0;
- $locationChain = array(0);
-}
// What we do if we can't supply the requested config
function deliverEmpty($message)
@@ -30,34 +18,59 @@ function deliverEmpty($message)
die('Config file could not be found or read!');
}
-// Get config module path
+$runmode = false;
+if (Module::isAvailable('runmode')) {
+ $runmode = RunMode::getRunMode($uuid);
+ if ($runmode !== false) {
+ $runmode = RunMode::getModuleConfig($runmode['module']);
+ }
+}
+if ($runmode !== false && $runmode->noSysconfig && file_exists(SysConfig::GLOBAL_MINIMAL_CONFIG)) {
+ $row = array('filepath' => SysConfig::GLOBAL_MINIMAL_CONFIG);
+} else {
+ $locationId = false;
+ if (Module::isAvailable('locations')) {
+ $locationId = Location::getFromIpAndUuid($ip, $uuid);
+ if ($locationId !== false) {
+ $locationChain = Location::getLocationRootChain($locationId);
+ $locationChain[] = 0;
+ }
+ }
+ if ($locationId === false) {
+ $locationId = 0;
+ $locationChain = array(0);
+ }
+
+ // Get config module path
-// We get all the configs for the whole location chain up to root
-$res = Database::simpleQuery("SELECT c.title, c.filepath, c.status, cl.locationid FROM configtgz c"
- . " INNER JOIN configtgz_location cl USING (configid)"
- . " WHERE cl.locationid IN (" . implode(',', $locationChain) . ")");
-$best = 1000;
-$row = false;
-while ($r = $res->fetch(PDO::FETCH_ASSOC)) {
- settype($r['locationid'], 'int');
- $index = array_search($r['locationid'], $locationChain);
- if ($index === false || $index > $best)
- continue;
- if (!file_exists($r['filepath'])) {
- if ($r['locationid'] === 0) {
- EventLog::failure("The global config.tgz '{$r['title']}' was not found at '{$r['filepath']}'. Please regenerate the system configuration");
- } else {
- EventLog::warning("config.tgz '{$r['title']}' for location $locationId not found at '{$r['filepath']}', trying fallback....");
+ // We get all the configs for the whole location chain up to root
+ $res = Database::simpleQuery("SELECT c.title, c.filepath, c.status, cl.locationid FROM configtgz c"
+ . " INNER JOIN configtgz_location cl USING (configid)"
+ . " WHERE cl.locationid IN (" . implode(',', $locationChain) . ")");
+
+ $best = 1000;
+ $row = false;
+ while ($r = $res->fetch(PDO::FETCH_ASSOC)) {
+ settype($r['locationid'], 'int');
+ $index = array_search($r['locationid'], $locationChain);
+ if ($index === false || $index > $best)
+ continue;
+ if (!file_exists($r['filepath'])) {
+ if ($r['locationid'] === 0) {
+ EventLog::failure("The global config.tgz '{$r['title']}' was not found at '{$r['filepath']}'. Please regenerate the system configuration");
+ } else {
+ EventLog::warning("config.tgz '{$r['title']}' for location $locationId not found at '{$r['filepath']}', trying fallback....");
+ }
+ continue;
}
- continue;
+ $best = $index;
+ $row = $r;
}
- $best = $index;
- $row = $r;
-}
-if ($row === false) {
- // TODO Not found in DB
- deliverEmpty("No config.tgz for location $locationId found (src $ip)");
+ if ($row === false) {
+ // TODO Not found in DB
+ deliverEmpty("No config.tgz for location $locationId found (src $ip)");
+ }
}
Header('Content-Type: application/gzip');
diff --git a/modules-available/sysconfig/inc/configtgz.inc.php b/modules-available/sysconfig/inc/configtgz.inc.php
index c03d1c5e..dbf1bc99 100644
--- a/modules-available/sysconfig/inc/configtgz.inc.php
+++ b/modules-available/sysconfig/inc/configtgz.inc.php
@@ -12,7 +12,7 @@ class ConfigTgz
{
;
}
-
+
public function id()
{
return $this->configId;
@@ -101,22 +101,9 @@ class ConfigTgz
if (!empty($module['filepath']) && file_exists($module['filepath']))
$files[] = $module['filepath'];
}
- // Get stuff other modules want to inject
- $handler = function($hook) {
- include $hook->file;
- return isset($file) ? $file : false;
- };
- foreach (Hook::load('config-tgz') as $hook) {
- $file = $handler($hook);
- if ($file !== false) {
- $files[] = $file;
- }
- }
- // Hand over to tm
- $task = Taskmanager::submit('RecompressArchive', array(
- 'inputFiles' => $files,
- 'outputFile' => $this->file
- ));
+
+ $task = self::recompress($files, $this->file);
+
// Wait for completion
if ($timeoutMs > 0 && !Taskmanager::isFailed($task) && !Taskmanager::isFinished($task))
$task = Taskmanager::waitComplete($task, $timeoutMs);
@@ -199,6 +186,32 @@ class ConfigTgz
*/
/**
+ * @param string[] $files source files to include
+ * @param string $destFile where to store final result
+ * @return false|array taskmanager task
+ */
+ private static function recompress($files, $destFile)
+ {
+ // Get stuff other modules want to inject
+ $handler = function($hook) {
+ include $hook->file;
+ return isset($file) ? $file : false;
+ };
+ foreach (Hook::load('config-tgz') as $hook) {
+ $file = $handler($hook);
+ if ($file !== false) {
+ $files[] = $file;
+ }
+ }
+
+ // Hand over to tm
+ return Taskmanager::submit('RecompressArchive', array(
+ 'inputFiles' => $files,
+ 'outputFile' =>$destFile
+ ));
+ }
+
+ /**
* Marks all modules as outdated and triggers generate()
* on each one. This mostly makes sense to call if a global module
* that is injected via a hook has changed.
@@ -215,6 +228,8 @@ class ConfigTgz
$module->generate();
}
}
+ // Build the global "empty" config that just includes global hooks
+ self::recompress([], SysConfig::GLOBAL_MINIMAL_CONFIG);
}
public static function insert($title, $moduleIds)
diff --git a/modules-available/sysconfig/inc/sysconfig.inc.php b/modules-available/sysconfig/inc/sysconfig.inc.php
index 15bd4104..13549948 100644
--- a/modules-available/sysconfig/inc/sysconfig.inc.php
+++ b/modules-available/sysconfig/inc/sysconfig.inc.php
@@ -3,6 +3,8 @@
class SysConfig
{
+ const GLOBAL_MINIMAL_CONFIG = '/opt/openslx/configs/config-global.tgz';
+
public static function getAll()
{
$res = Database::simpleQuery("SELECT c.configid, c.title, c.filepath, c.status, Group_Concat(cl.locationid) AS locs FROM configtgz c"
diff --git a/modules-available/sysconfig/page.inc.php b/modules-available/sysconfig/page.inc.php
index c169f490..043645df 100644
--- a/modules-available/sysconfig/page.inc.php
+++ b/modules-available/sysconfig/page.inc.php
@@ -197,7 +197,7 @@ class Page_SysConfig extends Page
$res = Database::simpleQuery("SELECT c.configid, c.title, c.filepath, c.status,"
. " GROUP_CONCAT(DISTINCT cl.locationid) AS loclist, GROUP_CONCAT(cxm.moduleid) AS modlist"
. " FROM configtgz c"
- . " INNER JOIN configtgz_x_module cxm USING (configid)"
+ . " LEFT JOIN configtgz_x_module cxm USING (configid)"
. " LEFT JOIN configtgz_location cl ON (c.configid = cl.configid)"
. " GROUP BY configid"
. " ORDER BY title ASC");