示例#1
0
        public IActionResult Index(
            string?searchString  = null,
            string?sortBy        = null,
            string sortDirection = BaseSearchablePageViewModel.Ascending,
            string?filterBy      = null,
            string?filterValue   = null,
            int page             = 1
            )
        {
            sortBy ??= DefaultSortByOptions.Name.PropertyName;
            filterBy = FilteringHelper.GetFilterBy(
                filterBy,
                filterValue,
                Request,
                DelegateGroupsFilterCookieName
                );

            var centreId = User.GetCentreId();
            var groups   = groupsService.GetGroupsForCentre(centreId).ToList();

            var model = new DelegateGroupsViewModel(
                groups,
                GetRegistrationPromptsWithSetOptions(centreId),
                searchString,
                sortBy,
                sortDirection,
                filterBy,
                page
                );

            Response.UpdateOrDeleteFilterCookie(DelegateGroupsFilterCookieName, filterBy);

            return(View(model));
        }
示例#2
0
 private static void DebugLogNotificationIfEnabled(string notificationTypeName)
 {
     if (IDontCareMenu.Instance.IsDebugMode)
     {
         FilteringHelper.DebugLog(notificationTypeName, InformationType.Notification);
     }
 }
示例#3
0
        public IActionResult Index(EmailDelegatesViewModel model, string?filterBy = null, string?filterValue = null)
        {
            var delegateUsers = GetDelegateUserCards();

            if (!ModelState.IsValid)
            {
                var newFilterBy   = FilteringHelper.GetFilterBy(filterBy, filterValue, Request, EmailDelegateFilterCookieName);
                var jobGroups     = jobGroupsDataService.GetJobGroupsAlphabetical();
                var customPrompts = centreCustomPromptHelper.GetCustomPromptsForCentre(User.GetCentreId());
                var viewModel     = new EmailDelegatesViewModel(delegateUsers, jobGroups, customPrompts, newFilterBy)
                {
                    SelectedDelegateIds = model.SelectedDelegateIds,
                    Day   = model.Day,
                    Month = model.Month,
                    Year  = model.Year
                };
                return(View(viewModel));
            }

            var    selectedUsers = delegateUsers.Where(user => model.SelectedDelegateIds !.Contains(user.Id)).ToList();
            var    emailDate     = new DateTime(model.Year !.Value, model.Month !.Value, model.Day !.Value);
            string baseUrl       = ConfigHelper.GetAppConfig().GetAppRootPath();

            passwordResetService.SendWelcomeEmailsToDelegates(selectedUsers, emailDate, baseUrl);

            return(View("Confirmation", selectedUsers.Count));
        }
示例#4
0
        public static bool Prefix(ref LogEntry log)
        {
            bool shouldPlayerCare = false;

            // Only IChatNotification log entries are actually displayed to player. Rest are saved in history.
            if (!(log is IChatNotification) || !IDontCareMenu.Instance.IsFilterEnabled)
            {
                return(true);
            }

            if (!IDontCareMenu.Instance.IsBlockEverythingMode)
            {
                shouldPlayerCare = CheckByFactionsShouldPlayerCare(log);
            }
            else
            {
                if (IDontCareMenu.Instance.IsDebugMode)
                {
                    FilteringHelper.DebugLog(log?.GetType()?.Name, InformationType.LogEntry);
                }
                return(false);
            }

            return(shouldPlayerCare);
        }
示例#5
0
        public IActionResult Index(
            string?searchString = null,
            string?filterBy     = null,
            string?filterValue  = null,
            int page            = 1
            )
        {
            filterBy = FilteringHelper.GetFilterBy(
                filterBy,
                filterValue,
                Request,
                AdminFilterCookieName
                );

            var centreId           = User.GetCentreId();
            var adminUsersAtCentre = userDataService.GetAdminUsersByCentreId(centreId);
            var categories         = GetCourseCategories(centreId);

            var model = new CentreAdministratorsViewModel(
                centreId,
                adminUsersAtCentre,
                categories,
                searchString,
                filterBy,
                page
                );

            Response.UpdateOrDeleteFilterCookie(AdminFilterCookieName, filterBy);

            return(View(model));
        }
