Support for users, roles, restrictions.
[cocanwiki.git] / scripts / history.ml
1 (* COCANWIKI scripts.
2  * Written by Richard W.M. Jones <rich@merjis.com>.
3  * Copyright (C) 2004 Merjis Ltd.
4  * $Id: history.ml,v 1.2 2004/09/07 13:40:10 rich Exp $
5  *)
6
7 open Apache
8 open Registry
9 open Cgi
10 open Printf
11
12 open Merjisforwiki
13
14 open Cocanwiki
15 open Cocanwiki_template
16
17 let template = get_template "history.html"
18
19 let run r (q : cgi) (dbh : Dbi.connection) (hostid, _, _) _ =
20   let page = q#param "page" in
21   let page = if page = "" then "index" else page in
22
23   let sth =
24     dbh#prepare_cached
25       "select id, url, url_deleted, title, last_modified_date, logged_ip
26          from pages
27         where hostid = ? and (url = ? or url_deleted = ?)
28         order by last_modified_date desc" in
29   sth#execute [`Int hostid; `String page; `String page];
30
31   let table =
32     sth#map
33       (function
34          | [`Int version; `String url; _; `String title;
35             `Timestamp last_modified_date; logged_ip ] ->
36              let date = printable_date_time last_modified_date in
37              let has_logged_ip, logged_ip =
38                match logged_ip with
39                    `Null -> false, ""
40                  | `String ip -> true, ip
41                  | _ -> assert false in
42              [ "version", Template.VarString (string_of_int version);
43                "url", Template.VarString url;
44                "title", Template.VarString title;
45                "last_modified_date", Template.VarString date;
46                "has_logged_ip", Template.VarConditional has_logged_ip;
47                "logged_ip", Template.VarString logged_ip;
48                "is_live", Template.VarConditional true ]
49          | [`Int version; `Null; `String url; `String title;
50             `Timestamp last_modified_date; logged_ip ] ->
51              let date = printable_date_time last_modified_date in
52              let has_logged_ip, logged_ip =
53                match logged_ip with
54                    `Null -> false, ""
55                  | `String ip -> true, ip
56                  | _ -> assert false in
57              [ "version", Template.VarString (string_of_int version);
58                "url", Template.VarString url;
59                "title", Template.VarString title;
60                "last_modified_date", Template.VarString date;
61                "has_logged_ip", Template.VarConditional has_logged_ip;
62                "logged_ip", Template.VarString logged_ip;
63                "is_live", Template.VarConditional false ]
64          | _ -> assert false) in
65
66   template#table "history" table;
67
68   q#template template
69
70 let () =
71   register_script run