Scripts updated to use new PG interface.
[cocanwiki.git] / scripts / sitemap.ml
index b69f58d..1aa8f24 100644 (file)
@@ -1,7 +1,22 @@
-(* COCANWIKI scripts.
+(* COCANWIKI - a wiki written in Objective CAML.
  * Written by Richard W.M. Jones <rich@merjis.com>.
  * Copyright (C) 2004 Merjis Ltd.
- * $Id: sitemap.ml,v 1.5 2004/09/09 09:35:34 rich Exp $
+ * $Id: sitemap.ml,v 1.9 2006/03/28 16:24:08 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
  *)
 
 open Apache
@@ -14,42 +29,39 @@ open Cocanwiki_template
 open Cocanwiki_date
 open Cocanwiki_strings
 
-let run r (q : cgi) (dbh : Dbi.connection) hostid { hostname = hostname } _ =
+let run r (q : cgi) dbh hostid { hostname = hostname } _ =
   let template = get_template dbh hostid "sitemap.html" in
 
   (* Pull out all the current pages, and a bit of content from each. *)
-  let sth = dbh#prepare_cached "select p.url, p.url = 'index',
-                                       p.title, p.description,
-                                       p.last_modified_date,
-                                       (select content from contents
-                                         where pageid = p.id
-                                         order by ordering limit 1) as content
-                                  from pages p
-                                 where p.hostid = ? and p.url is not null
-                                   and p.redirect is null
-                                 order by 2 desc, 3, 1" in
-  sth#execute [`Int hostid];
+  let rows = PGSQL(dbh)
+    "select p.url, p.url = 'index', p.title, p.description,
+            p.last_modified_date, (select content from contents
+                                    where pageid = p.id
+                                    order by ordering limit 1) as content
+       from pages p
+      where p.hostid = $hostid and p.url is not null
+        and p.redirect is null
+      order by 2 desc, 3, 1" in
 
   let table =
-    sth#map
-      (function [`String url; _; `String title; `String description;
-                `Timestamp last_modified_date;
-                (`Null | `String _) as content] ->
-        let url = if url = "index" then "" else url in
+    List.map
+      (function (Some url, Some is_index, title, description,
+                last_modified_date, content) ->
+        let url = if is_index then "" else url in
         let date = printable_date last_modified_date in
         [ "url", Template.VarString url;
           "title", Template.VarString title;
           "description", Template.VarString description;
           "last_modified_date", Template.VarString date;
-          "has_content", Template.VarConditional (content <> `Null);
+          "has_content", Template.VarConditional (content <> None);
           "content", Template.VarString
             (match content with
-                 `Null -> ""
-               | `String c ->
-                   truncate 160
-                     (Wikilib.text_of_xhtml
-                        (Wikilib.xhtml_of_content dbh hostid c))) ]
-        | _ -> assert false) in
+             | None -> ""
+             | Some c ->
+                 truncate 160
+                   (Wikilib.text_of_xhtml
+                      (Wikilib.xhtml_of_content dbh hostid c))) ]
+       | _ -> assert false) rows in
 
   template#set "hostname" hostname;
   template#table "sitemap" table;
@@ -57,4 +69,4 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid { hostname = hostname } _ =
   q#template template
 
 let () =
-  register_script run
+  register_script ~restrict:[CanView] run