X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=scripts%2Fcocanwiki.ml;h=96cef3718be0178058a70865a09cde59999db1fb;hb=3da6ded17ea2cca64328e5f3ea8903cd15103bc2;hp=55097e4ac4694d511e1c72b12895c9e45a47d278;hpb=0d88075fa62c0a801ea1e9246d85389f9161a4e1;p=cocanwiki.git diff --git a/scripts/cocanwiki.ml b/scripts/cocanwiki.ml index 55097e4..96cef37 100644 --- a/scripts/cocanwiki.ml +++ b/scripts/cocanwiki.ml @@ -1,7 +1,7 @@ (* COCANWIKI - a wiki written in Objective CAML. * Written by Richard W.M. Jones . * 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 @@ -34,6 +34,41 @@ module Pool = DbiPool (Dbi_postgres) *) 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)