diff --git a/src/core.rs b/src/core.rs index bb839cc4f468e4296d6ce035a217f1d881f82139..df531074104d72226680f0437aabbaf95eb3516c 100644 --- a/src/core.rs +++ b/src/core.rs @@ -74,6 +74,22 @@ fn fill_user_data(session: &SessionUser, data: &mut json_val::Map, Option>), + data: &mut json_val::Map) +{ + let mut oauth_links: Vec<(String, String, String)> = Vec::new(); + if let Some(oauth_providers) = oauth_providers { + for oauth_provider in oauth_providers { + oauth_links.push((oauth_provider.provider_id.to_owned(), + oauth_provider.login_link_text.to_owned(), + oauth_provider.url.to_owned())); + } + } + + data.insert("self_url".to_string(), to_json(&self_url)); + data.insert("oauth_links".to_string(), to_json(&oauth_links)); +} + fn grade_to_string(grade: i32) -> String { match grade { 0 => "Noch kein Schüler".to_string(), @@ -90,7 +106,7 @@ fn grade_to_string(grade: i32) -> String { } pub fn index(conn: &T, session_token: Option, - (self_url, oauth_providers): (Option, Option>)) + oauth_infos: (Option, Option>)) -> (String, json_val::Map) { let mut data = json_val::Map::new(); @@ -103,17 +119,7 @@ pub fn index(conn: &T, session_token: Option, } } - let mut oauth_links: Vec<(String, String, String)> = Vec::new(); - if let Some(oauth_providers) = oauth_providers { - for oauth_provider in oauth_providers { - oauth_links.push((oauth_provider.provider_id.to_owned(), - oauth_provider.login_link_text.to_owned(), - oauth_provider.url.to_owned())); - } - } - - data.insert("self_url".to_string(), to_json(&self_url)); - data.insert("oauth_links".to_string(), to_json(&oauth_links)); + fill_oauth_data(oauth_infos, &mut data); data.insert("parent".to_string(), to_json(&"base")); ("index".to_owned(), data) @@ -172,7 +178,7 @@ pub enum ContestVisibility { } pub fn show_contests(conn: &T, session_token: &str, - (self_url, oauth_providers): (Option, Option>), + oauth_infos: (Option, Option>), visibility: ContestVisibility) -> MedalValue { @@ -185,17 +191,7 @@ pub fn show_contests(conn: &T, session_token: &str, data.insert("can_start".to_string(), to_json(&true)); } - let mut oauth_links: Vec<(String, String, String)> = Vec::new(); - if let Some(oauth_providers) = oauth_providers { - for oauth_provider in oauth_providers { - oauth_links.push((oauth_provider.provider_id.to_owned(), - oauth_provider.login_link_text.to_owned(), - oauth_provider.url.to_owned())); - } - } - - data.insert("self_url".to_string(), to_json(&self_url)); - data.insert("oauth_links".to_string(), to_json(&oauth_links)); + fill_oauth_data(oauth_infos, &mut data); let now = time::get_time(); let v: Vec = @@ -280,8 +276,11 @@ fn check_contest_constraints(session: &SessionUser, contest: &Contest) -> Contes grade_matching } } -pub fn show_contest(conn: &T, contest_id: i32, session_token: &str, query_string: Option) - -> MedalValueResult { +pub fn show_contest(conn: &T, contest_id: i32, session_token: &str, + query_string: Option, + oauth_infos: (Option, Option>)) + -> MedalValueResult +{ let session = conn.get_session_or_new(&session_token); let contest = conn.get_contest_by_id_complete(contest_id); @@ -295,7 +294,10 @@ pub fn show_contest(conn: &T, contest_id: i32, session_token public: contest.public }; let mut data = json_val::Map::new(); + data.insert("parent".to_string(), to_json(&"base")); + data.insert("empty".to_string(), to_json(&"empty")); data.insert("contest".to_string(), to_json(&ci)); + fill_oauth_data(oauth_infos, &mut data); let constraints = check_contest_constraints(&session, &contest); @@ -484,7 +486,7 @@ pub fn start_contest(conn: &T, contest_id: i32, session_toke } pub fn login(conn: &T, login_data: (String, String), - (self_url, oauth_providers): (Option, Option>)) + oauth_infos: (Option, Option>)) -> Result { let (username, password) = login_data; @@ -497,17 +499,7 @@ pub fn login(conn: &T, login_data: (String, String), data.insert("username".to_string(), to_json(&username)); data.insert("parent".to_string(), to_json(&"base")); - let mut oauth_links: Vec<(String, String, String)> = Vec::new(); - if let Some(oauth_providers) = oauth_providers { - for oauth_provider in oauth_providers { - oauth_links.push((oauth_provider.provider_id.to_owned(), - oauth_provider.login_link_text.to_owned(), - oauth_provider.url.to_owned())); - } - } - - data.insert("self_url".to_string(), to_json(&self_url)); - data.insert("oauth_links".to_string(), to_json(&oauth_links)); + fill_oauth_data(oauth_infos, &mut data); Err(("login".to_owned(), data)) } @@ -515,7 +507,7 @@ pub fn login(conn: &T, login_data: (String, String), } pub fn login_with_code( - conn: &T, code: &str, (self_url, oauth_providers): (Option, Option>)) + conn: &T, code: &str, oauth_infos: (Option, Option>)) -> Result, (String, json_val::Map)> { match conn.login_with_code(None, &code) { Ok(session_token) => Ok(Ok(session_token)), @@ -527,17 +519,7 @@ pub fn login_with_code( data.insert("code".to_string(), to_json(&code)); data.insert("parent".to_string(), to_json(&"base")); - let mut oauth_links: Vec<(String, String, String)> = Vec::new(); - if let Some(oauth_providers) = oauth_providers { - for oauth_provider in oauth_providers { - oauth_links.push((oauth_provider.provider_id.to_owned(), - oauth_provider.login_link_text.to_owned(), - oauth_provider.url.to_owned())); - } - } - - data.insert("self_url".to_string(), to_json(&self_url)); - data.insert("oauth_links".to_string(), to_json(&oauth_links)); + fill_oauth_data(oauth_infos, &mut data); Err(("login".to_owned(), data)) } diff --git a/src/webfw_iron.rs b/src/webfw_iron.rs index 07c02acc4446f7b1d09d44d40d4288068f9e4b89..6c77e3fa50f17ee202be317e3356d136869a6084 100644 --- a/src/webfw_iron.rs +++ b/src/webfw_iron.rs @@ -297,7 +297,7 @@ fn greet_personal(req: &mut Request) -> IronResult // hier ggf. Daten aus dem Request holen let config = req.get::>().unwrap(); - let (self_url, oauth_providers) = (config.self_url.clone(), config.oauth_providers.clone()); + let oauth_infos = (config.self_url.clone(), config.oauth_providers.clone()); let (template, mut data) = { // hier ggf. Daten aus dem Request holen @@ -305,7 +305,7 @@ fn greet_personal(req: &mut Request) -> IronResult let conn = mutex.lock().unwrap_or_else(|e| e.into_inner()); // Antwort erstellen und zurücksenden - core::index(&*conn, session_token, (self_url, oauth_providers)) + core::index(&*conn, session_token, oauth_infos) }; /*if let Some(server_message) = &config.server_message { @@ -463,7 +463,11 @@ fn contest(req: &mut Request) -> IronResult let session_token = req.require_session_token()?; let query_string = req.url.query().map(|s| s.to_string()); - let (template, data) = with_conn![core::show_contest, C, req, contest_id, &session_token, query_string].aug(req)?; + let config = req.get::>().unwrap(); + let oauth_infos = (config.self_url.clone(), config.oauth_providers.clone()); + + let (template, data) = + with_conn![core::show_contest, C, req, contest_id, &session_token, query_string, oauth_infos].aug(req)?; let mut resp = Response::new(); resp.set_mut(Template::new(&template, data)).set_mut(status::Ok); diff --git a/templates/jwinf/contest.hbs b/templates/jwinf/contest.hbs index eeef2b17304db53082b0ffa5fd9551e4fca272ac..200db70ef62a075f817d49a3edf108f743697a64 100644 --- a/templates/jwinf/contest.hbs +++ b/templates/jwinf/contest.hbs @@ -1,249 +1,176 @@ -{{#if not_bare}} - - - - - - Jugendwettbewerb Informatik: Programmieren – leichter, als du denkst! - - - - - -
-
-
- - - -

Jugendwettbewerb Informatik

-

Programmieren – leichter, als du denkst!

-
-
-   - {{#if logged_in}} -
-
- Eingeloggt als {{ username }} - {{#if firstname}}{{#if lastname}} - ({{firstname}} {{lastname}}) - {{/if}}{{/if}} - {{#if teacher}} - [Lehrer] - {{/if}} -
- 👤   Profil - {{#if teacher}} - ⚙   Gruppenverwaltung - {{/if}} -
- -
-
-
-
- {{/if}} -
-
+{{#*inline "page"}} - {{#if teacher}} - - - - {{/if}} - - - - -
-
-

{{#if has_duration}}Wettbewerb:{{else}}Trainingsaufgaben:{{/if}} {{ contest.name }}

- {{#if contest.duration}}

Dauer: {{contest.duration}} Minuten

{{/if}} -
-
- -{{#if teacher}} - +
+ {{/if}} + +
{{/if}} -
-{{/if}} -
-
- - - {{#if is_started}} -

- {{#if has_duration}} - {{#if is_time_left}} - Verbleibenden Zeit: {{time_left}} - - - {{else}} - Die Zeit ist abgelaufen. Du kannst nun die Aufgaben nicht mehr öffnen. - {{/if}} - {{/if}} -

- {{#each tasks}} -
- {{name}} - -
    - {{#each subtasks}} -
  • - {{#if ../../is_time_up}} - - {{else}} - {{linktext}} - {{/if}} -
  • - {{/each}} -
-
- {{/each}} - -
+ +
+
+ + {{#if is_started}} +

+ {{#if has_duration}} + {{#if is_time_left}} + Verbleibenden Zeit: {{time_left}} + + + {{else}} + Die Zeit ist abgelaufen. Du kannst nun die Aufgaben nicht mehr öffnen. + {{/if}} + {{/if}} +

+ + {{#each tasks}} +
+ {{name}} + +
    + {{#each subtasks}} +
  • + {{#if ../../is_time_up}} + + {{else}} + {{linktext}} + {{/if}} +
  • + {{/each}} +
+
+ {{/each}} + +
+

+ Punktestand: {{ total_points }} ★ / {{ max_total_points }} ☆   ({{ relative_points }} %) +

+ + {{else}} + + {{#if can_start}} +

+

+ + +
+

+ + {{#if contest.duration}}

- Punktestand: {{ total_points }} ★ / {{ max_total_points }} ☆   ({{ relative_points }} %) + Der Wettbewerb läuft nach dem Starten für {{contest.duration}} Minuten. + Der Wettbewerb kann nach dem Starten nicht mehr pausiert werden!

- + {{/if}} + + {{#if time_until_end}} +

Der Wettbewerb kann noch gestartet werden: {{ time_until_end.0 }} Tage, {{ time_until_end.1 }} Stunden, {{ time_until_end.2 }} Minuten.

+ {{/if}} + {{else}} +

Du kannst diesen Wettbewerb nicht starten.

+ {{#if constraints.contest_over}} +

Der Wettbewerb ist bereits beendet.

{{else}} - - {{#if can_start}} -

-

- - -
-

- - {{#if contest.duration}} -

- Der Wettbewerb läuft nach dem Starten für {{contest.duration}} Minuten. - Der Wettbewerb kann nach dem Starten nicht mehr pausiert werden! -

- {{/if}} - - {{#if time_until_end}} -

Der Wettbewerb kann noch gestartet werden: {{ time_until_end.0 }} Tage, {{ time_until_end.1 }} Stunden, {{ time_until_end.2 }} Minuten.

+ {{#if constraints.contest_not_begun}} +

Der Wettbewerb hat noch nicht begonnen.

+ {{#if time_until_start}} +

Der Wettbewerb wird geöffnet in: {{ time_until_start.0 }} Tagen, {{ time_until_start.1 }} Stunden, {{ time_until_start.2 }} Minuten.

{{/if}} {{else}} -

Du kannst diesen Wettbewerb nicht starten.

- {{#if constraints.contest_over}} -

Der Wettbewerb ist bereits beendet.

+ {{#if logged_in}} + {{#if constraints.grade_too_low}} +

Deine angegebene Jahrgangsstufe entspricht nicht den für diesen Wettbewerb vorgesehenen Altersgruppen.

+ {{/if}} + {{#if constraints.grade_too_high}} +

Deine angegebene Jahrgangsstufe entspricht nicht den für diesen Wettbewerb vorgesehenen Altersgruppen.

+ {{/if}} {{else}} - {{#if constraints.contest_not_begun}} -

Der Wettbewerb hat noch nicht begonnen.

- {{#if time_until_start}} -

Der Wettbewerb wird geöffnet in: {{ time_until_start.0 }} Tagen, {{ time_until_start.1 }} Stunden, {{ time_until_start.2 }} Minuten.

- {{/if}} - {{else}} - {{#if logged_in}} - {{#if constraints.grade_too_low}} -

Deine angegebene Jahrgangsstufe entspricht nicht den für diesen Wettbewerb vorgesehenen Altersgruppen.

- {{/if}} - {{#if constraints.grade_too_high}} -

Deine angegebene Jahrgangsstufe entspricht nicht den für diesen Wettbewerb vorgesehenen Altersgruppen.

- {{/if}} - {{else}} -

Möglicherweise musst du dich zunächst einloggen.

- {{/if}} - {{/if}} +

Möglicherweise musst du dich zunächst einloggen.

{{/if}} {{/if}} {{/if}} -
-
- -{{#if not_bare}} + {{/if}} + {{/if}}
-
-
-

-

-
-
- - - - + + + + +{{#if not_bare}} +
+ + +{{/if}} + + + + +{{/inline}} +{{#if not_bare}} + {{~> (parent)~}} +{{else}} + {{~> (empty)~}} {{/if}}