From dcc352a9dce00acc50b919521deaae314c048fd4 Mon Sep 17 00:00:00 2001 From: Crack Date: Fri, 30 Jul 2010 20:25:22 +0200 Subject: [PATCH] refactor config file generation out of ConfigFile class --- libraries/config/ConfigFile.class.php | 164 ++++---------------------- setup/config.php | 5 +- setup/frames/config.inc.php | 3 +- setup/lib/ConfigGenerator.class.php | 150 +++++++++++++++++++++++ 4 files changed, 181 insertions(+), 141 deletions(-) create mode 100644 setup/lib/ConfigGenerator.class.php diff --git a/libraries/config/ConfigFile.class.php b/libraries/config/ConfigFile.class.php index 1935c5162..ebb520dfc 100644 --- a/libraries/config/ConfigFile.class.php +++ b/libraries/config/ConfigFile.class.php @@ -1,13 +1,13 @@ persistKeys = array_flip($keys); } + /** + * Returns flipped array set by {@link setPersistKeys()} + * + * @return array + */ + public function getPersistKeysMap() + { + return $this->persistKeys; + } + /** * By default ConfigFile allows setting of all configuration keys, use this method * to set up a filter on {@link set()} method @@ -302,9 +312,9 @@ class ConfigFile */ public function getServerCount() { - return isset($_SESSION[$this->id]['Servers']) - ? count($_SESSION[$this->id]['Servers']) - : 0; + return isset($_SESSION[$this->id]['Servers']) + ? count($_SESSION[$this->id]['Servers']) + : 0; } /** @@ -397,7 +407,7 @@ class ConfigFile /** * Returns config file path, relative to phpMyAdmin's root path * - * @return unknown + * @return string */ public function getFilePath() { @@ -409,6 +419,16 @@ class ConfigFile return SETUP_CONFIG_FILE; } + /** + * Returns configuration array (full, multidimensional format) + * + * @return array + */ + public function getConfig() + { + return $_SESSION[$this->id]; + } + /** * Returns configuration array (flat format) * @@ -427,137 +447,5 @@ class ConfigFile } return $c; } - - /** - * Creates config file - * - * @return string - */ - public function getConfigFile() - { - $crlf = (isset($_SESSION['eol']) && $_SESSION['eol'] == 'win') ? "\r\n" : "\n"; - $c = $_SESSION[$this->id]; - - // header - $ret = 'get('PMA_VERSION') - . ' setup script by Piotr Przybylski ' . $crlf - . ' * Date: ' . date(DATE_RFC1123) . $crlf - . ' */' . $crlf . $crlf; - - // servers - if ($this->getServerCount() > 0) { - $ret .= "/* Servers configuration */$crlf\$i = 0;" . $crlf . $crlf; - foreach ($c['Servers'] as $id => $server) { - $ret .= '/* Server: ' . strtr($this->getServerName($id), '*/', '-') . " [$id] */" . $crlf - . '$i++;' . $crlf; - foreach ($server as $k => $v) { - $k = preg_replace('/[^A-Za-z0-9_]/', '_', $k); - $ret .= "\$cfg['Servers'][\$i]['$k'] = " - . (is_array($v) && $this->_isZeroBasedArray($v) - ? $this->_exportZeroBasedArray($v, $crlf) - : var_export($v, true)) - . ';' . $crlf; - } - $ret .= $crlf; - } - $ret .= '/* End of servers configuration */' . $crlf . $crlf; - } - unset($c['Servers']); - - // other settings - $persistKeys = $this->persistKeys; - foreach ($c as $k => $v) { - $k = preg_replace('/[^A-Za-z0-9_]/', '_', $k); - $ret .= $this->_getVarExport($k, $v, $crlf); - if (isset($persistKeys[$k])) { - unset($persistKeys[$k]); - } - } - // keep 1d array keys which are present in $persist_keys (config.values.php) - foreach (array_keys($persistKeys) as $k) { - if (strpos($k, '/') === false) { - $k = preg_replace('/[^A-Za-z0-9_]/', '_', $k); - $ret .= $this->_getVarExport($k, $this->getDefault($k), $crlf); - } - } - $ret .= '?>'; - - return $ret; - } - - /** - * Returns exported configuration variable - * - * @param string $var_name - * @param mixed $var_value - * @param string $crlf - * @return string - */ - private function _getVarExport($var_name, $var_value, $crlf) - { - if (!is_array($var_value) || empty($var_value)) { - return "\$cfg['$var_name'] = " . var_export($var_value, true) . ';' . $crlf; - } - $ret = ''; - if ($this->_isZeroBasedArray($var_value)) { - $ret = "\$cfg['$var_name'] = " . $this->_exportZeroBasedArray($var_value, $crlf) - . ');' . $crlf; - } else { - // string keys: $cfg[key][subkey] = value - foreach ($var_value as $k => $v) { - $k = preg_replace('/[^A-Za-z0-9_]/', '_', $k); - $ret .= "\$cfg['$var_name']['$k'] = " . var_export($v, true) . ';' . $crlf; - } - } - return $ret; - } - - /** - * Check whether $array is a continuous 0-based array - * - * @param array $array - * @return boolean - */ - private function _isZeroBasedArray(array $array) - { - for ($i = 0; $i < count($array); $i++) { - if (!isset($array[$i])) { - return false; - } - } - return true; - } - - /** - * Exports continuous 0-based array - * - * @param array $array - * @param string $crlf - * @return string - */ - private function _exportZeroBasedArray(array $array, $crlf) - { - $retv = array(); - foreach ($array as $v) { - $retv[] = var_export($v, true); - } - $ret = "array("; - if (count($retv) <= 4) { - // up to 4 values - one line - $ret .= implode(', ', $retv); - } else { - // more than 4 values - value per line - $imax = count($retv)-1; - for ($i = 0; $i <= $imax; $i++) { - $ret .= ($i < $imax ? ($i > 0 ? ',' : '') : '') . $crlf . ' ' . $retv[$i]; - } - } - $ret .= ')'; - return $ret; - } } ?> \ No newline at end of file diff --git a/setup/config.php b/setup/config.php index 555a8ab84..1f6cc389b 100644 --- a/setup/config.php +++ b/setup/config.php @@ -13,6 +13,7 @@ require './lib/common.inc.php'; require_once './libraries/config/Form.class.php'; require_once './libraries/config/FormDisplay.class.php'; +require_once './setup/lib/ConfigGenerator.class.php'; require './libraries/config/setup.forms.php'; @@ -40,13 +41,13 @@ if (PMA_ifSetOr($_POST['submit_clear'], '')) { // header('Content-Type: text/plain'); header('Content-Disposition: attachment; filename="config.inc.php"'); - echo ConfigFile::getInstance()->getConfigFile(); + echo ConfigGenerator::getConfigFile(); exit; } elseif (PMA_ifSetOr($_POST['submit_save'], '')) { // // Save generated config file on the server // - file_put_contents($config_file_path, ConfigFile::getInstance()->getConfigFile()); + file_put_contents($config_file_path, ConfigGenerator::getConfigFile()); header('HTTP/1.1 303 See Other'); header('Location: index.php'); exit; diff --git a/setup/frames/config.inc.php b/setup/frames/config.inc.php index 5bb5785da..f1c235615 100644 --- a/setup/frames/config.inc.php +++ b/setup/frames/config.inc.php @@ -16,6 +16,7 @@ if (!defined('PHPMYADMIN')) { */ require_once './libraries/config/FormDisplay.class.php'; require_once './setup/lib/index.lib.php'; +require_once './setup/lib/ConfigGenerator.class.php'; $config_readable = false; $config_writable = false; @@ -29,7 +30,7 @@ check_config_rw($config_readable, $config_writable, $config_exists); diff --git a/setup/lib/ConfigGenerator.class.php b/setup/lib/ConfigGenerator.class.php new file mode 100644 index 000000000..f062a35c1 --- /dev/null +++ b/setup/lib/ConfigGenerator.class.php @@ -0,0 +1,150 @@ +getConfig(); + + // header + $ret = 'get('PMA_VERSION') + . ' setup script by Piotr Przybylski ' . $crlf + . ' * Date: ' . date(DATE_RFC1123) . $crlf + . ' */' . $crlf . $crlf; + + // servers + if ($cf->getServerCount() > 0) { + $ret .= "/* Servers configuration */$crlf\$i = 0;" . $crlf . $crlf; + foreach ($c['Servers'] as $id => $server) { + $ret .= '/* Server: ' . strtr($cf->getServerName($id), '*/', '-') . " [$id] */" . $crlf + . '$i++;' . $crlf; + foreach ($server as $k => $v) { + $k = preg_replace('/[^A-Za-z0-9_]/', '_', $k); + $ret .= "\$cfg['Servers'][\$i]['$k'] = " + . (is_array($v) && self::_isZeroBasedArray($v) + ? self::_exportZeroBasedArray($v, $crlf) + : var_export($v, true)) + . ';' . $crlf; + } + $ret .= $crlf; + } + $ret .= '/* End of servers configuration */' . $crlf . $crlf; + } + unset($c['Servers']); + + // other settings + $persistKeys = $cf->getPersistKeysMap(); + + foreach ($c as $k => $v) { + $k = preg_replace('/[^A-Za-z0-9_]/', '_', $k); + $ret .= self::_getVarExport($k, $v, $crlf); + if (isset($persistKeys[$k])) { + unset($persistKeys[$k]); + } + } + // keep 1d array keys which are present in $persist_keys (config.values.php) + foreach (array_keys($persistKeys) as $k) { + if (strpos($k, '/') === false) { + $k = preg_replace('/[^A-Za-z0-9_]/', '_', $k); + $ret .= self::_getVarExport($k, $cf->getDefault($k), $crlf); + } + } + $ret .= '?>'; + + return $ret; + } + + /** + * Returns exported configuration variable + * + * @param string $var_name + * @param mixed $var_value + * @param string $crlf + * @return string + */ + private static function _getVarExport($var_name, $var_value, $crlf) + { + if (!is_array($var_value) || empty($var_value)) { + return "\$cfg['$var_name'] = " . var_export($var_value, true) . ';' . $crlf; + } + $ret = ''; + if (self::_isZeroBasedArray($var_value)) { + $ret = "\$cfg['$var_name'] = " . self::_exportZeroBasedArray($var_value, $crlf) + . ');' . $crlf; + } else { + // string keys: $cfg[key][subkey] = value + foreach ($var_value as $k => $v) { + $k = preg_replace('/[^A-Za-z0-9_]/', '_', $k); + $ret .= "\$cfg['$var_name']['$k'] = " . var_export($v, true) . ';' . $crlf; + } + } + return $ret; + } + + /** + * Check whether $array is a continuous 0-based array + * + * @param array $array + * @return boolean + */ + private static function _isZeroBasedArray(array $array) + { + for ($i = 0; $i < count($array); $i++) { + if (!isset($array[$i])) { + return false; + } + } + return true; + } + + /** + * Exports continuous 0-based array + * + * @param array $array + * @param string $crlf + * @return string + */ + private static function _exportZeroBasedArray(array $array, $crlf) + { + $retv = array(); + foreach ($array as $v) { + $retv[] = var_export($v, true); + } + $ret = "array("; + if (count($retv) <= 4) { + // up to 4 values - one line + $ret .= implode(', ', $retv); + } else { + // more than 4 values - value per line + $imax = count($retv)-1; + for ($i = 0; $i <= $imax; $i++) { + $ret .= ($i < $imax ? ($i > 0 ? ',' : '') : '') . $crlf . ' ' . $retv[$i]; + } + } + $ret .= ')'; + return $ret; + } +} +?> \ No newline at end of file