E-mail: při registraci pošleme uživateli e-mail (pokud vyplní správnou adresu).
authorFrantišek Kučera <franta-hg@frantovo.cz>
Tue, 23 Mar 2010 11:26:28 +0100
changeset 814dddecffde5c
parent 80 ade4631809b9
child 82 df86ad0c0e55
E-mail: při registraci pošleme uživateli e-mail (pokud vyplní správnou adresu).
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/UzivatelEJB.java
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Postak.java
java/nekurak.net-lib/src/cz/frantovo/nekurak/dto/PozadavekNaRegistraciUzivatele.java
java/nekurak.net-lib/src/cz/frantovo/nekurak/preklady_cs.properties
     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