summaryrefslogtreecommitdiffstats
path: root/modules/sysconfig.inc.php
diff options
context:
space:
mode:
authorSimon Rettberg2014-05-23 20:49:02 +0200
committerSimon Rettberg2014-05-23 20:49:02 +0200
commitfe6ac16498b05d0f0c8ed7fda394273815d3d6da (patch)
treecadf5f103ef3db7ba1b40d59d85937c998aad22f /modules/sysconfig.inc.php
parentServer Setup page (diff)
downloadslx-admin-fe6ac16498b05d0f0c8ed7fda394273815d3d6da.tar.gz
slx-admin-fe6ac16498b05d0f0c8ed7fda394273815d3d6da.tar.xz
slx-admin-fe6ac16498b05d0f0c8ed7fda394273815d3d6da.zip
Stuff (WIP)
Diffstat (limited to 'modules/sysconfig.inc.php')
-rw-r--r--modules/sysconfig.inc.php173
1 files changed, 135 insertions, 38 deletions
diff --git a/modules/sysconfig.inc.php b/modules/sysconfig.inc.php
index f177f0f1..7c23ce56 100644
--- a/modules/sysconfig.inc.php
+++ b/modules/sysconfig.inc.php
@@ -6,6 +6,11 @@ class Page_SysConfig extends Page
protected function doPreprocess()
{
User::load();
+
+ if (!User::hasPermission('superadmin')) {
+ Message::addError('no-permission');
+ Util::redirect('?do=SysConfig');
+ }
$action = Request::any('action', 'list');
@@ -15,29 +20,28 @@ class Page_SysConfig extends Page
AddModule_Base::preprocess();
}
- // Action "activate" (set sysconfig as active)
- if ($action === 'activate') {
- if (!User::hasPermission('superadmin')) {
- Message::addError('no-permission');
- Util::redirect('?do=SysConfig');
+ if ($action === 'module') {
+ // Action: "delmodule" (delete module)
+ if (Request::post('del', 'no') !== 'no') {
+ $this->delModule();
}
- if (!isset($_REQUEST['file'])) {
- Message::addError('missing-file');
- Util::redirect('?do=SysConfig');
+ }
+
+ // Action: "addconfig" (compose config from one or more modules)
+ if ($action === 'addconfig') {
+ $this->initAddConfig();
+ AddConfig_Base::preprocess();
+ }
+
+ if ($action === 'config') {
+ // Action: "delconfig" (delete config)
+ if (Request::post('del', 'no') !== 'no') {
+ $this->delConfig();
}
- $file = preg_replace('/[^a-z0-9\-_\.]/', '', $_REQUEST['file']);
- $path = CONFIG_TGZ_LIST_DIR . '/' . $file;
- if (!file_exists($path)) {
- Message::addError('invalid-file', $file);
- Util::redirect('?do=SysConfig');
+ // Action "activate" (set sysconfig as active)
+ if (Request::post('activate', 'no') !== 'no') {
+ $this->activateConfig();
}
- mkdir(CONFIG_HTTP_DIR . '/default', 0755, true);
- $linkname = CONFIG_HTTP_DIR . '/default/config.tgz';
- @unlink($linkname);
- if (file_exists($linkname)) Util::traceError('Could not delete old config.tgz link!');
- if (!symlink($path, $linkname)) Util::traceError("Could not symlink to $path at $linkname!");
- Message::addSuccess('config-activated');
- Util::redirect('?do=SysConfig');
}
}
@@ -52,40 +56,122 @@ class Page_SysConfig extends Page
case 'addmodule':
AddModule_Base::render();
break;
+ case 'addconfig':
+ AddConfig_Base::render();
+ break;
case 'list':
- $this->rr_list_configs();
+ $this->listConfigs();
break;
default:
Message::addError('invalid-action', $action);
break;
}
}
-
- protected function doAjax()
- {
- $action = Request::any('action', 'list');
- // Action: "addmodule" (upload new module)
- if ($action === 'addmodule') {
- $this->initAddModule();
- AddModule_Base::ajax();
- }
- }
-
- private function rr_list_configs()
+ /**
+ * List all configurations and configuration modules.
+ */
+ private function listConfigs()
{
- if (!User::hasPermission('superadmin')) {
- Message::addError('no-permission');
- return;
+ // Configs
+ $res = Database::simpleQuery("SELECT configid, title, filepath FROM configtgz ORDER BY title ASC");
+ $configs = array();
+ while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
+ $configs[] = array(
+ 'configid' => $row['configid'],
+ 'config' => $row['title'],
+ 'current' => readlink('/srv/openslx/www/boot/default/config.tgz') === $row['filepath']
+ );
}
- $res = Database::simpleQuery("SELECT title FROM configtgz_module ORDER BY title ASC");
+ // Config modules
+ $res = Database::simpleQuery("SELECT moduleid, title FROM configtgz_module ORDER BY title ASC");
$modules = array();
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
$modules[] = array(
+ 'moduleid' => $row['moduleid'],
'module' => $row['title']
);
}
- Render::addTemplate('page-sysconfig-main', array('modules' => $modules, 'token' => Session::get('token')));
+ Render::addTemplate('page-sysconfig-main', array(
+ 'configs' => $configs,
+ 'modules' => $modules,
+ 'token' => Session::get('token')
+ ));
+ }
+
+ private function activateConfig()
+ {
+ $configid = Request::post('activate', 'MISSING');
+ $row = Database::queryFirst("SELECT title, filepath FROM configtgz WHERE configid = :configid LIMIT 1", array('configid' => $configid));
+ if ($row === false) {
+ Message::addError('config-invalid', $configid);
+ Util::redirect('?do=SysConfig');
+ }
+ $task = Taskmanager::submit('LinkConfigTgz', array(
+ 'destination' => $row['filepath']
+ ));
+ if (isset($task['statusCode']) && $task['statusCode'] === TASK_WAITING) {
+ $task = Taskmanager::waitComplete($task['id']);
+ }
+ if (!isset($task['statusCode']) || $task['statusCode'] === TASK_ERROR) {
+ Message::addError('task-error', $task['data']['error']);
+ } elseif ($task['statusCode'] === TASK_FINISHED) {
+ Message::addSuccess('config-activated', $row['title']);
+ }
+ Util::redirect('?do=SysConfig');
+ }
+
+ private function delModule()
+ {
+ $moduleid = Request::post('del', 'MISSING');
+ $row = Database::queryFirst("SELECT title, filepath FROM configtgz_module WHERE moduleid = :moduleid LIMIT 1", array('moduleid' => $moduleid));
+ if ($row === false) {
+ Message::addError('config-invalid', $moduleid);
+ Util::redirect('?do=SysConfig');
+ }
+ $existing = Database::queryFirst("SELECT title FROM configtgz_x_module"
+ . " INNER JOIN configtgz USING (configid)"
+ . " WHERE moduleid = :moduleid LIMIT 1", array('moduleid' => $moduleid));
+ if ($existing !== false) {
+ Message::addError('module-in-use', $row['title'], $existing['title']);
+ Util::redirect('?do=SysConfig');
+ }
+ $task = Taskmanager::submit('DeleteFile', array(
+ 'file' => $row['filepath']
+ ));
+ if (isset($task['statusCode']) && $task['statusCode'] === TASK_WAITING) {
+ $task = Taskmanager::waitComplete($task['id']);
+ }
+ if (!isset($task['statusCode']) || $task['statusCode'] === TASK_ERROR) {
+ Message::addWarning('task-error', $task['data']['error']);
+ } elseif ($task['statusCode'] === TASK_FINISHED) {
+ Message::addSuccess('module-deleted', $row['title']);
+ }
+ Database::exec("DELETE FROM configtgz_module WHERE moduleid = :moduleid LIMIT 1", array('moduleid' => $moduleid));
+ Util::redirect('?do=SysConfig');
+ }
+
+ private function delConfig()
+ {
+ $configid = Request::post('del', 'MISSING');
+ $row = Database::queryFirst("SELECT title, filepath FROM configtgz WHERE configid = :configid LIMIT 1", array('configid' => $configid));
+ if ($row === false) {
+ Message::addError('config-invalid', $configid);
+ Util::redirect('?do=SysConfig');
+ }
+ $task = Taskmanager::submit('DeleteFile', array(
+ 'file' => $row['filepath']
+ ));
+ if (isset($task['statusCode']) && $task['statusCode'] === TASK_WAITING) {
+ $task = Taskmanager::waitComplete($task['id']);
+ }
+ if (!isset($task['statusCode']) || $task['statusCode'] === TASK_ERROR) {
+ Message::addWarning('task-error', $task['data']['error']);
+ } elseif ($task['statusCode'] === TASK_FINISHED) {
+ Message::addSuccess('module-deleted', $row['title']);
+ }
+ Database::exec("DELETE FROM configtgz WHERE configid = :configid LIMIT 1", array('configid' => $configid));
+ Util::redirect('?do=SysConfig');
}
private function initAddModule()
@@ -98,5 +184,16 @@ class Page_SysConfig extends Page
}
AddModule_Base::setStep($step);
}
+
+ private function initAddConfig()
+ {
+ $step = Request::any('step', 0);
+ if ($step === 0) $step = 'AddConfig_Start';
+ require_once 'modules/sysconfig/addconfig.inc.php';
+ foreach (glob('modules/sysconfig/addconfig_*.inc.php') as $file) {
+ require_once $file;
+ }
+ AddConfig_Base::setStep($step);
+ }
}