2020use Pimcore \Bundle \StudioBackendBundle \DataIndex \Query \AssetQueryInterface ;
2121use Pimcore \Bundle \StudioBackendBundle \DataIndex \Query \DataObjectQueryInterface ;
2222use Pimcore \Bundle \StudioBackendBundle \DataIndex \Query \DocumentQueryInterface ;
23+ use Pimcore \Bundle \StudioBackendBundle \DataIndex \Query \QueryInterface ;
2324use Pimcore \Bundle \StudioBackendBundle \DataIndex \SearchIndexFilterInterface ;
2425use Pimcore \Bundle \StudioBackendBundle \DataIndex \Service \AssetSearchServiceInterface ;
2526use Pimcore \Bundle \StudioBackendBundle \DataIndex \Service \DataObjectSearchServiceInterface ;
2627use Pimcore \Bundle \StudioBackendBundle \DataIndex \Service \DocumentSearchServiceInterface ;
2728use Pimcore \Bundle \StudioBackendBundle \DataObject \Schema \DataObject ;
2829use Pimcore \Bundle \StudioBackendBundle \DataObject \Schema \Type \DataObjectFolder ;
29- use Pimcore \Bundle \StudioBackendBundle \Exception \Api \InvalidArgumentException ;
3030use Pimcore \Bundle \StudioBackendBundle \Exception \Api \InvalidElementTypeException ;
3131use Pimcore \Bundle \StudioBackendBundle \Exception \Api \NotFoundException ;
32- use Pimcore \Bundle \StudioBackendBundle \Exception \ Api \ SearchException ;
32+ use Pimcore \Bundle \StudioBackendBundle \Factory \ QueryFactoryInterface ;
3333use Pimcore \Bundle \StudioBackendBundle \Filter \MappedParameter \FilterParameter ;
3434use Pimcore \Bundle \StudioBackendBundle \Filter \Service \FilterServiceProviderInterface ;
3535use Pimcore \Bundle \StudioBackendBundle \Grid \MappedParameter \GridParameter ;
4646 private SearchIndexFilterInterface $ filterService ;
4747
4848 public function __construct (
49- private FilterServiceProviderInterface $ filterServiceProvider ,
5049 private AssetSearchServiceInterface $ assetSearchService ,
5150 private DataObjectSearchServiceInterface $ dataObjectSearchService ,
5251 private DocumentSearchServiceInterface $ documentSearchService ,
52+ private FilterServiceProviderInterface $ filterServiceProvider ,
53+ private QueryFactoryInterface $ queryFactory ,
5354 private SecurityServiceInterface $ securityService
5455 ) {
5556 $ this ->filterService = $ this ->filterServiceProvider ->create (SearchIndexFilterInterface::SERVICE_TYPE );
5657 }
5758
5859 /**
59- * @throws NotFoundException|SearchException|InvalidArgumentException
60+ * {@inheritdoc}
6061 */
6162 public function searchAssets (GridParameter $ gridParameter ): AssetSearchResult
6263 {
@@ -67,6 +68,9 @@ public function searchAssets(GridParameter $gridParameter): AssetSearchResult
6768 );
6869 }
6970
71+ /**
72+ * {@inheritdoc}
73+ */
7074 public function searchAssetsForUser (GridParameter $ gridParameter , UserInterface $ user ): AssetSearchResult
7175 {
7276 return $ this ->searchElementsForUser (
@@ -76,6 +80,9 @@ public function searchAssetsForUser(GridParameter $gridParameter, UserInterface
7680 );
7781 }
7882
83+ /**
84+ * {@inheritdoc}
85+ */
7986 public function searchDataObjects (GridParameter $ gridParameter ): DataObjectSearchResult
8087 {
8188 return $ this ->searchElementsForUser (
@@ -85,6 +92,9 @@ public function searchDataObjects(GridParameter $gridParameter): DataObjectSearc
8592 );
8693 }
8794
95+ /**
96+ * {@inheritdoc}
97+ */
8898 public function searchDocuments (GridParameter $ gridParameter ): DocumentSearchResult
8999 {
90100 return $ this ->searchElementsForUser (
@@ -94,18 +104,16 @@ public function searchDocuments(GridParameter $gridParameter): DocumentSearchRes
94104 );
95105 }
96106
107+ /**
108+ * {@inheritdoc}
109+ */
97110 public function searchElementsForUser (
98111 string $ type ,
99112 GridParameter $ gridParameter ,
100113 UserInterface $ user
101114 ): AssetSearchResult |DataObjectSearchResult |DocumentSearchResult {
102- $ filter = $ gridParameter ->getFilters ();
103- $ type = $ this ->getStudioElementType ($ type );
104- $ filter = $ this ->setFilterPath ($ filter , $ type , $ gridParameter ->getFolderId (), $ user );
105-
106115 /** @var AssetQueryInterface|DataObjectQueryInterface|DocumentQueryInterface $query */
107- $ query = $ this ->filterService ->applyFilters ($ filter , $ type );
108- $ query ->setUser ($ user );
116+ $ query = $ this ->getSearchQuery ($ type , $ gridParameter , $ user );
109117
110118 return match ($ type ) {
111119 ElementTypes::TYPE_ASSET => $ this ->assetSearchService ->searchAssets ($ query ),
@@ -115,18 +123,16 @@ public function searchElementsForUser(
115123 };
116124 }
117125
126+ /**
127+ * {@inheritdoc}
128+ */
118129 public function searchElementIdsForUser (
119130 string $ type ,
120131 GridParameter $ gridParameter ,
121132 UserInterface $ user
122133 ): array {
123- $ filter = $ gridParameter ->getFilters ();
124- $ type = $ this ->getStudioElementType ($ type );
125- $ filter = $ this ->setFilterPath ($ filter , $ type , $ gridParameter ->getFolderId (), $ user );
126-
127134 /** @var AssetQueryInterface|DataObjectQueryInterface $query */
128- $ query = $ this ->filterService ->applyFilters ($ filter , $ type );
129- $ query ->setUser ($ user );
135+ $ query = $ this ->getSearchQuery ($ type , $ gridParameter , $ user );
130136
131137 return match ($ type ) {
132138 ElementTypes::TYPE_ASSET => $ this ->assetSearchService ->fetchAssetIds ($ query ),
@@ -135,6 +141,23 @@ public function searchElementIdsForUser(
135141 };
136142 }
137143
144+ private function getSearchQuery (
145+ string $ type ,
146+ GridParameter $ gridParameter ,
147+ UserInterface $ user
148+ ): QueryInterface
149+ {
150+ $ filter = $ gridParameter ->getFilters ();
151+ $ type = $ this ->getStudioElementType ($ type );
152+ $ filter = $ this ->setFilterPath ($ filter , $ type , $ gridParameter ->getFolderId (), $ user );
153+
154+ $ query = $ this ->queryFactory ->create ($ type );
155+ $ query = $ this ->filterService ->applyFilters ($ query , $ filter , $ type );
156+ $ query ->setUser ($ user );
157+
158+ return $ query ;
159+ }
160+
138161 private function setFilterPath (
139162 FilterParameter $ filter ,
140163 string $ type ,
0 commit comments