X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=scripts%2Flib%2Fcocanwiki_emailnotify.ml;h=59f3b04e18d500de12b06758e02784915f4de473;hb=295f2cde3f43ccf7f775d39b95925e10aa4c37cb;hp=648a746e29aebf24d71a72663fa23f2106ca5108;hpb=2faa766a005f4fc4f1fd48a36185452f77ceb2b9;p=cocanwiki.git diff --git a/scripts/lib/cocanwiki_emailnotify.ml b/scripts/lib/cocanwiki_emailnotify.ml index 648a746..59f3b04 100644 --- a/scripts/lib/cocanwiki_emailnotify.ml +++ b/scripts/lib/cocanwiki_emailnotify.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_emailnotify.ml,v 1.2 2004/10/21 19:54:29 rich Exp $ + * $Id: cocanwiki_emailnotify.ml,v 1.6 2005/03/31 14:24:04 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,20 +34,25 @@ let email_notify ~subject ~body ?user (dbh : Dbi.connection) hostid = * notification back to the person who changed the page. If * we don't have a userid, set it to 0, because no real user can * have userid = 0. + * + * Also get the user's email address. *) - let own_userid = + let own_userid, from = match user with | None - | Some Anonymous -> 0 - | Some (User (userid, _, _)) -> userid in + | Some Anonymous -> 0, None + | Some (User (userid, _, _, prefs)) -> userid, prefs.email in (* Send a change email to everyone who hasn't opted out using * their preferences. This behaviour replaces the old - * 'email_notify' table. + * 'email_notify' table. Don't send email to invited accounts + * who have not yet confirmed. *) - let sth = dbh#prepare_cached "select email, name from users + let sth = dbh#prepare_cached "select email, name + from users where hostid = ? and id <> ? and email_notify - and email is not null" in + and email is not null + and invite is null" in sth#execute [`Int hostid; `Int own_userid]; let to_addr = sth#map (function @@ -56,21 +61,6 @@ let email_notify ~subject ~body ?user (dbh : Dbi.connection) hostid = | _ -> assert false) in if to_addr <> [] then ( - (* Get the from address of the user, if available. *) - let from = - match user with - | None - | Some Anonymous -> None - | Some (User (userid, _, _)) -> - let sth = dbh#prepare_cached "select email from users - where hostid = ? and id = ?" in - sth#execute [`Int hostid; `Int userid]; - - match sth#fetch1 () with - | [ `Null ] -> None - | [ `String email ] -> Some email - | _ -> assert false in - (* Prepare the body of the message. The assumption is that * this takes time and database access, so we defer the creation * of the body until we know that someone needs to be notified. @@ -80,5 +70,5 @@ let email_notify ~subject ~body ?user (dbh : Dbi.connection) hostid = let subject = "Site notice: " ^ subject in (* Send the email. *) - Sendmail.send_mail ~subject ~to_addr ~body ?from () + Sendmail.send_mail ~subject ~to_addr ?from body )