diff --git a/ProgramInformationV2.Data/FieldList/CredentialGroup.cs b/ProgramInformationV2.Data/FieldList/CredentialGroup.cs index f1f2c15..eeb2702 100644 --- a/ProgramInformationV2.Data/FieldList/CredentialGroup.cs +++ b/ProgramInformationV2.Data/FieldList/CredentialGroup.cs @@ -11,6 +11,7 @@ public CredentialGroup() { [FieldType.General] = "General information about the credential.", [FieldType.Link] = "Control what links, images, and videos are added to the credential page.", [FieldType.Overview] = "This information will be displayed on the credential page.", + [FieldType.CourseList] = "This information will be displayed with the typical plan of study.", [FieldType.Transcriptable] = "This information shows transcriptable information (like majors, minors, etc.).", [FieldType.Technical] = "Technical details used for internal purposes." }; @@ -28,6 +29,9 @@ public CredentialGroup() { new() { Title = "Credential Image", CategoryType = CategoryType.Credential, FieldType = FieldType.Link, InitialDescription = "This should link to an image that you would like featured on the program finder. You must add alternative text when linking an image." }, new() { Title = "Credential Image Alt Text", CategoryType = CategoryType.Credential, FieldType = FieldType.Link, InitialDescription = "Alternative text for the image." }, new() { Title = "Description", CategoryType = CategoryType.Credential, FieldType = FieldType.Overview, InitialDescription = "This text should describe the credential. It will be on the credential page." }, + new() { Title = "Program Notes Title", CategoryType = CategoryType.Credential, FieldType = FieldType.Overview, InitialDescription = "This is a way to overwrite the program notes title, if you need to use a more descriptive term than 'Notes'." }, + new() { Title = "Program Notes", CategoryType = CategoryType.Credential, FieldType = FieldType.Overview, InitialDescription = "This text has generic notes about the program, listed at the end of the page. Use this for disclaimers or additional information." }, + new() { Title = "Plan of Study Introduction", CategoryType = CategoryType.Credential, FieldType = FieldType.CourseList, InitialDescription = "This text will be above the plan of study and contains important notes about the plan of study." }, new() { Title = "Is This Credential Transcriptable", CategoryType = CategoryType.Credential, FieldType = FieldType.Transcriptable }, new() { Title = "Transcriptable Name", CategoryType = CategoryType.Credential, FieldType = FieldType.Transcriptable, InitialDescription = "The name the credential will appear as on transcripts." }, new() { Title = "Major Title", CategoryType = CategoryType.Credential, FieldType = FieldType.Transcriptable, }, diff --git a/ProgramInformationV2.Search/Getters/ProgramGetter.cs b/ProgramInformationV2.Search/Getters/ProgramGetter.cs index 16f72b9..c980418 100644 --- a/ProgramInformationV2.Search/Getters/ProgramGetter.cs +++ b/ProgramInformationV2.Search/Getters/ProgramGetter.cs @@ -76,7 +76,7 @@ public async Task> GetPrograms(string source, string searc f => departments.Any() ? f.Terms(m => m.Field(fld => fld.DepartmentList).Terms(departments)) : f.MatchAll(), f => skills.Any() ? f.Terms(m => m.Field(fld => fld.SkillList).Terms(skills)) : f.MatchAll()) .Must(m => !string.IsNullOrWhiteSpace(search) ? m.MultiMatch(m => m.Fields(fld => fld.Field("title^10").Field("summarytext^5").Field("description^2").Field("whoshouldapply")).Query(search)) : m.MatchAll()))) - .Sort(srt => string.IsNullOrWhiteSpace(search) ? srt.Ascending(f => f.TitleSortKeyword) : srt.Descending(f => SortSpecialField.Score)) + .Sort(srt => string.IsNullOrWhiteSpace(search) ? srt.Ascending(f => f.TitleSortKeyword) : srt.Descending(SortSpecialField.Score)) .Suggest(a => a.Phrase("didyoumean", p => p.Text(search).Field(fld => fld.Title)))); LogDebug(response); diff --git a/ProgramInformationV2.Search/Models/Credential.cs b/ProgramInformationV2.Search/Models/Credential.cs index 7f2d60c..a84813b 100644 --- a/ProgramInformationV2.Search/Models/Credential.cs +++ b/ProgramInformationV2.Search/Models/Credential.cs @@ -1,5 +1,5 @@ -using System.Text.Json; -using OpenSearch.Client; +using OpenSearch.Client; +using System.Text.Json; namespace ProgramInformationV2.Search.Models { @@ -49,6 +49,9 @@ public Credential() { public string MinorTitle { get; set; } = ""; public string Notes { get; set; } = ""; + public string NoteTitle { get; set; } = ""; + + public string PlanOfStudyIntroduction { get; set; } = ""; [Keyword] public string ProgramId { get; set; } = ""; diff --git a/ProgramInformationV2.sln b/ProgramInformationV2.sln index cf672ff..bd9c963 100644 --- a/ProgramInformationV2.sln +++ b/ProgramInformationV2.sln @@ -14,10 +14,6 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{64244983-1B95-4158-AAD6-313765A46B73}" ProjectSection(SolutionItems) = preProject README.md = README.md - .github\workflows\wigg-app-prod-course.yml = .github\workflows\wigg-app-prod-course.yml - .github\workflows\wigg-app-staging-course.yml = .github\workflows\wigg-app-staging-course.yml - .github\workflows\wigg-fun-prod-course.yml = .github\workflows\wigg-fun-prod-course.yml - .github\workflows\wigg-fun-staging-course.yml = .github\workflows\wigg-fun-staging-course.yml EndProjectSection EndProject Global diff --git a/ProgramInformationV2/Components/Layout/MainLayout.razor b/ProgramInformationV2/Components/Layout/MainLayout.razor index 14753dc..9d05a17 100644 --- a/ProgramInformationV2/Components/Layout/MainLayout.razor +++ b/ProgramInformationV2/Components/Layout/MainLayout.razor @@ -26,7 +26,7 @@ IT Partners Program / Course Repository
- Report a Problem + Report a Problem
\ No newline at end of file diff --git a/ProgramInformationV2/Components/Layout/SidebarLayout.razor b/ProgramInformationV2/Components/Layout/SidebarLayout.razor index 273d3c8..358e2d1 100644 --- a/ProgramInformationV2/Components/Layout/SidebarLayout.razor +++ b/ProgramInformationV2/Components/Layout/SidebarLayout.razor @@ -42,7 +42,7 @@ IT Partners Program / Course Repository
- Report a Problem + Report a Problem
diff --git a/ProgramInformationV2/Components/Pages/Credential/CourseList.razor b/ProgramInformationV2/Components/Pages/Credential/CourseList.razor index 27bd2ac..e197d87 100644 --- a/ProgramInformationV2/Components/Pages/Credential/CourseList.razor +++ b/ProgramInformationV2/Components/Pages/Credential/CourseList.razor @@ -7,6 +7,11 @@

Courses

To add courses to a credential, you must add a requirement set. You may add an existing requirement set or create a new requirement set below.

+

Plan of Study Introduction

+ + +

Chosen Requirement Sets

+ @if (CredentialItem != null && RequirementSetList != null) { @foreach (var requirementset in ChosenRequirementSetList.Select((v, i) => (v, i))) diff --git a/ProgramInformationV2/Components/Pages/Credential/CourseList.razor.cs b/ProgramInformationV2/Components/Pages/Credential/CourseList.razor.cs index 2c1b4c2..ba19f11 100644 --- a/ProgramInformationV2/Components/Pages/Credential/CourseList.razor.cs +++ b/ProgramInformationV2/Components/Pages/Credential/CourseList.razor.cs @@ -4,6 +4,7 @@ using ProgramInformationV2.Components.Layout; using ProgramInformationV2.Data.DataHelpers; using ProgramInformationV2.Data.DataModels; +using ProgramInformationV2.Data.FieldList; using ProgramInformationV2.Data.PageList; using ProgramInformationV2.Search.Getters; using ProgramInformationV2.Search.Models; @@ -13,6 +14,7 @@ namespace ProgramInformationV2.Components.Pages.Credential { public partial class CourseList { private SearchGenericItem _searchGenericItem = default!; + public IEnumerable FieldItems { get; set; } = default!; private string _sourceCode = ""; public List ChosenRequirementSetList { get; set; } = default!; @@ -31,6 +33,9 @@ public partial class CourseList { [Inject] protected CredentialGetter CredentialGetter { get; set; } = default!; + [Inject] + protected FieldManager FieldManager { get; set; } = default!; + [Inject] protected IJSRuntime JsRuntime { get; set; } = default!; @@ -122,6 +127,7 @@ protected override async Task OnInitializedAsync() { } } Layout.SetSidebar(SidebarEnum.Credential, CredentialItem.TitlePlusCredential); + FieldItems = await FieldManager.GetMergedFieldItems(_sourceCode, new CredentialGroup(), FieldType.CourseList); await GetRequirementSet(); await base.OnInitializedAsync(); } diff --git a/ProgramInformationV2/Components/Pages/Credential/Overview.razor b/ProgramInformationV2/Components/Pages/Credential/Overview.razor index 4bf9ff8..6ea5b88 100644 --- a/ProgramInformationV2/Components/Pages/Credential/Overview.razor +++ b/ProgramInformationV2/Components/Pages/Credential/Overview.razor @@ -6,6 +6,7 @@

Overview

+ @if (CredentialItem != null) { diff --git a/ProgramInformationV2/Components/Pages/Home.razor b/ProgramInformationV2/Components/Pages/Home.razor index eb55adb..e3057ff 100644 --- a/ProgramInformationV2/Components/Pages/Home.razor +++ b/ProgramInformationV2/Components/Pages/Home.razor @@ -21,13 +21,13 @@

Choose a Source

You have access to multiple sources, so you must choose a source before editing programs, credentials, etc.

- +
} @@ -92,7 +92,7 @@ else if (Sources != null)

Choose another Source

You have access to multiple sources, so you may choose a different source here.

- @foreach (var source in Sources) { @@ -103,5 +103,4 @@ else if (Sources != null) } - } diff --git a/README.md b/README.md index 01c049d..8db2aa6 100644 --- a/README.md +++ b/README.md @@ -7,12 +7,13 @@ This is the new Program Information for IT Partners, used to organize programs, ## Production location: This consists of five applications: -* **ProgramInformationV2**: The Blazor server application to handle back-end functions. https://programcourse.itpartners.illinois.edu -* **ProgramInformationV2.Function**: The Function Application for the API. https://programcourseapi.itpartners.illinois.edu -* **ProgramInformationV2.LoadFromEdw**: A console application used to batch load items from EDW +* **ProgramInformationV2**: The Blazor server application to handle back-end functions. https://course.wigg.illinois.edu +* **ProgramInformationV2.Function**: The Function Application for the API. https://courseapi.wigg.illinois.edu. * **ProgramInformationV2.Data**: The data access for all the processes * **ProgramInformationV2.Search**: The data access for searching (accessing AWS OpenSearch Service) +Swagger API documentation is available at https://courseapi.wigg.illinois.edu/api/swagger/ui + ## Development location: Currently, none. We do development on local machines, and will host temporary sites when end users need to see development work. @@ -37,12 +38,6 @@ Make sure the ProgramInformationV2 project is set up as the startup project befo If you run into the issue "The certificate chain was issued by an authority that is not trusted.", then add **TrustServerCertificate=True** to the connection string. -### Console App - -The console application is used to run batches of imports manually. This probably will be done once a semester. The two types of import batches are: -* Course Information. This uses the https://courses.illinois.edu/cisapp/explorer/schedule/ application to get courses by rubric and load them. This overwrites existing course information in the system. -* Faculty Names. This takes a list of names and does a mass change of faculty names to add NetIDs and URLs. The information can be pulled from the directory API using the attached HTML page. - ## Code to delete the test items in the OpenSearch Service ``