示例#6
0
        public void FilterOrResetFilterToDefault_returns_expected_default_filtered_items_with_invalid_filter()
        {
            // Given
            var          expectedItems = new[] { ItemA1, ItemA3 }.AsQueryable();
            const string defaultFilterString = "Name|Name|a";
            const string invalidFilterString = "Name|INVALID|a";
            var          availableFilters    = new List <FilterModel>
            {
                new FilterModel(
                    "Name",
                    "Name",
                    new List <FilterOptionModel> {
                    new FilterOptionModel("A", "Name|Name|A", FilterStatus.Default)
                }
                    ),
            };
            var filterOptions = new FilterOptions(invalidFilterString, availableFilters, defaultFilterString);

            // When
            var(resultItems, resultString) = FilteringHelper.FilterOrResetFilterToDefault(InputItems, filterOptions);

            // Then
            resultItems.Should().BeEquivalentTo(expectedItems);
            resultString.Should().BeEquivalentTo(defaultFilterString);
        }
示例#7
0
        public CourseSetupViewModel(
            IEnumerable <CourseStatistics> courses,
            IEnumerable <string> categories,
            IEnumerable <string> topics,
            string?searchString,
            string sortBy,
            string sortDirection,
            string?filterBy,
            int page
            ) : base(searchString, page, true, sortBy, sortDirection, filterBy, searchLabel: "Search courses")
        {
            var sortedItems = GenericSortingHelper.SortAllItems(
                courses.AsQueryable(),
                sortBy,
                sortDirection
                );

            var filteredItems = FilteringHelper.FilterItems(sortedItems.AsQueryable(), filterBy).ToList();
            var searchedItems = GenericSearchHelper.SearchItems(filteredItems, SearchString).ToList();

            MatchingSearchResults = searchedItems.Count;
            SetTotalPages();
            var paginatedItems = GetItemsOnCurrentPage(searchedItems);

            Courses = paginatedItems.Select(c => new SearchableCourseStatisticsViewModel(c));

            Filters = CourseStatisticsViewModelFilterOptions.GetFilterOptions(categories, topics);
        }
示例#8
0
        public SearchSortFilterPaginationResult <T> SearchFilterSortAndPaginate <T>(
            IEnumerable <T> items,
            SearchSortFilterAndPaginateOptions searchSortFilterAndPaginateOptions
            ) where T : BaseSearchableItem
        {
            var    allItems            = items.ToList();
            var    itemsToReturn       = allItems;
            string?appliedFilterString = null;
            var    javascriptSearchSortFilterPaginateShouldBeEnabled =
                allItems.Count <= configuration.GetJavascriptSearchSortFilterPaginateItemLimit();

            if (searchSortFilterAndPaginateOptions.SearchOptions != null)
            {
                itemsToReturn = (searchSortFilterAndPaginateOptions.SearchOptions.UseTokeniseScorer
                    ? GenericSearchHelper.SearchItemsUsingTokeniseScorer(
                                     itemsToReturn,
                                     searchSortFilterAndPaginateOptions.SearchOptions.SearchString,
                                     searchSortFilterAndPaginateOptions.SearchOptions.SearchMatchCutoff
                                     )
                    : GenericSearchHelper.SearchItems(
                                     itemsToReturn,
                                     searchSortFilterAndPaginateOptions.SearchOptions.SearchString,
                                     searchSortFilterAndPaginateOptions.SearchOptions.SearchMatchCutoff
                                     )).ToList();
            }

            if (searchSortFilterAndPaginateOptions.FilterOptions != null)
            {
                var filteringReturnTuple = FilteringHelper.FilterOrResetFilterToDefault(
                    itemsToReturn,
                    searchSortFilterAndPaginateOptions.FilterOptions
                    );
                itemsToReturn       = filteringReturnTuple.filteredItems.ToList();
                appliedFilterString = filteringReturnTuple.appliedFilterString;
            }

            if (searchSortFilterAndPaginateOptions.SortOptions != null)
            {
                itemsToReturn = GenericSortingHelper.SortAllItems(
                    itemsToReturn.AsQueryable(),
                    searchSortFilterAndPaginateOptions.SortOptions.SortBy,
                    searchSortFilterAndPaginateOptions.SortOptions.SortDirection
                    ).ToList();
            }

            var paginateResult = PaginateItems(
                itemsToReturn,
                searchSortFilterAndPaginateOptions.PaginationOptions,
                javascriptSearchSortFilterPaginateShouldBeEnabled
                );

            return(new SearchSortFilterPaginationResult <T>(
                       paginateResult,
                       searchSortFilterAndPaginateOptions.SearchOptions?.SearchString,
                       searchSortFilterAndPaginateOptions.SortOptions?.SortBy,
                       searchSortFilterAndPaginateOptions.SortOptions?.SortDirection,
                       appliedFilterString
                       ));
        }
