diff options
| author | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
|---|---|---|
| committer | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
| commit | b62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch) | |
| tree | 86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /hugo/libraries/url_generating.lib.php | |
Diffstat (limited to 'hugo/libraries/url_generating.lib.php')
| -rw-r--r-- | hugo/libraries/url_generating.lib.php | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/hugo/libraries/url_generating.lib.php b/hugo/libraries/url_generating.lib.php new file mode 100644 index 0000000..e995710 --- /dev/null +++ b/hugo/libraries/url_generating.lib.php @@ -0,0 +1,302 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * URL/hidden inputs generating. + * + * @package PhpMyAdmin + */ +if (! defined('PHPMYADMIN')) { + exit; +} + +/** + * Generates text with hidden inputs. + * + * @param string $db optional database name + * (can also be an array of parameters) + * @param string $table optional table name + * @param int $indent indenting level + * @param string $skip do not generate a hidden field for this parameter + * (can be an array of strings) + * + * @see PMA_generate_common_url() + * + * @return string string with input fields + * + * @global string the current language + * @global string the current conversion charset + * @global string the current connection collation + * @global string the current server + * @global array the configuration array + * @global boolean whether recoding is allowed or not + * + * @access public + */ +function PMA_generate_common_hidden_inputs($db = '', $table = '', + $indent = 0, $skip = array() +) { + if (is_array($db)) { + $params =& $db; + $_indent = empty($table) ? $indent : $table; + $_skip = empty($indent) ? $skip : $indent; + $indent =& $_indent; + $skip =& $_skip; + } else { + $params = array(); + if (strlen($db)) { + $params['db'] = $db; + } + if (strlen($table)) { + $params['table'] = $table; + } + } + + if (! empty($GLOBALS['server']) + && $GLOBALS['server'] != $GLOBALS['cfg']['ServerDefault'] + ) { + $params['server'] = $GLOBALS['server']; + } + if (empty($_COOKIE['pma_lang']) && ! empty($GLOBALS['lang'])) { + $params['lang'] = $GLOBALS['lang']; + } + if (empty($_COOKIE['pma_collation_connection']) + && ! empty($GLOBALS['collation_connection']) + ) { + $params['collation_connection'] = $GLOBALS['collation_connection']; + } + + $params['token'] = $_SESSION[' PMA_token ']; + + if (! is_array($skip)) { + if (isset($params[$skip])) { + unset($params[$skip]); + } + } else { + foreach ($skip as $skipping) { + if (isset($params[$skipping])) { + unset($params[$skipping]); + } + } + } + + return PMA_getHiddenFields($params); +} + +/** + * create hidden form fields from array with name => value + * + * <code> + * $values = array( + * 'aaa' => aaa, + * 'bbb' => array( + * 'bbb_0', + * 'bbb_1', + * ), + * 'ccc' => array( + * 'a' => 'ccc_a', + * 'b' => 'ccc_b', + * ), + * ); + * echo PMA_getHiddenFields($values); + * + * // produces: + * <input type="hidden" name="aaa" Value="aaa" /> + * <input type="hidden" name="bbb[0]" Value="bbb_0" /> + * <input type="hidden" name="bbb[1]" Value="bbb_1" /> + * <input type="hidden" name="ccc[a]" Value="ccc_a" /> + * <input type="hidden" name="ccc[b]" Value="ccc_b" /> + * </code> + * + * @param array $values hidden values + * @param string $pre prefix + * + * @return string form fields of type hidden + */ +function PMA_getHiddenFields($values, $pre = '') +{ + $fields = ''; + + foreach ($values as $name => $value) { + if (! empty($pre)) { + $name = $pre. '[' . $name . ']'; + } + + if (is_array($value)) { + $fields .= PMA_getHiddenFields($value, $name); + } else { + // do not generate an ending "\n" because + // PMA_generate_common_hidden_inputs() is sometimes called + // from a JS document.write() + $fields .= '<input type="hidden" name="' . htmlspecialchars($name) + . '" value="' . htmlspecialchars($value) . '" />'; + } + } + + return $fields; +} + +/** + * Generates text with URL parameters. + * + * <code> + * // OLD (deprecated) style + * // note the ? + * echo 'script.php?' . PMA_generate_common_url('mysql', 'rights'); + * // produces with cookies enabled: + * // script.php?db=mysql&table=rights + * // with cookies disabled: + * // script.php?server=1&lang=en&db=mysql&table=rights + * + * // NEW style + * $params['myparam'] = 'myvalue'; + * $params['db'] = 'mysql'; + * $params['table'] = 'rights'; + * // note the missing ? + * echo 'script.php' . PMA_generate_common_url($params); + * // produces with cookies enabled: + * // script.php?myparam=myvalue&db=mysql&table=rights + * // with cookies disabled: + * // script.php?server=1&lang=en&myparam=myvalue&db=mysql&table=rights + * + * // note the missing ? + * echo 'script.php' . PMA_generate_common_url(); + * // produces with cookies enabled: + * // script.php + * // with cookies disabled: + * // script.php?server=1&lang=en + * </code> + * + * @param mixed assoc. array with url params or optional string with database name + * if first param is an array there is also an ? prefixed to the url + * + * @param string - if first param is array: 'html' to use htmlspecialchars() + * on the resulting URL (for a normal URL displayed in HTML) + * or something else to avoid using htmlspecialchars() (for + * a URL sent via a header); if not set,'html' is assumed + * - if first param is not array: optional table name + * + * @param string - if first param is array: optional character to + * use instead of '?' + * - if first param is not array: optional character to use + * instead of '&' for dividing URL parameters + * + * @return string string with URL parameters + * @access public + */ +function PMA_generate_common_url() +{ + $args = func_get_args(); + + if (isset($args[0]) && is_array($args[0])) { + // new style + $params = $args[0]; + + if (isset($args[1])) { + $encode = $args[1]; + } else { + $encode = 'html'; + } + + if (isset($args[2])) { + $questionmark = $args[2]; + } else { + $questionmark = '?'; + } + } else { + // old style + + if (PMA_isValid($args[0])) { + $params['db'] = $args[0]; + } + + if (PMA_isValid($args[1])) { + $params['table'] = $args[1]; + } + + if (isset($args[2]) && $args[2] !== '&') { + $encode = 'text'; + } else { + $encode = 'html'; + } + + $questionmark = ''; + } + + $separator = PMA_get_arg_separator(); + + // avoid overwriting when creating navi panel links to servers + if (isset($GLOBALS['server']) + && $GLOBALS['server'] != $GLOBALS['cfg']['ServerDefault'] + && ! isset($params['server']) + ) { + $params['server'] = $GLOBALS['server']; + } + + if (empty($_COOKIE['pma_lang']) && ! empty($GLOBALS['lang'])) { + $params['lang'] = $GLOBALS['lang']; + } + if (empty($_COOKIE['pma_collation_connection']) + && ! empty($GLOBALS['collation_connection']) + ) { + $params['collation_connection'] = $GLOBALS['collation_connection']; + } + + if (isset($_SESSION[' PMA_token '])) { + $params['token'] = $_SESSION[' PMA_token ']; + } + + if (empty($params)) { + return ''; + } + + $query = $questionmark . http_build_query($params, null, $separator); + + if ($encode === 'html') { + $query = htmlspecialchars($query); + } + + return $query; +} + +/** + * Returns url separator + * + * extracted from arg_separator.input as set in php.ini + * we do not use arg_separator.output to avoid problems with & and & + * + * @param string $encode whether to encode separator or not, + * currently 'none' or 'html' + * + * @return string character used for separating url parts usally ; or & + * @access public + */ +function PMA_get_arg_separator($encode = 'none') +{ + static $separator = null; + + if (null === $separator) { + // use separators defined by php, but prefer ';' + // as recommended by W3C + // (see http://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.2.2) + $php_arg_separator_input = ini_get('arg_separator.input'); + if (strpos($php_arg_separator_input, ';') !== false) { + $separator = ';'; + } elseif (strlen($php_arg_separator_input) > 0) { + $separator = $php_arg_separator_input{0}; + } else { + $separator = '&'; + } + } + + switch ($encode) { + case 'html': + return htmlentities($separator); + break; + case 'text' : + case 'none' : + default : + return $separator; + } +} + +?> |
