(* COCANWIKI - a wiki written in Objective CAML.
* Written by Richard W.M. Jones <rich@merjis.com>.
* Copyright (C) 2004 Merjis Ltd.
- * $Id: page.ml,v 1.23 2004/09/27 16:21:09 rich Exp $
+ * $Id: page.ml,v 1.25 2004/10/04 15:19:56 rich Exp $
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
]
let split_words = Pcre.regexp "\\W+"
+let split_qs_re = Pcre.regexp "\\?"
+
let xhtml_re = Pcre.regexp "<.*?>|[^<>]+"
-let run r (q : cgi) (dbh : Dbi.connection) hostid {edit_anon=edit_anon} user =
+let run r (q : cgi) (dbh : Dbi.connection) hostid
+ ({ edit_anon = edit_anon;
+ view_anon = view_anon } as host)
+ user =
let template_page = get_template dbh hostid "page.html" in
let template_404 = get_template dbh hostid "page_404.html" in
| _ -> assert false in
(* Can the user edit? Manage users? etc. *)
- let can_edit = can_edit edit_anon user in
- let can_manage_users = can_manage_users user in
- let can_manage_contacts = can_manage_contacts user in
- let can_manage_site = can_manage_site user in
- let can_edit_global_css = can_edit_global_css user in
+ let can_edit = can_edit host user in
+ let can_manage_users = can_manage_users host user in
+ let can_manage_contacts = can_manage_contacts host user in
+ let can_manage_site = can_manage_site host user in
+ let can_edit_global_css = can_edit_global_css host user in
(* Do we have a stats page set up? *)
let has_stats = server_settings_stats_page dbh <> None in
let search_terms_from_referer referer =
let _, argnames =
List.find (fun (rex, _) -> Pcre.pmatch ~rex referer) search_engines in
- let args = Cgi_args.parse referer in
+ let url, qs =
+ match Pcre.split ~rex:split_qs_re ~max:2 referer with
+ | [url] | [url;""] -> url, ""
+ | [url;qs] -> url, qs
+ | _ -> assert false in
+ let args = Cgi_args.parse qs in
let argname =
List.find (fun argname -> List.mem_assoc argname args) argnames in
let search_string = List.assoc argname args in
loop page 0
let () =
- register_script run
+ register_script ~restrict:[CanView] run