Added styling to some pages which previously were "outside" the site
[cocanwiki.git] / scripts / host_menu.ml
index 8dd3462..e6daeef 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.10 2006/07/26 16:26:43 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,87 @@ open Printf
 open Cocanwiki
 open Cocanwiki_template
 
-let run r (q : cgi) (dbh : Dbi.connection) hostid _ _ =
+let run r (q : cgi) dbh 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_edit_macros = can_edit_macros 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_edit_macros" can_edit_macros;
+  template#conditional "can_manage_site" can_manage_site;
 
-  let canonical_hostname, has_global_css, edit_anon, create_account_anon,
+  if can_manage_site then (
+    (* Get lots of host-specific stuff from the database. *)
+    let rows =
+      PGSQL(dbh) "nullable-results"
+       "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,
+                h.brand, coalesce (h.brand_tagline, ''),
+                coalesce (h.brand_description, '')
+           from hosts h left outer join themes t on h.theme_css = t.theme_css
+          where h.id = $hostid" in
+
+    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 ] ->
+      feedback_email, mailing_list, search_box, navigation, view_anon,
+      has_brand, brand, brand_tagline, brand_description =
+      match rows with
+       [ Some canonical_hostname, Some has_global_css,
+         Some edit_anon, Some create_account_anon, Some has_theme_css,
+         theme_name, theme_description,
+         feedback_email,
+         Some mailing_list, Some search_box, Some navigation, Some view_anon,
+         brand, brand_tagline, brand_description ] ->
          let theme_name =
-           match theme_name with `String s -> s | `Null -> "" in
+           match theme_name with Some s -> s | None -> "" in
          let theme_description =
-           match theme_description with `String s -> s | `Null -> "" in
+           match theme_description with Some s -> s | None -> "" in
          let feedback_email, has_feedback_email =
            match feedback_email with
-               `String s -> s, true
-             | `Null -> "", false in
+             Some s -> s, true
+           | None -> "", false in
+         let brand, has_brand =
+           match brand with
+             Some s -> s, true
+           | None -> "", false in
+         let brand_tagline =
+           match brand_tagline with None -> "" | Some s -> s in
+         let brand_description =
+           match brand_description with None -> "" | Some s -> s 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
+         feedback_email, mailing_list, search_box, navigation, view_anon,
+         has_brand, brand, brand_tagline, brand_description
       | _ -> 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 "view_anon" view_anon;
+    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;
+    template#conditional "has_brand" has_brand;
+    template#set "brand" brand;
+    template#set "brand_tagline" brand_tagline;
+    template#set "brand_description" brand_description;
+  );
 
   q#template template
 
 let () =
-  register_script ~restrict:[CanManageSite] run
+  register_script ~restrict:[CanEdit] run