RepoTableHelper.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace MGModule\DNSManager2\mgLibs\custom;
  3. class RepoTableHelper {
  4. /**
  5. * @var repository
  6. */
  7. private $repository;
  8. private $items_per_page = 10;
  9. private $page = 1;
  10. private $count_all;
  11. private $count_filtered;
  12. private $pages_count;
  13. private $filters = array();
  14. /**
  15. * Klasa ta pomaga generować output dla DataTable używając repozytorium
  16. * @param \MGModule\DNSManager2\mgLibs\models\repository $repository
  17. * @param array $input
  18. * @param array $search_columns kolumny, na których wykonywany będzie search
  19. */
  20. public function __construct(\MGModule\DNSManager2\mgLibs\models\repository $repository, $input, $search_columns = false) {
  21. $count_all = $repository->count();
  22. $items_per_page = $input['limit']?:$this->items_per_page;
  23. $page = floor($input['offset']/$items_per_page);
  24. if($input['search'])
  25. {
  26. $repository->search($input['search'], $search_columns);
  27. $this->search = $input['search'];
  28. }
  29. foreach($input['filter'] as $column => $value)
  30. {
  31. if(!empty($value))
  32. {
  33. $repository->setFilter($column, $value);
  34. $this->filters[$column] = $value;
  35. }
  36. }
  37. // foreach ($input['table_sorts'] as $column => $vector) {
  38. if(isset($input['order']['column'])) {
  39. $repository->sortBy($input['order']['column'], $input['order']['dir']);
  40. }
  41. // }
  42. $repoClone = clone $repository;
  43. $count_filtered = $repoClone->count();
  44. $pages_count = floor($count_filtered/$items_per_page) + 1;
  45. if($page > $pages_count)
  46. {
  47. $page = $pages_count;
  48. }
  49. $repository->offset($input['offset']);//($page - 1) * $items_per_page);
  50. $repository->limit($items_per_page);
  51. $this->repository = $repository;
  52. $this->page = $page;
  53. $this->count_all = $count_all;
  54. $this->count_filtered = $count_filtered;
  55. $this->items_per_page = $items_per_page;
  56. $this->pages_count = $pages_count;
  57. }
  58. public function get() {
  59. return $this->repository->get();
  60. }
  61. public function getDataTableArray() {
  62. $out = array();
  63. $out['recordsTotal'] = $this->count_all;
  64. $out['recordsFiltered'] = $this->count_filtered;
  65. $out['data'] = array();
  66. return $out;
  67. }
  68. }