1
0
mirror of synced 2024-12-15 23:56:02 +03:00
doctrine2/website/plugins/sfDoctrinePlugin/lib/sfDoctrinePager.class.php
2007-08-31 23:41:48 +00:00

105 lines
2.3 KiB
PHP

<?php
/*
* This file is part of the sfDoctrine package.
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
* (c) 2006 Olivier Verdier <Olivier.Verdier@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @package symfony.plugins
* @subpackage sfDoctrine
* @author Maarten den Braber <mdb@twister.cx>
* @author Olivier Verdier <Olivier.Verdier@gmail.com>
* @author Ian P. Christian <pookey@pookey.co.uk>
* @version SVN: $Id: sfDoctrinePager.class.php 4401 2007-06-26 05:02:41Z hansbrix $
*/
class sfDoctrinePager extends sfPager implements Serializable
{
protected
$query;
public function __construct($class, $defaultMaxPerPage = 10)
{
parent::__construct($class, $defaultMaxPerPage);
$this->setQuery(Doctrine_Query::create()->from($class));
}
public function serialize()
{
$vars = get_object_vars($this);
unset($vars['query']);
return serialize($vars);
}
public function unserialize($serialized)
{
$array = unserialize($serialized);
foreach($array as $name => $values) {
$this->$name = $values;
}
}
public function init()
{
$count = $this->getQuery()->offset(0)->limit(0)->count();
$this->setNbResults($count);
$p = $this->getQuery();
$p->offset(0);
$p->limit(0);
if ($this->getPage() == 0 || $this->getMaxPerPage() == 0)
{
$this->setLastPage(0);
}
else
{
$this->setLastPage(ceil($this->getNbResults() / $this->getMaxPerPage()));
$offset = ($this->getPage() - 1) * $this->getMaxPerPage();
$p->offset($offset);
$p->limit($this->getMaxPerPage());
}
}
public function getQuery()
{
return $this->query;
}
public function setQuery($query)
{
$this->query = $query;
}
protected function retrieveObject($offset)
{
$cForRetrieve = clone $this->getQuery();
$cForRetrieve->offset($offset - 1);
$cForRetrieve->limit(1);
$results = $cForRetrieve->execute();
return $results[0];
}
public function getResults($fetchtype = null)
{
$p = $this->getQuery();
if ($fetchtype == 'array')
return $p->execute(array(), Doctrine::FETCH_ARRAY);
return $p->execute();
}
}