123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- <?php
- /*
- * This file is part of the Sonata package.
- *
- * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Sonata\BaseApplicationBundle\Datagrid;
- use Sonata\BaseApplicationBundle\Tool\DoctrinePager as Pager;
- use Sonata\BaseApplicationBundle\Admin\EntityAdmin;
- use Sonata\BaseApplicationBundle\Admin\FieldDescription;
- use Doctrine\ORM\Mapping\ClassMetadataInfo;
- class Datagrid
- {
- protected $classname;
- protected $entityManager;
- /**
- * The filter descriptions
- * @var array
- */
- protected $filterFields = array();
- /**
- *
- * The filter instances
- * @var array
- */
- protected $filters = array();
- protected $values;
- protected $pager;
- protected $maxPerPage = 25;
- public function __construct($classname, $entityManager, $values = array())
- {
- $this->classname = $classname;
- $this->entityManager = $entityManager;
- $this->values = $values;
- }
- public function getClassMetaData()
- {
- return $this->getEntityManager()
- ->getClassMetaData($this->getClassname());
- }
- public function getPager()
- {
- if (!$this->pager) {
- $this->pager = new Pager($this->getClassname(), $this->getMaxPerPage());
- $this->pager->setQueryBuilder($this->getQueryBuilder($this->values));
- $this->pager->setPage(isset($this->values['page']) ? $this->values['page'] : 1);
- $this->pager->init();
- }
- return $this->pager;
- }
- public function getResults()
- {
- $pager = $this->getPager($this->getValues());
- return $pager->getResults();
- }
- public function getBaseQueryBuilder()
- {
- $em = $this->getEntityManager();
- $repository = $em->getRepository($this->getClassname());
- $queryBuilder = $repository
- ->createQueryBuilder('o');
- return $queryBuilder;
- }
- public function getQueryBuilder($values = array())
- {
- $queryBuilder = $this->getBaseQueryBuilder();
- foreach ($this->getFilters() as $name => $filter) {
- $value = isset($values[$name]) ? $values[$name] : null;
- $filter->apply($queryBuilder, $value);
- }
- return $queryBuilder;
- }
- public function setClassname($classname)
- {
- $this->classname = $classname;
- }
- public function getClassname()
- {
- return $this->classname;
- }
- public function setEntityManager($entityManager)
- {
- $this->entityManager = $entityManager;
- }
- public function getEntityManager()
- {
- return $this->entityManager;
- }
- public function setFilterFields($filterFields)
- {
- $this->filterFields = $filterFields;
- }
- public function getFilterFields()
- {
- return $this->filterFields;
- }
- public function addFilter($filter)
- {
- $this->filters[$filter->getName()] = $filter;
- }
-
- public function getFilters()
- {
- return $this->filters;
- }
- public function setValues($values)
- {
- $this->values = $values;
- }
- public function getValues()
- {
- return $this->values;
- }
- public function setMaxPerPage($maxPerPage)
- {
- $this->maxPerPage = $maxPerPage;
- }
- public function getMaxPerPage()
- {
- return $this->maxPerPage;
- }
- }
|