diff options
| -rw-r--r-- | src/pages.ml | 21 | ||||
| -rw-r--r-- | src/pages.mli | 4 | ||||
| -rw-r--r-- | src/server.ml | 23 | 
3 files changed, 35 insertions, 13 deletions
| diff --git a/src/pages.ml b/src/pages.ml index e9f255a..6fd7bef 100644 --- a/src/pages.ml +++ b/src/pages.ml @@ -99,14 +99,31 @@ d’Apple), et ainsi attirer plus d’utilisateurs ? -->        </section>  |} -let link lnk = +let link ?args lnk =    let lnk = escape lnk in +  let form = match args with +    | Some (module_id, groups) -> +      let group_fields = +        List.map (fun group -> +            Printf.sprintf "          <input type=\"hidden\" name=\"groups\" value=\"%s\" />" (escape group)) +          groups +        |> String.concat "\n" in +      {|      <section> +        <h3>Trouver les cours sans salle</h3> +        <form method="post" action="/empty"> +          <input type="hidden" name="module" value="|} ^ module_id ^ {|" /> +|} ^ group_fields ^ {| +          <input type="submit" value="Trouver les cours sans salle" /> +        </form> +      </section> +|} +    | _ -> "" in    common @@ {|        <section>          <h3>Lien de l'emploi du temps</h3>          <a href="|} ^ lnk ^ {|">|} ^ lnk ^ {|</a>        </section> -|} +|} ^ form  let select module_id groups =    let options = diff --git a/src/pages.mli b/src/pages.mli index 0e2180e..4618faf 100644 --- a/src/pages.mli +++ b/src/pages.mli @@ -1,5 +1,5 @@  (* - *    Copyright (C) 2020, 2021  Alban Gruin + *    Copyright (C) 2020 -- 2022  Alban Gruin   *   *    ucs is free software: you can redistribute it and/or modify   *    it under the terms of the GNU Affero General Public License as published @@ -16,5 +16,5 @@   *)  val main : string -val link : string -> string +val link : ?args:(string * string list) -> string -> string  val select : string -> string Seq.t -> string diff --git a/src/server.ml b/src/server.ml index bedc9a0..287a416 100644 --- a/src/server.ml +++ b/src/server.ml @@ -96,12 +96,15 @@ let get_link ?(args=[]) base_url kind id =      else "?" ^ Uri.encoded_of_query args in    base_url ^ "/ics/" ^ kind_to_url kind ^ "/" ^ id ^ ".ics" ^ args -let respond_link ?(args=[]) base_url kind id = +let respond_link ?(groups=[]) base_url kind id = +  let page_args, args = match groups with +    | [] -> None, [] +    | groups -> Some (id, groups), ["groups", groups] in    get_link ~args base_url kind id -  |> Pages.link +  |> Pages.link ?args:page_args    |> respond -let get_module_link base_url body = +let get_module_and_groups_from_request body found not_found =    Cohttp_lwt.Body.to_string body >>= fun body ->    let data = Uri.query_of_encoded body in    let groups, module_id, valid = List.fold_right (fun (k, v) (groups, module_id, valid) -> @@ -114,12 +117,14 @@ let get_module_link base_url body =        | _, _, _, _ -> groups, None, false) data ([], None, true) in    match module_id, valid with    | Some module_id, true -> -    let args = -      if groups = [] then [] -      else ["groups", groups] in -    respond_link ~args base_url Module module_id -  | _, _ -> -    bad_request () +    found module_id groups +  | _, _ -> not_found () + +let get_module_link base_url body = +  get_module_and_groups_from_request body +    (fun module_id groups -> +       respond_link ~groups base_url Module module_id) +    bad_request  let check_ics = Astring.String.is_suffix ~affix:".ics" | 
