Viewing file: left.php (20.47 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /* $Id: left.php,v 2.69.2.1 2006/02/22 15:33:35 cybot_tm Exp $ */ // vim: expandtab sw=4 ts=4 sts=4: /** * display db and table selection */
/** * Gets a core script and starts output buffering work */ require_once('./libraries/common.lib.php');
// free the session file, for the other frames to be loaded session_write_close();
require_once('./libraries/ob.lib.php'); if ($GLOBALS['cfg']['OBGzip']) { $ob_mode = PMA_outBufferModeGet(); if ($ob_mode) { PMA_outBufferPre($ob_mode); } }
require_once('./libraries/bookmark.lib.php'); require_once('./libraries/relation.lib.php'); $cfgRelation = PMA_getRelationsParam();
/** * Get the list and number of available databases. * Skipped if no server selected: in this case no database should be displayed * before the user choose among available ones at the welcome screen. */ if ($server > 0) { // this function is defined in "common.lib.php" // it defines $num_dbs and $dblist PMA_availableDatabases();
if ( ( ! isset($db) || ! strlen($db) ) && count( $dblist ) === 1 ) { reset( $dblist ); $db = current( $dblist ); } } else { $num_dbs = 0; }
$db = isset( $db ) ? $db : ''; $table = isset( $table ) ? $table : ''; $db_start = $db;
// garvin: For re-usability, moved http-headers // to a seperate file. It can now be included by libraries/header.inc.php, // querywindow.php.
require_once('./libraries/header_http.inc.php');
/** * Displays the frame */ // remove vertical scroll bar bug in ie echo '<?xml version="1.0" encoding="' . $GLOBALS['charset'] . '"?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $available_languages[$lang][2]; ?>" lang="<?php echo $available_languages[$lang][2]; ?>" dir="<?php echo $text_dir; ?>">
<head> <link rel="icon" href="./favicon.ico" type="image/x-icon" /> <link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" /> <title>phpMyAdmin</title> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo $charset; ?>" /> <base target="frame_content" /> <link rel="stylesheet" type="text/css" href="./css/phpmyadmin.css.php?<?php echo PMA_generate_common_url( '', '' ); ?>&js_frame=left" /> <script type="text/javascript" language="javascript"> //<![CDATA[ function toggle( id, only_open ) { var el = document.getElementById('subel' + id); if ( ! el ) { return false; }
var img = document.getElementById('el' + id + 'Img');
if ( el.style.display == 'none' || only_open ) { el.style.display = ''; if ( img ) { img.src = '<?php echo $GLOBALS['pmaThemeImage']; ?>b_minus.png'; img.alt = '-'; } } else { el.style.display = 'none'; if ( img ) { img.src = '<?php echo $GLOBALS['pmaThemeImage']; ?>b_plus.png'; img.alt = '+'; } } return true; } //]]> </script> </head>
<body id="body_leftFrame"> <?php require './libraries/left_header.inc.php';
if ( $num_dbs === 0 ) { // no database available, so we break here echo '<p>' . $strNoDatabases . '</p></body></html>';
/** * Close MySql connections */ if (isset($controllink) && $controllink) { @PMA_DBI_close($controllink); } if (isset($userlink) && $userlink) { @PMA_DBI_close($userlink); }
/** * Sends bufferized data */ if ( $GLOBALS['cfg']['OBGzip'] && isset( $ob_mode ) && $ob_mode ) { PMA_outBufferPost( $ob_mode ); } exit(); } elseif ( $GLOBALS['cfg']['LeftFrameLight'] && $num_dbs > 1 ) { // more than one database available and LeftFrameLight is true // display db selectbox // // Light mode -> beginning of the select combo for databases // Note: When javascript is active, the frameset will be changed from // within left.php. With no JS (<noscript>) the whole frameset will // be rebuilt with the new target frame. ?>
<div id="databaseList"> <form method="post" action="index.php" target="_parent" id="left"> <label for="lightm_db"><?php echo $strDatabase; ?></label> <?php echo PMA_generate_common_hidden_inputs() . "\n"; echo PMA_getHtmlSelectDb( $db ) . "\n"; echo '<noscript>' . "\n" .'<input type="submit" name="Go" value="' . $strGo . '" />' . "\n" .'</noscript>' . "\n" .'</form>' . "\n" .'</div>' . "\n"; } ?>
<div id="left_tableList"> <?php // Don't display expansible/collapsible database info if: // 1. $server == 0 (no server selected) // This is the case when there are multiple servers and // '$GLOBALS['cfg']['ServerDefault'] = 0' is set. In that case, we want the welcome // screen to appear with no database info displayed. // 2. there is only one database available (ie either only one database exists // or $GLOBALS['cfg']['Servers']['only_db'] is defined and is not an array) // In this case, the database should not be collapsible/expandable
$img_plus = '<img class="icon" id="el%dImg" src="' . $pmaThemeImage . 'b_plus.png"' .' width="9" height="9" alt="+" />'; $img_minus = '<img class="icon" id="el%dImg" src="' . $pmaThemeImage . 'b_minus.png"' .' width="9" height="9" alt="-" />';
$href_left = '<a onclick="if ( toggle(\'%d\') ) return false;"' .' href="left.php?%s" target="_self">';
$element_counter = 0;
if ( $GLOBALS['cfg']['LeftFrameLight'] && isset($db) && strlen($db) ) { // show selected databasename as link to DefaultTabDatabase-page // with table count in () $common_url_query = PMA_generate_common_url( $db );
$db_tooltip = ''; if ($GLOBALS['cfg']['ShowTooltip'] && $GLOBALS['cfgRelation']['commwork']) { $_db_tooltip = PMA_getComments($db); if (is_array($_db_tooltip)) { $db_tooltip = implode(' ', $_db_tooltip); } }
$disp_name = $db; if ($db_tooltip && $GLOBALS['cfg']['ShowTooltipAliasDB']) { $disp_name = $db_tooltip; $disp_name_cut = $db_tooltip; $db_tooltip = $db; }
?> <p><a class="item" href="<?php echo $GLOBALS['cfg']['DefaultTabDatabase'] . '?' . $common_url_query; ?>" title="<?php echo htmlspecialchars($db_tooltip); ?>" > <?php if ($GLOBALS['text_dir'] === 'rtl') { echo ' <bdo dir="ltr">(' . PMA_getTableCount($db) . ')</bdo> '; } echo htmlspecialchars( $disp_name ); if ($GLOBALS['text_dir'] === 'ltr') { echo ' <bdo dir="ltr">(' . PMA_getTableCount($db) . ')</bdo> '; } echo '</a></p>';
$table_list = PMA_getTableList( $db ); if ( count( $table_list ) > 0 ) { PMA_displayTableList( $table_list, true, '', $db ); } else { echo $strNoTablesFound; } unset( $table_list ); } elseif ( $GLOBALS['cfg']['LeftFrameLight'] ) { echo '<p>' . $GLOBALS['strSelectADb'] . '</p>' . "\n"; } else { $common_url_query = PMA_generate_common_url(); PMA_displayDbList(PMA_getDbList()); }
/** * displays collapsable db list * * @uses $_REQUEST['dbgroup'] * @uses $GLOBALS['cfg']['DefaultTabDatabase'] * @uses $GLOBALS['strSelectADb'] * @uses strpos() * @uses urlencode() * @uses printf() * @uses htmlspecialchars() * @uses PMA_generate_common_url() * @uses PMA_getTableList() * @uses PMA_displayTableList() * @global $element_counter * @global $img_minus * @global $img_plus * @global $href_left * @global $num_dbs * @global $db_start * @global $common_url_query * @param array $ext_dblist extended db list */ function PMA_displayDbList( $ext_dblist ) { global $element_counter, $img_minus, $img_plus, $href_left, $num_dbs, $db_start, $common_url_query;
// get table list, for all databases // doing this in one step takes advantage of a single query with information_schema! $tables_full = PMA_DBI_get_tables_full($GLOBALS['dblist']);
$url_dbgroup = ''; echo '<ul id="leftdatabaselist">'; $close_db_group = false; foreach ( $ext_dblist as $group => $db_group ) { if ( $num_dbs > 1 ) { if ( $close_db_group ) { $url_dbgroup = ''; echo '</ul>'; echo '</li>'; $close_db_group = false; } if ( count( $db_group ) > 1 ) { $close_db_group = true; $url_dbgroup = '&dbgroup=' . urlencode( $group ); $common_url_query = PMA_generate_common_url() . $url_dbgroup; $element_counter++; echo '<li class="dbgroup">'; if ( ( ! empty( $_REQUEST['dbgroup'] ) && $_REQUEST['dbgroup'] == $group ) || $db_start == $group || strpos( $db_start, $group ) === 0 ) { // display + only if this db(group) is not preselected printf( $href_left, $element_counter, PMA_generate_common_url() ); printf( $img_minus, $element_counter ); } else { printf( $href_left, $element_counter, $common_url_query ); printf( $img_plus, $element_counter ); } echo '</a> ' . $group . "\n"; if ( ( ! empty( $_REQUEST['dbgroup'] ) && $_REQUEST['dbgroup'] == $group ) || $db_start == $group || strpos( $db_start, $group ) === 0 ) { echo '<ul id="subel' . $element_counter . '">' . "\n"; } else { echo '<ul id="subel' . $element_counter . '"' .' style="display: none">' . "\n"; } } } foreach ( $db_group as $db ) { $common_url_query = PMA_generate_common_url( $db['name'] ) . $url_dbgroup;
$element_counter++; // Displays the database name echo '<li>' . "\n";
if ( $num_dbs > 1 ) { // only with more than one db we need collapse ... if ( $db_start != $db['name'] || $db['num_tables'] < 1 ) { // display + only if this db is not preselected // or table count is 0 printf( $href_left, $element_counter, $common_url_query ); printf( $img_plus, $element_counter ); } else { printf( $href_left, $element_counter, PMA_generate_common_url() . $url_dbgroup ); printf( $img_minus, $element_counter ); } echo '</a>';
// ... and we need to refresh both frames on db selection ?> <a class="item" id="<?php echo htmlspecialchars( $db['name'] ); ?>" href="index.php?<?php echo $common_url_query; ?>" target="_parent" title="<?php echo htmlspecialchars( $db['comment'] ); ?>" onclick=" if ( ! toggle('<?php echo $element_counter; ?>', true) ) window.parent.goTo( './left.php?<?php echo $common_url_query; ?>' ); window.parent.goTo( './<?php echo $GLOBALS['cfg']['DefaultTabDatabase'] . '?' . $common_url_query; ?>', 'main' ); return false;"> <?php if ( $GLOBALS['text_dir'] === 'rtl' ) { echo ' <bdo dir="ltr">(' . $db['num_tables'] . ')</bdo> '; } echo htmlspecialchars( $db['disp_name'] ); if ( $GLOBALS['text_dir'] === 'ltr' ) { echo ' <bdo dir="ltr">(' . $db['num_tables'] . ')</bdo> '; } ?> </a> <?php } else { // with only 1 db available we dont need to refresh left frame // on db selection, only phpmain ?> <a href="<?php echo $GLOBALS['cfg']['DefaultTabDatabase'] . '?' . $common_url_query; ?>" id="<?php echo htmlspecialchars( $db['name'] ); ?>" title="<?php echo htmlspecialchars( $db['comment'] ); ?>"> <?php if ( $GLOBALS['text_dir'] === 'rtl' ) { echo ' <bdo dir="ltr">(' . $db['num_tables'] . ')</bdo> '; } echo htmlspecialchars( $db['disp_name'] ); if ( $GLOBALS['text_dir'] === 'ltr' ) { echo ' <bdo dir="ltr">(' . $db['num_tables'] . ')</bdo> '; } ?> </a> <?php } if ( $db['num_tables'] ) { if ( isset( $tables_full[$db['name']] ) ) { $tables = PMA_getTableList($db['name'], $tables_full[$db['name']]); } elseif (isset($tables_full[strtolower($db['name'])])) { // on windows with lower_case_table_names = 1 // MySQL returns // with SHOW DATABASES or information_schema.SCHEMATA: `Test` // but information_schema.TABLES gives `test` // bug #1436171 // sf.net/tracker/?func=detail&aid=1436171&group_id=23067&atid=377408 $tables = PMA_getTableList($db['name'], $tables_full[strtolower($db['name'])]); } else { $tables = PMA_getTableList($db['name']); } $child_visible = (bool) ($num_dbs === 1 || $db_start == $db['name']); PMA_displayTableList($tables, $child_visible, '', $db['name']); } elseif ( $GLOBALS['cfg']['LeftFrameLight'] ) { // no tables and LeftFrameLight: // display message no tables in selected db echo '<p>' . $GLOBALS['strSelectADb'] . '</p>' . "\n"; } echo '</li>' . "\n"; } // end foreach db } // end foreach group
if ( $close_db_group ) { $url_dbgroup = ''; echo '</ul>'; echo '</li>'; $close_db_group = false; }
echo '</ul>' . "\n"; }
/** * display unordered list of tables * calls itself recursively if table in given list * is a list itself * * @uses is_array() * @uses count() * @uses urlencode() * @uses strpos() * @uses printf() * @uses htmlspecialchars() * @uses strlen() * @uses is_array() * @uses PMA_displayTableList() * @uses $_REQUEST['tbl_group'] * @uses $GLOBALS['common_url_query'] * @uses $GLOBALS['table'] * @uses $GLOBALS['pmaThemeImage'] * @uses $GLOBALS['cfg']['LeftFrameTableSeparator'] * @uses $GLOBALS['cfg']['DefaultTabDatabase'] * @uses $GLOBALS['cfg']['DefaultTabTable'] * @uses $GLOBALS['strRows'] * @uses $GLOBALS['strBrowse'] * @global $element_counter * @global $img_minus * @global $img_plus * @global $href_left * @param array $tables array of tables/tablegroups * @param boolean $visible wether the list is visible or not * @param string $tab_group_full full tab group name * @param string $table_db db of this table */ function PMA_displayTableList($tables, $visible = false, $tab_group_full = '', $table_db = '') { if ( ! is_array( $tables ) || count( $tables ) === 0 ) { return; }
global $element_counter, $img_minus, $img_plus, $href_left; $sep = $GLOBALS['cfg']['LeftFrameTableSeparator'];
if ( $visible ) { echo '<ul id="subel' . $element_counter . '">'; } else { echo '<ul id="subel' . $element_counter . '" style="display: none">'; } foreach ( $tables as $group => $table ) { if ( isset( $table['is' . $sep . 'group'] ) ) { $common_url_query = $GLOBALS['common_url_query'] . '&tbl_group=' . urlencode( $tab_group_full . $group );
$element_counter++; echo '<li>' . "\n"; if ( $visible && (( isset( $_REQUEST['tbl_group'] ) && ( strpos( $_REQUEST['tbl_group'], $group ) === 0 || strpos( $_REQUEST['tbl_group'], $sep . $group ) !== false ) ) || ( isset( $GLOBALS['table'] ) && strpos( $GLOBALS['table'], $group ) === 0 ) ) ) { printf( $href_left, $element_counter, $GLOBALS['common_url_query'] . '&tbl_group=' . $tab_group_full ); printf( $img_minus, $element_counter ); } else { printf( $href_left, $element_counter, $common_url_query ); printf( $img_plus, $element_counter ); } echo '</a>'; ?> <a href="index.php?<?php echo $common_url_query; ?>" target="_parent" onclick=" if ( ! toggle('<?php echo $element_counter; ?>', true) ) window.parent.goTo( './left.php?<?php echo $common_url_query; ?>' ); window.parent.goTo( './<?php echo $GLOBALS['cfg']['DefaultTabDatabase'] . '?' . $common_url_query; ?>', 'main' ); return false;"> <?php if ( $GLOBALS['text_dir'] === 'rtl' ) { echo ' <bdo dir="ltr">(' . $table['tab' . $sep . 'count'] . ')</bdo> '; } echo htmlspecialchars( substr( $group, 0, strlen( $group ) - strlen( $sep ) ) ); if ( $GLOBALS['text_dir'] === 'ltr' ) { echo ' <bdo dir="ltr">(' . $table['tab' . $sep . 'count'] . ')</bdo> '; } ?> </a> <?php
unset( $table['is' . $sep . 'group'] ); unset( $table['tab' . $sep . 'group'] ); unset( $table['tab' . $sep . 'count'] );
if ( $visible && (( isset( $_REQUEST['tbl_group'] ) && ( strpos( $_REQUEST['tbl_group'], $group ) === 0 || strpos( $_REQUEST['tbl_group'], $sep . $group ) !== false ) ) || ( isset( $GLOBALS['table'] ) && strpos( $GLOBALS['table'], $group ) === 0 ) ) ) { PMA_displayTableList( $table, true, $tab_group_full . $group, $table_db ); } else { PMA_displayTableList( $table, false, '', $table_db ); } echo '</li>' . "\n"; } elseif ( is_array( $table ) ) { $href = $GLOBALS['cfg']['DefaultTabTable'] . '?' .$GLOBALS['common_url_query'] . '&table=' .urlencode( $table['Name'] ); echo '<li>' . "\n"; echo '<a title="' . $GLOBALS['strBrowse'] . ': ' . htmlspecialchars( $table['Comment'] ) .' (' . PMA_formatNumber( $table['Rows'], 0 ) . ' ' . $GLOBALS['strRows'] . ')"' .' id="browse_' . htmlspecialchars( $table_db . '.' . $table['Name'] ) . '"' .' href="sql.php?' . $GLOBALS['common_url_query'] .'&table=' . urlencode( $table['Name'] ) .'&goto=' . $GLOBALS['cfg']['DefaultTabTable'] . '" >' .'<img class="icon"'; if ( 'VIEW' === strtoupper( $table['Comment'] ) ) { echo ' src="' . $GLOBALS['pmaThemeImage'] . 's_views.png"'; } else { echo ' src="' . $GLOBALS['pmaThemeImage'] . 'b_sbrowse.png"'; } echo ' id="icon_' . htmlspecialchars( $table_db . '.' . $table['Name'] ) . '"' .' width="10" height="10" alt="' . $GLOBALS['strBrowse'] . '" /></a>' . "\n" .'<a href="' . $href . '" title="' . $table['Comment'] .' (' . PMA_formatNumber( $table['Rows'], 0 ) . ' ' . $GLOBALS['strRows'] . ')"' .' id="' . htmlspecialchars( $table_db . '.' . $table['Name'] ) . '">' . htmlspecialchars( $table['disp_name'] ) . '</a>'; echo '</li>' . "\n"; } } echo '</ul>'; } ?> </div> </body> </html> <?php /** * Close MySql connections */ if (isset($controllink) && $controllink) { @PMA_DBI_close($controllink); } if (isset($userlink) && $userlink) { @PMA_DBI_close($userlink); }
/** * Sends bufferized data */ if ( $GLOBALS['cfg']['OBGzip'] && isset( $ob_mode ) && $ob_mode ) { PMA_outBufferPost( $ob_mode ); } ?>
|