示例#9
0
        public void AddNewFilterToFilterString_appends_new_filter()
        {
            // When
            var result = FilteringHelper.AddNewFilterToFilterString("Test", "Filter");

            // Then
            result.Should().Be("Test╡Filter");
        }
示例#10
0
        public void AddNewFilterToFilterString_returns_new_filter_if_existingFilterString_is_null()
        {
            // When
            var result = FilteringHelper.AddNewFilterToFilterString(null, "Test");

            // Then
            result.Should().Be("Test");
        }
示例#11
0
        public void GetFilterString_with_clearFilters_true_returns_null()
        {
            // When
            var result = FilteringHelper.GetFilterString("FilterString", null, true, httpRequest, CookieName);

            // Then
            result.Should().BeNull();
        }
示例#12
0
        public void AddNewFilterToFilterString_doesnt_append_with_null_new_filter()
        {
            // When
            var result = FilteringHelper.AddNewFilterToFilterString("Test", null);

            // Then
            result.Should().Be("Test");
        }
示例#13
0
        public void GetFilterBy_with_CLEAR_filterBy_and_no_filterValue_returns_null()
        {
            // When
            var result = FilteringHelper.GetFilterBy("CLEAR", null, httpRequest, CookieName);

            // Then
            result.Should().BeNull();
        }
示例#14
0
        public void GetFilterBy_with_filterBy_and_filterValue_returns_combined_filter_by()
        {
            // When
            var result = FilteringHelper.GetFilterBy("filter-by", "filter-value", httpRequest, CookieName);

            // Then
            result.Should().Be("filter-by╡filter-value");
        }
示例#15
0
        public void GetFilterBy_with_CLEAR_filterBy_and_set_filterValue_returns_filterValue()
        {
            // When
            var result = FilteringHelper.GetFilterBy("CLEAR", "filter-value", httpRequest, CookieName);

            // Then
            result.Should().Be("filter-value");
        }
示例#16
0
        public void GetFilterString_with_clearFilters_true_does_not_append_new_filter()
        {
            // When
            var result = FilteringHelper.GetFilterString("FilterString", "newFilter", true, httpRequest, CookieName);

            // Then
            result.Should().BeNull();
        }
示例#17
0
        public void GetFilterString_with_no_parameters_and_no_cookies_returns_defaultFilterValue()
        {
            // When
            var result = FilteringHelper.GetFilterString(null, null, false, httpRequest, CookieName, "default-filter");

            // Then
            result.Should().Be("default-filter");
        }
示例#18
0
        public void AddNewFilterToFilterBy_appends_new_filter_even_if_substring(string filterBy, string newFilterValue)
        {
            // When
            var result = FilteringHelper.AddNewFilterToFilterBy(filterBy, newFilterValue);

            // Then
            result.Should().Be($"{filterBy}╡{newFilterValue}");
        }
示例#19
0
 promptsWithOptions.Select(
     customPrompt => new FilterModel(
         $"CentreRegistrationPrompt{customPrompt.RegistrationField.Id}",
         customPrompt.PromptText,
         FilteringHelper.GetPromptFilterOptions(customPrompt)
         )
     )
 );
        public IActionResult Index(
            int page                    = 1,
            string?searchString         = null,
            string?sortBy               = null,
            string sortDirection        = GenericSortingHelper.Ascending,
            string?existingFilterString = null,
            string?newFilterToAdd       = null,
            bool clearFilters           = false,
            int?itemsPerPage            = null
            )
        {
            sortBy ??= DefaultSortByOptions.Name.PropertyName;
            existingFilterString = FilteringHelper.GetFilterString(
                existingFilterString,
                newFilterToAdd,
                clearFilters,
                Request,
                DelegateFilterCookieName,
                DelegateActiveStatusFilterOptions.IsActive.FilterValue
                );

            var centreId      = User.GetCentreId();
            var jobGroups     = jobGroupsDataService.GetJobGroupsAlphabetical();
            var customPrompts = promptsService.GetCentreRegistrationPrompts(centreId).ToList();
            var delegateUsers = userDataService.GetDelegateUserCardsByCentreId(centreId);

            var promptsWithOptions = customPrompts.Where(customPrompt => customPrompt.Options.Count > 0);
            var availableFilters   = AllDelegatesViewModelFilterOptions.GetAllDelegatesFilterViewModels(
                jobGroups,
                promptsWithOptions
                );

            var searchSortPaginationOptions = new SearchSortFilterAndPaginateOptions(
                new SearchOptions(searchString),
                new SortOptions(sortBy, sortDirection),
                new FilterOptions(
                    existingFilterString,
                    availableFilters,
                    DelegateActiveStatusFilterOptions.IsActive.FilterValue
                    ),
                new PaginationOptions(page, itemsPerPage)
                );

            var result = searchSortFilterPaginateService.SearchFilterSortAndPaginate(
                delegateUsers,
                searchSortPaginationOptions
                );

            var model = new AllDelegatesViewModel(
                result,
                customPrompts,
                availableFilters
                );

            Response.UpdateFilterCookie(DelegateFilterCookieName, result.FilterString);

            return(View(model));
        }
