Datagrid.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. /*
  3. * This file is part of the Sonata package.
  4. *
  5. * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Sonata\AdminBundle\Datagrid\ORM;
  11. use Sonata\AdminBundle\Datagrid\ORM\Pager;
  12. class Datagrid
  13. {
  14. protected $classname;
  15. protected $entityManager;
  16. /**
  17. * The filter descriptions
  18. * @var array
  19. */
  20. protected $filterFields = array();
  21. /**
  22. *
  23. * The filter instances
  24. * @var array
  25. */
  26. protected $filters = array();
  27. protected $values;
  28. protected $pager;
  29. protected $maxPerPage = 25;
  30. public function __construct($classname, $entityManager, $values = array())
  31. {
  32. $this->classname = $classname;
  33. $this->entityManager = $entityManager;
  34. $this->values = $values;
  35. }
  36. public function getClassMetaData()
  37. {
  38. return $this->getEntityManager()
  39. ->getClassMetaData($this->getClassname());
  40. }
  41. public function getPager()
  42. {
  43. if (!$this->pager) {
  44. $this->pager = new Pager($this->getClassname(), $this->getMaxPerPage());
  45. $this->pager->setQueryBuilder($this->getQueryBuilder($this->values));
  46. $this->pager->setPage(isset($this->values['_page']) ? $this->values['_page'] : 1);
  47. $this->pager->init();
  48. }
  49. return $this->pager;
  50. }
  51. public function getResults()
  52. {
  53. $pager = $this->getPager($this->getValues());
  54. return $pager->getResults();
  55. }
  56. public function getBaseQueryBuilder()
  57. {
  58. $em = $this->getEntityManager();
  59. $repository = $em->getRepository($this->getClassname());
  60. $queryBuilder = $repository
  61. ->createQueryBuilder('o');
  62. return $queryBuilder;
  63. }
  64. public function getQueryBuilder($values = array())
  65. {
  66. $queryBuilder = $this->getBaseQueryBuilder();
  67. foreach ($this->getFilters() as $name => $filter) {
  68. $value = isset($values[$name]) ? $values[$name] : null;
  69. $filter->apply($queryBuilder, $value);
  70. }
  71. return $queryBuilder;
  72. }
  73. public function setClassname($classname)
  74. {
  75. $this->classname = $classname;
  76. }
  77. public function getClassname()
  78. {
  79. return $this->classname;
  80. }
  81. public function setEntityManager($entityManager)
  82. {
  83. $this->entityManager = $entityManager;
  84. }
  85. public function getEntityManager()
  86. {
  87. return $this->entityManager;
  88. }
  89. public function setFilterFields($filterFields)
  90. {
  91. $this->filterFields = $filterFields;
  92. }
  93. public function getFilterFields()
  94. {
  95. return $this->filterFields;
  96. }
  97. public function addFilter($filter)
  98. {
  99. $this->filters[$filter->getName()] = $filter;
  100. }
  101. public function getFilters()
  102. {
  103. return $this->filters;
  104. }
  105. public function setValues($values)
  106. {
  107. $this->values = $values;
  108. }
  109. public function getValues()
  110. {
  111. return $this->values;
  112. }
  113. public function setMaxPerPage($maxPerPage)
  114. {
  115. $this->maxPerPage = $maxPerPage;
  116. }
  117. public function getMaxPerPage()
  118. {
  119. return $this->maxPerPage;
  120. }
  121. }