Exporter.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. namespace Encore\Admin\Grid;
  3. use Encore\Admin\Grid;
  4. use Encore\Admin\Grid\Exporters\CsvExporter;
  5. class Exporter
  6. {
  7. /**
  8. * Export scope constants.
  9. */
  10. const SCOPE_ALL = 'all';
  11. const SCOPE_CURRENT_PAGE = 'page';
  12. const SCOPE_SELECTED_ROWS = 'selected';
  13. /**
  14. * @var Grid
  15. */
  16. protected $grid;
  17. /**
  18. * Available exporter drivers.
  19. *
  20. * @var array
  21. */
  22. protected static $drivers = [];
  23. /**
  24. * Export query name.
  25. *
  26. * @var string
  27. */
  28. public static $queryName = '_export_';
  29. /**
  30. * Create a new Exporter instance.
  31. *
  32. * @param Grid $grid
  33. */
  34. public function __construct(Grid $grid)
  35. {
  36. $this->grid = $grid;
  37. $this->grid->model()->usePaginate(false);
  38. }
  39. /**
  40. * Set export query name.
  41. *
  42. * @param $name
  43. */
  44. public static function setQueryName($name)
  45. {
  46. static::$queryName = $name;
  47. }
  48. /**
  49. * Extends new exporter driver.
  50. *
  51. * @param $driver
  52. * @param $extend
  53. */
  54. public static function extend($driver, $extend)
  55. {
  56. static::$drivers[$driver] = $extend;
  57. }
  58. /**
  59. * Resolve export driver.
  60. *
  61. * @param string $driver
  62. *
  63. * @return CsvExporter
  64. */
  65. public function resolve($driver)
  66. {
  67. if ($driver instanceof Grid\Exporters\AbstractExporter) {
  68. return $driver->setGrid($this->grid);
  69. }
  70. return $this->getExporter($driver);
  71. }
  72. /**
  73. * Get export driver.
  74. *
  75. * @param string $driver
  76. *
  77. * @return CsvExporter
  78. */
  79. protected function getExporter($driver)
  80. {
  81. if (!array_key_exists($driver, static::$drivers)) {
  82. return $this->getDefaultExporter();
  83. }
  84. return new static::$drivers[$driver]($this->grid);
  85. }
  86. /**
  87. * Get default exporter.
  88. *
  89. * @return CsvExporter
  90. */
  91. public function getDefaultExporter()
  92. {
  93. return new CsvExporter($this->grid);
  94. }
  95. /**
  96. * Format query for export url.
  97. *
  98. * @param int $scope
  99. * @param null $args
  100. *
  101. * @return array
  102. */
  103. public static function formatExportQuery($scope = '', $args = null)
  104. {
  105. $query = '';
  106. if ($scope == static::SCOPE_ALL) {
  107. $query = 'all';
  108. }
  109. if ($scope == static::SCOPE_CURRENT_PAGE) {
  110. $query = "page:$args";
  111. }
  112. if ($scope == static::SCOPE_SELECTED_ROWS) {
  113. $query = "selected:$args";
  114. }
  115. return [static::$queryName => $query];
  116. }
  117. }