示例#21
0
        public IActionResult Index(
            string?searchString         = null,
            string?sortBy               = null,
            string sortDirection        = GenericSortingHelper.Ascending,
            string?existingFilterString = null,
            string?newFilterToAdd       = null,
            bool clearFilters           = false,
            int page         = 1,
            int?itemsPerPage = null
            )
        {
            sortBy ??= DefaultSortByOptions.Name.PropertyName;
            existingFilterString = FilteringHelper.GetFilterString(
                existingFilterString,
                newFilterToAdd,
                clearFilters,
                Request,
                CourseFilterCookieName,
                CourseStatusFilterOptions.IsActive.FilterValue
                );

            var centreId   = User.GetCentreId();
            var categoryId = User.GetAdminCourseCategoryFilter();

            var details = courseService.GetCentreCourseDetails(centreId, categoryId);

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

            var searchSortPaginationOptions = new SearchSortFilterAndPaginateOptions(
                new SearchOptions(searchString),
                new SortOptions(sortBy, sortDirection),
                new FilterOptions(
                    existingFilterString,
                    availableFilters,
                    CourseStatusFilterOptions.IsActive.FilterValue
                    ),
                new PaginationOptions(page, itemsPerPage)
                );

            var result = searchSortFilterPaginateService.SearchFilterSortAndPaginate(
                details.Courses,
                searchSortPaginationOptions
                );

            var model = new CourseSetupViewModel(
                result,
                availableFilters,
                config
                );

            Response.UpdateFilterCookie(CourseFilterCookieName, result.FilterString);

            return(View(model));
        }
        public IActionResult Index(
            int brandId,
            int page                    = 1,
            string?sortBy               = null,
            string sortDirection        = GenericSortingHelper.Ascending,
            string?existingFilterString = null,
            string?newFilterToAdd       = null,
            bool clearFilters           = false
            )
        {
            var brand = brandsService.GetPublicBrandById(brandId);

            if (brand == null)
            {
                return(NotFound());
            }

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

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

            var categories       = applications.Select(x => x.CategoryName).Distinct().OrderBy(x => x).ToList();
            var topics           = applications.Select(x => x.CourseTopic).Distinct().OrderBy(x => x).ToList();
            var availableFilters = LearningContentViewModelFilterOptions
                                   .GetFilterOptions(categories, topics).ToList();

            var searchSortPaginationOptions = new SearchSortFilterAndPaginateOptions(
                null,
                new SortOptions(sortBy, sortDirection),
                new FilterOptions(
                    existingFilterString,
                    availableFilters
                    ),
                new PaginationOptions(page)
                );

            var result = searchSortFilterPaginateService.SearchFilterSortAndPaginate(
                applications,
                searchSortPaginationOptions
                );

            var model = new LearningContentViewModel(result, availableFilters, brand, tutorials);

            Response.UpdateFilterCookie(BrandCoursesFilterCookieName, result.FilterString);

            return(View(model));
        }
        public IActionResult AddCourseToGroupSelectCourse(
            int groupId,
            string?searchString         = null,
            string?existingFilterString = null,
            string?newFilterToAdd       = null,
            bool clearFilters           = false,
            int page = 1
            )
        {
            existingFilterString = FilteringHelper.GetFilterString(
                existingFilterString,
                newFilterToAdd,
                clearFilters,
                Request,
                GroupAddCourseFilterCookieName
                );

            var centreId = User.GetCentreId();

            var adminCategoryFilter = User.GetAdminCourseCategoryFilter();

            var courses    = courseService.GetEligibleCoursesToAddToGroup(centreId, adminCategoryFilter, groupId).ToList();
            var categories = courseService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
            var topics     = courseService.GetTopicsForCentreAndCentrallyManagedCourses(centreId);

            var groupName = groupsService.GetGroupName(groupId, centreId);

            var availableFilters = (adminCategoryFilter == null
                ? AddCourseToGroupViewModelFilterOptions.GetAllCategoriesFilters(categories, topics)
                : AddCourseToGroupViewModelFilterOptions.GetSingleCategoryFilters(courses)).ToList();

            var searchSortPaginationOptions = new SearchSortFilterAndPaginateOptions(
                new SearchOptions(searchString),
                new SortOptions(nameof(CourseAssessmentDetails.CourseName), GenericSortingHelper.Ascending),
                new FilterOptions(existingFilterString, availableFilters),
                new PaginationOptions(page)
                );
            var result = searchSortFilterPaginateService.SearchFilterSortAndPaginate(
                courses,
                searchSortPaginationOptions
                );

            var model = new AddCourseToGroupCoursesViewModel(
                result,
                availableFilters,
                adminCategoryFilter,
                groupId,
                groupName !
                );

            Response.UpdateFilterCookie(GroupAddCourseFilterCookieName, result.FilterString);

            return(View(model));
        }
