X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=scripts%2Flib%2Fcocanwiki_emailnotify.ml;h=59f3b04e18d500de12b06758e02784915f4de473;hb=295f2cde3f43ccf7f775d39b95925e10aa4c37cb;hp=ef844a85f7797ce202fcc0df4592aefcaf614c3b;hpb=20923b33c08fccfca617b21935c4a4f6201593f8;p=cocanwiki.git diff --git a/scripts/lib/cocanwiki_emailnotify.ml b/scripts/lib/cocanwiki_emailnotify.ml index ef844a8..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.1 2004/10/21 11:42:05 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 @@ -24,20 +24,40 @@ open Registry open Cgi open Printf +open Cocanwiki + (* This is where we coordinate email notification from various * scripts which create or update the wiki. *) -let email_notify ~subject ~body (dbh : Dbi.connection) hostid = - (* Is anyone listed for email notification at this host? *) - let sth = dbh#prepare_cached "select email, name from email_notify - where hostid = ?" in - sth#execute [`Int hostid]; +let email_notify ~subject ~body ?user (dbh : Dbi.connection) hostid = + (* Get own userid, if we have it. Don't want to send email + * 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, from = + match user with + | None + | 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. Don't send email to invited accounts + * who have not yet confirmed. + *) + let sth = dbh#prepare_cached "select email, name + from users + where hostid = ? and id <> ? and email_notify + and email is not null + and invite is null" in + sth#execute [`Int hostid; `Int own_userid]; let to_addr = sth#map (function | [`String email; `String name] -> - name ^ " <" ^ email ^ ">" - | [`String email; `Null] -> - email + "\"" ^ name ^ "\" <" ^ email ^ ">" | _ -> assert false) in if to_addr <> [] then ( @@ -50,5 +70,5 @@ let email_notify ~subject ~body (dbh : Dbi.connection) hostid = let subject = "Site notice: " ^ subject in (* Send the email. *) - Sendmail.send_mail ~subject ~to_addr ~body () + Sendmail.send_mail ~subject ~to_addr ?from body )