Added styling to some pages which previously were "outside" the site
[cocanwiki.git] / scripts / lib / cocanwiki_template.ml
index 9b562a8..1632e18 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: cocanwiki_template.ml,v 1.4 2005/11/16 17:30:34 rich Exp $
+ * $Id: cocanwiki_template.ml,v 1.8 2006/08/03 13:53:00 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
@@ -77,110 +77,131 @@ let _get_template filename =
        Hashtbl.replace cache path (template, mtime);
        template
 
-let get_template ?page (dbh : Dbi.connection) hostid filename =
+let get_template ?page dbh hostid filename =
   let template = _get_template filename in
 
-  (* Get standard fields concerning this host from the database. *)
-  let sth =
-    dbh#prepare_cached
-      "select h.theme_css, p.name, p.url, h.search_box,
-              h.brand, h.brand_tagline, h.brand_description,
-              h.pagebug
-         from hosts h left outer join powered_by p on h.powered_by = p.id
-        where h.id = ?" in
-  sth#execute [`Int hostid];
-
-  let theme_css, powered_by_name, powered_by_url, search_box,
+  if hostid > 0l then (
+    (* Get standard fields concerning this host from the database. *)
+    let rows =
+      PGSQL(dbh) "nullable-results"
+       "select h.theme_css, h.css is not null,
+                p.name, p.url, h.search_box,
+                h.brand, h.brand_tagline, h.brand_description,
+                h.pagebug
+           from hosts h left outer join powered_by p on h.powered_by = p.id
+          where h.id = $hostid" in
+
+    let theme_css, has_host_css, powered_by_name, powered_by_url, search_box,
       brand, brand_tagline, brand_description, pagebug =
-    match sth#fetch1 () with
-      | [ a; b; c; d; e; f; g; h] -> a, b, c, d, e, f, g, h
+      match rows with
+      | [ row ] -> row
       | _ -> assert false in
 
-  let theme_css =
-    match theme_css with
-      | `Null -> "/_css/standard.css"
-      | `String file -> file
-      | _ -> assert false in
+    let theme_css =
+      match theme_css with
+      | None -> "/_css/standard.css"
+      | Some file -> file in
+
+    let has_host_css =
+      match has_host_css with
+      | Some true -> true
+      | _ -> false in
 
-  let powered_by_name, powered_by_url =
-    match powered_by_name, powered_by_url with
-      | `Null, `Null ->
+    let powered_by_name, powered_by_url =
+      match powered_by_name, powered_by_url with
+      | None, None ->
          let url = "http://sandbox.merjis.com/" in
          let name = Cocanwiki_version.package ^ " " ^
                     Cocanwiki_version.version in
          name, url
-      | `String name, `String url -> name, url
+      | Some name, Some url -> name, url
       | _ -> assert false in
 
-  let search_box = match search_box with `Bool b -> b | _ -> assert false in
-
-  let branding, brand,
+    let branding, brand,
       has_brand_tagline, brand_tagline,
       has_brand_description, brand_description =
-    match brand with
-      | `Null -> false, "", false, "", false, ""
-      | `String brand ->
+      match brand with
+      | None -> false, "", false, "", false, ""
+      | Some brand ->
          let has_brand_tagline, brand_tagline =
            match brand_tagline with
-             | `Null -> false, ""
-             | `String s -> true, s
-             | _ -> assert false in
+           | None -> false, ""
+           | Some s -> true, s in
          let has_brand_description, brand_description =
            match brand_description with
-             | `Null -> false, ""
-             | `String s -> true, s
-             | _ -> assert false in
+           | None -> false, ""
+           | Some s -> true, s in
          true, brand,
-           has_brand_tagline, brand_tagline,
-           has_brand_description, brand_description
-      | _ -> assert false in
-
-  let has_pagebug, pagebug =
-    match pagebug with
-    | `Null -> false, ""
-    | `String pagebug -> true, pagebug
-    | _ -> assert false in
-
-  template#set "theme_css" theme_css;
-  template#set "powered_by_name" powered_by_name;
-  template#set "powered_by_url" powered_by_url;
-  template#conditional "search_box" search_box;
-  template#conditional "branding" branding;
-  template#set "brand" brand;
-  template#conditional "has_brand_tagline" has_brand_tagline;
-  template#set "brand_tagline" brand_tagline;
-  template#conditional "has_brand_description" has_brand_description;
-  template#set "brand_description" brand_description;
-  template#conditional "has_pagebug" has_pagebug;
-  template#set "pagebug" pagebug;
-
-  (* Site menu. *)
-  let sth = dbh#prepare_cached "select url, label, ordering from sitemenu
-                                 where hostid = ? order by ordering" in
-  sth#execute [`Int hostid];
-
-  let is_homepage =
-    match page with
+         has_brand_tagline, brand_tagline,
+         has_brand_description, brand_description in
+
+    let has_pagebug, pagebug =
+      match pagebug with
+      | None -> false, ""
+      | Some pagebug -> true, pagebug in
+
+    let search_box = match search_box with Some b -> b | _ -> assert false in
+
+    template#set "theme_css" theme_css;
+    template#conditional "has_host_css" has_host_css;
+    template#set "powered_by_name" powered_by_name;
+    template#set "powered_by_url" powered_by_url;
+    template#conditional "search_box" search_box;
+    template#conditional "branding" branding;
+    template#set "brand" brand;
+    template#conditional "has_brand_tagline" has_brand_tagline;
+    template#set "brand_tagline" brand_tagline;
+    template#conditional "has_brand_description" has_brand_description;
+    template#set "brand_description" brand_description;
+    template#conditional "has_pagebug" has_pagebug;
+    template#set "pagebug" pagebug;
+
+    (* Site menu. *)
+    let rows = PGSQL(dbh)
+      "select url, label, ordering from sitemenu
+        where hostid = $hostid order by ordering" in
+
+    let is_homepage =
+      match page with
       | None -> false
       | Some "index" -> true
       | _ -> false in
