From: Guillaume (ioguix) de Rorthais Date: Sun, 12 Oct 2008 03:39:20 +0000 (-0400) Subject: Cleans a little bit the code and add the total number of rows in paginated mode X-Git-Tag: r1 X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=7e604c228828059ba0f5a1e3be2cc1933b6e1305;p=phppgadmin.git Cleans a little bit the code and add the total number of rows in paginated mode * remove bad named $str and $str2 vars * use booleans $has_object and $has_subject instead of reapeting isset() many times * add some code comments * code cleaning around printTitle in doBrowse * add total number of rows in the relation (see #782258 feature request) --- diff --git a/classes/database/Postgres.php b/classes/database/Postgres.php index e421be6f..3b1a1632 100755 --- a/classes/database/Postgres.php +++ b/classes/database/Postgres.php @@ -4324,6 +4324,7 @@ class Postgres extends ADODB_base { * @param $page The page of the relation to retrieve * @param $page_size The number of rows per page * @param &$max_pages (return-by-ref) The max number of pages in the relation + * @param &$nbrows (return-by-ref) The number of row in the relation * @return A recordset on success * @return -1 transaction error * @return -2 counting error @@ -4331,7 +4332,7 @@ class Postgres extends ADODB_base { * @return -4 unknown type * @return -5 failed setting transaction read only */ - function browseQuery($type, $table, $query, $sortkey, $sortdir, $page, $page_size, &$max_pages) { + function browseQuery($type, $table, $query, $sortkey, $sortdir, $page, $page_size, &$max_pages, &$nbrows) { // Check that we're not going to divide by zero if (!is_numeric($page_size) || $page_size != (int)$page_size || $page_size <= 0) return -3; @@ -4373,14 +4374,14 @@ class Postgres extends ADODB_base { // Count the number of rows - $total = $this->browseQueryCount($query, $count); - if ($total < 0) { + $nbrows = $this->browseQueryCount($query, $count); + if ($nbrows < 0) { $this->rollbackTransaction(); return -2; } // Calculate max pages - $max_pages = ceil($total / $page_size); + $max_pages = ceil($nbrows / $page_size); // Check that page is less than or equal to max pages if (!is_numeric($page) || $page != (int)$page || $page > $max_pages || $page < 1) { diff --git a/display.php b/display.php index 31887ffb..d045acbd 100644 --- a/display.php +++ b/display.php @@ -60,10 +60,10 @@ $attrs = $data->getTableAttributes($_REQUEST['table']); $rs = $data->browseRow($_REQUEST['table'], $key); - + echo "
\n"; $elements = 0; - $error = true; + $error = true; if ($rs->recordCount() == 1 && $attrs->recordCount() > 0) { echo "\n"; @@ -88,16 +88,16 @@ } $attrs->fields['attnotnull'] = $data->phpBool($attrs->fields['attnotnull']); $id = (($i % 2) == 0 ? '1' : '2'); - + // Initialise variables if (!isset($_REQUEST['format'][$attrs->fields['attname']])) $_REQUEST['format'][$attrs->fields['attname']] = 'VALUE'; - + echo "\n"; echo ""; echo ""; $elements++; echo "
", $misc->printVal($attrs->fields['attname']), "\n"; echo $misc->printVal($data->formatType($attrs->fields['type'], $attrs->fields['atttypmod'])); - echo "fields['attname']), "]\" value=\"", + echo "fields['attname']), "]\" value=\"", htmlspecialchars($attrs->fields['type']), "\" />\n"; @@ -122,11 +122,11 @@ echo ""; // If the column allows nulls, then we put a JavaScript action on the data field to unset the - // NULL checkbox as soon as anything is entered in the field. We use the $elements variable to + // NULL checkbox as soon as anything is entered in the field. We use the $elements variable to // keep track of which element offset we're up to. We can't refer to the null checkbox by name // as it contains '[' and ']' characters. if (!$attrs->fields['attnotnull']) { - echo $data->printField($szValueName, $rs->fields[$attrs->fields['attname']], $attrs->fields['type'], + echo $data->printField($szValueName, $rs->fields[$attrs->fields['attname']], $attrs->fields['type'], array('onChange' => 'elements[' . ($elements - 1) . '].checked = false;'),$szEvents) . $szDivPH; } else { @@ -146,7 +146,7 @@ $error = false; } elseif ($rs->recordCount() != 1) { - echo "

{$lang['strrownotunique']}

\n"; + echo "

{$lang['strrownotunique']}

\n"; } else { echo "

{$lang['strinvalidparam']}

\n"; @@ -185,8 +185,8 @@ else { if (!isset($_POST['values'])) $_POST['values'] = array(); if (!isset($_POST['nulls'])) $_POST['nulls'] = array(); - - $status = $data->editRow($_POST['table'], $_POST['values'], $_POST['nulls'], + + $status = $data->editRow($_POST['table'], $_POST['values'], $_POST['nulls'], $_POST['format'], $_POST['types'], unserialize($_POST['key'])); if ($status == 0) doBrowse($lang['strrowupdated']); @@ -196,7 +196,7 @@ doEditRow(true, $lang['strrowupdatedbad']); } - } + } /** * Show confirmation of drop and perform actual drop @@ -210,7 +210,7 @@ $misc->printTitle($lang['strdeleterow']); echo "

