diff options
author | Simon Rettberg | 2015-01-20 18:07:24 +0100 |
---|---|---|
committer | Simon Rettberg | 2015-01-20 18:07:24 +0100 |
commit | 1ff2bc4f3c694b7c76df8e57056c51ca39a23a34 (patch) | |
tree | 0eb19164af66b3d4e8bf639a710f323b631d23ee /modules | |
parent | Rework config module class structure. Still some TODOs though.... (diff) | |
download | slx-admin-1ff2bc4f3c694b7c76df8e57056c51ca39a23a34.tar.gz slx-admin-1ff2bc4f3c694b7c76df8e57056c51ca39a23a34.tar.xz slx-admin-1ff2bc4f3c694b7c76df8e57056c51ca39a23a34.zip |
config module structure completed. Many other fixes. Hidden pw field support.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/sysconfig.inc.php | 27 | ||||
-rw-r--r-- | modules/sysconfig/addconfig.inc.php | 2 | ||||
-rw-r--r-- | modules/sysconfig/addmodule.inc.php | 2 | ||||
-rw-r--r-- | modules/sysconfig/addmodule_adauth.inc.php | 19 | ||||
-rw-r--r-- | modules/sysconfig/addmodule_branding.inc.php | 41 | ||||
-rw-r--r-- | modules/sysconfig/addmodule_custommodule.inc.php | 23 | ||||
-rw-r--r-- | modules/syslog.inc.php | 7 |
7 files changed, 73 insertions, 48 deletions
diff --git a/modules/sysconfig.inc.php b/modules/sysconfig.inc.php index 134f3143..0da58767 100644 --- a/modules/sysconfig.inc.php +++ b/modules/sysconfig.inc.php @@ -249,34 +249,21 @@ class Page_SysConfig extends Page 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) { + $module = ConfigModule::get($configid); + if ($module === 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)); + $module->delete(); Util::redirect('?do=SysConfig'); } private function initAddModule() { - ConfigModules::loadDb(); + ConfigModule::loadDb(); require_once 'modules/sysconfig/addmodule.inc.php'; - $step = Request::any('step', 0); - if ($step === 0) { - $step = 'AddModule_Start'; - } elseif (!class_exists($step) && preg_match('/^([a-zA-Z0-9]+)_/', $step, $out)) { + $step = Request::any('step', 'AddModule_Start'); + if (!class_exists($step) && preg_match('/^([a-zA-Z0-9]+)_/', $step, $out)) { require_once 'modules/sysconfig/addmodule_' . strtolower($out[1]) . '.inc.php'; } AddModule_Base::setStep($step); @@ -284,7 +271,7 @@ class Page_SysConfig extends Page private function initAddConfig() { - ConfigModules::loadDb(); + ConfigModule::loadDb(); require_once 'modules/sysconfig/addconfig.inc.php'; $step = Request::any('step', 0); if ($step === 0) diff --git a/modules/sysconfig/addconfig.inc.php b/modules/sysconfig/addconfig.inc.php index 0f35095f..4949539e 100644 --- a/modules/sysconfig/addconfig.inc.php +++ b/modules/sysconfig/addconfig.inc.php @@ -108,7 +108,7 @@ class AddConfig_Start extends AddConfig_Base protected function renderInternal() { - $mods = ConfigModules::getList(); + $mods = ConfigModule::getList(); $res = Database::simpleQuery("SELECT moduleid, title, moduletype, filepath FROM configtgz_module" . " ORDER BY title ASC"); while ($row = $res->fetch(PDO::FETCH_ASSOC)) { diff --git a/modules/sysconfig/addmodule.inc.php b/modules/sysconfig/addmodule.inc.php index 7fa5b5b9..69160964 100644 --- a/modules/sysconfig/addmodule.inc.php +++ b/modules/sysconfig/addmodule.inc.php @@ -109,7 +109,7 @@ class AddModule_Start extends AddModule_Base protected function renderInternal() { $title = $order = array(); - $mods = ConfigModules::getList(); + $mods = ConfigModule::getList(); foreach ($mods as $module) { $title[] = $module['title']; $order[] = $module['sortOrder']; diff --git a/modules/sysconfig/addmodule_adauth.inc.php b/modules/sysconfig/addmodule_adauth.inc.php index 4873d505..baa705b2 100644 --- a/modules/sysconfig/addmodule_adauth.inc.php +++ b/modules/sysconfig/addmodule_adauth.inc.php @@ -125,15 +125,24 @@ class AdAuth_Finish extends AddModule_Base $title = Request::post('title'); if (empty($title)) $title = 'AD: ' . Request::post('server'); - $config = ConfigModule_AdAuth::insert($title, Request::post('server'), $searchbase, $binddn, Request::post('bindpw', ''), Request::post('home', '')); - $config['proxyip'] = Property::getServerIp(); - $tgz = Taskmanager::submit('CreateAdConfig', $config); - if (!isset($tgz['id'])) { + $module = ConfigModule::getInstance('AdAuth'); + $module->setData('server', Request::post('server')); + $module->setData('searchbase', $searchbase); + $module->setData('binddn', $binddn); + $module->setData('bindpw', Request::post('bindpw')); + $module->setData('home', Request::post('home')); + if (!$module->insert($title)) { + Message::addError('value-invalid', 'any', 'any'); + $tgz = false; + } else { + $tgz = $module->generate(true); + } + if ($tgz === false) { AddModule_Base::setStep('AdAuth_Start'); // Continues with AdAuth_Start for render() return; } $this->taskIds = array( - 'tm-config' => $tgz['id'], + 'tm-config' => $tgz, ); } diff --git a/modules/sysconfig/addmodule_branding.inc.php b/modules/sysconfig/addmodule_branding.inc.php index a6c16d9d..8bcc10a1 100644 --- a/modules/sysconfig/addmodule_branding.inc.php +++ b/modules/sysconfig/addmodule_branding.inc.php @@ -46,8 +46,10 @@ class Branding_ProcessFile extends AddModule_Base // URL - launch task that fetches the SVG file from it if (strpos($url, '://') === false) $url = "http://$url"; - if (!$this->downloadSvg($this->svgFile, $url)) + $title = false; + if (!$this->downloadSvg($this->svgFile, $url, $title)) Util::redirect('?do=SysConfig&action=addmodule&step=Branding_Start'); + Session::set('logo_name', $title); } chmod($this->svgFile, 0644); $this->tarFile = '/tmp/bwlp-' . time() . '-' . mt_rand() . '.tgz'; @@ -83,7 +85,7 @@ class Branding_ProcessFile extends AddModule_Base } /** - * Downlaod an svg file from the given url. This function has "wikipedia support", it tries to detect + * Download an svg file from the given url. This function has "wikipedia support", it tries to detect * URLs in wikipedia articles or thumbnails and then find the actual svg file. * * @param string $svgName file to download to @@ -91,8 +93,9 @@ class Branding_ProcessFile extends AddModule_Base * @return boolean true of download succeded, false on download error (also returns true if downloaded file doesn't * seem to be svg!) */ - private function downloadSvg($svgName, $url) + private function downloadSvg($svgName, $url, &$title) { + $title = false; // [wikipedia] Did someone paste a link to a thumbnail of the svg? Let's fix that... if (preg_match('#^(.*)/thumb/(.*\.svg)/.*\.svg#', $url, $out)) { $url = $out[1] . '/' . $out[2]; @@ -110,12 +113,14 @@ class Branding_ProcessFile extends AddModule_Base // [wikipedia] Try to be nice and detect links that might give a hint where the svg can be found if (preg_match_all('#href="([^"]*upload.wikimedia.org/[^"]*/[^"]*/[^"]*\.svg|[^"]+/[^"]+:[^"]+\.svg[^"]*)"#', $content, $out, PREG_PATTERN_ORDER)) { + if ($title === false && preg_match('#<title>([^<]*)</title>#i', $content, $tout)) + $title = trim($tout[1]); foreach ($out[1] as $res) { - if (!strpos($res, 'action=edit')) { - $new = $this->internetCombineUrl($url, html_entity_decode($res, ENT_COMPAT, 'UTF-8')); - if ($new !== $url) - break; - } + if (strpos($res, 'action=edit') !== false) + continue; + $new = $this->internetCombineUrl($url, html_entity_decode($res, ENT_COMPAT, 'UTF-8')); + if ($new !== $url) + break; } if ($new === $url) break; @@ -124,7 +129,7 @@ class Branding_ProcessFile extends AddModule_Base } break; } - return true; + return false; } /** @@ -141,7 +146,6 @@ class Branding_ProcessFile extends AddModule_Base return $relative; extract(parse_url($absolute)); - $path = dirname($path); if ($relative{0} === '/') { @@ -188,18 +192,29 @@ class Branding_Finish extends AddModule_Base protected function preprocessInternal() { $title = Request::post('title'); + if ($title === false || empty($title)) + $title = Session::get('logo_name'); if ($title === false || empty($title)) { - Message::addError('missing-file'); // TODO: Ask for title again instead of starting over + Message::addError('missing-title'); // TODO: Ask for title again instead of starting over Util::redirect('?do=SysConfig&action=addmodule&step=Branding_Start'); } $tgz = Session::get('logo_tgz'); if ($tgz === false || !file_exists($tgz)) { - Message::addError('missing-file'); + Message::addError('error-read', $tgz); + Util::redirect('?do=SysConfig&action=addmodule&step=Branding_Start'); + } + $module = ConfigModule::getInstance('Branding'); + if ($module === false) { + Message::addError('error-read', 'branding.inc.php'); Util::redirect('?do=SysConfig&action=addmodule&step=Branding_Start'); } - if (!ConfigModule_Branding::insert($title, $tgz)) + $module->setData('tmpFile', $tgz); + if (!$module->insert($title)) + Util::redirect('?do=SysConfig&action=addmodule&step=Branding_Start'); + elseif (!$module->generate(true)) Util::redirect('?do=SysConfig&action=addmodule&step=Branding_Start'); Session::set('logo_tgz', false); + Session::set('logo_name', false); Session::save(); // Yay Message::addSuccess('module-added'); diff --git a/modules/sysconfig/addmodule_custommodule.inc.php b/modules/sysconfig/addmodule_custommodule.inc.php index 66ba33a5..c42453db 100644 --- a/modules/sysconfig/addmodule_custommodule.inc.php +++ b/modules/sysconfig/addmodule_custommodule.inc.php @@ -39,7 +39,7 @@ class CustomModule_ProcessUpload extends AddModule_Base Message::addError('upload-failed', Util::uploadErrorString($_FILES['modulefile']['error'])); Util::redirect('?do=SysConfig'); } - $tempfile = '/tmp/bwlp-' . mt_rand(1, 100000) . '-' . crc32($_SERVER['REMOTE_HOST']) . '.tmp'; + $tempfile = '/tmp/bwlp-' . mt_rand(1, 100000) . '-' . crc32($_SERVER['REMOTE_ADDR']) . '.tmp'; if (!move_uploaded_file($_FILES['modulefile']['tmp_name'], $tempfile)) { Message::addError('error-write', $tempfile); Util::redirect('?do=SysConfig'); @@ -108,7 +108,7 @@ class CustomModule_CompressModule extends AddModule_Base } // Recompress using task manager $this->taskId = 'tgzmod' . mt_rand() . '-' . microtime(true); - $destFile = CONFIG_TGZ_LIST_DIR . '/modules/mod-' . Util::sanitizeFilename($title) . '-' . microtime(true) . '.tgz'; + $destFile = tempnam(sys_get_temp_dir(), 'bwlp-') . '.tgz'; Taskmanager::submit('RecompressArchive', array( 'id' => $this->taskId, 'inputFiles' => array($tempfile), @@ -122,13 +122,20 @@ class CustomModule_CompressModule extends AddModule_Base if ($status['statusCode'] != TASK_FINISHED) { $this->taskError($status); } - // Seems ok, create entry in DB - $ret = Database::exec("INSERT INTO configtgz_module (title, moduletype, filepath, contents) VALUES (:title, 'custom', :file, '')", - array('title' => $title, 'file' => $destFile)); - if ($ret === false) { - unlink($destFile); - Util::traceError("Could not insert module into Database"); + // Seems ok, create entry + $module = ConfigModule::getInstance('CustomModule'); + if ($module === false) { + Message::addError('error-read', 'custommodule.inc.php'); + Util::redirect('?do=SysConfig&action=addmodule&step=CustomModule_Start'); } + $module->setData('tmpFile', $destFile); + if (!$module->insert($title)) + Util::redirect('?do=SysConfig&action=addmodule&step=CustomModule_Start'); + elseif (!$module->generate(true)) + Util::redirect('?do=SysConfig&action=addmodule&step=CustomModule_Start'); + Session::set('mod_temp', false); + Session::save(); + // Yay Message::addSuccess('module-added'); Util::redirect('?do=SysConfig'); } diff --git a/modules/syslog.inc.php b/modules/syslog.inc.php index 7bd0c197..43a9bd28 100644 --- a/modules/syslog.inc.php +++ b/modules/syslog.inc.php @@ -42,6 +42,13 @@ class Page_SysLog extends Page if (!empty($whereClause)) $whereClause = ' WHERE logtypeid ' . $not . ' IN (' . implode(', ', $whereClause) . ')'; } if (!isset($whereClause) || empty($whereClause)) $whereClause = ''; + if (Request::get('ip')) { + if (empty($whereClause)) + $whereClause .= ' WHERE '; + else + $whereClause .= ' AND '; + $whereClause .= "clientip LIKE '" . preg_replace('/[^0-9\.\:]/', '', Request::get('ip')) . "%'"; + } $today = date('d.m.Y'); $yesterday = date('d.m.Y', time() - 86400); |