Do not redirect on single search results

The use of header() to redirect after previous output was a design flaw.
Our only luck here was PHP's "output_buffering" config variable
defaulting to 4096, which kind of hid the bug for a long time.

Fixes FS#24580.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
This commit is contained in:
Lukas Fleischer 2011-06-22 15:26:21 +02:00
parent 5853097561
commit 0e9f8c0ff5

View file

@ -533,42 +533,35 @@ function pkg_search_page($SID="") {
$last = $_GET['PP'] + $_GET['O']; $last = $_GET['PP'] + $_GET['O'];
} }
# calculation of pagination links
$per_page = ($_GET['PP'] > 0) ? $_GET['PP'] : 50;
$current = ceil($first / $per_page);
$pages = ceil($total / $per_page);
$templ_pages = array();
if ($total > 1 || $total == 0) { if ($current > 1) {
# calculation of pagination links $templ_pages[__('First')] = 0;
$per_page = ($_GET['PP'] > 0) ? $_GET['PP'] : 50; $templ_pages[__('Previous')] = ($current - 2) * $per_page;
$current = ceil($first / $per_page);
$pages = ceil($total / $per_page);
$templ_pages = array();
if ($current > 1) {
$templ_pages[__('First')] = 0;
$templ_pages[__('Previous')] = ($current - 2) * $per_page;
}
if ($current - 5 > 1)
$templ_pages["..."] = false;
for ($i = max($current - 5, 1); $i <= min($pages, $current + 5); $i++) {
$templ_pages[$i] = ($i - 1) * $per_page;
}
if ($current + 5 < $pages)
$templ_pages["... "] = false;
if ($current < $pages) {
$templ_pages[__('Next')] = $current * $per_page;
$templ_pages[__('Last')] = ($pages - 1) * $per_page;
}
include('pkg_search_form.php');
include('pkg_search_results.php');
} }
else {
$pkgdetails = mysql_fetch_assoc($result); if ($current - 5 > 1)
header("Location: packages.php?ID={$pkgdetails['ID']}"); $templ_pages["..."] = false;
for ($i = max($current - 5, 1); $i <= min($pages, $current + 5); $i++) {
$templ_pages[$i] = ($i - 1) * $per_page;
} }
if ($current + 5 < $pages)
$templ_pages["... "] = false;
if ($current < $pages) {
$templ_pages[__('Next')] = $current * $per_page;
$templ_pages[__('Last')] = ($pages - 1) * $per_page;
}
include('pkg_search_form.php');
include('pkg_search_results.php');
return; return;
} }