(* COCANWIKI - a wiki written in Objective CAML.
* Written by Richard W.M. Jones <rich@merjis.com>.
* Copyright (C) 2004 Merjis Ltd.
- * $Id: cocanwiki.ml,v 1.9 2004/09/22 10:19:26 rich Exp $
+ * $Id: cocanwiki.ml,v 1.10 2004/09/23 11:51:17 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
*)
let _get_dbh r = Pool.get r "cocanwiki"
+(* Server-wide settings.
+ *
+ * These are stored in a single row in the database in the table
+ * 'server_settings'. You must restart the server if you change
+ * this row.
+ *
+ * It's not possible to read these at server start-up time because the
+ * Apache server is still running as 'root' and will not normally be
+ * allowed to access the database. We thus read them at the earliest
+ * opportunity, in a request context, and cache the results.
+ *)
+let server_settings_version =
+ let settings = ref None in
+ let get_settings (dbh : Dbi.connection) =
+ let sth = dbh#prepare "select version from server_settings" in
+ sth#execute [];
+ let s =
+ match sth#fetch1 () with
+ | [ `Int version ] -> version
+ | _ -> assert false in
+ sth#finish ();
+ settings := Some s;
+ s
+ in
+
+ let server_settings_version dbh =
+ let (version) =
+ match !settings with
+ None -> get_settings dbh
+ | Some settings -> settings in
+ version
+ in
+
+ server_settings_version
+
(* The [CgiExit] exception should be folded back into the base
* mod_caml code at some point. It just causes the 'run' function to
* return at that point safely. (XXX)