Skip to content

Commit 70c2531

Browse files
TD-4893 Delegate activities - view course delegates resulted in 500 error when course admin field applied filters got deleted
1 parent ac3b7ca commit 70c2531

File tree

4 files changed

+31
-34
lines changed

4 files changed

+31
-34
lines changed

DigitalLearningSolutions.Data/DataServices/CourseDataService.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2040,7 +2040,6 @@ public bool IsSelfEnrollmentAllowed(int customisationId)
20402040
,DiagObjSelect
20412041
,HideInLearnerPortal
20422042
,NotificationEmails
2043-
,Q1Options
20442043
FROM Customisations
20452044
WHERE CustomisationID = @customisationID ",
20462045
new { customisationId }).FirstOrDefault();

DigitalLearningSolutions.Data/Helpers/FilteringHelper.cs

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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);

DigitalLearningSolutions.Data/Models/Courses/Customisation.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ public Customisation(
4343
public string? NotificationEmails { get; set; }
4444
public int CustomisationId { get; set; }
4545
public bool Active { get; set; }
46-
public string? Q1Options { get; set; }
4746

4847
}
4948
}

DigitalLearningSolutions.Web/Controllers/TrackingSystem/Delegates/ActivityDelegatesController.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,12 @@ public IActionResult Index(
9595

9696
sortBy ??= DefaultSortByOptions.Name.PropertyName;
9797
sortDirection ??= GenericSortingHelper.Ascending;
98-
var course = courseService.GetCourse(customisationId);
9998
existingFilterString = FilteringHelper.GetFilterString(
10099
existingFilterString,
101100
newFilterToAdd,
102101
clearFilters,
103102
Request,
104103
filterCookieName,
105-
course.Q1Options,
106104
CourseDelegateAccountStatusFilterOptions.Active.FilterValue
107105
);
108106

@@ -277,7 +275,7 @@ public IActionResult Index(
277275
var activityName = isCourseDelegate
278276
? courseService.GetCourseNameAndApplication((int)customisationId).CourseName
279277
: selfAssessmentService.GetSelfAssessmentNameById((int)selfAssessmentId);
280-
278+
existingFilterString = FilteringHelper.CheckIfFilterisValid(clearFilters, existingFilterString, newFilterToAdd, availableFilters, Request, filterCookieName, Response);
281279
if (isCourseDelegate)
282280
{
283281
var result = paginateService.Paginate(

0 commit comments

Comments
 (0)