# HG changeset patch # User František Kučera # Date 1269339988 -3600 # Node ID 4dddecffde5c48d9a32f200f17510514713ee490 # Parent ade4631809b91aa03c1c419adb93205a21bcaacb E-mail: při registraci pošleme uživateli e-mail (pokud vyplní správnou adresu). diff -r ade4631809b9 -r 4dddecffde5c java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/UzivatelEJB.java --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/UzivatelEJB.java Tue Mar 23 10:37:23 2010 +0100 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/UzivatelEJB.java Tue Mar 23 11:26:28 2010 +0100 @@ -3,11 +3,20 @@ import cz.frantovo.nekurak.dao.UzivatelDAO; import cz.frantovo.nekurak.dto.PozadavekNaRegistraciUzivatele; import cz.frantovo.nekurak.dto.Uzivatel; +import cz.frantovo.nekurak.email.Adresa; +import cz.frantovo.nekurak.email.Postak; import cz.frantovo.nekurak.util.Hash; import cz.frantovo.nekurak.vyjimky.NecekanaVyjimka; import cz.frantovo.nekurak.vyjimky.NekurakVyjimka; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.ejb.EJB; import javax.ejb.Stateless; @@ -20,6 +29,10 @@ @EJB private UzivatelDAO uzivatelDao; + @EJB + private Postak postak; + private static final Logger log = Logger.getLogger(UzivatelEJB.class.getSimpleName()); + private Map lokalizace = new HashMap(); /** Uživatele může zakládat kdokoli – uživatel se registruje sám. */ public void registrujUzivatele(PozadavekNaRegistraciUzivatele p) throws NekurakVyjimka { @@ -28,6 +41,7 @@ /** Heslo musíme před uložení zahashovat, aby se uživatel mohl přihlásit. */ u.setHeslo(Hash.hashuj(u.getHeslo())); uzivatelDao.zaloz(u); + posliRegistracniEmail(p); } catch (NoSuchAlgorithmException e) { /** Nemělo by nastat */ throw new NecekanaVyjimka("Neexistující hashovací algoritmus.", e); @@ -36,4 +50,35 @@ throw new NecekanaVyjimka("Nepodporované kódování znaků.", e); } } + + private ResourceBundle getLokalizace(Locale jazyk) { + if (jazyk == null) { + jazyk = Locale.getDefault(); + } + + if (lokalizace.get(jazyk) == null) { + lokalizace.put(jazyk, ResourceBundle.getBundle("cz.frantovo.nekurak.preklady", jazyk)); + } + + return lokalizace.get(jazyk); + } + + private void posliRegistracniEmail(PozadavekNaRegistraciUzivatele p) { + try { + String email = p.getEmail(); + if (Postak.isAdresaOk(email)) { + ResourceBundle rb = getLokalizace(p.getJazyk()); + String jmeno = p.getJmeno() + " " + p.getPrijmeni(); + String predmet = rb.getString("registrace.email.predmet"); + Object[] hodnotyTextu = {jmeno, p.getPrezdivka()}; + String text = new MessageFormat(rb.getString("registrace.email.text"), p.getJazyk()).format(hodnotyTextu); + postak.odesliZpravu(new Adresa(email, jmeno), null, predmet, text); + } else { + log.log(Level.WARNING, "E-mailová adresa buď chybí nebo je chybná → neodesíláme registrační e-mail. Uživatel: " + p.getPrezdivka()); + } + } catch (NekurakVyjimka e) { + /** e-mail je jen informační → pokud se ho nepodaří odeslat, nemusíme stornovat registraci. */ + log.log(Level.WARNING, "Chyba při posílání registračního e-mailu", e); + } + } } diff -r ade4631809b9 -r 4dddecffde5c java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Postak.java --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Postak.java Tue Mar 23 10:37:23 2010 +0100 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Postak.java Tue Mar 23 11:26:28 2010 +0100 @@ -49,7 +49,7 @@ * @param email adresa typu abcd@example.com * @return true, pokud e-mail vyhovuje regulárnímu výrazu pro e-maily */ - public boolean isAdresaOk(String email) { + public static boolean isAdresaOk(String email) { return email != null && Pattern.matches(REGULARNI_EMAIL, email); } } diff -r ade4631809b9 -r 4dddecffde5c java/nekurak.net-lib/src/cz/frantovo/nekurak/dto/PozadavekNaRegistraciUzivatele.java --- a/java/nekurak.net-lib/src/cz/frantovo/nekurak/dto/PozadavekNaRegistraciUzivatele.java Tue Mar 23 10:37:23 2010 +0100 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/dto/PozadavekNaRegistraciUzivatele.java Tue Mar 23 11:26:28 2010 +0100 @@ -1,6 +1,7 @@ package cz.frantovo.nekurak.dto; import java.io.Serializable; +import java.util.Locale; /** * Uživatel se registruje na webu. @@ -18,6 +19,7 @@ private String jmeno; private String prijmeni; private String email; + private Locale jazyk; public String getPrezdivka() { return prezdivka; @@ -59,6 +61,14 @@ this.email = email; } + public Locale getJazyk() { + return jazyk; + } + + public void setJazyk(Locale jazyk) { + this.jazyk = jazyk; + } + /** Převede údaje z registrace do instance třídy Uzivatel */ public Uzivatel getUzivatel() { Uzivatel u = new Uzivatel(); diff -r ade4631809b9 -r 4dddecffde5c java/nekurak.net-lib/src/cz/frantovo/nekurak/preklady_cs.properties --- a/java/nekurak.net-lib/src/cz/frantovo/nekurak/preklady_cs.properties Tue Mar 23 10:37:23 2010 +0100 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/preklady_cs.properties Tue Mar 23 11:26:28 2010 +0100 @@ -62,6 +62,8 @@ registrace.vyjimka.necekana=Omlouv\u00E1me se, b\u011Bhem registrace do\u0161lo k nezn\u00E1m\u00E9 chyb\u011B. registrace.vyjimka.token=Relace vypr\u0161ela, registraci nelze dokon\u010Dit. Vypl\u0148te pros\u00EDm formul\u00E1\u0159 znovu. registrace.vyjimka.heslaSeNeshoduji=Hesla se neshoduj\u00ED. Pro kontrolu je pot\u0159eba vyplnit stejn\u00E9 heslo dvakr\u00E1t. +registrace.email.predmet=V\u00EDtejte na serveru Neku\u0159\u00E1k.net +registrace.email.text=Srde\u010Dn\u011B v\u00EDt\u00E1me nov\u00E9ho u\u017Eivatele: {0} \nVa\u0161e p\u0159ezd\u00EDvka: {1} dto.uzivatel.prezdivka=P\u0159ezd\u00EDvka dto.uzivatel.prezdivka.tip=U\u017Eivatelsk\u00E9 jm\u00E9no