Created
December 16, 2015 21:04
-
-
Save daviddelikat/d68321079cf4ef9caa72 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/lib/WebGUI/AssetLineage.pm b/lib/WebGUI/AssetLineage.pm | |
index edbc434..857d92e 100644 | |
--- a/lib/WebGUI/AssetLineage.pm | |
+++ b/lib/WebGUI/AssetLineage.pm | |
@@ -505,16 +505,28 @@ it returns an iterator. Calling the iterator will return instantiated assets, | |
or undef when there are no more assets available. The iterator is just a sub | |
ref, call like $asset = $iterator->() | |
+=head3 special parameter | |
+ | |
+=head4 pager | |
+ | |
+pass in a WebGUI::Paginator object to generate paginated output | |
+ | |
=cut | |
sub getLineageIterator { | |
my $self = shift; | |
my $relatives = shift; | |
my $rules = shift; | |
+ my $pager = delete $rules->{pager}; | |
my $sql = $self->getLineageSql($relatives, $rules); | |
- my $sth = $self->session->db->read($sql); | |
+ my $sth; | |
+ if( $pager ) { | |
+ $sth = $pager->getSthForQuery($sql); | |
+ } else { | |
+ $sth = $self->session->db->read($sql); | |
+ } | |
my $sub = sub { | |
my $assetInfo = $sth->hashRef; | |
return | |
@@ -750,7 +762,7 @@ sub getLineageSql { | |
} | |
return $sql; | |
- | |
+ | |
} | |
diff --git a/lib/WebGUI/Paginator.pm b/lib/WebGUI/Paginator.pm | |
index fd0d9d9..29b1532 100644 | |
--- a/lib/WebGUI/Paginator.pm | |
+++ b/lib/WebGUI/Paginator.pm | |
@@ -416,6 +416,7 @@ Defaults to the page you're currently viewing. This is mostly here as an overrid | |
sub getPageData { | |
my $self = shift; | |
+ return [] if $self->{_noData}; | |
my $pageNumber = shift || $self->getPageNumber; | |
my $allRows = $self->{_rowRef}; | |
@@ -737,19 +738,69 @@ A value to match the dynamicPageNumberKey. | |
sub setDataByQuery { | |
my $self = shift; | |
- my ($sql, $dbh, $unconditional, $placeholders, $dynamicPageNumberKey, $dynamicPageNumberValue) = @_; | |
- | |
+ my ($sql, $dbh, $unconditional, $placeholders, $dynamicPageNumberKey, $dynamicPageNumberValue) = @_; | |
+ | |
#Set paginator info | |
my $pageNumber = $self->getPageNumber; | |
my $rowsPerPage = $self->{_rpp}; | |
- $dbh ||= $self->session->dbSlave; | |
- | |
+ $dbh ||= $self->session->dbSlave; | |
+ | |
#Handle dynamicPageNumber requests or custom limits, or non-mysql the old way as it winds up being most efficient | |
if ($dbh->getDriver ne 'mysql' || (defined $dynamicPageNumberKey && $pageNumber == 1) || $sql =~ m/limit/i) { | |
return $self->_setDataByQuery(@_); | |
} | |
+ my $sth = $self->getSthForQuery($sql,$dbh,$unconditional,$placeholders); | |
+ | |
+ my @row = (); | |
+ while (my $data = $sth->hashRef) { | |
+ push(@row,$data); | |
+ } | |
+ | |
+ $self->{_rowRef} = \@row; | |
+ $self->{_setByQuery} = 1; | |
+ $self->{_setByArrayRef} = 0; | |
+ delete $self->{_noData}; | |
+ return ""; | |
+} | |
+ | |
+#------------------------------------------------------------------- | |
+ | |
+=head2 getSthForQuery ( query [, dbh, unconditional, placeholders ] ) | |
+ | |
+returns a statement handle for the given query for the requested page... | |
+ | |
+B<NOTE:> This retrieves only the current page's data for efficiency. | |
+ | |
+=head3 query | |
+ | |
+An SQL query that will retrieve a data set. | |
+ | |
+=head3 dbh | |
+ | |
+A WebGUI::SQL database handler. Defaults to the WebGUI site handler. | |
+ | |
+=head3 unconditional | |
+ | |
+A boolean indicating that the query should be read unconditionally. Defaults to "0". If set to "1" and the unconditional read results in an error, the error will be returned by this method. | |
+ | |
+=head3 placeholders | |
+ | |
+An array reference containing a list of values to be used in the placeholders defined in the SQL statement. | |
+ | |
+=cut | |
+ | |
+sub getSthForQuery { | |
+ my $self = shift; | |
+ my ($sql, $dbh, $unconditional, $placeholders) = @_; | |
+ | |
+ #Set paginator info | |
+ my $pageNumber = $self->getPageNumber; | |
+ my $rowsPerPage = $self->{_rpp}; | |
+ | |
+ $dbh ||= $self->session->dbSlave; | |
+ | |
#Calculate where to start | |
my $start = ( ($pageNumber - 1) * $rowsPerPage ); | |
@@ -763,7 +814,7 @@ sub setDataByQuery { | |
my $sth; | |
if ($unconditional) { | |
$sth = $dbh->unconditionalRead($sql,$placeholders); | |
- return $sth->errorMessage if (defined $sth->errorCode); | |
+ die $sth->errorMessage if (defined $sth->errorCode); | |
} else { | |
$sth = $dbh->read($sql,$placeholders); | |
} | |
@@ -772,18 +823,12 @@ sub setDataByQuery { | |
($self->{_totalRows}) = $dbh->quickArray("select found_rows()"); | |
$self->{_columnNames} = [ $sth->getColumnNames ]; | |
- my @row = (); | |
- while (my $data = $sth->hashRef) { | |
- push(@row,$data); | |
- } | |
- | |
- $self->{_rowRef} = \@row; | |
- $self->{_setByQuery} = 1; | |
+ $self->{_setByQuery} = 0; | |
$self->{_setByArrayRef} = 0; | |
- return ""; | |
+ $self->{_noData} = 1; | |
+ return $sth; | |
} | |
-#------------------------------------------------------------------- | |
=head2 setAlphabeticalKey ( string, abInitialOnly ) | |
diff --git a/local/lib/WebGUI/Asset/Wobject/Folder2.pm b/local/lib/WebGUI/Asset/Wobject/Folder2.pm | |
index d593d02..c6dbe4d 100644 | |
--- a/local/lib/WebGUI/Asset/Wobject/Folder2.pm | |
+++ b/local/lib/WebGUI/Asset/Wobject/Folder2.pm | |
@@ -120,6 +120,7 @@ sub _getAppropriateChildren { | |
my $assetIterator = $self->getLineageIterator(['children'], { | |
# returnObjects => 1, | |
invertTree => $invertTree, | |
+ pager => $self->getPager, | |
}); | |
my @children; | |
@@ -245,10 +246,19 @@ sub view { | |
$var->{viewUrl} = WebGUI::HTML::format($self->getUrl, 'text'); | |
$var->{children} = $self->_getLoopL1; | |
$var->{viewMoreText} = $self->_getViewMoreText($self->get('numChildrenToDisplayL1')); | |
+ my $pager = $self->getPager; | |
+ $pager->appendTemplateVars($var); | |
+ $var->{simplePagerBar} = $pager->getBarSimple; | |
+ $var->{traditionalPagerBar} = $pager->getBarTraditional; | |
+ $var->{advancedPagerBar} = $pager->getBarAdvanced; | |
return $self->processTemplate($var, undef, $self->{_viewTemplate}); | |
} | |
+sub getPager { | |
+ $_[0]->{_pager} ||= WebGUI::Paginator->new($_[0]->session,$_[0]->getUrl,900); | |
+} | |
+ | |
sub getRssFeedItems { | |
my $self = shift; | |
my $site = $self->session->url->getSiteURL; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment