diff options
author | Simon Rettberg | 2014-10-27 16:17:10 +0100 |
---|---|---|
committer | Simon Rettberg | 2014-10-27 16:17:10 +0100 |
commit | f63f6979532b7a7be20f719bb7028c5f04275e2e (patch) | |
tree | dfa1ecb78ff2e77adcb0997336521b1fb53578b0 /modules/sysconfig.inc.php | |
parent | Update translations (diff) | |
download | slx-admin-f63f6979532b7a7be20f719bb7028c5f04275e2e.tar.gz slx-admin-f63f6979532b7a7be20f719bb7028c5f04275e2e.tar.xz slx-admin-f63f6979532b7a7be20f719bb7028c5f04275e2e.zip |
Update AD proxy module generation, add config backup
Diffstat (limited to 'modules/sysconfig.inc.php')
-rw-r--r-- | modules/sysconfig.inc.php | 183 |
1 files changed, 107 insertions, 76 deletions
diff --git a/modules/sysconfig.inc.php b/modules/sysconfig.inc.php index b27b6a97..dc2458de 100644 --- a/modules/sysconfig.inc.php +++ b/modules/sysconfig.inc.php @@ -2,7 +2,7 @@ class Page_SysConfig extends Page { - + /** * Holds all the known configuration modules, with title, description, start class for their wizard, etc. * @var array @@ -32,7 +32,7 @@ class Page_SysConfig extends Page 'sortOrder' => $sortOrder ); } - + /** * * @return array All registered module types @@ -45,14 +45,14 @@ class Page_SysConfig extends Page protected function doPreprocess() { User::load(); - + if (!User::hasPermission('superadmin')) { Message::addError('no-permission'); Util::redirect('?do=Main'); } $action = Request::any('action', 'list'); - + // Load all addmodule classes, as they populate the $moduleTypes array require_once 'modules/sysconfig/addmodule.inc.php'; foreach (glob('modules/sysconfig/addmodule_*.inc.php') as $file) { @@ -71,7 +71,7 @@ class Page_SysConfig extends Page $this->delModule(); } } - + // Action: "addconfig" (compose config from one or more modules) if ($action === 'addconfig') { $this->initAddConfig(); @@ -97,25 +97,34 @@ class Page_SysConfig extends Page protected function doRender() { Render::setTitle(Dictionary::translate('lang_location')); - + $action = Request::any('action', 'list'); switch ($action) { - case 'addmodule': - AddModule_Base::render(); - break; - case 'addconfig': - AddConfig_Base::render(); - break; - case 'list': - $this->listConfigs(); - break; - case 'module': - $this->listModuleContents(); - break; - default: - Message::addError('invalid-action', $action); - break; + case 'addmodule': + AddModule_Base::render(); + return; + case 'addconfig': + AddConfig_Base::render(); + return; + case 'list': + $this->listConfigs(); + return; + case 'module': + $listid = Request::post('list'); + if ($listid !== false) { + $this->listModuleContents($listid); + return; + } + break; + case 'config': + $listid = Request::post('list'); + if ($listid !== false) { + $this->listConfigContents($listid); + return; + } + break; } + Message::addError('invalid-action', $action); } /** @@ -147,63 +156,83 @@ class Page_SysConfig extends Page 'modules' => $modules )); } - - private function listModuleContents() + + private function listModuleContents($moduleid) { // fetch the data - $moduleid = Request::post('list', 'MISSING'); $row = Database::queryFirst("SELECT title, filepath FROM configtgz_module WHERE moduleid = :moduleid LIMIT 1", array('moduleid' => $moduleid)); - if ($row == false) { + if ($row === false) { Message::addError('config-invalid', $moduleid); Util::redirect('?do=SysConfig'); } - + // find files in that archive - $taskStatus = Taskmanager::submit('ListArchive', array( - 'file' => $row['filepath'] - )); - - if (isset($taskStatus['id'])) { - - $status = Taskmanager::waitComplete($taskStatus['id']); - Taskmanager::release($taskStatus['id']); - if (!isset($status['statusCode'])) { - //$this->tmError(); - } - if ($status['statusCode'] != TASK_FINISHED) { - //$this->taskError($status); - } - // Sort files for better display - $dirs = array(); - foreach ($status['data']['entries'] as $file) { - if ($file['isdir']) continue; - $dirs[dirname($file['name'])][] = $file; - } - ksort($dirs); - $list = array(); - foreach ($dirs as $dir => $files) { - $list[] = array( - 'name' => $dir, - 'isdir' => true - ); - sort($files); - foreach ($files as $file) { - $file['size'] = Util::readableFileSize($file['size']); - $list[] = $file; - } + $status = Taskmanager::submit('ListArchive', array( + 'file' => $row['filepath'] + )); + if (isset($status['id'])) + $status = Taskmanager::waitComplete($status, 4000); + if (!Taskmanager::isFinished($status) || Taskmanager::isFailed($status)) { + Taskmanager::addErrorMessage($status); + Util::redirect('?do=SysConfig'); + } + + // Sort files for better display + $dirs = array(); + foreach ($status['data']['entries'] as $file) { + if ($file['isdir']) + continue; + $dirs[dirname($file['name'])][] = $file; + } + ksort($dirs); + $list = array(); + foreach ($dirs as $dir => $files) { + $list[] = array( + 'name' => $dir, + 'isdir' => true + ); + sort($files); + foreach ($files as $file) { + $file['size'] = Util::readableFileSize($file['size']); + $list[] = $file; } - } else { - // task failed, redirect + } + + // render the template + Render::addDialog(Dictionary::translate('lang_contentOf') . ' ' . $row['title'], false, 'sysconfig/custom-filelist', array( + 'files' => $list, + )); + } + + private function listConfigContents($configid) + { + // get config name + $config = Database::queryFirst("SELECT title FROM configtgz WHERE configid = :configid LIMIT 1", array('configid' => $configid)); + if ($config === false) { + Message::addError('config-invalid', $configid); Util::redirect('?do=SysConfig'); - } - + } + // fetch the data + $res = Database::simpleQuery("SELECT module.moduleid, module.title AS moduletitle" + . " FROM configtgz_module module" + . " INNER JOIN configtgz_x_module USING (moduleid)" + . " WHERE configtgz_x_module.configid = :configid" + . " ORDER BY module.title ASC", array('configid' => $configid)); + + $modules = array(); + while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + $modules[] = array( + 'module' => $row['moduletitle'], + 'moduleid' => $row['moduleid'] + ); + } // render the template - Render::addDialog(Dictionary::translate('lang_contentOf') . $row['title'] . '"', false, 'sysconfig/custom-filelist', array( - 'files' => $list, + Render::addDialog(Dictionary::translate('lang_contentOf') . ' ' . $config['title'], false, 'sysconfig/config-module-list', array( + 'modules' => $modules )); } - + private function activateConfig() { $configid = Request::post('activate', 'MISSING'); @@ -213,7 +242,7 @@ class Page_SysConfig extends Page Util::redirect('?do=SysConfig'); } $task = Taskmanager::submit('LinkConfigTgz', array( - 'destination' => $row['filepath'] + 'destination' => $row['filepath'] )); if (isset($task['statusCode']) && $task['statusCode'] === TASK_WAITING) { $task = Taskmanager::waitComplete($task['id']); @@ -226,7 +255,7 @@ class Page_SysConfig extends Page } Util::redirect('?do=SysConfig'); } - + private function delModule() { $moduleid = Request::post('del', 'MISSING'); @@ -236,14 +265,14 @@ class Page_SysConfig extends Page 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)); + . " 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'] + 'file' => $row['filepath'] )); if (isset($task['statusCode']) && $task['statusCode'] === TASK_WAITING) { $task = Taskmanager::waitComplete($task['id']); @@ -256,7 +285,7 @@ class Page_SysConfig extends Page 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'); @@ -266,7 +295,7 @@ class Page_SysConfig extends Page Util::redirect('?do=SysConfig'); } $task = Taskmanager::submit('DeleteFile', array( - 'file' => $row['filepath'] + 'file' => $row['filepath'] )); if (isset($task['statusCode']) && $task['statusCode'] === TASK_WAITING) { $task = Taskmanager::waitComplete($task['id']); @@ -279,18 +308,20 @@ class Page_SysConfig extends Page Database::exec("DELETE FROM configtgz WHERE configid = :configid LIMIT 1", array('configid' => $configid)); Util::redirect('?do=SysConfig'); } - + private function initAddModule() { $step = Request::any('step', 0); - if ($step === 0) $step = 'AddModule_Start'; + if ($step === 0) + $step = 'AddModule_Start'; AddModule_Base::setStep($step); } - + private function initAddConfig() { $step = Request::any('step', 0); - if ($step === 0) $step = 'AddConfig_Start'; + 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; |