(* COCANWIKI - a wiki written in Objective CAML.
* Written by Richard W.M. Jones <rich@merjis.com>.
* Copyright (C) 2004 Merjis Ltd.
- * $Id: user_prefs.ml,v 1.6 2005/11/24 14:54:13 rich Exp $
+ * $Id: user_prefs.ml,v 1.9 2006/07/31 09:49:43 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
open Cocanwiki_template
open Cocanwiki_strings
-let run r (q : cgi) (dbh : Dbi.connection) hostid {hostname=hostname} user =
+let run r (q : cgi) dbh hostid {hostname=hostname} user =
let email_change_template = _get_template "user_prefs_email_change.txt" in
(* Get the fields. *)
| User (userid, _, _, _) -> userid in
(* Update the preferences fields. *)
- let sth =
- dbh#prepare_cached "update users set email_notify = ?
- where hostid = ? and id = ?" in
- sth#execute [`Bool email_notify;
- `Int hostid; `Int userid];
+ PGSQL(dbh)
+ "update users set email_notify = $email_notify
+ where hostid = $hostid and id = $userid";
(* Have we changed the email address? *)
let confirm_needed =
(* Set the email field in the database to null. No need for
* any confirmation.
*)
- let sth = dbh#prepare_cached "update users set email = null
- where hostid = ? and id = ?" in
- sth#execute [`Int hostid; `Int userid];
+ PGSQL(dbh) "update users set email = null
+ where hostid = $hostid and id = $userid";
false
) else (
(* Is the new email address different from the one currently recorded
* in the database?
*)
- let sth = dbh#prepare_cached "select ? <> coalesce (email, '')
- from users where hostid = ? and id = ?" in
- sth#execute [`String new_email; `Int hostid; `Int userid];
-
- let changed =
- match sth#fetch1 () with [ `Bool b ] -> b | _ -> assert false in
+ let changed = Option.get (
+ List.hd (
+ PGSQL(dbh) "select $new_email <> coalesce (email, '')
+ from users where hostid = $hostid and id = $userid"
+ )
+ ) in
if changed then (
let key = random_sessionid () in
(* Changed, so we add to the pending_email_changes table. *)
- let sth = dbh#prepare_cached "insert into pending_email_changes
- (key, userid, email) values (?, ?, ?)" in
- sth#execute [`String key; `Int userid; `String new_email];
+ PGSQL(dbh) "insert into pending_email_changes
+ (key, userid, email)
+ values ($key, $userid, $new_email)";
(* Send the confirm email. *)
email_change_template#set "hostname" hostname;
let body = email_change_template#to_string in
let subject = "Please verify your new email address at " ^ hostname in
- Sendmail.send_mail ~subject ~to_addr:[new_email] body
+
+ let content_type =
+ "text/plain", ["charset", Mimestring.mk_param "UTF-8"] in
+ let to_addrs = [ "", new_email ] in
+
+ let msg = Netsendmail.compose ~subject ~to_addrs ~content_type body in
+ Netsendmail.sendmail msg
);
changed
) in
(* Good place to remove old rows in the pending_email_changes table. *)
- let sth = dbh#prepare_cached "delete from pending_email_changes
- where change_date - current_date > 7" in
- sth#execute [];
+ PGSQL(dbh) "delete from pending_email_changes
+ where change_date - current_date > 7";
(* Commit and finish off. *)
- dbh#commit ();
+ PGOCaml.commit dbh;
let buttons = [ ok_button "/_userprefs" ] in
ok ~title:"Preferences updated" ~buttons