{$lang['strconfdeleterow']}

\n"; - + echo "\n"; echo "\n"; echo $misc->form; @@ -241,65 +241,75 @@ doBrowse($lang['strrowdeleted']); elseif ($status == -2) doBrowse($lang['strrownotunique']); - else + else doBrowse($lang['strrowdeletedbad']); } - + } - /** + /** * Displays requested data */ function doBrowse($msg = '') { global $data, $conf, $misc, $lang; - + $save_history = false; // If current page is not set, default to first page if (!isset($_REQUEST['page'])) $_REQUEST['page'] = 1; if (!isset($_REQUEST['nohistory'])) $save_history = true; - + + /* check if we are working with a relation + * and set the type of browsing we are doing accordingly*/ + $has_object = false; + $has_subject = false; if (isset($_REQUEST['subject'])) { $subject = $_REQUEST['subject']; - if (isset($_REQUEST[$subject])) $object = $_REQUEST[$subject]; + $has_subject = true; + if (isset($_REQUEST[$subject])) { + $object = $_REQUEST[$subject]; + $has_object = true; + if (isset($_REQUEST['query'])) + $type = 'SELECT'; /* custom request on the table */ + else + $type = 'TABLE'; /* we are browsing the table */ + } } else { $subject = ''; + $type = 'QUERY'; /* custom query */ } - - $misc->printTrail(isset($subject) ? $subject : 'database'); - - if (isset($object)) { - if (isset($_REQUEST['query'])) { + + $misc->printTrail($has_subject ? $subject : 'database'); + switch($type) { + case 'SELECT': $misc->printTitle($lang['strselect']); - $type = 'SELECT'; - } else { + break; + case 'TABLE': $misc->printTitle($lang['strbrowse']); - $type = 'TABLE'; - } - } else { - $misc->printTitle($lang['strqueryresults']); - $type = 'QUERY'; + break; + case 'QUERY': + $misc->printTitle($lang['strqueryresults']); } $misc->printMsg($msg); // If 'sortkey' is not set, default to '' if (!isset($_REQUEST['sortkey'])) $_REQUEST['sortkey'] = ''; - + // If 'sortdir' is not set, default to '' if (!isset($_REQUEST['sortdir'])) $_REQUEST['sortdir'] = ''; - - // If 'strings' is not set, default to collapsed + + // If 'strings' is not set, default to collapsed if (!isset($_REQUEST['strings'])) $_REQUEST['strings'] = 'collapsed'; - - // Fetch unique row identifier, if this is a table browse request. - if (isset($object)) + + // Fetch unique row identifier, if this is not a custom request. + if ($has_object) $key = $data->getRowIdentifier($object); else $key = array(); - + // Set the schema search path if ($data->hasSchemas() && isset($_REQUEST['search_path'])) { if ($data->setSearchPath(array_map('trim',explode(',',$_REQUEST['search_path']))) != 0) { @@ -307,39 +317,40 @@ } } - // Retrieve page from query. $max_pages is returned by reference. - $rs = $data->browseQuery($type, - isset($object) ? $object : null, - isset($_REQUEST['query']) ? $_REQUEST['query'] : null, + // Retrieve page from query. $max_pages & $nbrows are returned by reference. + $rs = $data->browseQuery($type, + $has_object ? $object : null, + isset($_REQUEST['query']) ? $_REQUEST['query'] : null, $_REQUEST['sortkey'], $_REQUEST['sortdir'], $_REQUEST['page'], - $conf['max_rows'], $max_pages); - + $conf['max_rows'], $max_pages, $nbrows); + // Build strings for GETs - $str = $misc->href; // . "&page=" . urlencode($_REQUEST['page']); - if (isset($object)) $str .= "&" . urlencode($subject) . '=' . urlencode($object); - if (isset($subject)) $str .= "&subject=" . urlencode($subject); - if (isset($_REQUEST['query'])) $str .= "&query=" . urlencode($_REQUEST['query']); - if (isset($_REQUEST['count'])) $str .= "&count=" . urlencode($_REQUEST['count']); - if (isset($_REQUEST['return_url'])) $str .= "&return_url=" . urlencode($_REQUEST['return_url']); - if (isset($_REQUEST['return_desc'])) $str .= "&return_desc=" . urlencode($_REQUEST['return_desc']); - if (isset($_REQUEST['search_path'])) $str .= "&search_path=" . urlencode($_REQUEST['search_path']); - if (isset($_REQUEST['table'])) $str .= "&table=" . urlencode($_REQUEST['table']); - + $get_str = $misc->href; // . "&page=" . urlencode($_REQUEST['page']); + if ($has_object) $get_str .= "&" . urlencode($subject) . '=' . urlencode($object); + if ($has_subject) $get_str .= "&subject=" . urlencode($subject); + if (isset($_REQUEST['query'])) $get_str .= "&query=" . urlencode($_REQUEST['query']); + if (isset($_REQUEST['count'])) $get_str .= "&count=" . urlencode($_REQUEST['count']); + if (isset($_REQUEST['return_url'])) $get_str .= "&return_url=" . urlencode($_REQUEST['return_url']); + if (isset($_REQUEST['return_desc'])) $get_str .= "&return_desc=" . urlencode($_REQUEST['return_desc']); + if (isset($_REQUEST['search_path'])) $get_str .= "&search_path=" . urlencode($_REQUEST['search_path']); + if (isset($_REQUEST['table'])) $get_str .= "&table=" . urlencode($_REQUEST['table']); + // This string just contains sort info - $str2 = "sortkey=" . urlencode($_REQUEST['sortkey']) . + $sort_str = "sortkey=" . urlencode($_REQUEST['sortkey']) . "&sortdir=" . urlencode($_REQUEST['sortdir']); - - if ($save_history && is_object($rs) && ($type == 'QUERY')) //{ + + if ($save_history && is_object($rs) && ($type == 'QUERY')) $misc->saveScriptHistory($_REQUEST['query']); if (is_object($rs) && $rs->recordCount() > 0) { // Show page navigation - $misc->printPages($_REQUEST['page'], $max_pages, "display.php?page=%s&{$str}&{$str2}&nohistory=t&strings=" . urlencode($_REQUEST['strings'])); + $misc->printPages($_REQUEST['page'], $max_pages, "display.php?page=%s&{$get_str}&{$sort_str}&nohistory=t&strings=" . urlencode($_REQUEST['strings'])); echo "\n"; - - // Check that the key is actually in the result set. This can occur for select - // operations where the key fields aren't part of the select. XXX: We should - // be able to support this, somehow. + + /* Check that the key is actually in the result set. This can occur for select + * operations where the key fields aren't part of the select. + * XXX: We should be able to support this, somehow. + */ foreach ($key as $v) { // If a key column is not found in the record set, then we // can't use the key. @@ -348,42 +359,48 @@ break; } } + + /** Display header **/ // Display edit and delete actions if we have a key if (sizeof($key) > 0) echo "\n"; - $j = 0; + $j = 0; foreach ($rs->fields as $k => $v) { - if (isset($object) && $k == $data->id && !$conf['show_oids']) { + /* hide oids according to the user conf */ + if ($has_object && $k == $data->id && !$conf['show_oids']) { $j++; continue; } $finfo = $rs->fetchField($j); - // Display column headers with sorting options, unless we're PostgreSQL - // 7.0 and it's a non-TABLE mode + /* Display column headers with sorting options, unless we're PostgreSQL + * 7.0 and it's a non-TABLE mode*/ if (!$data->hasFullSubqueries() && $type != 'TABLE') { echo "\n"; } else { - echo "\n"; } $j++; } - + echo "\n"; - - $i = 0; + + /** Display Datas **/ + $i = 0; reset($rs->fields); while (!$rs->EOF) { $id = (($i % 2) == 0 ? '1' : '2'); echo "\n"; // Display edit and delete links if we have a key if (sizeof($key) > 0) { + /* Build unique key parameter for URL + * and check if the key has null.*/ $key_str = ''; $has_nulls = false; foreach ($key as $v) { @@ -395,14 +412,15 @@ $key_str .= urlencode("key[{$v}]") . '=' . urlencode($rs->fields[$v]); } if ($has_nulls) { + /* With null(s) we cannot show the actions links. */ echo "\n"; } else { - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; } } $j = 0; @@ -419,14 +437,14 @@ $rs->moveNext(); $i++; } - echo "
{$lang['stractions']}", $misc->printVal($finfo->name), "", + echo "&strings=", urlencode($_REQUEST['strings']), + "&page=" . urlencode($_REQUEST['page']), "\">", $misc->printVal($finfo->name), "
 {$lang['stredit']}{$lang['strdelete']}{$lang['stredit']}{$lang['strdelete']}
\n"; - echo "

", $rs->recordCount(), " {$lang['strrows']}

\n"; + echo "
\n"; + echo "

", $rs->recordCount(), " / $nbrows {$lang['strrows']}

\n"; // Show page navigation - $misc->printPages($_REQUEST['page'], $max_pages, "display.php?page=%s&{$str}&{$str2}&strings=" . urlencode($_REQUEST['strings'])); + $misc->printPages($_REQUEST['page'], $max_pages, "display.php?page=%s&{$get_str}&{$sort_str}&strings=" . urlencode($_REQUEST['strings'])); } else echo "

{$lang['strnodata']}

\n"; - // Navigation links + // Navigation links echo "\n"; } - + // If a table is specified, then set the title differently if (isset($_REQUEST['subject']) && isset($_REQUEST[$_REQUEST['subject']])) $misc->printHeader($lang['strtables']); - else + else $misc->printHeader($lang['strqueryresults']); $misc->printBody(); @@ -496,7 +514,7 @@ break; case 'confdelrow': doDelRow(true); - break; + break; default: doBrowse(); break;