From 04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 9 Jan 2020 10:55:03 +0100 Subject: phpmyadmin working --- .../libraries/classes/Setup/ConfigGenerator.php | 184 +++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 srcs/phpmyadmin/libraries/classes/Setup/ConfigGenerator.php (limited to 'srcs/phpmyadmin/libraries/classes/Setup/ConfigGenerator.php') diff --git a/srcs/phpmyadmin/libraries/classes/Setup/ConfigGenerator.php b/srcs/phpmyadmin/libraries/classes/Setup/ConfigGenerator.php new file mode 100644 index 0000000..8ba09ab --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Setup/ConfigGenerator.php @@ -0,0 +1,184 @@ +getConfig(); + + // header + $ret = 'get('PMA_VERSION') + . ' setup script' . $crlf + . ' * Date: ' . gmdate(DATE_RFC1123) . $crlf + . ' */' . $crlf . $crlf; + + //servers + if (! empty($conf['Servers'])) { + $ret .= self::getServerPart($cf, $crlf, $conf['Servers']); + unset($conf['Servers']); + } + + // other settings + $persistKeys = $cf->getPersistKeysMap(); + + foreach ($conf 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 (mb_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 configuration name + * @param mixed $var_value configuration value(s) + * @param string $crlf line ending + * + * @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 Array to check + * + * @return boolean + */ + private static function _isZeroBasedArray(array $array) + { + for ($i = 0, $nb = count($array); $i < $nb; $i++) { + if (! isset($array[$i])) { + return false; + } + } + return true; + } + + /** + * Exports continuous 0-based array + * + * @param array $array Array to export + * @param string $crlf Newline string + * + * @return string + */ + private static function _exportZeroBasedArray(array $array, $crlf) + { + $retv = []; + 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); + for ($i = 0; $i < $imax; $i++) { + $ret .= ($i > 0 ? ',' : '') . $crlf . ' ' . $retv[$i]; + } + } + $ret .= ')'; + return $ret; + } + + /** + * Generate server part of config file + * + * @param ConfigFile $cf Config file + * @param string $crlf Carriage return char + * @param array $servers Servers list + * + * @return string|null + */ + protected static function getServerPart(ConfigFile $cf, $crlf, array $servers) + { + if ($cf->getServerCount() === 0) { + return null; + } + + $ret = "/* Servers configuration */$crlf\$i = 0;" . $crlf . $crlf; + foreach ($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; + return $ret; + } +} -- cgit