示例#24
0
        public void AddNewFilterToFilterString_doesnt_append_with_new_filter_already_in_filterString(
            string filterString,
            string newFilterToAdd
            )
        {
            // When
            var result = FilteringHelper.AddNewFilterToFilterString(filterString, newFilterToAdd);

            // Then
            result.Should().Be(filterString);
        }
示例#25
0
        public async Task <IActionResult> Index(
            int page                    = 1,
            string?searchString         = null,
            string?existingFilterString = null,
            string?newFilterToAdd       = null,
            bool clearFilters           = false,
            int?itemsPerPage            = null
            )
        {
            if (!await featureManager.IsEnabledAsync(FeatureFlags.RefactoredFindYourCentrePage))
            {
                var model = new FindYourCentreViewModel(configuration);

                return(View("Index", model));
            }

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

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

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

            var searchSortPaginationOptions = new SearchSortFilterAndPaginateOptions(
                new SearchOptions(searchString, searchMatchCutoff: 90),
                null,
                new FilterOptions(
                    existingFilterString,
                    availableFilters
                    ),
                new PaginationOptions(page, itemsPerPage)
                );

            var result = searchSortFilterPaginateService.SearchFilterSortAndPaginate(
                centreSummaries,
                searchSortPaginationOptions
                );

            var refactoredModel = new RefactoredFindYourCentreViewModel(
                result,
                availableFilters
                );

            Response.UpdateFilterCookie(FindCentreFilterCookieName, result.FilterString);

            return(View("RefactoredFindYourCentre", refactoredModel));
        }
示例#26
0
        public void AddNewFilterToFilterString_appends_new_filter_even_if_substring(
            string filterString,
            string newFilterToAdd
            )
        {
            // When
            var result = FilteringHelper.AddNewFilterToFilterString(filterString, newFilterToAdd);

            // Then
            result.Should().Be($"{filterString}╡{newFilterToAdd}");
        }
示例#27
0
        public void AddNewFilterToFilterBy_doesnt_append_with_new_filter_already_in_filterBy(
            string filterBy,
            string newFilterValue
            )
        {
            // When
            var result = FilteringHelper.AddNewFilterToFilterBy(filterBy, newFilterValue);

            // Then
            result.Should().Be(filterBy);
        }
示例#28
0
        public void FilterItems_with_some_filters_in_same_group_returns_expected_items()
        {
            // Given
            var          expectedItems = new[] { ItemA3 }.AsQueryable();
            const string filterString = "Group|Name|a╡Group|Name|b╡Number|Number|3";

            // When
            var result = FilteringHelper.FilterItems(InputItems, filterString);

            // Then
            result.Should().BeEquivalentTo(expectedItems);
        }
示例#29
0
        public void FilterItems_returns_expected_items_with_multiple_filters()
        {
            // Given
            var          expectedItems = new[] { ItemA1 }.AsQueryable();
            const string filterString = "Name|Name|a╡Number|Number|1";

            // When
            var result = FilteringHelper.FilterItems(InputItems, filterString);

            // Then
            result.Should().BeEquivalentTo(expectedItems);
        }
示例#30
0
        public void GetFilterString_with_EmptyFiltersCookieValue_returns_null()
        {
            // Given
            A.CallTo(() => httpRequest.Cookies.ContainsKey(CookieName)).Returns(true);
            A.CallTo(() => httpRequest.Cookies[CookieName]).Returns(FilteringHelper.EmptyFiltersCookieValue);

            // When
            var result = FilteringHelper.GetFilterString(null, null, false, httpRequest, CookieName);

            // Then
            result.Should().BeNull();
        }