Allow images and files to be replaced.
[cocanwiki.git] / scripts / host_menu.ml
index 8dd3462..7806efc 100644 (file)
@@ -1,7 +1,7 @@
 (* COCANWIKI - a wiki written in Objective CAML.
  * Written by Richard W.M. Jones <rich@merjis.com>.
  * Copyright (C) 2004 Merjis Ltd.
- * $Id: host_menu.ml,v 1.4 2004/10/04 15:19:56 rich Exp $
+ * $Id: host_menu.ml,v 1.6 2004/10/23 09:36:11 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
@@ -27,57 +27,71 @@ open Printf
 open Cocanwiki
 open Cocanwiki_template
 
-let run r (q : cgi) (dbh : Dbi.connection) hostid _ _ =
+let run r (q : cgi) (dbh : Dbi.connection) hostid host user =
   let template = get_template dbh hostid "host_menu.html" in
 
-  (* Get lots of host-specific stuff from the database. *)
-  let sth =
-    dbh#prepare_cached
-      "select h.canonical_hostname, h.css is not null, h.edit_anon,
-              h.create_account_anon, h.theme_css is not null,
-              t.name, t.description, h.feedback_email, h.mailing_list,
-              h.search_box, h.view_anon
-         from hosts h left outer join themes t on h.theme_css = t.theme_css
-        where h.id = ?" in
-  sth#execute [`Int hostid];
+  (* Get user's specific permissions. *)
+  let can_manage_users = can_manage_users host user in
+  let can_manage_contacts = can_manage_contacts host user in
+  let can_edit_global_css = can_edit_global_css host user in
+  let can_manage_site = can_manage_site host user in
+  template#conditional "can_manage_users" can_manage_users;
+  template#conditional "can_manage_contacts" can_manage_contacts;
+  template#conditional "can_edit_global_css" can_edit_global_css;
+  template#conditional "can_manage_site" can_manage_site;
 
-  let canonical_hostname, has_global_css, edit_anon, create_account_anon,
-      has_theme_css, theme_name, theme_description, has_feedback_email,
-      feedback_email, mailing_list, search_box, view_anon =
-    match sth#fetch1 () with
-       [ `String canonical_hostname; `Bool has_global_css;
-         `Bool edit_anon; `Bool create_account_anon; `Bool has_theme_css;
-         (`String _ | `Null) as theme_name;
-         (`String _ | `Null) as theme_description;
-         (`String _ | `Null) as feedback_email;
-         `Bool mailing_list; `Bool search_box; `Bool view_anon ] ->
-         let theme_name =
-           match theme_name with `String s -> s | `Null -> "" in
-         let theme_description =
-           match theme_description with `String s -> s | `Null -> "" in
-         let feedback_email, has_feedback_email =
-           match feedback_email with
-               `String s -> s, true
-             | `Null -> "", false in
-         canonical_hostname, has_global_css, edit_anon, create_account_anon,
-         has_theme_css, theme_name, theme_description, has_feedback_email,
-         feedback_email, mailing_list, search_box, view_anon
-      | _ -> assert false in
+  if can_manage_site then (
+    (* Get lots of host-specific stuff from the database. *)
+    let sth =
+      dbh#prepare_cached
+       "select h.canonical_hostname, h.css is not null, h.edit_anon,
+                h.create_account_anon, h.theme_css is not null,
+                t.name, t.description, h.feedback_email, h.mailing_list,
+                h.search_box, h.navigation, h.view_anon
+           from hosts h left outer join themes t on h.theme_css = t.theme_css
+          where h.id = ?" in
+    sth#execute [`Int hostid];
 
-  template#set "canonical_hostname" canonical_hostname;
-  template#conditional "has_global_css" has_global_css;
-  template#conditional "edit_anon" edit_anon;
-  template#conditional "create_account_anon" create_account_anon;
-  template#conditional "has_theme_css" has_theme_css;
-  template#set "theme_name" theme_name;
-  template#set "theme_description" theme_description;
-  template#conditional "has_feedback_email" has_feedback_email;
-  template#set "feedback_email" feedback_email;
-  template#conditional "mailing_list" mailing_list;
-  template#conditional "search_box" search_box;
-  template#conditional "view_anon" view_anon;
+    let canonical_hostname, has_global_css, edit_anon, create_account_anon,
+    has_theme_css, theme_name, theme_description, has_feedback_email,
+    feedback_email, mailing_list, search_box, navigation, view_anon =
+      match sth#fetch1 () with
+         [ `String canonical_hostname; `Bool has_global_css;
+           `Bool edit_anon; `Bool create_account_anon; `Bool has_theme_css;
+           (`String _ | `Null) as theme_name;
+           (`String _ | `Null) as theme_description;
+           (`String _ | `Null) as feedback_email;
+           `Bool mailing_list; `Bool search_box; `Bool navigation;
+           `Bool view_anon ] ->
+           let theme_name =
+             match theme_name with `String s -> s | `Null -> "" in
+           let theme_description =
+             match theme_description with `String s -> s | `Null -> "" in
+           let feedback_email, has_feedback_email =
+             match feedback_email with
+                 `String s -> s, true
+               | `Null -> "", false in
+           canonical_hostname, has_global_css, edit_anon, create_account_anon,
+           has_theme_css, theme_name, theme_description, has_feedback_email,
+           feedback_email, mailing_list, search_box, navigation, view_anon
+       | _ -> assert false in
+
+    template#set "canonical_hostname" canonical_hostname;
+    template#conditional "has_global_css" has_global_css;
+    template#conditional "edit_anon" edit_anon;
+    template#conditional "create_account_anon" create_account_anon;
+    template#conditional "has_theme_css" has_theme_css;
+    template#set "theme_name" theme_name;
+    template#set "theme_description" theme_description;
+    template#conditional "has_feedback_email" has_feedback_email;
+    template#set "feedback_email" feedback_email;
+    template#conditional "mailing_list" mailing_list;
+    template#conditional "search_box" search_box;
+    template#conditional "navigation" navigation;
+    template#conditional "view_anon" view_anon
+  );
 
   q#template template
 
 let () =
-  register_script ~restrict:[CanManageSite] run
+  register_script ~restrict:[CanEdit] run