diff --git a/lib/WebGUI/Paginator.pm b/lib/WebGUI/Paginator.pm index a9f14a653..a7e8d28ee 100644 --- a/lib/WebGUI/Paginator.pm +++ b/lib/WebGUI/Paginator.pm @@ -16,6 +16,7 @@ package WebGUI::Paginator; use strict; use WebGUI::International; +use WebGUI::Session; use WebGUI::URL; =head1 NAME @@ -26,21 +27,23 @@ use WebGUI::URL; use WebGUI::Paginator; $p = WebGUI::Paginator->new("/index.pl/page_name?this=that",\@row); - $p->getBar(2); - $p->getBarAdvanced(2); - $p->getBarSimple(2); - $p->getBarTraditional(2); - $p->getFirstPageLink(2); - $p->getLastPageLink(2); - $p->getNextPageLink(2); - $p->getNumberOfPages; - $p->getPage(2); - $p->getPageLinks(2); - $p->getPreviousPageLink(2); + $html = $p->getBar; + $html = $p->getBarAdvanced; + $html = $p->getBarSimple; + $html = $p->getBarTraditional; + $html = $p->getFirstPageLink; + $html = $p->getLastPageLink; + $html = $p->getNextPageLink; + $integer = $p->getNumberOfPages; + $html = $p->getPage; + $arrayRef = $p->getPageData; + $integer = $p->getPageNumber; + $html = $p->getPageLinks; + $html = $p->getPreviousPageLink; =head1 DESCRIPTION - Package that paginates rows of data for display on the web. + Package that paginates rows of arbitrary data for display on the web. =head1 METHODS @@ -49,24 +52,6 @@ use WebGUI::URL; =cut -#------------------------------------------------------------------- -sub _generatePages { - my (@page, $row, @rows, $rowRef, $pn, $i, $itemsPerPage); - $rowRef = $_[0]; - @rows = @{$rowRef}; - $itemsPerPage = $_[1]; - foreach $row (@rows) { - $page[$pn] .= $row; - $i++; - if ($i >= $itemsPerPage) { - $i = 0; - $pn++; - } - } - return \@page; -} - - #------------------------------------------------------------------- =head2 getBar ( [ pageNumber ] ) @@ -75,9 +60,9 @@ sub _generatePages { last links. If there's only one page, nothing is returned. =item pageNumber - - The page number you're currently looking at. If omited, page one - is assumed. + + Defaults to the page you're currently viewing. This is mostly here + as an override and probably has no real use. =cut @@ -110,8 +95,8 @@ sub getBar { =item pageNumber - The page number you're currently looking at. If omited, page one - is assumed. + Defaults to the page you're currently viewing. This is mostly here + as an override and probably has no real use. =cut @@ -145,8 +130,8 @@ sub getBarAdvanced { =item pageNumber - The page number you're currently looking at. If omited, page one - is assumed. + Defaults to the page you're currently viewing. This is mostly here + as an override and probably has no real use. =cut @@ -175,8 +160,8 @@ sub getBarSimple { =item pageNumber - The page number you're currently looking at. If omited, page one - is assumed. + Defaults to the page you're currently viewing. This is mostly here + as an override and probably has no real use. =cut @@ -205,14 +190,14 @@ sub getBarTraditional { =item pageNumber - The page number you're currently looking at. If omited, page one - is assumed. + Defaults to the page you're currently viewing. This is mostly here + as an override and probably has no real use. =cut sub getFirstPageLink { my ($text, $pn); - $pn = $_[1] || 1; + $pn = $_[1] || $_[0]->getPageNumber; $text = '|<'.WebGUI::International::get(404); if ($pn > 1) { return 'getPageNumber; $text = WebGUI::International::get(92).'»'; if ($pn < $_[0]->getNumberOfPages) { return ''.$text.''; @@ -285,7 +270,9 @@ sub getNextPageLink { =cut sub getNumberOfPages { - return $#{$_[0]->{_pageRef}}+1; + my $pageCount = int(($#{$_[0]->{_rowRef}}+1)/$_[0]->{_rpp}); + $pageCount++ unless (($#{$_[0]->{_rowRef}}+1)%$_[0]->{_rpp} == 0); + return $pageCount; } @@ -293,21 +280,64 @@ sub getNumberOfPages { =head2 getPage ( [ pageNumber ] ) - Returns the data from the page specified. + Returns the data from the page specified as a string. + + NOTE: This is really only useful if you passed in an array reference + of strings when you created this object. =item pageNumber - The page number you wish to view. If omitted, page one is assumed. + Defaults to the page you're currently viewing. This is mostly here + as an override and probably has no real use. =cut sub getPage { - my ($pn); - $pn = $_[1] || 1; - return $_[0]->{_pageRef}[$pn-1]; + return join("",@{$_[0]->getPageData($_[1])}); } +#------------------------------------------------------------------- + +=head2 getPageData ( [ pageNumber ] ) + + Returns the data from the page specified as an array reference. + +=item pageNumber + + Defaults to the page you're currently viewing. This is mostly here + as an override and probably has no real use. + +=cut + +sub getPageData { + my ($i, @pageRows, $allRows, $pageCount, $pageNumber, $rowsPerPage, $pageStartRow, $pageEndRow); + $pageNumber = $_[1] || $_[0]->getPageNumber; + $pageCount = $_[0]->getNumberOfPages; + return [] if ($pageNumber > $pageCount); + $rowsPerPage = $_[0]->{_rpp}; + $pageStartRow = ($pageNumber*$rowsPerPage)-$rowsPerPage; + $pageEndRow = $pageNumber*$rowsPerPage; + $allRows = $_[0]->{_rowRef}; + for ($i=$pageStartRow; $i<$pageEndRow; $i++) { + $pageRows[$i-$pageStartRow] = $allRows->[$i] if ($i <= $#{$_[0]->{_rowRef}}); + } + return \@pageRows; +} + +#------------------------------------------------------------------- + +=head2 getPageNumber ( ) + + Returns the current page number. If no page number can be found + then it returns 1. + +=cut + +sub getPageNumber { + return $session{form}{$_[0]->{_pn}} || 1; +} + #------------------------------------------------------------------- =head2 getPageLinks ( [ pageNumber ] ) @@ -316,14 +346,14 @@ sub getPage { =item pageNumber - The page number you're currently looking at. If omited, page one - is assumed. + Defaults to the page you're currently viewing. This is mostly here + as an override and probably has no real use. =cut sub getPageLinks { my ($i, $output, $pn); - $pn = $_[1] || 1; + $pn = $_[1] || $_[0]->getPageNumber; for ($i=0; $i<$_[0]->getNumberOfPages; $i++) { if ($i+1 == $pn) { $output .= ' '.($i+1).' '; @@ -345,14 +375,14 @@ sub getPageLinks { =item pageNumber - The page number you're currently looking at. If omitted, page one - is assumed. + Defaults to the page you're currently viewing. This is mostly here + as an override and probably has no real use. =cut sub getPreviousPageLink { my ($text, $pn); - $pn = $_[1] || 1; + $pn = $_[1] || $_[0]->getPageNumber; $text = '«'.WebGUI::International::get(91); if ($pn > 1) { return ''.$text.''; @@ -397,9 +427,7 @@ sub new { $rowRef = shift; $rowsPerPage = shift || 25; $formVar = shift || "pn"; - $pageRef = _generatePages($rowRef,$rowsPerPage); - bless {_url => $currentURL, _rpp => $rowsPerPage, _rowRef => $rowRef, - _pn => $formVar, _pageRef => $pageRef}, $class; + bless {_url => $currentURL, _rpp => $rowsPerPage, _rowRef => $rowRef, _pn => $formVar}, $class; }