About half way through switching cocanwiki to using the new PG interface.
[cocanwiki.git] / scripts / lib / cocanwiki_template.ml
index e7189c7..56d2d06 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.5 2005/11/24 14:54:15 rich Exp $
+ * $Id: cocanwiki_template.ml,v 1.6 2006/03/27 16:43:44 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,70 +77,64 @@ 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
 
-  if hostid > 0 then (
+  if hostid > 0l then (
     (* Get standard fields concerning this host from the database. *)
-    let sth =
-      dbh#prepare_cached
+    let rows =
+      PGSQL(dbh) "nullable-results"
        "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];
+          where h.id = $hostid" in
 
     let theme_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
+      | None -> "/_css/standard.css"
+      | Some file -> file in
 
     let powered_by_name, powered_by_url =
       match powered_by_name, powered_by_url with
-      | `Null, `Null ->
+      | 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,
       has_brand_tagline, brand_tagline,
       has_brand_description, brand_description =
       match brand with
-      | `Null -> false, "", false, "", false, ""
-      | `String brand ->
+      | 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
+         has_brand_description, brand_description in
 
     let has_pagebug, pagebug =
       match pagebug with
-      | `Null -> false, ""
-      | `String pagebug -> true, pagebug
-      | _ -> assert false in
+      | 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#set "powered_by_name" powered_by_name;
@@ -156,9 +150,9 @@ let get_template ?page (dbh : Dbi.connection) hostid filename =
     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 rows = PGSQL(dbh)
+      "select url, label, ordering from sitemenu
+        where hostid = hostid order by ordering" in
 
     let is_homepage =
       match page with
@@ -167,18 +161,19 @@ let get_template ?page (dbh : Dbi.connection) hostid filename =
       | _ -> 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
+    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;
   )