diff -r 7021b32ce3d1 -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 Sat Mar 06 21:08:42 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); + } + } }