/** * Displays a navigation bar to browse among the results of a SQL query * * @uses $_SESSION['tmp_user_values']['disp_direction'] * @uses $_SESSION['tmp_user_values']['repeat_cells'] * @uses $_SESSION['tmp_user_values']['max_rows'] * @uses $_SESSION['tmp_user_values']['pos'] * @param integer the offset for the "next" page * @param integer the offset for the "previous" page * @param string the URL-encoded query * @param string the id for the direction dropdown * * @global string $db the database name * @global string $table the table name * @global string $goto the URL to go back in case of errors * @global integer $num_rows the total number of rows returned by the * SQL query * @global integer $unlim_num_rows the total number of rows returned by the * SQL any programmatically appended "LIMIT" clause * @global boolean $is_innodb whether its InnoDB or not * @global array $showtable table definitions * * @access private * * @see PMA_displayTable() */ function PMA_displayTableNavigation($pos_next, $pos_prev, $sql_query, $id_for_direction_dropdown) { global $db, $table, $goto; global $num_rows, $unlim_num_rows; global $is_innodb; global $showtable; // here, using htmlentities() would cause problems if the query // contains accented characters $html_sql_query = htmlspecialchars($sql_query); /** * @todo move this to a central place * @todo for other future table types */ $is_innodb = isset($showtable['Type']) && $showtable['Type'] == 'InnoDB'; ?> <!-- Navigation bar --> <table border="0" cellpadding="2" cellspacing="0"> <tr> <?php // Move to the beginning or to the previous page if ($_SESSION['tmp_user_values']['pos'] && $_SESSION['tmp_user_values']['max_rows'] != 'all') { PMA_displayTableNavigationOneButton('<<', $GLOBALS['strPos1'], 0, $html_sql_query); PMA_displayTableNavigationOneButton('<', $GLOBALS['strPrevious'], $pos_prev, $html_sql_query); } // end move back ?> <td> </td> <td align="center"> <?php // if displaying a VIEW, $unlim_num_rows could be zero because // of $cfg['MaxExactCountViews']; in this case, avoid passing // the 5th parameter to checkFormElementInRange() // (this means we can't validate the upper limit ?> <form action="sql.php" method="post" onsubmit="return (checkFormElementInRange(this, 'session_max_rows', '<?php echo str_replace('\'', '\\\'', $GLOBALS['strInvalidRowNumber']); ?> ', 1) && checkFormElementInRange(this, 'pos', '<?php echo str_replace('\'', '\\\'', $GLOBALS['strInvalidRowNumber']); ?> ', 0<?php echo $unlim_num_rows > 0 ? ',' . $unlim_num_rows - 1 : ''; ?> ))"> <?php echo PMA_generate_common_hidden_inputs($db, $table); ?> <input type="hidden" name="sql_query" value="<?php echo $html_sql_query; ?> " /> <input type="hidden" name="goto" value="<?php echo $goto; ?> " /> <input type="submit" name="navig" value="<?php echo $GLOBALS['strShow']; ?> :" /> <input type="text" name="session_max_rows" size="3" value="<?php echo $_SESSION['tmp_user_values']['max_rows'] != 'all' ? $_SESSION['tmp_user_values']['max_rows'] : $GLOBALS['cfg']['MaxRows']; ?> " class="textfield" onfocus="this.select()" /> <?php echo $GLOBALS['strRowsFrom'] . "\n"; ?> <input type="text" name="pos" size="6" value="<?php echo $pos_next >= $unlim_num_rows ? 0 : $pos_next; ?> " class="textfield" onfocus="this.select()" /> <br /> <?php // Display mode (horizontal/vertical and repeat headers) $choices = array('horizontal' => $GLOBALS['strRowsModeHorizontal'], 'horizontalflipped' => $GLOBALS['strRowsModeFlippedHorizontal'], 'vertical' => $GLOBALS['strRowsModeVertical']); $param1 = PMA_generate_html_dropdown('disp_direction', $choices, $_SESSION['tmp_user_values']['disp_direction'], $id_for_direction_dropdown); unset($choices); $param2 = ' <input type="text" size="3" name="repeat_cells" value="' . $_SESSION['tmp_user_values']['repeat_cells'] . '" class="textfield" />' . "\n" . ' '; echo ' ' . sprintf($GLOBALS['strRowsModeOptions'], "\n" . $param1, "\n" . $param2) . "\n"; ?> </form> </td> <td> </td> <?php // Move to the next page or to the last one if ($_SESSION['tmp_user_values']['pos'] + $_SESSION['tmp_user_values']['max_rows'] < $unlim_num_rows && $num_rows >= $_SESSION['tmp_user_values']['max_rows'] && $_SESSION['tmp_user_values']['max_rows'] != 'all') { // display the Next button PMA_displayTableNavigationOneButton('>', $GLOBALS['strNext'], $pos_next, $html_sql_query); // prepare some options for the End button if ($is_innodb && $unlim_num_rows > $GLOBALS['cfg']['MaxExactCount']) { $input_for_real_end = '<input type="hidden" name="find_real_end" value="1" />'; // no backquote around this message $onclick = ' onclick="return confirmAction(\'' . PMA_jsFormat($GLOBALS['strLongOperation'], false) . '\')"'; } else { $input_for_real_end = $onclick = ''; } // display the End button PMA_displayTableNavigationOneButton('>>', $GLOBALS['strEnd'], @((ceil($unlim_num_rows / $_SESSION['tmp_user_values']['max_rows']) - 1) * $_SESSION['tmp_user_values']['max_rows']), $html_sql_query, 'onsubmit="return ' . ($_SESSION['tmp_user_values']['pos'] + $_SESSION['tmp_user_values']['max_rows'] < $unlim_num_rows && $num_rows >= $_SESSION['tmp_user_values']['max_rows'] ? 'true' : 'false') . '"', $input_for_real_end, $onclick); } // end move toward //page redirection // (unless we are showing all records) if ('all' != $_SESSION['tmp_user_values']['max_rows']) { //if1 $pageNow = @floor($_SESSION['tmp_user_values']['pos'] / $_SESSION['tmp_user_values']['max_rows']) + 1; $nbTotalPage = @ceil($unlim_num_rows / $_SESSION['tmp_user_values']['max_rows']); if ($nbTotalPage > 1) { //if2 ?> <td> </td> <td> <?php //<form> for keep the form alignment of button < and << ?> <form action="none"> <?php $_url_params = array('db' => $db, 'table' => $table, 'sql_query' => $sql_query, 'goto' => $goto); echo PMA_pageselector('sql.php' . PMA_generate_common_url($_url_params) . PMA_get_arg_separator('js'), $_SESSION['tmp_user_values']['max_rows'], $pageNow, $nbTotalPage, 200, 5, 5, 20, 10, $GLOBALS['strPageNumber']); ?> </form> </td> <?php } //_if2 } //_if1 // Display the "Show all" button if allowed if ($GLOBALS['cfg']['ShowAll'] && $num_rows < $unlim_num_rows) { echo "\n"; ?> <td> </td> <td> <form action="sql.php" method="post"> <?php echo PMA_generate_common_hidden_inputs($db, $table); ?> <input type="hidden" name="sql_query" value="<?php echo $html_sql_query; ?> " /> <input type="hidden" name="pos" value="0" /> <input type="hidden" name="session_max_rows" value="all" /> <input type="hidden" name="goto" value="<?php echo $goto; ?> " /> <input type="submit" name="navig" value="<?php echo $GLOBALS['strShowAll']; ?> " /> </form> </td> <?php } // end show all echo "\n"; ?> </tr> </table> <?php }
/** * Displays a navigation bar to browse among the results of a SQL query * * @param integer $pos_next the offset for the "next" page * @param integer $pos_prev the offset for the "previous" page * @param string $sql_query the URL-encoded query * @param string $id_for_direction_dropdown the id for the direction dropdown * * @return nothing * * @global string $db the database name * @global string $table the table name * @global string $goto the URL to go back in case of errors * @global integer $num_rows the total number of rows returned by the * SQL query * @global integer $unlim_num_rows the total number of rows returned by the * SQL any programmatically appended "LIMIT" clause * @global boolean $is_innodb whether its InnoDB or not * @global array $showtable table definitions * * @access private * * @see PMA_displayTable() */ function PMA_displayTableNavigation($pos_next, $pos_prev, $sql_query, $id_for_direction_dropdown) { global $db, $table, $goto; global $num_rows, $unlim_num_rows; global $is_innodb; global $showtable; // here, using htmlentities() would cause problems if the query // contains accented characters $html_sql_query = htmlspecialchars($sql_query); /** * @todo move this to a central place * @todo for other future table types */ $is_innodb = isset($showtable['Type']) && $showtable['Type'] == 'InnoDB'; ?> <!-- Navigation bar --> <table border="0" cellpadding="0" cellspacing="0" class="navigation"> <tr> <td class="navigation_separator"></td> <?php // Move to the beginning or to the previous page if ($_SESSION['tmp_user_values']['pos'] && $_SESSION['tmp_user_values']['max_rows'] != 'all') { PMA_displayTableNavigationOneButton('<<', _pgettext('First page', 'Begin'), 0, $html_sql_query); PMA_displayTableNavigationOneButton('<', _pgettext('Previous page', 'Previous'), $pos_prev, $html_sql_query); } // end move back $nbTotalPage = 1; //page redirection // (unless we are showing all records) if ('all' != $_SESSION['tmp_user_values']['max_rows']) { //if1 $pageNow = @floor($_SESSION['tmp_user_values']['pos'] / $_SESSION['tmp_user_values']['max_rows']) + 1; $nbTotalPage = @ceil($unlim_num_rows / $_SESSION['tmp_user_values']['max_rows']); if ($nbTotalPage > 1) { //if2 ?> <td> <?php $_url_params = array('db' => $db, 'table' => $table, 'sql_query' => $sql_query, 'goto' => $goto); //<form> to keep the form alignment of button < and << // and also to know what to execute when the selector changes echo '<form action="sql.php' . PMA_generate_common_url($_url_params) . '" method="post">'; echo PMA_pageselector($_SESSION['tmp_user_values']['max_rows'], $pageNow, $nbTotalPage, 200, 5, 5, 20, 10); ?> </form> </td> <?php } //_if2 } //_if1 // Display the "Show all" button if allowed if ($num_rows < $unlim_num_rows && ($GLOBALS['cfg']['ShowAll'] || $GLOBALS['cfg']['MaxRows'] * 5 >= $unlim_num_rows)) { echo "\n"; ?> <td> <form action="sql.php" method="post"> <?php echo PMA_generate_common_hidden_inputs($db, $table); ?> <input type="hidden" name="sql_query" value="<?php echo $html_sql_query; ?> " /> <input type="hidden" name="pos" value="0" /> <input type="hidden" name="session_max_rows" value="all" /> <input type="hidden" name="goto" value="<?php echo $goto; ?> " /> <input type="submit" name="navig" value="<?php echo __('Show all'); ?> " /> </form> </td> <?php } // end show all // Move to the next page or to the last one if ($_SESSION['tmp_user_values']['pos'] + $_SESSION['tmp_user_values']['max_rows'] < $unlim_num_rows && $num_rows >= $_SESSION['tmp_user_values']['max_rows'] && $_SESSION['tmp_user_values']['max_rows'] != 'all') { // display the Next button PMA_displayTableNavigationOneButton('>', _pgettext('Next page', 'Next'), $pos_next, $html_sql_query); // prepare some options for the End button if ($is_innodb && $unlim_num_rows > $GLOBALS['cfg']['MaxExactCount']) { $input_for_real_end = '<input id="real_end_input" type="hidden" name="find_real_end" value="1" />'; // no backquote around this message $onclick = ''; } else { $input_for_real_end = $onclick = ''; } // display the End button PMA_displayTableNavigationOneButton('>>', _pgettext('Last page', 'End'), @((ceil($unlim_num_rows / $_SESSION['tmp_user_values']['max_rows']) - 1) * $_SESSION['tmp_user_values']['max_rows']), $html_sql_query, 'onsubmit="return ' . ($_SESSION['tmp_user_values']['pos'] + $_SESSION['tmp_user_values']['max_rows'] < $unlim_num_rows && $num_rows >= $_SESSION['tmp_user_values']['max_rows'] ? 'true' : 'false') . '"', $input_for_real_end, $onclick); } // end move toward // show separator if pagination happen if ($nbTotalPage > 1) { echo '<td><div class="navigation_separator">|</div></td>'; } ?> <td> <div class="save_edited hide"> <input type="submit" value="<?php echo __('Save edited data'); ?> " /> <div class="navigation_separator">|</div> </div> </td> <td> <div class="restore_column hide"> <input type="submit" value="<?php echo __('Restore column order'); ?> " /> <div class="navigation_separator">|</div> </div> </td> <?php // if displaying a VIEW, $unlim_num_rows could be zero because // of $cfg['MaxExactCountViews']; in this case, avoid passing // the 5th parameter to checkFormElementInRange() // (this means we can't validate the upper limit ?> <td class="navigation_goto"> <form action="sql.php" method="post" onsubmit="return (checkFormElementInRange(this, 'session_max_rows', '<?php echo str_replace('\'', '\\\'', __('%d is not valid row number.')); ?> ', 1) && checkFormElementInRange(this, 'pos', '<?php echo str_replace('\'', '\\\'', __('%d is not valid row number.')); ?> ', 0<?php echo $unlim_num_rows > 0 ? ',' . $unlim_num_rows - 1 : ''; ?> ))"> <?php echo PMA_generate_common_hidden_inputs($db, $table); ?> <input type="hidden" name="sql_query" value="<?php echo $html_sql_query; ?> " /> <input type="hidden" name="goto" value="<?php echo $goto; ?> " /> <input type="submit" name="navig" <?php echo $GLOBALS['cfg']['AjaxEnable'] ? ' class="ajax"' : ''; ?> value="<?php echo __('Show'); ?> :" /> <?php echo __('Start row') . ': ' . "\n"; ?> <input type="text" name="pos" size="3" value="<?php echo $pos_next >= $unlim_num_rows ? 0 : $pos_next; ?> " class="textfield" onfocus="this.select()" /> <?php echo __('Number of rows') . ': ' . "\n"; ?> <input type="text" name="session_max_rows" size="3" value="<?php echo $_SESSION['tmp_user_values']['max_rows'] != 'all' ? $_SESSION['tmp_user_values']['max_rows'] : $GLOBALS['cfg']['MaxRows']; ?> " class="textfield" onfocus="this.select()" /> <?php if ($GLOBALS['cfg']['ShowDisplayDirection']) { // Display mode (horizontal/vertical and repeat headers) echo __('Mode') . ': ' . "\n"; $choices = array('horizontal' => __('horizontal'), 'horizontalflipped' => __('horizontal (rotated headers)'), 'vertical' => __('vertical')); echo PMA_generate_html_dropdown('disp_direction', $choices, $_SESSION['tmp_user_values']['disp_direction'], $id_for_direction_dropdown); unset($choices); } printf(__('Headers every %s rows'), '<input type="text" size="3" name="repeat_cells" value="' . $_SESSION['tmp_user_values']['repeat_cells'] . '" class="textfield" />'); echo "\n"; ?> </form> </td> <td class="navigation_separator"></td> </tr> </table> <?php }