-  template#conditional "is_homepage" is_homepage;
-
-  let table = sth#map (function [`String url; `String label; _] ->
-                        let is_linked =
-                          match page with
-                            | None -> true
-                            | Some page when page = url -> false
-                            | _ -> true in
-                        let id = id_of_url url in
-                        [ "url", Template.VarString url;
-                          "label", Template.VarString label;
-                          "is_linked", Template.VarConditional is_linked;
-                          "id", Template.VarString id ]
-                        | _ -> assert false) in
-
-  template#table "sitemenu" table;
-
+    template#conditional "is_homepage" is_homepage;
+
+    let table = List.map
+      (fun (url, label, _) ->
+        let is_linked =
+          match page with
+          | None -> true
+          | Some page when page = url -> false
+          | _ -> true in
+        let id = id_of_url url in
+        [ "url", Template.VarString url;
+          "label", Template.VarString label;
+          "is_linked", Template.VarConditional is_linked;
+          "id", Template.VarString id ]
+      ) rows in
+
+    template#table "sitemenu" table;
+  )
+  else (* if we have no hostid *) (
+    template#set "theme_css" "/_css/standard.css";
+    template#conditional "has_host_css" false;
+    template#set "powered_by_name" (Cocanwiki_version.package ^ " " ^
+                                   Cocanwiki_version.version);
+    template#set "powered_by_url" "http://sandbox.merjis.com/";
+    template#conditional "search_box" false;
+    template#conditional "branding" false;
+    template#set "brand" "";
+    template#conditional "has_brand_tagline" false;
+    template#set "brand_tagline" "";
+    template#conditional "has_brand_description" false;
+    template#set "brand_description" "";
+    template#conditional "has_pagebug" false;
+    template#set "pagebug" "";
+    template#conditional "is_homepage" false;
+    template#table "sitemenu" [];
+  );
   (* Copyright year. *)
   template#set "year" (string_of_int year);