From b94052e15edb14716a2a9b4c8c8eea59d5b95518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20Bj=C3=B6rkqvist?= Date: Mon, 19 Aug 2024 13:20:29 +0200 Subject: [PATCH 1/2] Recommended prerequisites are now fetched from Om Kursen, not Kopps --- .../js/app/components/CourseSectionList.jsx | 5 +- server/apiCalls/getFilteredData.js | 5 +- server/apiCalls/kursinfoApi.js | 2 + .../controllers/__tests__/courseCtrl.test.js | 248 +++++++++--------- 4 files changed, 133 insertions(+), 127 deletions(-) diff --git a/public/js/app/components/CourseSectionList.jsx b/public/js/app/components/CourseSectionList.jsx index 211da55d..b411995b 100644 --- a/public/js/app/components/CourseSectionList.jsx +++ b/public/js/app/components/CourseSectionList.jsx @@ -61,7 +61,10 @@ function CourseSectionList({ courseInfo = {}, partToShow, syllabus = {}, syllabu const during = [ ...eligibility, - { header: translation.courseInformation.course_prerequisites, text: courseInfo.course_prerequisites }, + { + header: translation.courseInformation.course_prerequisites, + text: courseInfo.course_recommended_prerequisites, + }, { header: translation.courseInformation.course_required_equipment, text: courseRequiredEquipment }, { header: translation.courseInformation.course_literature, text: literatureText }, ] diff --git a/server/apiCalls/getFilteredData.js b/server/apiCalls/getFilteredData.js index 1df3ab1a..6005c783 100644 --- a/server/apiCalls/getFilteredData.js +++ b/server/apiCalls/getFilteredData.js @@ -44,7 +44,6 @@ function _parseCourseDefaultInformation(courseDetails, language) { : INFORM_IF_IMPORTANT_INFO_IS_MISSING_ABOUT_MIN_FIELD_OF_STUDY[language], course_possibility_to_addition: parseOrSetEmpty(course.possibilityToAddition, language), course_possibility_to_completions: parseOrSetEmpty(course.possibilityToCompletion, language), - course_prerequisites: parseOrSetEmpty(course.prerequisites, language), course_recruitment_text: parseOrSetEmpty(course.recruitmentText, language, true), course_required_equipment: parseOrSetEmpty(course.requiredEquipment, language), course_suggested_addon_studies: parseOrSetEmpty(course.addOn, language), @@ -243,13 +242,15 @@ const getFilteredData = async ({ courseCode, language, memoList }) => { //* **** Course information that is static on the course side *****// const courseDefaultInformation = _parseCourseDefaultInformation(courseDetails, language) - const { sellingText, courseDisposition, supplementaryInfo, imageInfo } = await courseApi.getCourseInfo(courseCode) + const { sellingText, courseDisposition, recommendedPrerequisites, supplementaryInfo, imageInfo } = + await courseApi.getCourseInfo(courseCode) const courseInfo = { ...courseDefaultInformation, sellingText: resolveText(sellingText, language), imageFromAdmin: imageInfo, course_disposition: resolveText(courseDisposition, language), + course_recommended_prerequisites: resolveText(recommendedPrerequisites, language), course_supplemental_information: resolveText(supplementaryInfo, language), } diff --git a/server/apiCalls/kursinfoApi.js b/server/apiCalls/kursinfoApi.js index 2de5f603..0e964f74 100644 --- a/server/apiCalls/kursinfoApi.js +++ b/server/apiCalls/kursinfoApi.js @@ -14,6 +14,7 @@ async function _getCourseInfo(courseCode) { imageInfo: '', supplementaryInfo: { sv: '', en: '' }, courseDisposition: { sv: '', en: '' }, + recommendedPrerequisites: { sv: '', en: '' }, } if (res.statusCode === 200 && res.body) { @@ -21,6 +22,7 @@ async function _getCourseInfo(courseCode) { return { sellingText: body.sellingText ?? defaultValues.sellingText, courseDisposition: body.courseDisposition ?? defaultValues.courseDisposition, + recommendedPrerequisites: body.recommendedPrerequisites ?? defaultValues.recommendedPrerequisites, supplementaryInfo: body.supplementaryInfo ?? defaultValues.supplementaryInfo, imageInfo: body.imageInfo ?? defaultValues.imageInfo, } diff --git a/server/controllers/__tests__/courseCtrl.test.js b/server/controllers/__tests__/courseCtrl.test.js index b57945d8..9ff0e364 100644 --- a/server/controllers/__tests__/courseCtrl.test.js +++ b/server/controllers/__tests__/courseCtrl.test.js @@ -112,131 +112,131 @@ describe('Discontinued course to test', () => { ) expect(testResponse.html).toMatchInlineSnapshot(` - { - "applicationStore": {}, - "basename": "/student/kurser/kurs", - "context": { - "activeSemesters": [], - "browserConfig": { - "session": {}, - "sessionSecret": "xxx", - }, - "courseCode": "FCK3305", - "courseData": { - "courseInfo": { - "course_application_info": "

Kursen ges inte läsåret 22/23.

Kontakta examinator / kursansvarig för information.

", - "course_code": "FCK3305", - "course_contact_name": "Ingen information tillagd", - "course_department": "CBH/Kemi", - "course_department_code": "CE", - "course_department_link": "CBH/Kemi", - "course_disposition": "

Kursupplägg på svenska

", - "course_education_type_id": null, - "course_examiners": "

Examiner 1

", - "course_grade_scale": "P, F", - "course_last_exam": [], - "course_level_code": "RESEARCH", - "course_literature": "

Litteratur anvisas vid kursstart.

", - "course_main_subject": "Denna kurs tillhör inget huvudområde.", - "course_possibility_to_addition": "Ingen information tillagd", - "course_possibility_to_completions": "Ingen information tillagd", - "course_prerequisites": "Ingen information tillagd", - "course_recruitment_text": "

Teori och metoder inom glykovetenskap.

", - "course_required_equipment": "Ingen information tillagd", - "course_state": "ESTABLISHED", - "course_suggested_addon_studies": "Ingen information tillagd", - "course_supplemental_information": "

Övrig info

", - "course_supplemental_information_url": "Ingen information tillagd", - "course_supplemental_information_url_text": "Ingen information tillagd", - "imageFromAdmin": "own_image", - "sellingText": "

Fantastisk kurs

", - }, - "courseTitleData": { - "course_code": "FCK3305", - "course_credits": 7.5, - "course_credits_text": "hp", - "course_other_title": "Carbohydrate Technologies in Glycoscience", - "course_title": "Kolhydratteknik inom glykovetenskap", - }, - "emptySyllabusData": { - "course_additional_regulations": "", - "course_content": "Ingen information tillagd", - "course_decision_to_discontinue": "", - "course_eligibility": "Ingen information tillagd", - "course_ethical": "", - "course_examination": "Ingen information tillagd", - "course_examination_comments": "", - "course_goals": "Ingen information tillagd", - "course_literature": "Ingen information tillagd", - "course_literature_comment": "Ingen information tillagd", - "course_required_equipment": "", - "course_requirments_for_final_grade": "", - "course_transitional_reg": "", - "course_valid_from": undefined, - "course_valid_to": undefined, - }, - "language": "sv", - "roundsBySemester": {}, - "syllabusList": [ - { - "course_additional_regulations": "", - "course_content": "

Glykovetenskap är ett tvärvetenskapligt forskningsområde som fokuserar på att förstå strukturer och funktionella roller för glykaner (kolhydrater) i biologiska system. Det täcker ämnesområden som biologi, biokemi, kemi, medicin, materialvetenskap, nanoteknologi och beräkningsvetenskap. Kursens mål är att ge en översikt över aktuell kunskap och teknik inom glykovetenskap, utmaningar och möjligheter för bred tillämpning av kolhydratteknik inom hälsa, energi och materialvetenskap, samt god teoretisk insikt och praktiska färdigheter i hur kolhydratteknik kan bidra till hållbar utveckling inom energi- och materialvetenskap.

Ämnen som avhandlas omfattar kolhydratteknik inom hälsa, energi och materialvetenskap, glykaners funktioner, kolhydratanalys av komplexa kolhydrater, glykaner och glykokonjugat, uppbyggnaden av växters cellvägg, kolhydrataktiva enzymer, enzymatisk nedbrytning av växtbiomassa och modifiering av växtbaserade fibrer, biosyntes och av cellulosa och kitin, skapande av nya kompositer genom bioteknologisk modifiering av växtcellväggen, modifiering av glykaner genom att förändra syntesvägar, omvandling av växtbiomassa till finkemikalier och råmaterial, polymera material och nanomaterial, användande av biomassabaserade nanomaterial för nya material och tillämpningar.

", - "course_decision_to_discontinue": "Ingen information tillagd", - "course_eligibility": "

Behörig till studier på forskarnivå. Goda kunskaper i engelska.

", - "course_ethical": "", - "course_examination": "", - "course_examination_comments": "Examinator beslutar, baserat på rekommendation från KTH:s samordnare för funktionsnedsättning, om eventuell anpassad examination för studenter med dokumenterad, varaktig funktionsnedsättning.

Examinator får medge annan examinationsform vid omexamination av enstaka studenter.

Betygskriterier redovisas i kurs-PM.

", - "course_goals": "

Efter fullföljande av kursen förväntas studenten kunna

", - "course_literature": "Ingen information tillagd", - "course_literature_comment": "Ingen information tillagd", - "course_required_equipment": "Ingen information tillagd", - "course_requirments_for_final_grade": "

Godkänd skriftlig tentamen, godkända inlämningsuppgifter kopplade till föreläsningarna, 100% närvaro på laborationer och slutförande av laborationer, samt godkända laborationsrapporter.

", - "course_transitional_reg": "", - "course_valid_from": { - "semesterNumber": 2, - "year": 2019, - }, - "course_valid_to": undefined, - }, - ], - }, - "employees": { - "responsibles": [], - "teachers": [], - }, - "hostUrl": undefined, - "initiallySelectedRoundIndex": undefined, - "initiallySelectedSemester": null, - "isCancelledOrDeactivated": false, - "lang": "sv", - "paths": { - "system": { - "monitor": { - "uri": "/_monitor", - }, - "robots": { - "uri": "/robots.txt", - }, - }, - }, - "proxyPrefixPath": { - "uri": "/student/kurser/kurs", +{ + "applicationStore": {}, + "basename": "/student/kurser/kurs", + "context": { + "activeSemesters": [], + "browserConfig": { + "session": {}, + "sessionSecret": "xxx", + }, + "courseCode": "FCK3305", + "courseData": { + "courseInfo": { + "course_application_info": "

Kursen ges inte läsåret 22/23.

Kontakta examinator / kursansvarig för information.

", + "course_code": "FCK3305", + "course_contact_name": "Ingen information tillagd", + "course_department": "CBH/Kemi", + "course_department_code": "CE", + "course_department_link": "CBH/Kemi", + "course_disposition": "

Kursupplägg på svenska

", + "course_education_type_id": null, + "course_examiners": "

Examiner 1

", + "course_grade_scale": "P, F", + "course_last_exam": [], + "course_level_code": "RESEARCH", + "course_literature": "

Litteratur anvisas vid kursstart.

", + "course_main_subject": "Denna kurs tillhör inget huvudområde.", + "course_possibility_to_addition": "Ingen information tillagd", + "course_possibility_to_completions": "Ingen information tillagd", + "course_recommended_prerequisites": "", + "course_recruitment_text": "

Teori och metoder inom glykovetenskap.

", + "course_required_equipment": "Ingen information tillagd", + "course_state": "ESTABLISHED", + "course_suggested_addon_studies": "Ingen information tillagd", + "course_supplemental_information": "

Övrig info

", + "course_supplemental_information_url": "Ingen information tillagd", + "course_supplemental_information_url_text": "Ingen information tillagd", + "imageFromAdmin": "own_image", + "sellingText": "

Fantastisk kurs

", + }, + "courseTitleData": { + "course_code": "FCK3305", + "course_credits": 7.5, + "course_credits_text": "hp", + "course_other_title": "Carbohydrate Technologies in Glycoscience", + "course_title": "Kolhydratteknik inom glykovetenskap", + }, + "emptySyllabusData": { + "course_additional_regulations": "", + "course_content": "Ingen information tillagd", + "course_decision_to_discontinue": "", + "course_eligibility": "Ingen information tillagd", + "course_ethical": "", + "course_examination": "Ingen information tillagd", + "course_examination_comments": "", + "course_goals": "Ingen information tillagd", + "course_literature": "Ingen information tillagd", + "course_literature_comment": "Ingen information tillagd", + "course_required_equipment": "", + "course_requirments_for_final_grade": "", + "course_transitional_reg": "", + "course_valid_from": undefined, + "course_valid_to": undefined, + }, + "language": "sv", + "roundsBySemester": {}, + "syllabusList": [ + { + "course_additional_regulations": "", + "course_content": "

Glykovetenskap är ett tvärvetenskapligt forskningsområde som fokuserar på att förstå strukturer och funktionella roller för glykaner (kolhydrater) i biologiska system. Det täcker ämnesområden som biologi, biokemi, kemi, medicin, materialvetenskap, nanoteknologi och beräkningsvetenskap. Kursens mål är att ge en översikt över aktuell kunskap och teknik inom glykovetenskap, utmaningar och möjligheter för bred tillämpning av kolhydratteknik inom hälsa, energi och materialvetenskap, samt god teoretisk insikt och praktiska färdigheter i hur kolhydratteknik kan bidra till hållbar utveckling inom energi- och materialvetenskap.

Ämnen som avhandlas omfattar kolhydratteknik inom hälsa, energi och materialvetenskap, glykaners funktioner, kolhydratanalys av komplexa kolhydrater, glykaner och glykokonjugat, uppbyggnaden av växters cellvägg, kolhydrataktiva enzymer, enzymatisk nedbrytning av växtbiomassa och modifiering av växtbaserade fibrer, biosyntes och av cellulosa och kitin, skapande av nya kompositer genom bioteknologisk modifiering av växtcellväggen, modifiering av glykaner genom att förändra syntesvägar, omvandling av växtbiomassa till finkemikalier och råmaterial, polymera material och nanomaterial, användande av biomassabaserade nanomaterial för nya material och tillämpningar.

", + "course_decision_to_discontinue": "Ingen information tillagd", + "course_eligibility": "

Behörig till studier på forskarnivå. Goda kunskaper i engelska.

", + "course_ethical": "", + "course_examination": "", + "course_examination_comments": "Examinator beslutar, baserat på rekommendation från KTH:s samordnare för funktionsnedsättning, om eventuell anpassad examination för studenter med dokumenterad, varaktig funktionsnedsättning.

Examinator får medge annan examinationsform vid omexamination av enstaka studenter.

Betygskriterier redovisas i kurs-PM.

", + "course_goals": "

Efter fullföljande av kursen förväntas studenten kunna

", + "course_literature": "Ingen information tillagd", + "course_literature_comment": "Ingen information tillagd", + "course_required_equipment": "Ingen information tillagd", + "course_requirments_for_final_grade": "

Godkänd skriftlig tentamen, godkända inlämningsuppgifter kopplade till föreläsningarna, 100% närvaro på laborationer och slutförande av laborationer, samt godkända laborationsrapporter.

", + "course_transitional_reg": "", + "course_valid_from": { + "semesterNumber": 2, + "year": 2019, }, + "course_valid_to": undefined, }, - "location": undefined, - } - `) + ], + }, + "employees": { + "responsibles": [], + "teachers": [], + }, + "hostUrl": undefined, + "initiallySelectedRoundIndex": undefined, + "initiallySelectedSemester": null, + "isCancelledOrDeactivated": false, + "lang": "sv", + "paths": { + "system": { + "monitor": { + "uri": "/_monitor", + }, + "robots": { + "uri": "/robots.txt", + }, + }, + }, + "proxyPrefixPath": { + "uri": "/student/kurser/kurs", + }, + }, + "location": undefined, +} +`) }) }) From 1b46ae39004815e92c0b2997e1e1b386fda51636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20Bj=C3=B6rkqvist?= Date: Mon, 19 Aug 2024 13:36:40 +0200 Subject: [PATCH 2/2] Only show recommended prerequisites if it has content --- public/js/app/components/CourseSectionList.jsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/public/js/app/components/CourseSectionList.jsx b/public/js/app/components/CourseSectionList.jsx index b411995b..8c656c18 100644 --- a/public/js/app/components/CourseSectionList.jsx +++ b/public/js/app/components/CourseSectionList.jsx @@ -59,12 +59,17 @@ function CourseSectionList({ courseInfo = {}, partToShow, syllabus = {}, syllabu const eligibility = getEligibility() + const recommendedPrerequisitesSection = + courseInfo.course_recommended_prerequisites != '' + ? { + header: translation.courseInformation.course_prerequisites, + text: courseInfo.course_recommended_prerequisites, + } + : {} + const during = [ ...eligibility, - { - header: translation.courseInformation.course_prerequisites, - text: courseInfo.course_recommended_prerequisites, - }, + recommendedPrerequisitesSection, { header: translation.courseInformation.course_required_equipment, text: courseRequiredEquipment }, { header: translation.courseInformation.course_literature, text: literatureText }, ]