SearchCriteriaBuilder.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. /**
  3. * Mageplaza
  4. *
  5. * NOTICE OF LICENSE
  6. *
  7. * This source file is subject to the Mageplaza.com license that is
  8. * available through the world-wide-web at this URL:
  9. * https://www.mageplaza.com/LICENSE.txt
  10. *
  11. * DISCLAIMER
  12. *
  13. * Do not edit or add to this file if you wish to upgrade this extension to newer
  14. * version in the future.
  15. *
  16. * @category Mageplaza
  17. * @package Mageplaza_LayeredNavigation
  18. * @copyright Copyright (c) Mageplaza (https://www.mageplaza.com/)
  19. * @license https://www.mageplaza.com/LICENSE.txt
  20. */
  21. namespace Mageplaza\LayeredNavigation\Model\Search;
  22. use Magento\Framework\Api\ObjectFactory;
  23. use Magento\Framework\Api\Search\SearchCriteria;
  24. use Magento\Framework\Api\Search\SearchCriteriaBuilder as SourceSearchCriteriaBuilder;
  25. use Magento\Framework\Api\SortOrderBuilder;
  26. use Mageplaza\LayeredNavigation\Helper\Data as LayerHelper;
  27. /**
  28. * Builder for SearchCriteria Service Data Object
  29. */
  30. class SearchCriteriaBuilder extends SourceSearchCriteriaBuilder
  31. {
  32. /**
  33. * @var \Mageplaza\LayeredNavigation\Helper\Data as LayerHelper;
  34. */
  35. protected $helper;
  36. /**
  37. * SearchCriteriaBuilder constructor.
  38. * @param LayerHelper $helper
  39. * @param ObjectFactory $objectFactory
  40. * @param FilterGroupBuilder $filterGroupBuilder
  41. * @param SortOrderBuilder $sortOrderBuilder
  42. */
  43. public function __construct(
  44. LayerHelper $helper,
  45. ObjectFactory $objectFactory,
  46. FilterGroupBuilder $filterGroupBuilder,
  47. SortOrderBuilder $sortOrderBuilder
  48. )
  49. {
  50. $this->helper = $helper;
  51. parent::__construct($objectFactory, $filterGroupBuilder, $sortOrderBuilder);
  52. }
  53. /**
  54. * @param $attributeCode
  55. *
  56. * @return $this
  57. */
  58. public function removeFilter($attributeCode)
  59. {
  60. $this->filterGroupBuilder->removeFilter($attributeCode);
  61. return $this;
  62. }
  63. /**
  64. * @return SearchCriteriaBuilder
  65. */
  66. public function cloneObject()
  67. {
  68. $cloneObject = clone $this;
  69. $cloneObject->setFilterGroupBuilder($this->filterGroupBuilder->cloneObject());
  70. return $cloneObject;
  71. }
  72. /**
  73. * @param $filterGroupBuilder
  74. */
  75. public function setFilterGroupBuilder($filterGroupBuilder)
  76. {
  77. $this->filterGroupBuilder = $filterGroupBuilder;
  78. }
  79. /**
  80. * Return the Data type class name
  81. *
  82. * @return string
  83. */
  84. protected function _getDataObjectType()
  85. {
  86. return 'Magento\Framework\Api\Search\SearchCriteria';
  87. }
  88. /**
  89. * Builds the SearchCriteria Data Object
  90. *
  91. * @return SearchCriteria
  92. */
  93. public function create()
  94. {
  95. if ($this->helper->versionCompare('2.2.0')) {
  96. $this->data[SearchCriteria::FILTER_GROUPS] = [$this->filterGroupBuilder->create()];
  97. $this->data[SearchCriteria::SORT_ORDERS] = [$this->sortOrderBuilder->create()];
  98. }
  99. return parent::create();
  100. }
  101. /**
  102. * Create a filter group based on the filter array provided and add to the filter groups
  103. *
  104. * @param \Magento\Framework\Api\Filter $filter
  105. * @return $this
  106. */
  107. public function addFilter(\Magento\Framework\Api\Filter $filter)
  108. {
  109. $this->filterGroupBuilder->addFilter($filter);
  110. return $this;
  111. }
  112. }