Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 30 additions & 28 deletions DigitalLearningSolutions.Data/Helpers/FilteringHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ public static string BuildFilterValueString(string group, string propertyName, s
{
return existingFilterString;
}

return existingFilterString + FilterSeparator + newFilterToAdd;
var filterString = existingFilterString + FilterSeparator + newFilterToAdd;
return RemoveDuplicateFilters(filterString, newFilterToAdd);
}

public static string? GetFilterString(
Expand All @@ -46,7 +46,8 @@ public static string BuildFilterValueString(string group, string propertyName, s
bool clearFilters,
HttpRequest request,
string cookieName,
string? defaultFilterValue = null
string? defaultFilterValue = null,
IEnumerable<FilterModel>? availableFilters = null
)
{
var cookieHasBeenSet = request.Cookies.ContainsKey(cookieName);
Expand All @@ -59,17 +60,19 @@ public static string BuildFilterValueString(string group, string propertyName, s

if (cookieHasBeenSet && noFiltersInQueryParams)
{
return request.Cookies[cookieName] == EmptyFiltersCookieValue ? null : request.Cookies[cookieName];
return request.Cookies[cookieName] == EmptyFiltersCookieValue ? null : GetValidFilters(request.Cookies[cookieName], availableFilters);
}

return noFiltersInQueryParams
? defaultFilterValue
: AddNewFilterToFilterString(existingFilterString, newFilterToAdd);
var filterString = noFiltersInQueryParams
? defaultFilterValue
: AddNewFilterToFilterString(existingFilterString, newFilterToAdd);

return GetValidFilters(filterString, availableFilters);
}
public static string? GetCategoryAndTopicFilterString(
string? categoryFilterString,
string? topicFilterString
)
public static string? GetCategoryAndTopicFilterString(
string? categoryFilterString,
string? topicFilterString
)
{
if (categoryFilterString == null && topicFilterString == null)
{
Expand Down Expand Up @@ -167,34 +170,33 @@ public static string GetFilterValueForRegistrationPrompt(int promptNumber, strin
: answer;
return BuildFilterValueString(group, group.Split('(')[0], propertyValue);
}
public static string? GetValidFilters(string existingFilterString, string newFilterToAdd, IEnumerable<FilterModel> availableFilters, HttpRequest request, string cookieName)

public static string? GetValidFilters(string? existingFilterString, IEnumerable<FilterModel>? availableFilters)
{
var cookieValue = request.Cookies[cookieName];
if (string.IsNullOrEmpty(cookieValue) || cookieValue == EmptyFiltersCookieValue)
if (string.IsNullOrEmpty(existingFilterString) || availableFilters == null)
{
return existingFilterString;
return null;
}
var existingFilters = cookieValue.Split(FilterSeparator);
var existingFilters = existingFilterString.Split(FilterSeparator);
var validFilterValues = availableFilters
.SelectMany(filter => filter.FilterOptions)
.Select(option => option.FilterValue)
.ToHashSet();
.SelectMany(filter => filter.FilterOptions)
.Select(option => option.FilterValue)
.ToHashSet();

var filteredResults = existingFilters
.Where(entry => IsFilterInvalid(entry, validFilterValues))
.ToList();
var newCookieValue = string.Join(FilterSeparator, filteredResults);
if (string.IsNullOrEmpty(newCookieValue)) return null;
newCookieValue = AddNewFilterToFilterString(newCookieValue, newFilterToAdd);
return RemoveDuplicateFilters( newFilterToAdd, newCookieValue);
.Where(entry => IsFilterInvalid(entry, validFilterValues))
.ToList();
var newFilterString = string.Join(FilterSeparator, filteredResults);

return string.IsNullOrEmpty(newFilterString) ? null : newFilterString;
}

private static bool IsFilterInvalid(string filterEntry, HashSet<string> validFilterValues)
private static bool IsFilterInvalid(string filterEntry, HashSet<string> validFilterValues)
{
if (validFilterValues.Contains(filterEntry)) return true;
return false;
}
public static string RemoveDuplicateFilters(string newFilterToAdd, string? existingFilterString)
public static string RemoveDuplicateFilters(string? existingFilterString, string newFilterToAdd)
{
if (string.IsNullOrEmpty(existingFilterString))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,25 +57,27 @@ public async Task<IActionResult> Index(
return View("Index", model);
}

existingFilterString = FilteringHelper.GetFilterString(
existingFilterString,
newFilterToAdd,
clearFilters,
Request,
FindCentreFilterCookieName
);

var centreSummaries = centresService.GetAllCentreSummariesForFindCentre();
var regions = regionService.GetRegionsAlphabetical();

var availableFilters = FindYourCentreViewModelFilterOptions
.GetFindCentreFilterModels(regions).ToList();

var filterString = FilteringHelper.GetFilterString(
existingFilterString,
newFilterToAdd,
clearFilters,
Request,
FindCentreFilterCookieName,
null,
availableFilters
);

var searchSortPaginationOptions = new SearchSortFilterAndPaginateOptions(
new SearchOptions(searchString, searchMatchCutoff: 90),
null,
new FilterOptions(
existingFilterString,
filterString,
availableFilters
),
new PaginationOptions(page, itemsPerPage)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,6 @@ public IActionResult Index(
}

sortBy ??= DefaultSortByOptions.Name.PropertyName;
existingFilterString = FilteringHelper.GetFilterString(
existingFilterString,
newFilterToAdd,
clearFilters,
Request,
BrandCoursesFilterCookieName
);

var tutorials = tutorialService.GetPublicTutorialSummariesForBrand(brandId);
var applications = courseService.GetApplicationsThatHaveSectionsByBrandId(brandId).ToList();

Expand All @@ -69,11 +61,21 @@ public IActionResult Index(
var availableFilters = LearningContentViewModelFilterOptions
.GetFilterOptions(categories, topics).ToList();

var filterString = FilteringHelper.GetFilterString(
existingFilterString,
newFilterToAdd,
clearFilters,
Request,
BrandCoursesFilterCookieName,
null,
availableFilters
);

var searchSortPaginationOptions = new SearchSortFilterAndPaginateOptions(
null,
new SortOptions(sortBy, sortDirection),
new FilterOptions(
existingFilterString,
filterString,
availableFilters
),
new PaginationOptions(page)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,6 @@ public IActionResult Index(
int? itemsPerPage = null
)
{
existingFilterString = FilteringHelper.GetFilterString(
existingFilterString,
newFilterToAdd,
clearFilters,
Request,
AdminFilterCookieName
);
searchString = searchString == null ? null : searchString.Trim();
var centreId = User.GetCentreIdKnownNotNull();
var adminsAtCentre = userService.GetAdminsByCentreId(centreId);
Expand All @@ -77,10 +70,20 @@ public IActionResult Index(
var availableFilters =
AdministratorsViewModelFilterOptions.GetAllAdministratorsFilterModels(categories);

var filterString = FilteringHelper.GetFilterString(
existingFilterString,
newFilterToAdd,
clearFilters,
Request,
AdminFilterCookieName,
null,
availableFilters
);

var searchSortPaginationOptions = new SearchSortFilterAndPaginateOptions(
new SearchOptions(searchString),
new SortOptions(GenericSortingHelper.DefaultSortOption, GenericSortingHelper.Ascending),
new FilterOptions(existingFilterString, availableFilters),
new FilterOptions(filterString, availableFilters),
new PaginationOptions(page, itemsPerPage)
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,47 +92,33 @@ public IActionResult Index(
sortBy ??= DefaultSortByOptions.Name.PropertyName;
sortDirection ??= GenericSortingHelper.Ascending;

existingFilterString = FilteringHelper.GetFilterString(
var centreId = User.GetCentreIdKnownNotNull();
var categoryId = User.GetAdminCategoryId();
var courseCategoryName = this.activityService.GetCourseCategoryNameForActivityFilter(categoryId);
var Categories = courseCategoriesService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId).Select(c => c.CategoryName);
var Topics = courseTopicsService.GetCourseTopicsAvailableAtCentre(centreId).Select(c => c.CourseTopic);

var availableFilters = CourseStatisticsViewModelFilterOptions
.GetFilterOptions(categoryId.HasValue ? new string[] { } : Categories, Topics).ToList();

var filterString = FilteringHelper.GetFilterString(
existingFilterString,
newFilterToAdd,
clearFilters,
Request,
CourseFilterCookieName,
CourseStatusFilterOptions.IsActive.FilterValue
CourseStatusFilterOptions.IsActive.FilterValue,
availableFilters
);

var centreId = User.GetCentreIdKnownNotNull();
var categoryId = User.GetAdminCategoryId();
var courseCategoryName = this.activityService.GetCourseCategoryNameForActivityFilter(categoryId);
var Categories = courseCategoriesService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId).Select(c => c.CategoryName);
var Topics = courseTopicsService.GetCourseTopicsAvailableAtCentre(centreId).Select(c => c.CourseTopic);

int offSet = ((page - 1) * itemsPerPage) ?? 0;
string isActive, categoryName, courseTopic, hasAdminFields;
isActive = categoryName = courseTopic = hasAdminFields = "Any";
bool? hideInLearnerPortal = null;

if (!string.IsNullOrEmpty(existingFilterString))
if (!string.IsNullOrEmpty(filterString))
{
var selectedFilters = existingFilterString.Split(FilteringHelper.FilterSeparator).ToList();

if (!string.IsNullOrEmpty(newFilterToAdd))
{
var filterHeader = newFilterToAdd.Split(FilteringHelper.Separator)[0];
var dupfilters = selectedFilters.Where(x => x.Contains(filterHeader));
if (dupfilters.Count() > 1)
{
foreach (var filter in selectedFilters)
{
if (filter.Contains(filterHeader))
{
selectedFilters.Remove(filter);
existingFilterString = string.Join(FilteringHelper.FilterSeparator, selectedFilters);
break;
}
}
}
}
var selectedFilters = filterString.Split(FilteringHelper.FilterSeparator).ToList();

if (selectedFilters.Count > 0)
{
Expand Down Expand Up @@ -173,14 +159,11 @@ public IActionResult Index(
isActive, categoryName, courseTopic, hasAdminFields);
}

var availableFilters = CourseStatisticsViewModelFilterOptions
.GetFilterOptions(categoryId.HasValue ? new string[] { } : Categories, Topics).ToList();

var result = paginateService.Paginate(
courses,
resultCount,
new PaginationOptions(page, itemsPerPage),
new FilterOptions(existingFilterString, availableFilters),
new FilterOptions(filterString, availableFilters),
searchString,
sortBy,
sortDirection
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,34 +95,31 @@ public IActionResult Index(

sortBy ??= DefaultSortByOptions.Name.PropertyName;
sortDirection ??= GenericSortingHelper.Ascending;
existingFilterString = FilteringHelper.GetFilterString(
existingFilterString,
newFilterToAdd,
clearFilters,
Request,
filterCookieName,
CourseDelegateAccountStatusFilterOptions.Active.FilterValue
);

if (isCourseDelegate)
{
if (TempData["actDelCustomisationId"] != null && TempData["actDelCustomisationId"].ToString() != customisationId.ToString()
&& existingFilterString != null && existingFilterString.Contains("Answer"))
{
var availableCourseFilters = CourseDelegateViewModelFilterOptions.GetAllCourseDelegatesFilterViewModels(courseAdminFieldsService.GetCourseAdminFieldsForCourse(customisationId.Value).AdminFields);
existingFilterString = FilterHelper.RemoveNonExistingPromptFilters(availableCourseFilters, existingFilterString);
}
}
else

var availableFilters = isCourseDelegate
? CourseDelegateViewModelFilterOptions.GetAllCourseDelegatesFilterViewModels(courseAdminFieldsService.GetCourseAdminFieldsForCourse(customisationId.Value).AdminFields)
: SelfAssessmentDelegateViewModelFilterOptions.GetAllSelfAssessmentDelegatesFilterViewModels();

var filterString = FilteringHelper.GetFilterString(
existingFilterString,
newFilterToAdd,
clearFilters,
Request,
filterCookieName,
CourseDelegateAccountStatusFilterOptions.Active.FilterValue,
availableFilters
);

if (!isCourseDelegate)
{
isUnsupervisedSelfAssessment = selfAssessmentService.IsUnsupervisedSelfAssessment((int)selfAssessmentId);
if (existingFilterString != null)
if (filterString != null)
{
var existingfilterList = isUnsupervisedSelfAssessment ?
existingFilterString!.Split(FilteringHelper.FilterSeparator).Where(filter => !filter.Contains("SignedOff")).ToList() :
existingFilterString!.Split(FilteringHelper.FilterSeparator).Where(filter => !filter.Contains("SubmittedDate")).ToList();
filterString!.Split(FilteringHelper.FilterSeparator).Where(filter => !filter.Contains("SignedOff")).ToList() :
filterString!.Split(FilteringHelper.FilterSeparator).Where(filter => !filter.Contains("SubmittedDate")).ToList();

existingFilterString = existingfilterList.Any() ? string.Join(FilteringHelper.FilterSeparator, existingfilterList) : null;
filterString = existingfilterList.Any() ? string.Join(FilteringHelper.FilterSeparator, existingfilterList) : null;
}
}

Expand All @@ -138,10 +135,10 @@ public IActionResult Index(
string? answer1, answer2, answer3;
answer1 = answer2 = answer3 = null;

if (!string.IsNullOrEmpty(existingFilterString))
if (!string.IsNullOrEmpty(filterString))
{
var selectedFilters = existingFilterString.Split(FilteringHelper.FilterSeparator).ToList();
existingFilterString = FilteringHelper.RemoveDuplicateFilters(newFilterToAdd, existingFilterString);
var selectedFilters = filterString.Split(FilteringHelper.FilterSeparator).ToList();

if (selectedFilters.Count > 0)
{
foreach (var filter in selectedFilters)
Expand Down Expand Up @@ -250,24 +247,17 @@ public IActionResult Index(
}
}

var availableFilters = isCourseDelegate
? CourseDelegateViewModelFilterOptions.GetAllCourseDelegatesFilterViewModels(courseDelegatesData.CourseAdminFields)
: SelfAssessmentDelegateViewModelFilterOptions.GetAllSelfAssessmentDelegatesFilterViewModels();

var activityName = isCourseDelegate
? courseService.GetCourseNameAndApplication((int)customisationId).CourseName
: selfAssessmentService.GetSelfAssessmentNameById((int)selfAssessmentId);
if (!string.IsNullOrEmpty(existingFilterString))
{
existingFilterString = FilteringHelper.GetValidFilters(existingFilterString, newFilterToAdd, availableFilters, Request, filterCookieName);
}

if (isCourseDelegate)
{
var result = paginateService.Paginate(
courseDelegatesData.Delegates,
(int)resultCount,
new PaginationOptions(page, itemsPerPage),
new FilterOptions(existingFilterString, availableFilters, CourseDelegateAccountStatusFilterOptions.Active.FilterValue),
new FilterOptions(filterString, availableFilters, CourseDelegateAccountStatusFilterOptions.Active.FilterValue),
searchString,
sortBy,
sortDirection);
Expand All @@ -285,7 +275,7 @@ public IActionResult Index(
selfAssessmentDelegatesData.Delegates,
(int)resultCount,
new PaginationOptions(page, itemsPerPage),
new FilterOptions(existingFilterString, availableFilters, CourseDelegateAccountStatusFilterOptions.Active.FilterValue),
new FilterOptions(filterString, availableFilters, CourseDelegateAccountStatusFilterOptions.Active.FilterValue),
searchString,
sortBy,
sortDirection);
Expand Down
Loading
Loading