E-mail: při registraci pošleme uživateli e-mail (pokud vyplní správnou adresu).
1.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/UzivatelEJB.java Tue Mar 23 10:37:23 2010 +0100
1.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/UzivatelEJB.java Tue Mar 23 11:26:28 2010 +0100
1.3 @@ -3,11 +3,20 @@
1.4 import cz.frantovo.nekurak.dao.UzivatelDAO;
1.5 import cz.frantovo.nekurak.dto.PozadavekNaRegistraciUzivatele;
1.6 import cz.frantovo.nekurak.dto.Uzivatel;
1.7 +import cz.frantovo.nekurak.email.Adresa;
1.8 +import cz.frantovo.nekurak.email.Postak;
1.9 import cz.frantovo.nekurak.util.Hash;
1.10 import cz.frantovo.nekurak.vyjimky.NecekanaVyjimka;
1.11 import cz.frantovo.nekurak.vyjimky.NekurakVyjimka;
1.12 import java.io.UnsupportedEncodingException;
1.13 import java.security.NoSuchAlgorithmException;
1.14 +import java.text.MessageFormat;
1.15 +import java.util.HashMap;
1.16 +import java.util.Locale;
1.17 +import java.util.Map;
1.18 +import java.util.ResourceBundle;
1.19 +import java.util.logging.Level;
1.20 +import java.util.logging.Logger;
1.21 import javax.ejb.EJB;
1.22 import javax.ejb.Stateless;
1.23
1.24 @@ -20,6 +29,10 @@
1.25
1.26 @EJB
1.27 private UzivatelDAO uzivatelDao;
1.28 + @EJB
1.29 + private Postak postak;
1.30 + private static final Logger log = Logger.getLogger(UzivatelEJB.class.getSimpleName());
1.31 + private Map<Locale, ResourceBundle> lokalizace = new HashMap<Locale, ResourceBundle>();
1.32
1.33 /** Uživatele může zakládat kdokoli – uživatel se registruje sám. */
1.34 public void registrujUzivatele(PozadavekNaRegistraciUzivatele p) throws NekurakVyjimka {
1.35 @@ -28,6 +41,7 @@
1.36 /** Heslo musíme před uložení zahashovat, aby se uživatel mohl přihlásit. */
1.37 u.setHeslo(Hash.hashuj(u.getHeslo()));
1.38 uzivatelDao.zaloz(u);
1.39 + posliRegistracniEmail(p);
1.40 } catch (NoSuchAlgorithmException e) {
1.41 /** Nemělo by nastat */
1.42 throw new NecekanaVyjimka("Neexistující hashovací algoritmus.", e);
1.43 @@ -36,4 +50,35 @@
1.44 throw new NecekanaVyjimka("Nepodporované kódování znaků.", e);
1.45 }
1.46 }
1.47 +
1.48 + private ResourceBundle getLokalizace(Locale jazyk) {
1.49 + if (jazyk == null) {
1.50 + jazyk = Locale.getDefault();
1.51 + }
1.52 +
1.53 + if (lokalizace.get(jazyk) == null) {
1.54 + lokalizace.put(jazyk, ResourceBundle.getBundle("cz.frantovo.nekurak.preklady", jazyk));
1.55 + }
1.56 +
1.57 + return lokalizace.get(jazyk);
1.58 + }
1.59 +
1.60 + private void posliRegistracniEmail(PozadavekNaRegistraciUzivatele p) {
1.61 + try {
1.62 + String email = p.getEmail();
1.63 + if (Postak.isAdresaOk(email)) {
1.64 + ResourceBundle rb = getLokalizace(p.getJazyk());
1.65 + String jmeno = p.getJmeno() + " " + p.getPrijmeni();
1.66 + String predmet = rb.getString("registrace.email.predmet");
1.67 + Object[] hodnotyTextu = {jmeno, p.getPrezdivka()};
1.68 + String text = new MessageFormat(rb.getString("registrace.email.text"), p.getJazyk()).format(hodnotyTextu);
1.69 + postak.odesliZpravu(new Adresa(email, jmeno), null, predmet, text);
1.70 + } else {
1.71 + log.log(Level.WARNING, "E-mailová adresa buď chybí nebo je chybná → neodesíláme registrační e-mail. Uživatel: " + p.getPrezdivka());
1.72 + }
1.73 + } catch (NekurakVyjimka e) {
1.74 + /** e-mail je jen informační → pokud se ho nepodaří odeslat, nemusíme stornovat registraci. */
1.75 + log.log(Level.WARNING, "Chyba při posílání registračního e-mailu", e);
1.76 + }
1.77 + }
1.78 }
2.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Postak.java Tue Mar 23 10:37:23 2010 +0100
2.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Postak.java Tue Mar 23 11:26:28 2010 +0100
2.3 @@ -49,7 +49,7 @@
2.4 * @param email adresa typu abcd@example.com
2.5 * @return true, pokud e-mail vyhovuje regulárnímu výrazu pro e-maily
2.6 */
2.7 - public boolean isAdresaOk(String email) {
2.8 + public static boolean isAdresaOk(String email) {
2.9 return email != null && Pattern.matches(REGULARNI_EMAIL, email);
2.10 }
2.11 }
3.1 --- a/java/nekurak.net-lib/src/cz/frantovo/nekurak/dto/PozadavekNaRegistraciUzivatele.java Tue Mar 23 10:37:23 2010 +0100
3.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/dto/PozadavekNaRegistraciUzivatele.java Tue Mar 23 11:26:28 2010 +0100
3.3 @@ -1,6 +1,7 @@
3.4 package cz.frantovo.nekurak.dto;
3.5
3.6 import java.io.Serializable;
3.7 +import java.util.Locale;
3.8
3.9 /**
3.10 * Uživatel se registruje na webu.
3.11 @@ -18,6 +19,7 @@
3.12 private String jmeno;
3.13 private String prijmeni;
3.14 private String email;
3.15 + private Locale jazyk;
3.16
3.17 public String getPrezdivka() {
3.18 return prezdivka;
3.19 @@ -59,6 +61,14 @@
3.20 this.email = email;
3.21 }
3.22
3.23 + public Locale getJazyk() {
3.24 + return jazyk;
3.25 + }
3.26 +
3.27 + public void setJazyk(Locale jazyk) {
3.28 + this.jazyk = jazyk;
3.29 + }
3.30 +
3.31 /** Převede údaje z registrace do instance třídy Uzivatel */
3.32 public Uzivatel getUzivatel() {
3.33 Uzivatel u = new Uzivatel();
4.1 --- a/java/nekurak.net-lib/src/cz/frantovo/nekurak/preklady_cs.properties Tue Mar 23 10:37:23 2010 +0100
4.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/preklady_cs.properties Tue Mar 23 11:26:28 2010 +0100
4.3 @@ -62,6 +62,8 @@
4.4 registrace.vyjimka.necekana=Omlouv\u00E1me se, b\u011Bhem registrace do\u0161lo k nezn\u00E1m\u00E9 chyb\u011B.
4.5 registrace.vyjimka.token=Relace vypr\u0161ela, registraci nelze dokon\u010Dit. Vypl\u0148te pros\u00EDm formul\u00E1\u0159 znovu.
4.6 registrace.vyjimka.heslaSeNeshoduji=Hesla se neshoduj\u00ED. Pro kontrolu je pot\u0159eba vyplnit stejn\u00E9 heslo dvakr\u00E1t.
4.7 +registrace.email.predmet=V\u00EDtejte na serveru Neku\u0159\u00E1k.net
4.8 +registrace.email.text=Srde\u010Dn\u011B v\u00EDt\u00E1me nov\u00E9ho u\u017Eivatele: {0} \nVa\u0161e p\u0159ezd\u00EDvka: {1}
4.9
4.10 dto.uzivatel.prezdivka=P\u0159ezd\u00EDvka
4.11 dto.uzivatel.prezdivka.tip=U\u017Eivatelsk\u00E9 jm\u00E9no