diff --git a/pkg/models/task_collection.go b/pkg/models/task_collection.go index bfa6bf960..3dd693e6d 100644 --- a/pkg/models/task_collection.go +++ b/pkg/models/task_collection.go @@ -262,6 +262,10 @@ func (tf *TaskCollection) ReadAll(s *xorm.Session, a web.Auth, search string, pa tc.ProjectID = tf.ProjectID tc.isSavedFilter = true + if tf.Filter != "" { + tc.Filter = "(" + tf.Filter + ") && (" + tc.Filter + ")" + } + return tc.ReadAll(s, a, search, page, perPage) } @@ -281,11 +285,13 @@ func (tf *TaskCollection) ReadAll(s *xorm.Session, a web.Auth, search string, pa } } - if view.BucketConfigurationMode == BucketConfigurationModeFilter && strings.Contains(tf.Filter, "bucket_id") { + if strings.Contains(tf.Filter, "bucket_id") { filteringForBucket = true - tf.Filter, err = getFilterValueForBucketFilter(tf.Filter, view) - if err != nil { - return nil, 0, 0, err + if view.BucketConfigurationMode == BucketConfigurationModeFilter { + tf.Filter, err = getFilterValueForBucketFilter(tf.Filter, view) + if err != nil { + return nil, 0, 0, err + } } } } diff --git a/pkg/models/task_search.go b/pkg/models/task_search.go index a279a2d15..9eccca8a8 100644 --- a/pkg/models/task_search.go +++ b/pkg/models/task_search.go @@ -206,6 +206,22 @@ func convertFiltersToDBFilterCond(rawFilters []*taskFilter, includeNulls bool) ( return filterCond, nil } +func hasBucketIDInParsedFilter(filters []*taskFilter) bool { + for _, filter := range filters { + if subfilters, is := filter.value.([]*taskFilter); is { + has := hasBucketIDInParsedFilter(subfilters) + if has { + return true + } + } + if filter.field == taskPropertyBucketID { + return true + } + } + + return false +} + //nolint:gocyclo func (d *dbTaskSearcher) Search(opts *taskSearchOptions) (tasks []*Task, totalCount int64, err error) { @@ -214,13 +230,7 @@ func (d *dbTaskSearcher) Search(opts *taskSearchOptions) (tasks []*Task, totalCo return nil, 0, err } - var joinTaskBuckets bool - for _, filter := range opts.parsedFilters { - if filter.field == taskPropertyBucketID { - joinTaskBuckets = true - break - } - } + joinTaskBuckets := hasBucketIDInParsedFilter(opts.parsedFilters) filterCond, err := convertFiltersToDBFilterCond(opts.parsedFilters, opts.filterIncludeNulls) if err != nil {