From 72dbee1127c6e12b7e19ffc9b691d0a696bf38ef Mon Sep 17 00:00:00 2001 From: Robert Czechowski <robert+git@czecho.de> Date: Thu, 14 May 2020 11:35:32 +0200 Subject: [PATCH] Make teacher information page configurable in config file --- src/config.rs | 5 +++++ src/core.rs | 8 ++++++-- src/main.rs | 1 + src/webfw_iron.rs | 5 ++++- templates/jwinf/teacher.hbs | 6 +++++- 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/config.rs b/src/config.rs index 3005d7d0..80e735cf 100644 --- a/src/config.rs +++ b/src/config.rs @@ -18,6 +18,7 @@ pub struct Config { pub cookie_signing_secret: Option<String>, pub disable_results_page: Option<bool>, pub server_message: Option<String>, + pub teacher_page: Option<String>, } #[derive(StructOpt, Debug)] @@ -58,6 +59,10 @@ pub struct Opt { /// Disable results page to reduce load on the server #[structopt(long = "disable-results-page")] pub disableresultspage: bool, + + /// Teacher page in task directory + #[structopt(short = "t", long = "teacherpage")] + pub teacherpage: Option<String>, } pub fn read_config_from_file(file: &Path) -> Config { diff --git a/src/core.rs b/src/core.rs index 018985ae..732d1d79 100644 --- a/src/core.rs +++ b/src/core.rs @@ -1030,7 +1030,7 @@ pub fn edit_profile<T: MedalConnection>(conn: &T, session_token: &str, user_id: Ok(result) } -pub fn teacher_infos<T: MedalConnection>(conn: &T, session_token: &str) -> MedalValueResult { +pub fn teacher_infos<T: MedalConnection>(conn: &T, session_token: &str, teacher_page: Option<&str>) -> MedalValueResult { let session = conn.get_session(&session_token).ensure_logged_in().ok_or(MedalError::NotLoggedIn)?; if !session.is_teacher { return Err(MedalError::AccessDenied); @@ -1038,7 +1038,11 @@ pub fn teacher_infos<T: MedalConnection>(conn: &T, session_token: &str) -> Medal let mut data = json_val::Map::new(); fill_user_data(&session, &mut data); - + + if let Some(teacher_page) = teacher_page { + data.insert("teacher_page".to_string(), to_json(&teacher_page)); + } + Ok(("teacher".to_string(), data)) } diff --git a/src/main.rs b/src/main.rs index 3620885c..341ce86b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -202,6 +202,7 @@ fn main() { // Let options override config values opt.databasefile.map(|x| config.database_file = Some(x)); opt.databaseurl.map(|x| config.database_url = Some(x)); + opt.teacherpage.map(|x| config.teacher_page = Some(x)); opt.port.map(|x| config.port = Some(x)); config.no_contest_scan = if opt.nocontestscan { Some(true) } else { config.no_contest_scan }; config.open_browser = if opt.openbrowser { Some(true) } else { config.open_browser }; diff --git a/src/webfw_iron.rs b/src/webfw_iron.rs index 43e11d96..97b66100 100644 --- a/src/webfw_iron.rs +++ b/src/webfw_iron.rs @@ -875,7 +875,10 @@ fn teacherinfos<C>(req: &mut Request) -> IronResult<Response> where C: MedalConnection + std::marker::Send + 'static { let session_token = req.expect_session_token()?; - let (template, data) = with_conn![core::teacher_infos, C, req, &session_token].aug(req)?; + let config = req.get::<Read<SharedConfiguration>>().unwrap(); + + let (template, data) = with_conn![core::teacher_infos, C, req, &session_token, config.teacher_page.as_ref().map(|x| &**x)].aug(req)?; + // .as_ref().map(|x| &**x) can be written as .as_deref() since rust 1.40 let mut resp = Response::new(); resp.set_mut(Template::new(&template, data)).set_mut(status::Ok); diff --git a/templates/jwinf/teacher.hbs b/templates/jwinf/teacher.hbs index 0395a861..60967842 100644 --- a/templates/jwinf/teacher.hbs +++ b/templates/jwinf/teacher.hbs @@ -2,7 +2,11 @@ <div class="columns"> <div class="column is-8 is-offset-2"> <h3 class="title is-4">Lehrer-Informationen</h3> - <iframe src="/tasks/teacher/index.html" style="height: calc(100vh - 550px); min-height:200px;"></iframe> + {{#if teacher_page }} + <iframe src="/tasks/{{ teacher_page }}" style="height: calc(100vh - 550px); min-height:200px;"></iframe> + {{else}} + <em>Noch keine Informationen vorhanden</em> + {{/if}} </div> </div> {{/inline}} -- GitLab