Partial rewrite getting course title/description

This commit is contained in:
powe97 2023-07-27 19:04:34 -04:00
parent 6bdd4f6944
commit f3801ba31c

View file

@ -1,4 +1,5 @@
#include<regex> #include<regex>
#include<utility>
#include<fstream> #include<fstream>
#include<iostream> #include<iostream>
#include<filesystem> #include<filesystem>
@ -61,7 +62,7 @@ void generate_course_page(const std::string&,const quatalog_data_t&,Json::Value&
void get_prerequisites(const quatalog_data_t&,std::string); void get_prerequisites(const quatalog_data_t&,std::string);
void generate_opt_container(std::ostream&); void generate_opt_container(std::ostream&);
std::string generate_credit_string(const Json::Value& credits); std::string generate_credit_string(const Json::Value& credits);
std::string get_course_title(const std::string&,const quatalog_data_t&); std::pair<std::string,std::string> get_course_title_and_description(const std::string&,const quatalog_data_t&);
void generate_years_table(const Json::Value&,const Json::Value&,const quatalog_data_t&,const std::string&,std::ostream&); void generate_years_table(const Json::Value&,const Json::Value&,const quatalog_data_t&,const std::string&,std::ostream&);
void generate_year_row(const int,const Json::Value&,const Json::Value&,const quatalog_data_t&,const std::string&,std::ostream&); void generate_year_row(const int,const Json::Value&,const Json::Value&,const quatalog_data_t&,const std::string&,std::ostream&);
bool is_term_scheduled(const std::string&,const quatalog_data_t&); bool is_term_scheduled(const std::string&,const quatalog_data_t&);
@ -227,14 +228,14 @@ Json::Value get_data(const Json::Value& data,
course_id.replace(0,4,"IHSS"); course_id.replace(0,4,"IHSS");
const auto& ihss = data[course_id]; const auto& ihss = data[course_id];
for(const auto& key : inqr.getMemberNames()) {
out[key] = inqr[key];
if(out[key].isObject()) out[key]["prefix"] = "INQR";
}
for(const auto& key : ihss.getMemberNames()) { for(const auto& key : ihss.getMemberNames()) {
out[key] = ihss[key]; out[key] = ihss[key];
if(out[key].isObject()) out[key]["prefix"] = "IHSS"; if(out[key].isObject()) out[key]["prefix"] = "IHSS";
} }
for(const auto& key : inqr.getMemberNames()) {
out[key] = inqr[key];
if(out[key].isObject()) out[key]["prefix"] = "INQR";
}
} else { } else {
out = data[course_id]; out = data[course_id];
for(const auto& key : out.getMemberNames()) { for(const auto& key : out.getMemberNames()) {
@ -249,9 +250,9 @@ void generate_course_page(const std::string& course_id,
Json::Value& searchable_catalog, Json::Value& searchable_catalog,
std::ostream& os) { std::ostream& os) {
std::cerr << "Generating course page for " << course_id << "..." << std::endl; std::cerr << "Generating course page for " << course_id << "..." << std::endl;
std::string course_name = get_course_title(course_id,quatalog_data); const auto& title_and_description = get_course_title_and_description(course_id,quatalog_data);
std::string description; const auto& course_name = title_and_description.first;
const auto& catalog_entry = quatalog_data.catalog[course_id]; const auto& description = title_and_description.second;
const auto& prereqs_entry = get_data(quatalog_data.prerequisites,course_id); const auto& prereqs_entry = get_data(quatalog_data.prerequisites,course_id);
const auto& terms_offered = get_data(quatalog_data.terms_offered,course_id); const auto& terms_offered = get_data(quatalog_data.terms_offered,course_id);
const auto& latest_term = terms_offered["latest_term"].asString(); const auto& latest_term = terms_offered["latest_term"].asString();
@ -259,22 +260,6 @@ void generate_course_page(const std::string& course_id,
const auto& credit_string = generate_credit_string(credits); const auto& credit_string = generate_credit_string(credits);
const auto& credit_string_long = credit_string + " " + (credits["max"].asInt() == 1 ? "credit" : "credits"); const auto& credit_string_long = credit_string + " " + (credits["max"].asInt() == 1 ? "credit" : "credits");
if(catalog_entry) {
description = catalog_entry["description"].asString();
} else {
description = "This course is not in the most recent catalog. "
"It may have been discontinued, had its course "
"code changed, or just not be in the catalog for "
"some other reason.";
}
const auto& mid_digits = course_id.substr(6,2);
if(mid_digits == "96" || mid_digits == "97") {
course_name = "Topics in " + course_id.substr(0,4);
description = "Course codes between X960 and X979 are for topics "
"courses. They are often recycled and used for new "
"or experimental courses.";
}
Json::Value searchable_catalog_entry; Json::Value searchable_catalog_entry;
searchable_catalog_entry["code"] = course_id; searchable_catalog_entry["code"] = course_id;
searchable_catalog_entry["name"] = course_name; searchable_catalog_entry["name"] = course_name;
@ -551,16 +536,34 @@ void generate_opt_container(std::ostream& os) {
tag(os,TAG::END,"div"); tag(os,TAG::END,"div");
} }
std::string get_course_title(const std::string& course_id, std::pair<std::string,std::string>
get_course_title_and_description(const std::string& course_id,
const quatalog_data_t& quatalog_data) { const quatalog_data_t& quatalog_data) {
const auto& catalog_entry = get_data(quatalog_data.catalog,course_id); const auto& catalog_entry = get_data(quatalog_data.catalog,course_id);
const auto& terms_offered = get_data(quatalog_data.terms_offered,course_id); const auto& terms_offered = get_data(quatalog_data.terms_offered,course_id);
const auto& latest_term = terms_offered["latest_term"].asString(); const auto& latest_term = terms_offered["latest_term"].asString();
std::string title, description;
if(catalog_entry) { if(catalog_entry) {
return catalog_entry["name"].asString(); title = catalog_entry["name"].asString();
} else { } else {
return terms_offered[latest_term]["title"].asString(); title = terms_offered[latest_term]["title"].asString();
} }
if(catalog_entry) {
description = catalog_entry["description"].asString();
} else {
description = "This course is not in the most recent catalog. "
"It may have been discontinued, had its course "
"code changed, or just not be in the catalog for "
"some other reason.";
}
const auto& mid_digits = course_id.substr(6,2);
if(mid_digits == "96" || mid_digits == "97") {
title = "Topics in " + course_id.substr(0,4);
description = "Course codes between X960 and X979 are for topics "
"courses. They are often recycled and used for new "
"or experimental courses.";
}
return std::make_pair(title,description);
} }
void generate_course_pill(std::string course_id, void generate_course_pill(std::string course_id,
@ -570,7 +573,7 @@ void generate_course_pill(std::string course_id,
course_id[3] = 'O'; course_id[3] = 'O';
} }
course_id[4] = '-'; course_id[4] = '-';
const auto& title = get_course_title(course_id,qlog); const auto& title = get_course_title_and_description(course_id,qlog).first;
tag(os,TAG::INLINE) << R"(<a class="course-pill" href=")" << course_id tag(os,TAG::INLINE) << R"(<a class="course-pill" href=")" << course_id
<< R"(">)" << R"(">)"
<< course_id; << course_id;