From 5347ecd5ddb1803ec1c43240bafc84f5c427f855 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 26 Jan 2015 20:28:49 +0100 Subject: Add configtgz class. Fix dozens of bugs --- modules/sysconfig/addconfig.inc.php | 52 ++++-------------------- modules/sysconfig/addmodule_adauth.inc.php | 6 +-- modules/sysconfig/addmodule_branding.inc.php | 6 +-- modules/sysconfig/addmodule_custommodule.inc.php | 4 +- 4 files changed, 17 insertions(+), 51 deletions(-) (limited to 'modules/sysconfig') diff --git a/modules/sysconfig/addconfig.inc.php b/modules/sysconfig/addconfig.inc.php index 4949539e..55194069 100644 --- a/modules/sysconfig/addconfig.inc.php +++ b/modules/sysconfig/addconfig.inc.php @@ -138,65 +138,31 @@ class AddConfig_Start extends AddConfig_Base */ class AddConfig_Finish extends AddConfig_Base { - private $task = false; - private $destFile = false; - private $title = false; - private $moduleids = array(); + private $config = false; protected function preprocessInternal() { $modules = Request::post('module'); - $this->title = Request::post('title'); + $title = Request::post('title'); if (!is_array($modules)) { Message::addError('missing-file'); Util::redirect('?do=SysConfig&action=addconfig'); } - if (empty($this->title)) { - Message::addError('empty-field'); + if (empty($title)) { + Message::addError('missing-title'); Util::redirect('?do=SysConfig&action=addconfig'); } - // Get all input modules - $moduleids = '0'; // Passed directly in query. Make sure no SQL injection is possible - foreach ($modules as $module) { - $moduleids .= ',' . (int)$module; // Casting to int should make it safe - } - $res = Database::simpleQuery("SELECT moduleid, filepath FROM configtgz_module WHERE moduleid IN ($moduleids)"); - $files = array(); - while ($row = $res->fetch(PDO::FETCH_ASSOC)) { - $files[] = $row['filepath']; - $this->moduleids[] = $row['moduleid']; + $this->config = ConfigTgz::insert($title, $modules); + if ($this->config === false || $this->config->generate() !== 'OK') { + Message::addError('unsuccessful-action'); + Util::redirect('?do=SysConfig&action=addconfig'); } - // Create output file name (config.tgz) - do { - $this->destFile = CONFIG_TGZ_LIST_DIR . '/config-' . Util::sanitizeFilename($this->title) . '-' . mt_rand() . '.tgz'; - } while (file_exists($this->destFile)); - // Hand over to tm - $this->task = Taskmanager::submit('RecompressArchive', array( - 'inputFiles' => $files, - 'outputFile' => $this->destFile - )); } protected function renderInternal() { - if (isset($this->task['statusCode']) && ($this->task['statusCode'] === TASK_WAITING || $this->task['statusCode'] === TASK_PROCESSING)) { - $this->task = Taskmanager::waitComplete($this->task['id']); - } - if ($this->task === false) $this->tmError(); - if (!isset($this->task['statusCode']) || $this->task['statusCode'] !== TASK_FINISHED) $this->taskError($this->task); - Database::exec("INSERT INTO configtgz (title, filepath) VALUES (:title, :filepath)", array( - 'title' => $this->title, - 'filepath' => $this->destFile - )); - $confid = Database::lastInsertId(); - foreach ($this->moduleids as $moduleid) { - Database::exec("INSERT INTO configtgz_x_module (configid, moduleid) VALUES (:configid, :moduleid)", array( - 'configid' => $confid, - 'moduleid' => $moduleid - )); - } Render::addDialog(Dictionary::translate('lang_configurationCompilation'), false, 'sysconfig/cfg-finish', array( - 'configid' => $confid + 'configid' => $this->config->id() )); } diff --git a/modules/sysconfig/addmodule_adauth.inc.php b/modules/sysconfig/addmodule_adauth.inc.php index baa705b2..2418916e 100644 --- a/modules/sysconfig/addmodule_adauth.inc.php +++ b/modules/sysconfig/addmodule_adauth.inc.php @@ -11,7 +11,7 @@ class AdAuth_Start extends AddModule_Base { Session::set('ad_check', false); Session::save(); - Render::addDialog(Dictionary::translate('lang_adAuthentication'), false, 'sysconfig/ad-start', array( + Render::addDialog(Dictionary::translate('config-module', 'adAuth_title'), false, 'sysconfig/ad-start', array( 'step' => 'AdAuth_CheckConnection', 'title' => Request::post('title'), 'server' => Request::post('server'), @@ -79,7 +79,7 @@ class AdAuth_CheckConnection extends AddModule_Base protected function renderInternal() { - Render::addDialog(Dictionary::translate('lang_adAuthentication'), false, 'sysconfig/ad-checkconnection', array_merge($this->taskIds, array( + Render::addDialog(Dictionary::translate('config-module', 'adAuth_title'), false, 'sysconfig/ad-checkconnection', array_merge($this->taskIds, array( 'title' => Request::post('title'), 'server' => Request::post('server'), 'searchbase' => Request::post('searchbase'), @@ -148,7 +148,7 @@ class AdAuth_Finish extends AddModule_Base protected function renderInternal() { - Render::addDialog(Dictionary::translate('lang_adAuthentication'), false, 'sysconfig/ad-finish', $this->taskIds); + Render::addDialog(Dictionary::translate('config-module', 'adAuth_title'), false, 'sysconfig/ad-finish', $this->taskIds); } } diff --git a/modules/sysconfig/addmodule_branding.inc.php b/modules/sysconfig/addmodule_branding.inc.php index 8bcc10a1..7b7dace9 100644 --- a/modules/sysconfig/addmodule_branding.inc.php +++ b/modules/sysconfig/addmodule_branding.inc.php @@ -9,7 +9,7 @@ class Branding_Start extends AddModule_Base protected function renderInternal() { - Render::addDialog(Dictionary::translate('lang_specificLogo'), false, 'sysconfig/branding-start', array( + Render::addDialog(Dictionary::translate('config-module', 'branding_title'), false, 'sysconfig/branding-start', array( 'step' => 'Branding_ProcessFile', )); } @@ -74,7 +74,7 @@ class Branding_ProcessFile extends AddModule_Base $png = base64_encode(file_get_contents($this->task['data']['pngFile'])); if (filesize($this->svgFile) < 1000000) $svg = base64_encode(file_get_contents($this->svgFile)); - Render::addDialog(Dictionary::translate('lang_specificLogo'), false, 'sysconfig/branding-check', array( + Render::addDialog(Dictionary::translate('config-module', 'branding_title'), false, 'sysconfig/branding-check', array( 'png' => $png, 'svg' => $svg, 'error' => $this->task['data']['error'], @@ -114,7 +114,7 @@ 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('#([^<]*)#i', $content, $tout)) - $title = trim($tout[1]); + $title = trim(preg_replace('/\W*Wikipedia.*/', '', $tout[1])); foreach ($out[1] as $res) { if (strpos($res, 'action=edit') !== false) continue; diff --git a/modules/sysconfig/addmodule_custommodule.inc.php b/modules/sysconfig/addmodule_custommodule.inc.php index c42453db..1be9c10f 100644 --- a/modules/sysconfig/addmodule_custommodule.inc.php +++ b/modules/sysconfig/addmodule_custommodule.inc.php @@ -12,7 +12,7 @@ class CustomModule_Start extends AddModule_Base protected function renderInternal() { Session::set('mod_temp', false); - Render::addDialog(Dictionary::translate('lang_addCustomModule'), false, 'sysconfig/custom-upload', array( + Render::addDialog(Dictionary::translate('config-module', 'custom_title'), false, 'sysconfig/custom-upload', array( 'step' => 'CustomModule_ProcessUpload' )); } @@ -84,7 +84,7 @@ class CustomModule_ProcessUpload extends AddModule_Base $list[] = $file; } } - Render::addDialog(Dictionary::translate('lang_addCustomModule'), false, 'sysconfig/custom-fileselect', array( + Render::addDialog(Dictionary::translate('config-module', 'custom_title'), false, 'sysconfig/custom-fileselect', array( 'step' => 'CustomModule_CompressModule', 'files' => $list, )); -- cgit v1.2.3-55-g7522