mirror of
https://github.com/atlanticbiomedical/portal-legacy.git
synced 2025-07-02 01:47:28 -04:00
initial commit
This commit is contained in:
543
lib/symfony/vendor/propel/util/PropelPager.php
vendored
Executable file
543
lib/symfony/vendor/propel/util/PropelPager.php
vendored
Executable file
@ -0,0 +1,543 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id: PropelPager.php 536 2007-01-10 14:30:38Z heltem $
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information please see
|
||||
* <http://propel.phpdb.org>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* PropelPager
|
||||
*
|
||||
* Example Usage:
|
||||
*
|
||||
* require_once 'propel/util/PropelPager.php';
|
||||
* require_once 'PEACH/Propel/Poem/poemPeer.php';
|
||||
*
|
||||
* $c = new Criteria();
|
||||
* $c->addDescendingOrderByColumn(poemPeer::SID);
|
||||
*
|
||||
* // with join
|
||||
* $pager = new PropelPager($c, 'poemPeer', 'doSelectJoinPoemUsers', 1, 50);
|
||||
*
|
||||
* // without Join
|
||||
*
|
||||
* $pager = new PropelPager($c, 'poemPeer', 'doSelect', 1, 50);
|
||||
*
|
||||
* Some template:
|
||||
*
|
||||
* <p>
|
||||
* Total Pages: <?=$pager->getTotalPages()?> Total Records: <?=$pager->getTotalRecordCount()?>
|
||||
* </p>
|
||||
* <table>
|
||||
* <tr>
|
||||
* <td>
|
||||
* <?if($link = $pager->getFirstPage):?>
|
||||
* <a href="somescript?page=<?=$link?>"><?=$link?></a>|
|
||||
* <?endif?>
|
||||
* </td>
|
||||
* <td>
|
||||
* <?if($link = $pager->getPrev()):?>
|
||||
* <a href="somescript?page=<?=$link?>">Previous</a>|
|
||||
* <?endif?>
|
||||
* </td>
|
||||
* <td>
|
||||
* <?foreach($pager->getPrevLinks() as $link):?>
|
||||
* <a href="somescript?page=<?=$link?>"><?=$link?></a>|
|
||||
* <?endforeach?>
|
||||
* </td>
|
||||
* <td><?=$pager->getPage()?></td>
|
||||
* <td>
|
||||
* <?foreach($pager->getNextLinks() as $link):?>
|
||||
* | <a href="somescript?page=<?=$link?>"><?=$link?></a>
|
||||
* <?endforeach?>
|
||||
* </td>
|
||||
* <td>
|
||||
* <?if($link = $pager->getNext()):?>
|
||||
* <a href="somescript?page=<?=$link?>">Last</a>|
|
||||
* <?endif?>
|
||||
* </td>
|
||||
* <td>
|
||||
* <?if($link = $pager->getLastPage()):?>
|
||||
* <a href="somescript?page=<?=$link?>"><?=$link?></a>|
|
||||
* <?endif?>
|
||||
* </td>
|
||||
* </tr>
|
||||
* </table>
|
||||
* <table id="latestPoems">
|
||||
* <tr>
|
||||
* <th>Title</th>
|
||||
* <th>Auteur</th>
|
||||
* <th>Date</th>
|
||||
* <th>comments</th>
|
||||
* </tr>
|
||||
* <?foreach($pager->getResult() as $poem):?>
|
||||
* <tr>
|
||||
* <td><?=$poem->getTitle()?></td>
|
||||
* <td><?=$poem->getPoemUsers()->getUname()?></td>
|
||||
* <td><?=$poem->getTime()?></td>
|
||||
* <td><?=$poem->getComments()?></td>
|
||||
* </tr>
|
||||
* <?endforeach?>
|
||||
* </table>
|
||||
*
|
||||
*
|
||||
* @author Rob Halff <info@rhalff.com>
|
||||
* @version $Revision: 536 $
|
||||
* @copyright Copyright (c) 2004 Rob Halff: LGPL - See LICENCE
|
||||
* @package propel.util
|
||||
*/
|
||||
class PropelPager {
|
||||
|
||||
private $recordCount;
|
||||
private $pages;
|
||||
private $peerClass;
|
||||
private $peerSelectMethod;
|
||||
private $peerCountMethod;
|
||||
private $criteria;
|
||||
private $countCriteria;
|
||||
private $page;
|
||||
private $rs = null;
|
||||
|
||||
/** @var int Start row (offset) */
|
||||
protected $start = 0;
|
||||
|
||||
/** @var int Max rows to return (0 means all) */
|
||||
protected $max = 0;
|
||||
|
||||
/**
|
||||
* Create a new Propel Pager.
|
||||
* @param Criteria $c
|
||||
* @param string $peerClass The name of the static Peer class.
|
||||
* @param string $peerSelectMethod The name of the static method for selecting content from the Peer class.
|
||||
* @param int $page The current page (1-based).
|
||||
* @param int $rowsPerPage The number of rows that should be displayed per page.
|
||||
*/
|
||||
public function __construct($c = null, $peerClass = null, $peerSelectMethod = null, $page = 1, $rowsPerPage = 25)
|
||||
{
|
||||
if(!isset($c)) {
|
||||
$c = new Criteria();
|
||||
}
|
||||
$this->setCriteria($c);
|
||||
$this->setPeerClass($peerClass);
|
||||
$this->setPeerSelectMethod($peerSelectMethod);
|
||||
$this->guessPeerCountMethod();
|
||||
$this->setPage($page);
|
||||
$this->setRowsPerPage($rowsPerPage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the criteria for this pager.
|
||||
* @param Criteria $c
|
||||
* @return void
|
||||
*/
|
||||
public function setCriteria(Criteria $c)
|
||||
{
|
||||
$this->criteria = $c;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the Criteria object for this pager.
|
||||
* @return Criteria
|
||||
*/
|
||||
public function getCriteria()
|
||||
{
|
||||
return $this->criteria;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the Peer Classname
|
||||
*
|
||||
* @param string $class
|
||||
* @return void
|
||||
*/
|
||||
public function setPeerClass($class)
|
||||
{
|
||||
$this->peerClass = $class;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the Peer Classname.
|
||||
* @return string
|
||||
*/
|
||||
public function getPeerClass()
|
||||
{
|
||||
return $this->peerClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the Peer select method.
|
||||
* This exists for legacy support, please use setPeerSelectMethod().
|
||||
* @param string $method The name of the static method to call on the Peer class.
|
||||
* @return void
|
||||
* @see setPeerSelectMethod()
|
||||
* @deprecated
|
||||
*/
|
||||
public function setPeerMethod($method)
|
||||
{
|
||||
$this->setPeerSelectMethod($method);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the Peer select method.
|
||||
* This exists for legacy support, please use getPeerSelectMethod().
|
||||
* @return string
|
||||
* @see getPeerSelectMethod()
|
||||
* @deprecated
|
||||
*/
|
||||
public function getPeerMethod()
|
||||
{
|
||||
return $this->getPeerSelectMethod();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the Peer select method.
|
||||
*
|
||||
* @param string $method The name of the static method to call on the Peer class.
|
||||
* @return void
|
||||
*/
|
||||
public function setPeerSelectMethod($method)
|
||||
{
|
||||
$this->peerSelectMethod = $method;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the Peer select method.
|
||||
* @return string
|
||||
*/
|
||||
public function getPeerSelectMethod()
|
||||
{
|
||||
return $this->peerSelectMethod;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Count method.
|
||||
* This is set based on the Peer method, for example if Peer method is doSelectJoin*() then the
|
||||
* count method will be doCountJoin*().
|
||||
* @param string $method The name of the static method to call on the Peer class.
|
||||
*/
|
||||
public function setPeerCountMethod($method)
|
||||
{
|
||||
$this->peerCountMethod = $method;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the Peer count method.
|
||||
*/
|
||||
public function getPeerCountMethod()
|
||||
{
|
||||
return $this->peerCountMethod;
|
||||
}
|
||||
|
||||
/**
|
||||
* Guesses the Peer count method based on the select method.
|
||||
*/
|
||||
private function guessPeerCountMethod()
|
||||
{
|
||||
$selectMethod = $this->getPeerSelectMethod();
|
||||
if ($selectMethod == 'doSelect') {
|
||||
$countMethod = 'doCount';
|
||||
} elseif ( ($pos = stripos($selectMethod, 'doSelectJoin')) === 0) {
|
||||
$countMethod = 'doCount' . substr($selectMethod, strlen('doSelect'));
|
||||
} else {
|
||||
// we will fall back to doCount() if we don't understand the join
|
||||
// method; however, it probably won't be accurate. Maybe triggering an error would
|
||||
// be appropriate ...
|
||||
$countMethod = 'doCount';
|
||||
}
|
||||
$this->setPeerCountMethod($countMethod);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the paged resultset
|
||||
*
|
||||
* @return mixed $rs
|
||||
*/
|
||||
public function getResult()
|
||||
{
|
||||
if(!isset($this->rs)) {
|
||||
$this->doRs();
|
||||
}
|
||||
|
||||
return $this->rs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the paged resultset
|
||||
*
|
||||
* Main method which creates a paged result set based on the criteria
|
||||
* and the requested peer select method.
|
||||
*
|
||||
*/
|
||||
private function doRs()
|
||||
{
|
||||
$this->criteria->setOffset($this->start);
|
||||
$this->criteria->setLimit($this->max);
|
||||
$this->rs = call_user_func(array($this->getPeerClass(), $this->getPeerSelectMethod()), $this->criteria);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the first page
|
||||
*
|
||||
* For now I can only think of returning 1 always.
|
||||
* It should probably return 0 if there are no pages
|
||||
*
|
||||
* @return int 1
|
||||
*/
|
||||
public function getFirstPage()
|
||||
{
|
||||
return '1';
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience method to indicate whether current page is the first page.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function atFirstPage()
|
||||
{
|
||||
return $this->getPage() == $this->getFirstPage();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get last page
|
||||
*
|
||||
* @return int $lastPage
|
||||
*/
|
||||
public function getLastPage()
|
||||
{
|
||||
$totalPages = $this->getTotalPages();
|
||||
if ($totalPages == 0) {
|
||||
return 1;
|
||||
} else {
|
||||
return $totalPages;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience method to indicate whether current page is the last page.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function atLastPage()
|
||||
{
|
||||
return $this->getPage() == $this->getLastPage();
|
||||
}
|
||||
|
||||
/**
|
||||
* get total pages
|
||||
*
|
||||
* @return int $this->pages
|
||||
*/
|
||||
public function getTotalPages() {
|
||||
if(!isset($this->pages)) {
|
||||
$recordCount = $this->getTotalRecordCount();
|
||||
if($this->max > 0) {
|
||||
$this->pages = ceil($recordCount/$this->max);
|
||||
} else {
|
||||
$this->pages = 0;
|
||||
}
|
||||
}
|
||||
return $this->pages;
|
||||
}
|
||||
|
||||
/**
|
||||
* get an array of previous id's
|
||||
*
|
||||
* @param int $range
|
||||
* @return array $links
|
||||
*/
|
||||
public function getPrevLinks($range = 5)
|
||||
{
|
||||
$total = $this->getTotalPages();
|
||||
$start = $this->getPage() - 1;
|
||||
$end = $this->getPage() - $range;
|
||||
$first = $this->getFirstPage();
|
||||
$links = array();
|
||||
for($i=$start; $i>$end; $i--) {
|
||||
if($i < $first) {
|
||||
break;
|
||||
}
|
||||
$links[] = $i;
|
||||
}
|
||||
|
||||
return array_reverse($links);
|
||||
}
|
||||
|
||||
/**
|
||||
* get an array of next id's
|
||||
*
|
||||
* @param int $range
|
||||
* @return array $links
|
||||
*/
|
||||
public function getNextLinks($range = 5)
|
||||
{
|
||||
$total = $this->getTotalPages();
|
||||
$start = $this->getPage() + 1;
|
||||
$end = $this->getPage() + $range;
|
||||
$last = $this->getLastPage();
|
||||
$links = array();
|
||||
for($i=$start; $i<$end; $i++) {
|
||||
if($i > $last) {
|
||||
break;
|
||||
}
|
||||
$links[] = $i;
|
||||
}
|
||||
|
||||
return $links;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether last page is complete
|
||||
*
|
||||
* @return bool Last page complete or not
|
||||
*/
|
||||
public function isLastPageComplete()
|
||||
{
|
||||
return !($this->getTotalRecordCount() % $this->max);
|
||||
}
|
||||
|
||||
/**
|
||||
* get previous id
|
||||
*
|
||||
* @return mixed $prev
|
||||
*/
|
||||
public function getPrev() {
|
||||
if($this->getPage() != $this->getFirstPage()) {
|
||||
$prev = $this->getPage() - 1;
|
||||
} else {
|
||||
$prev = false;
|
||||
}
|
||||
return $prev;
|
||||
}
|
||||
|
||||
/**
|
||||
* get next id
|
||||
*
|
||||
* @return mixed $next
|
||||
*/
|
||||
public function getNext() {
|
||||
if($this->getPage() != $this->getLastPage()) {
|
||||
$next = $this->getPage() + 1;
|
||||
} else {
|
||||
$next = false;
|
||||
}
|
||||
return $next;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current page number (First page is 1).
|
||||
* @param int $page
|
||||
* @return void
|
||||
*/
|
||||
public function setPage($page)
|
||||
{
|
||||
$this->page = $page;
|
||||
// (re-)calculate start rec
|
||||
$this->calculateStart();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current page.
|
||||
* @return int
|
||||
*/
|
||||
public function getPage()
|
||||
{
|
||||
return $this->page;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the number of rows per page.
|
||||
* @param int $r
|
||||
*/
|
||||
public function setRowsPerPage($r)
|
||||
{
|
||||
$this->max = $r;
|
||||
// (re-)calculate start rec
|
||||
$this->calculateStart();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get number of rows per page.
|
||||
* @return int
|
||||
*/
|
||||
public function getRowsPerPage()
|
||||
{
|
||||
return $this->max;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate startrow / max rows based on current page and rows-per-page.
|
||||
* @return void
|
||||
*/
|
||||
private function calculateStart()
|
||||
{
|
||||
$this->start = ( ($this->page - 1) * $this->max );
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the total number of (un-LIMITed) records.
|
||||
*
|
||||
* This method will perform a query that executes un-LIMITed query.
|
||||
*
|
||||
* @return int Total number of records - disregarding page, maxrows, etc.
|
||||
*/
|
||||
public function getTotalRecordCount()
|
||||
{
|
||||
|
||||
if(!isset($this->rs)) {
|
||||
$this->doRs();
|
||||
}
|
||||
|
||||
if(empty($this->recordCount)) {
|
||||
$this->countCriteria = clone $this->criteria;
|
||||
$this->countCriteria->setLimit(0);
|
||||
$this->countCriteria->setOffset(0);
|
||||
|
||||
$this->recordCount = call_user_func(
|
||||
array(
|
||||
$this->getPeerClass(),
|
||||
$this->getPeerCountMethod()
|
||||
),
|
||||
$this->countCriteria
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
return $this->recordCount;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the start row or offset.
|
||||
* @param int $v
|
||||
*/
|
||||
public function setStart($v)
|
||||
{
|
||||
$this->start = $v;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets max rows (limit).
|
||||
* @param int $v
|
||||
* @return void
|
||||
*/
|
||||
public function setMax($v)
|
||||
{
|
||||
$this->max = $v;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user