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