@@ -289,27 +289,56 @@ private function applyPmql($query, $request, $user)
289289 } catch (SyntaxError $ e ) {
290290 abort ('Your PMQL contains invalid syntax. ' , 400 );
291291 }
292-
293- // After PMQL is applied, if processesIManage is active, add self-service tasks
294- // This is done after PMQL to avoid the is_self_service = 0 filter that PMQL might add
295- if ($ request ->input ('processesIManage ' ) === 'true ' && isset ($ query ->getQuery ()->processManagerIds )) {
296- $ ids = $ query ->getQuery ()->processManagerIds ;
297- $ selfServiceTaskIds = ProcessRequestToken::select (['id ' ])
298- ->whereIn ('process_id ' , $ ids )
299- ->where ('is_self_service ' , 1 )
300- ->whereNull ('user_id ' )
301- ->where ('status ' , 'ACTIVE ' );
302-
303- // Add self-service tasks using orWhereIn to override PMQL's is_self_service = 0 filter
304- $ query ->orWhereIn ('process_request_tokens.id ' , $ selfServiceTaskIds );
305- }
306292 }
307293 }
308294
309295 private function applyAdvancedFilter ($ query , $ request )
310296 {
311297 if ($ advancedFilter = $ request ->input ('advanced_filter ' , '' )) {
312- Filter::filter ($ query , $ advancedFilter );
298+ // Parse the advanced filter
299+ $ filterArray = is_string ($ advancedFilter ) ? json_decode ($ advancedFilter , true ) : $ advancedFilter ;
300+
301+ // Check if processesIManage is active and we have processManagerIds
302+ $ processManagerIds = $ query ->getQuery ()->processManagerIds ?? null ;
303+ $ isProcessManager = !empty ($ processManagerIds ) && $ request ->input ('processesIManage ' ) === 'true ' ;
304+
305+ // If processesIManage is active, handle "Self Service" status filter specially
306+ if ($ isProcessManager && is_array ($ filterArray )) {
307+ $ hasSelfServiceFilter = false ;
308+ $ filteredArray = [];
309+
310+ foreach ($ filterArray as $ filter ) {
311+ // Check if this is a "Self Service" status filter
312+ if (isset ($ filter ['subject ' ]['type ' ]) &&
313+ $ filter ['subject ' ]['type ' ] === 'Status ' &&
314+ isset ($ filter ['value ' ]) &&
315+ mb_strtolower ($ filter ['value ' ]) === 'self service ' ) {
316+ $ hasSelfServiceFilter = true ;
317+ // Don't add this filter to the array - we'll handle it manually
318+ continue ;
319+ }
320+ $ filteredArray [] = $ filter ;
321+ }
322+
323+ // Apply the filtered advanced_filter (without Self Service)
324+ if (!empty ($ filteredArray )) {
325+ Filter::filter ($ query , $ filteredArray );
326+ }
327+
328+ // Manually apply the Self Service filter for process managers
329+ if ($ hasSelfServiceFilter ) {
330+ $ selfServiceTaskIds = ProcessRequestToken::select (['id ' ])
331+ ->whereIn ('process_id ' , $ processManagerIds )
332+ ->where ('is_self_service ' , 1 )
333+ ->whereNull ('user_id ' )
334+ ->where ('status ' , 'ACTIVE ' );
335+
336+ $ query ->whereIn ('process_request_tokens.id ' , $ selfServiceTaskIds );
337+ }
338+ } else {
339+ // Normal behavior - apply the filter as-is
340+ Filter::filter ($ query , $ advancedFilter );
341+ }
313342 }
314343 }
315344
0 commit comments