' . "\n" . (($cfg['SQP']['fmtType'] == 'none' && $unparsed_sql != '') ? $unparsed_sql : $parsed_sql) . "\n" . ''; return $formatted_sql; } $formatted_sql = ''; switch ($cfg['SQP']['fmtType']) { case 'none': if ($unparsed_sql != '') { $formatted_sql = "
\n" . PMA_SQP_formatNone(array('raw' => $unparsed_sql)) . "\n"; } else { $formatted_sql = PMA_SQP_formatNone($parsed_sql); } break; case 'html': $formatted_sql = PMA_SQP_formatHtml($parsed_sql, 'color'); break; case 'text': //$formatted_sql = PMA_SQP_formatText($parsed_sql); $formatted_sql = PMA_SQP_formatHtml($parsed_sql, 'text'); break; default: break; } // end switch return $formatted_sql; } // end of the "PMA_formatSql()" function /** * Displays a link to the official MySQL documentation * * @uses $cfg['MySQLManualType'] * @uses $cfg['MySQLManualBase'] * @uses $cfg['ReplaceHelpImg'] * @uses $GLOBALS['mysql_4_1_doc_lang'] * @uses $GLOBALS['mysql_5_1_doc_lang'] * @uses $GLOBALS['mysql_5_0_doc_lang'] * @uses $GLOBALS['strDocu'] * @uses $GLOBALS['pmaThemeImage'] * @uses PMA_MYSQL_INT_VERSION * @uses strtolower() * @uses str_replace() * @param string chapter of "HTML, one page per chapter" documentation * @param string contains name of page/anchor that is being linked * @param bool whether to use big icon (like in left frame) * @param string anchor to page part * * @return string the html link * * @access public */ function PMA_showMySQLDocu($chapter, $link, $big_icon = false, $anchor = '') { global $cfg; if ($cfg['MySQLManualType'] == 'none' || empty($cfg['MySQLManualBase'])) { return ''; } // Fixup for newly used names: $chapter = str_replace('_', '-', strtolower($chapter)); $link = str_replace('_', '-', strtolower($link)); switch ($cfg['MySQLManualType']) { case 'chapters': if (empty($chapter)) { $chapter = 'index'; } if (empty($anchor)) { $anchor = $link; } $url = $cfg['MySQLManualBase'] . '/' . $chapter . '.html#' . $anchor; break; case 'big': if (empty($anchor)) { $anchor = $link; } $url = $cfg['MySQLManualBase'] . '#' . $anchor; break; case 'searchable': if (empty($link)) { $link = 'index'; } $url = $cfg['MySQLManualBase'] . '/' . $link . '.html'; if (!empty($anchor)) { $url .= '#' . $anchor; } break; case 'viewable': default: if (empty($link)) { $link = 'index'; } $mysql = '5.0'; $lang = 'en'; if (defined('PMA_MYSQL_INT_VERSION')) { if (PMA_MYSQL_INT_VERSION >= 50100) { $mysql = '5.1'; if (!empty($GLOBALS['mysql_5_1_doc_lang'])) { $lang = $GLOBALS['mysql_5_1_doc_lang']; } } elseif (PMA_MYSQL_INT_VERSION >= 50000) { $mysql = '5.0'; if (!empty($GLOBALS['mysql_5_0_doc_lang'])) { $lang = $GLOBALS['mysql_5_0_doc_lang']; } } } $url = $cfg['MySQLManualBase'] . '/' . $mysql . '/' . $lang . '/' . $link . '.html'; if (!empty($anchor)) { $url .= '#' . $anchor; } break; } if ($big_icon) { return ''; } elseif ($GLOBALS['cfg']['ReplaceHelpImg']) { return ''; } else { return '[' . $GLOBALS['strDocu'] . ']'; } } // end of the 'PMA_showMySQLDocu()' function /** * returns HTML for a footnote marker and add the messsage to the footnotes * * @uses $GLOBALS['footnotes'] * @param string the error message * @return string html code for a footnote marker * @access public */ function PMA_showHint($message, $bbcode = false, $type = 'notice') { if ($message instanceof PMA_Message) { $key = $message->getHash(); $type = $message->getLevel(); } else { $key = md5($message); } if (! isset($GLOBALS['footnotes'][$key])) { $nr = count($GLOBALS['footnotes']) + 1; // this is the first instance of this message $instance = 1; $GLOBALS['footnotes'][$key] = array( 'note' => $message, 'type' => $type, 'nr' => $nr, 'instance' => $instance ); } else { $nr = $GLOBALS['footnotes'][$key]['nr']; // another instance of this message (to ensure ids are unique) $instance = ++$GLOBALS['footnotes'][$key]['instance']; } if ($bbcode) { return '[sup]' . $nr . '[/sup]'; } // footnotemarker used in js/tooltip.js return '' . $nr . ''; } /** * Displays a MySQL error message in the right frame. * * @uses footer.inc.php * @uses header.inc.php * @uses $GLOBALS['sql_query'] * @uses $GLOBALS['strError'] * @uses $GLOBALS['strSQLQuery'] * @uses $GLOBALS['pmaThemeImage'] * @uses $GLOBALS['strEdit'] * @uses $GLOBALS['strMySQLSaid'] * @uses $GLOBALS['cfg']['PropertiesIconic'] * @uses $GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] * @uses PMA_backquote() * @uses PMA_DBI_getError() * @uses PMA_formatSql() * @uses PMA_generate_common_hidden_inputs() * @uses PMA_generate_common_url() * @uses PMA_showMySQLDocu() * @uses PMA_sqlAddslashes() * @uses PMA_SQP_isError() * @uses PMA_SQP_parse() * @uses PMA_SQP_getErrorString() * @uses strtolower() * @uses urlencode() * @uses str_replace() * @uses nl2br() * @uses substr() * @uses preg_replace() * @uses preg_match() * @uses explode() * @uses implode() * @uses is_array() * @uses function_exists() * @uses htmlspecialchars() * @uses trim() * @uses strstr() * @param string the error message * @param string the sql query that failed * @param boolean whether to show a "modify" link or not * @param string the "back" link url (full path is not required) * @param boolean EXIT the page? * * @global string the curent table * @global string the current db * * @access public */ function PMA_mysqlDie($error_message = '', $the_query = '', $is_modify_link = true, $back_url = '', $exit = true) { global $table, $db; /** * start http output, display html headers */ require_once './libraries/header.inc.php'; if (!$error_message) { $error_message = PMA_DBI_getError(); } if (!$the_query && !empty($GLOBALS['sql_query'])) { $the_query = $GLOBALS['sql_query']; } // --- Added to solve bug #641765 // Robbat2 - 12 January 2003, 9:46PM // Revised, Robbat2 - 13 January 2003, 2:59PM if (!function_exists('PMA_SQP_isError') || PMA_SQP_isError()) { $formatted_sql = htmlspecialchars($the_query); } elseif (empty($the_query) || trim($the_query) == '') { $formatted_sql = ''; } else { if (strlen($the_query) > $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']) { $formatted_sql = substr($the_query, 0, $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']) . '[...]'; } else { $formatted_sql = PMA_formatSql(PMA_SQP_parse($the_query), $the_query); } } // --- echo "\n" . '' . "\n"; echo '
' . $GLOBALS['strSQLQuery'] . ':' . "\n"; if (strstr(strtolower($formatted_sql), 'select')) { // please show me help to the error on select echo PMA_showMySQLDocu('SQL-Syntax', 'SELECT'); } if ($is_modify_link) { $_url_params = array( 'sql_query' => $the_query, 'show_query' => 1, ); if (strlen($table)) { $_url_params['db'] = $db; $_url_params['table'] = $table; $doedit_goto = ''; } elseif (strlen($db)) { $_url_params['db'] = $db; $doedit_goto = ''; } else { $doedit_goto = ''; } echo $doedit_goto . PMA_getIcon('b_edit.png', $GLOBALS['strEdit']) . ''; } // end if echo '
' . "\n" .'' . "\n" .' ' . $formatted_sql . "\n" .'
' . "\n"; } // end if $tmp_mysql_error = ''; // for saving the original $error_message if (!empty($error_message)) { $tmp_mysql_error = strtolower($error_message); // save the original $error_message $error_message = htmlspecialchars($error_message); $error_message = preg_replace("@((\015\012)|(\015)|(\012)){3,}@", "\n\n", $error_message); } // modified to show me the help on error-returns (Michael Keck) // (now error-messages-server) echo '' . "\n" . ' ' . $GLOBALS['strMySQLSaid'] . '' . PMA_showMySQLDocu('Error-messages-server', 'Error-messages-server') . "\n" . '
' . "\n"; // The error message will be displayed within a CODE segment. // To preserve original formatting, but allow wordwrapping, we do a couple of replacements // Replace all non-single blanks with their HTML-counterpart $error_message = str_replace(' ', ' ', $error_message); // Replace TAB-characters with their HTML-counterpart $error_message = str_replace("\t", ' ', $error_message); // Replace linebreaks $error_message = nl2br($error_message); echo '' . "\n"
. $error_message . "\n"
. '
'; debug_print_backtrace(); echo ''; } trigger_error('PMA_sendHeaderLocation called when headers are already sent!', E_USER_ERROR); } // bug #1523784: IE6 does not like 'Refresh: 0', it // results in a blank page // but we need it when coming from the cookie login panel) if (PMA_IS_IIS && defined('PMA_COMING_FROM_COOKIE_LOGIN')) { header('Refresh: 0; ' . $uri); } else { header('Location: ' . $uri); } } } } /** * returns array with tables of given db with extended information and grouped * * @uses $cfg['LeftFrameTableSeparator'] * @uses $cfg['LeftFrameTableLevel'] * @uses $cfg['ShowTooltipAliasTB'] * @uses $cfg['NaturalOrder'] * @uses PMA_backquote() * @uses count() * @uses array_merge * @uses uksort() * @uses strstr() * @uses explode() * @param string $db name of db * @param string $tables name of tables * @param integer $limit_offset list offset * @param integer $limit_count max tables to return * return array (recursive) grouped table list */ function PMA_getTableList($db, $tables = null, $limit_offset = 0, $limit_count = false) { $sep = $GLOBALS['cfg']['LeftFrameTableSeparator']; if (null === $tables) { $tables = PMA_DBI_get_tables_full($db, false, false, null, $limit_offset, $limit_count); if ($GLOBALS['cfg']['NaturalOrder']) { uksort($tables, 'strnatcasecmp'); } } if (count($tables) < 1) { return $tables; } $default = array( 'Name' => '', 'Rows' => 0, 'Comment' => '', 'disp_name' => '', ); $table_groups = array(); // for blobstreaming - list of blobstreaming tables - rajk // load PMA configuration $PMA_Config = $_SESSION['PMA_Config']; // if PMA configuration exists if (!empty($PMA_Config)) $session_bs_tables = $_SESSION['PMA_Config']->get('BLOBSTREAMING_TABLES'); foreach ($tables as $table_name => $table) { // if BS tables exist if (isset($session_bs_tables)) // compare table name to tables in list of blobstreaming tables foreach ($session_bs_tables as $table_key=>$table_val) // if table is in list, skip outer foreach loop if ($table_name == $table_key) continue 2; // check for correct row count if (null === $table['Rows']) { // Do not check exact row count here, // if row count is invalid possibly the table is defect // and this would break left frame; // but we can check row count if this is a view or the // information_schema database // since PMA_Table::countRecords() returns a limited row count // in this case. // set this because PMA_Table::countRecords() can use it $tbl_is_view = PMA_Table::isView($db, $table['Name']); if ($tbl_is_view || 'information_schema' == $db) { $table['Rows'] = PMA_Table::countRecords($db, $table['Name'], $return = true); } } // in $group we save the reference to the place in $table_groups // where to store the table info if ($GLOBALS['cfg']['LeftFrameDBTree'] && $sep && strstr($table_name, $sep)) { $parts = explode($sep, $table_name); $group =& $table_groups; $i = 0; $group_name_full = ''; while ($i < count($parts) - 1 && $i < $GLOBALS['cfg']['LeftFrameTableLevel']) { $group_name = $parts[$i] . $sep; $group_name_full .= $group_name; if (!isset($group[$group_name])) { $group[$group_name] = array(); $group[$group_name]['is' . $sep . 'group'] = true; $group[$group_name]['tab' . $sep . 'count'] = 1; $group[$group_name]['tab' . $sep . 'group'] = $group_name_full; } elseif (!isset($group[$group_name]['is' . $sep . 'group'])) { $table = $group[$group_name]; $group[$group_name] = array(); $group[$group_name][$group_name] = $table; unset($table); $group[$group_name]['is' . $sep . 'group'] = true; $group[$group_name]['tab' . $sep . 'count'] = 1; $group[$group_name]['tab' . $sep . 'group'] = $group_name_full; } else { $group[$group_name]['tab' . $sep . 'count']++; } $group =& $group[$group_name]; $i++; } } else { if (!isset($table_groups[$table_name])) { $table_groups[$table_name] = array(); } $group =& $table_groups; } if ($GLOBALS['cfg']['ShowTooltipAliasTB'] && $GLOBALS['cfg']['ShowTooltipAliasTB'] !== 'nested') { // switch tooltip and name $table['Comment'] = $table['Name']; $table['disp_name'] = $table['Comment']; } else { $table['disp_name'] = $table['Name']; } $group[$table_name] = array_merge($default, $table); } return $table_groups; } /* ----------------------- Set of misc functions ----------------------- */ /** * Adds backquotes on both sides of a database, table or field name. * and escapes backquotes inside the name with another backquote * * example: *
* echo PMA_backquote('owner`s db'); // `owner``s db`
*
*
*
* @uses PMA_backquote()
* @uses is_array()
* @uses strlen()
* @uses str_replace()
* @param mixed $a_name the database, table or field name to "backquote"
* or array of it
* @param boolean $do_it a flag to bypass this function (used by dump
* functions)
* @return mixed the "backquoted" database, table or field name if the
* current MySQL release is >= 3.23.6, the original one
* else
* @access public
*/
function PMA_backquote($a_name, $do_it = true)
{
if (! $do_it) {
return $a_name;
}
if (is_array($a_name)) {
$result = array();
foreach ($a_name as $key => $val) {
$result[$key] = PMA_backquote($val);
}
return $result;
}
// '0' is also empty for php :-(
if (strlen($a_name) && $a_name !== '*') {
return '`' . str_replace('`', '``', $a_name) . '`';
} else {
return $a_name;
}
} // end of the 'PMA_backquote()' function
/**
* Defines the ';
if ($query_too_big) {
echo $shortened_query_base;
} else {
echo $query_base;
}
//Clean up the end of the PHP
if (! empty($GLOBALS['show_as_php'])) {
echo '";';
}
echo '
';
echo '
* echo PMA_formatNumber(123456789, 6); // 123,457 k
* echo PMA_formatNumber(-123456789, 4, 2); // -123.46 M
* echo PMA_formatNumber(-0.003, 6); // -3 m
* echo PMA_formatNumber(0.003, 3, 3); // 0.003
* echo PMA_formatNumber(0.00003, 3, 2); // 0.03 m
* echo PMA_formatNumber(0, 6); // 0
*
*
* @param double $value the value to format
* @param integer $length the max length
* @param integer $comma the number of decimals to retain
* @param boolean $only_down do not reformat numbers below 1
*
* @return string the formatted value and its unit
*
* @access public
*
* @author staybyte, sebastian mendel
* @version 1.1.0 - 2005-10-27
*/
function PMA_formatNumber($value, $length = 3, $comma = 0, $only_down = false)
{
//number_format is not multibyte safe, str_replace is safe
if ($length === 0) {
return str_replace(array(',', '.'),
array($GLOBALS['number_thousands_separator'], $GLOBALS['number_decimal_separator']),
number_format($value, $comma));
}
// this units needs no translation, ISO
$units = array(
-8 => 'y',
-7 => 'z',
-6 => 'a',
-5 => 'f',
-4 => 'p',
-3 => 'n',
-2 => 'µ',
-1 => 'm',
0 => ' ',
1 => 'k',
2 => 'M',
3 => 'G',
4 => 'T',
5 => 'P',
6 => 'E',
7 => 'Z',
8 => 'Y'
);
// we need at least 3 digits to be displayed
if (3 > $length + $comma) {
$length = 3 - $comma;
}
// check for negative value to retain sign
if ($value < 0) {
$sign = '-';
$value = abs($value);
} else {
$sign = '';
}
$dh = PMA_pow(10, $comma);
$li = PMA_pow(10, $length);
$unit = $units[0];
if ($value >= 1) {
for ($d = 8; $d >= 0; $d--) {
if (isset($units[$d]) && $value >= $li * PMA_pow(1000, $d-1)) {
$value = round($value / (PMA_pow(1000, $d) / $dh)) /$dh;
$unit = $units[$d];
break 1;
} // end if
} // end for
} elseif (!$only_down && (float) $value !== 0.0) {
for ($d = -8; $d <= 8; $d++) {
if (isset($units[$d]) && $value <= $li * PMA_pow(1000, $d-1)) {
$value = round($value / (PMA_pow(1000, $d) / $dh)) /$dh;
$unit = $units[$d];
break 1;
} // end if
} // end for
} // end if ($value >= 1) elseif (!$only_down && (float) $value !== 0.0)
//number_format is not multibyte safe, str_replace is safe
$value = str_replace(array(',', '.'),
array($GLOBALS['number_thousands_separator'], $GLOBALS['number_decimal_separator']),
number_format($value, $comma));
return $sign . $value . ' ' . $unit;
} // end of the 'PMA_formatNumber' function
/**
* Writes localised date
*
* @param string the current timestamp
*
* @return string the formatted date
*
* @access public
*/
function PMA_localisedDate($timestamp = -1, $format = '')
{
global $datefmt, $month, $day_of_week;
if ($format == '') {
$format = $datefmt;
}
if ($timestamp == -1) {
$timestamp = time();
}
$date = preg_replace('@%[aA]@', $day_of_week[(int)strftime('%w', $timestamp)], $format);
$date = preg_replace('@%[bB]@', $month[(int)strftime('%m', $timestamp)-1], $date);
return strftime($date, $timestamp);
} // end of the 'PMA_localisedDate()' function
/**
* returns a tab for tabbed navigation.
* If the variables $link and $args ar left empty, an inactive tab is created
*
* @uses $GLOBALS['PMA_PHP_SELF']
* @uses $GLOBALS['strEmpty']
* @uses $GLOBALS['strDrop']
* @uses $GLOBALS['active_page']
* @uses $GLOBALS['url_query']
* @uses $cfg['MainPageIconic']
* @uses $GLOBALS['pmaThemeImage']
* @uses PMA_generate_common_url()
* @uses E_USER_NOTICE
* @uses htmlentities()
* @uses urlencode()
* @uses sprintf()
* @uses trigger_error()
* @uses array_merge()
* @uses basename()
* @param array $tab array with all options
* @param array $url_params
* @return string html code for one tab, a link if valid otherwise a span
* @access public
*/
function PMA_getTab($tab, $url_params = array())
{
// default values
$defaults = array(
'text' => '',
'class' => '',
'active' => false,
'link' => '',
'sep' => '?',
'attr' => '',
'args' => '',
'warning' => '',
'fragment' => '',
);
$tab = array_merge($defaults, $tab);
// determine additionnal style-class
if (empty($tab['class'])) {
if ($tab['text'] == $GLOBALS['strEmpty']
|| $tab['text'] == $GLOBALS['strDrop']) {
$tab['class'] = 'caution';
} elseif (! empty($tab['active'])
|| PMA_isValid($GLOBALS['active_page'], 'identical', $tab['link'])) {
$tab['class'] = 'active';
} elseif (empty($GLOBALS['active_page'])
&& basename($GLOBALS['PMA_PHP_SELF']) == $tab['link']
&& empty($tab['warning'])) {
$tab['class'] = 'active';
}
}
if (!empty($tab['warning'])) {
$tab['class'] .= ' warning';
$tab['attr'] .= ' title="' . htmlspecialchars($tab['warning']) . '"';
}
// build the link
if (!empty($tab['link'])) {
$tab['link'] = htmlentities($tab['link']);
$tab['link'] = $tab['link'] . PMA_generate_common_url($url_params);
if (! empty($tab['args'])) {
foreach ($tab['args'] as $param => $value) {
$tab['link'] .= PMA_get_arg_separator('html') . urlencode($param) . '='
. urlencode($value);
}
}
}
if (! empty($tab['fragment'])) {
$tab['link'] .= $tab['fragment'];
}
// display icon, even if iconic is disabled but the link-text is missing
if (($GLOBALS['cfg']['MainPageIconic'] || empty($tab['text']))
&& isset($tab['icon'])) {
// avoid generating an alt tag, because it only illustrates
// the text that follows and if browser does not display
// images, the text is duplicated
$image = '%2$s';
$tab['text'] = sprintf($image, htmlentities($tab['icon']), $tab['text']);
}
// check to not display an empty link-text
elseif (empty($tab['text'])) {
$tab['text'] = '?';
trigger_error('empty linktext in function ' . __FUNCTION__ . '()',
E_USER_NOTICE);
}
$out = '' . $error_message . '