SearchCriteriaBuilder.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Api\Search;
  7. use Magento\Framework\Api\AbstractSimpleObjectBuilder;
  8. use Magento\Framework\Api\ObjectFactory;
  9. use Magento\Framework\Api\SortOrderBuilder;
  10. /**
  11. * Builder for SearchCriteria Service Data Object
  12. *
  13. * @api
  14. * @since 100.0.2
  15. */
  16. class SearchCriteriaBuilder extends AbstractSimpleObjectBuilder
  17. {
  18. /**
  19. * @var SortOrderBuilder
  20. */
  21. protected $sortOrderBuilder;
  22. /**
  23. * @var FilterGroupBuilder
  24. */
  25. protected $filterGroupBuilder;
  26. /**
  27. * @var array
  28. */
  29. private $filters = [];
  30. /**
  31. * @param ObjectFactory $objectFactory
  32. * @param FilterGroupBuilder $filterGroupBuilder
  33. * @param SortOrderBuilder $sortOrderBuilder
  34. */
  35. public function __construct(
  36. ObjectFactory $objectFactory,
  37. FilterGroupBuilder $filterGroupBuilder,
  38. SortOrderBuilder $sortOrderBuilder
  39. ) {
  40. parent::__construct($objectFactory);
  41. $this->sortOrderBuilder = $sortOrderBuilder;
  42. $this->filterGroupBuilder = $filterGroupBuilder;
  43. }
  44. /**
  45. * Builds the SearchCriteria Data Object
  46. *
  47. * @return SearchCriteria
  48. */
  49. public function create()
  50. {
  51. foreach ($this->filters as $filter) {
  52. $this->data[SearchCriteria::FILTER_GROUPS][] = $this->filterGroupBuilder->setFilters([])
  53. ->addFilter($filter)
  54. ->create();
  55. }
  56. $this->data[SearchCriteria::SORT_ORDERS] = [$this->sortOrderBuilder->create()];
  57. return parent::create();
  58. }
  59. /**
  60. * Create a filter group based on the filter array provided and add to the filter groups
  61. *
  62. * @param \Magento\Framework\Api\Filter $filter
  63. * @return $this
  64. */
  65. public function addFilter(\Magento\Framework\Api\Filter $filter)
  66. {
  67. $this->filters[] = $filter;
  68. return $this;
  69. }
  70. /**
  71. * @param string $field
  72. * @param string $direction
  73. * @return $this
  74. */
  75. public function addSortOrder($field, $direction)
  76. {
  77. $this->sortOrderBuilder->setDirection($direction)
  78. ->setField($field);
  79. return $this;
  80. }
  81. /**
  82. * Set page size
  83. *
  84. * @param int $pageSize
  85. * @return $this
  86. */
  87. public function setPageSize($pageSize)
  88. {
  89. return $this->_set(SearchCriteria::PAGE_SIZE, $pageSize);
  90. }
  91. /**
  92. * Set current page
  93. *
  94. * @param int $currentPage
  95. * @return $this
  96. */
  97. public function setCurrentPage($currentPage)
  98. {
  99. return $this->_set(SearchCriteria::CURRENT_PAGE, $currentPage);
  100. }
  101. }