@@ -66,35 +66,7 @@ public static string BuildFilterValueString(string group, string propertyName, s
6666 ? defaultFilterValue
6767 : AddNewFilterToFilterString ( existingFilterString , newFilterToAdd ) ;
6868 }
69- public static string ? GetFilterString (
70- string ? existingFilterString ,
71- string ? newFilterToAdd ,
72- bool clearFilters ,
73- HttpRequest request ,
74- string cookieName ,
75- string ? q1Options ,
76- string ? defaultFilterValue = null
77- )
78- {
79- var cookieHasBeenSet = request . Cookies . ContainsKey ( cookieName ) ;
80- var noFiltersInQueryParams = existingFilterString == null && newFilterToAdd == null ;
81- var cookieValue = request . Cookies [ cookieName ] ;
82- if ( ( clearFilters ) || ( q1Options == null && cookieValue != null && cookieValue . Contains ( "Answer1|Not Allowed" ) ||
83- ( cookieValue != null && cookieValue . Contains ( "Answer1|Allowed" ) ) ) )
84- {
85- return null ;
86- }
87-
88- if ( cookieHasBeenSet && noFiltersInQueryParams )
89- {
90- return request . Cookies [ cookieName ] == EmptyFiltersCookieValue ? null : request . Cookies [ cookieName ] ;
91- }
92-
93- return noFiltersInQueryParams
94- ? defaultFilterValue
95- : AddNewFilterToFilterString ( existingFilterString , newFilterToAdd ) ;
96- }
97- public static string ? GetCategoryAndTopicFilterString (
69+ public static string ? GetCategoryAndTopicFilterString (
9870 string ? categoryFilterString ,
9971 string ? topicFilterString
10072 )
@@ -195,7 +167,36 @@ public static string GetFilterValueForRegistrationPrompt(int promptNumber, strin
195167 : answer ;
196168 return BuildFilterValueString ( group , group . Split ( '(' ) [ 0 ] , propertyValue ) ;
197169 }
170+ public static string ? CheckIfFilterisValid ( bool clearFilters , string existingFilterString , string newFilterToAdd , IEnumerable < FilterModel > availableFilters , HttpRequest request ,
171+ string cookieName , HttpResponse response )
172+ {
173+ if ( ! request . Cookies . ContainsKey ( cookieName ) || string . IsNullOrEmpty ( request . Cookies [ cookieName ] ) || clearFilters )
174+ return null ;
175+
176+ var cookieValue = request . Cookies [ cookieName ] ;
177+ if ( string . IsNullOrEmpty ( cookieValue ) || cookieValue == EmptyFiltersCookieValue )
178+ {
179+ return existingFilterString ;
180+ }
181+ var existingFilters = cookieValue . Split ( '╡' ) ;
182+ var validFilterValues = availableFilters
183+ . SelectMany ( filter => filter . FilterOptions )
184+ . Select ( option => option . FilterValue )
185+ . ToHashSet ( ) ;
186+
187+ var filteredResults = existingFilters
188+ . Where ( entry => IsFilterInvalid ( entry , validFilterValues ) )
189+ . ToList ( ) ;
190+ var newCookieValue = string . Join ( "╡" , filteredResults ) ;
191+ if ( string . IsNullOrEmpty ( newCookieValue ) ) return null ;
192+ return AddNewFilterToFilterString ( newCookieValue , newFilterToAdd ) ;
193+ }
198194
195+ private static bool IsFilterInvalid ( string filterEntry , HashSet < string > validFilterValues )
196+ {
197+ if ( validFilterValues . Contains ( filterEntry ) ) return true ;
198+ return false ;
199+ }
199200 private static IEnumerable < FilterOptionModel > GetFilterOptionsForPromptWithOptions ( Prompt prompt )
200201 {
201202 var group = GetFilterGroupForPrompt ( prompt ) ;
0 commit comments