Kontrola komentářů i na výstupu.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Tue, 08 Jun 2010 14:42:00 +0200
changeset 1344bd1e353c527
parent 133 2acdbc74bc24
child 135 ec558dd0ca34
Kontrola komentářů i na výstupu.
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java
java/nekurak.net-lib/src/cz/frantovo/nekurak/preklady_cs.properties
java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java
java/nekurak.net-lib/test/cz/frantovo/nekurak/util/KomentareTest.java
java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/FunkceEL.java
java/nekurak.net-web/web/WEB-INF/casti/odeslatKomentar.jsp
java/nekurak.net-web/web/WEB-INF/nekurakFunkce.tld
java/nekurak.net-web/web/WEB-INF/tags/nekurak/komentareVypis.tag
xml/komentář.xml
xml/komentář.xsd
     1.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java	Tue Jun 08 13:29:13 2010 +0200
     1.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java	Tue Jun 08 14:42:00 2010 +0200
     1.3 @@ -1,5 +1,6 @@
     1.4  package cz.frantovo.nekurak.dao;
     1.5  
     1.6 +import cz.frantovo.nekurak.dto.Komentar;
     1.7  import cz.frantovo.nekurak.dto.Podnik;
     1.8  import cz.frantovo.nekurak.dto.VysledekHlasovani;
     1.9  import cz.frantovo.superDAO.SuperDAO;
    1.10 @@ -62,6 +63,14 @@
    1.11  	em.merge(p);
    1.12      }
    1.13  
    1.14 +    public void zaloz(Komentar k) {
    1.15 +	if (k.getDatum() == null) {
    1.16 +	    k.setDatum(new Date());
    1.17 +	}
    1.18 +	
    1.19 +	em.persist(k);
    1.20 +    }
    1.21 +
    1.22      /**
    1.23       * Zaznamená hlas uživatele, zda se v podniku má nebo nemá kouřit
    1.24       * @param podnik podnik o kterém se hlasuje
     2.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java	Tue Jun 08 13:29:13 2010 +0200
     2.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java	Tue Jun 08 14:42:00 2010 +0200
     2.3 @@ -11,7 +11,6 @@
     2.4  import cz.frantovo.nekurak.vyjimky.KomentarovaVyjimka;
     2.5  import cz.frantovo.nekurak.vyjimky.TexyVyjimka;
     2.6  import java.util.Collection;
     2.7 -import java.util.Date;
     2.8  import java.util.logging.Logger;
     2.9  import javax.annotation.Resource;
    2.10  import javax.annotation.security.RolesAllowed;
    2.11 @@ -85,7 +84,7 @@
    2.12      @RolesAllowed("opravneny")
    2.13      public void komentuj(Komentar k) throws KomentarovaVyjimka, TexyVyjimka {
    2.14  	k.setUzivatel(ctx.getCallerPrincipal().getName());
    2.15 -	k.setDatum(new Date());
    2.16 +	k.setDatum(null);
    2.17  
    2.18  	/** Převedeme na XML */
    2.19  	switch (k.getTyp()) {
    2.20 @@ -107,6 +106,6 @@
    2.21  
    2.22  
    2.23  	/** TODO: Uložíme do databáze */
    2.24 -	log.severe("Komentář: " + k.getNadpis() + " | " + k.getKomentar() + " | " + k.getTyp());
    2.25 +	podnikDAO.zaloz(k);
    2.26      }
    2.27  }
     3.1 --- a/java/nekurak.net-lib/src/cz/frantovo/nekurak/preklady_cs.properties	Tue Jun 08 13:29:13 2010 +0200
     3.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/preklady_cs.properties	Tue Jun 08 14:42:00 2010 +0200
     3.3 @@ -93,5 +93,7 @@
     3.4  komentar.odeslat.chyba=Koment\u00E1\u0159 obsahuje nepovolen\u00E9 form\u00E1tov\u00E1n\u00ED.
     3.5  komentar.typ.prostyText=Prost\u00FD text
     3.6  komentar.typ.xhtml=XHTML form\u00E1tovan\u00FD text
     3.7 +komentar.typ.xhtml.povoleneZnacky=Povolen\u00E9 zna\u010Dky jsou: &lt;p&gt;odstavec&lt;/p&gt;, &lt;strong&gt;tu\u010Dn\u011B&lt;/strong&gt;, &lt;em&gt;kurz\u00EDva&lt;/em&gt; a &lt;br/&gt;.
     3.8  komentar.typ.texy=Texy form\u00E1tovan\u00FD text
     3.9 +komentar.nejdeZobrazit=Tento koment\u00E1\u0159 bohu\u017Eel nelze z technick\u00FDch d\u016Fvod\u016F zobrazit.
    3.10  
     4.1 --- a/java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java	Tue Jun 08 13:29:13 2010 +0200
     4.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java	Tue Jun 08 14:42:00 2010 +0200
     4.3 @@ -46,13 +46,13 @@
     4.4      }
     4.5  
     4.6      /**
     4.7 -     * Přidá na konce řádků &lt;br/&gt;
     4.8 +     * Převede konce řádků na &lt;br/&gt;
     4.9       * a celé zabalí do &lt;p/&gt;
    4.10 -     * @param komentar
    4.11 -     * @return
    4.12 +     * @param komentar text se zalomenými řádky
    4.13 +     * @return text s &lt;br/&gt; místo konců řádků
    4.14       */
    4.15      private static String zalomRadky(String komentar) {
    4.16 -	return "<p>" + komentar.replaceAll("\n", "<br/>\n") + "</p>";
    4.17 +	return "<p>" + komentar.replaceAll("\n", "<br/>") + "</p>";
    4.18      }
    4.19  
    4.20      /**
    4.21 @@ -73,9 +73,9 @@
    4.22       * @param komentar
    4.23       * @return jestli komentář odpovídá
    4.24       */
    4.25 -    public Document zkontroluj(String komentar) throws KomentarovaVyjimka {
    4.26 +    public static Document zkontroluj(String komentar) throws KomentarovaVyjimka {
    4.27  	try {
    4.28 -	    URL soubor = this.getClass().getClassLoader().getResource("cz/frantovo/nekurak/util/komentář.xsd");
    4.29 +	    URL soubor = Komentare.class.getClassLoader().getResource("cz/frantovo/nekurak/util/komentář.xsd");
    4.30  	    SchemaFactory tovarnaSchemat = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    4.31  	    Schema schema = tovarnaSchemat.newSchema(soubor);
    4.32  
     5.1 --- a/java/nekurak.net-lib/test/cz/frantovo/nekurak/util/KomentareTest.java	Tue Jun 08 13:29:13 2010 +0200
     5.2 +++ b/java/nekurak.net-lib/test/cz/frantovo/nekurak/util/KomentareTest.java	Tue Jun 08 14:42:00 2010 +0200
     5.3 @@ -19,7 +19,7 @@
     5.4      public void upravProstýTextObal() {
     5.5  	String vystup = Komentare.upravProstyText("as\ndf");
     5.6  	vystup = Komentare.obal(vystup);
     5.7 -	String pozadovanyVystup = "<div><p>as<br/>\ndf</p></div>";
     5.8 +	String pozadovanyVystup = "<div><p>as<br/>df</p></div>";
     5.9  	assertEquals(pozadovanyVystup, vystup);
    5.10      }
    5.11  
     6.1 --- a/java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/FunkceEL.java	Tue Jun 08 13:29:13 2010 +0200
     6.2 +++ b/java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/FunkceEL.java	Tue Jun 08 14:42:00 2010 +0200
     6.3 @@ -2,6 +2,10 @@
     6.4  
     6.5  import cz.frantovo.nekurak.dto.Podnik;
     6.6  import cz.frantovo.nekurak.servlet.Fotky;
     6.7 +import cz.frantovo.nekurak.util.Komentare;
     6.8 +import cz.frantovo.nekurak.vyjimky.KomentarovaVyjimka;
     6.9 +import java.util.logging.Level;
    6.10 +import java.util.logging.Logger;
    6.11  
    6.12  /**
    6.13   * Knihovna funkcí použitelná v EL
    6.14 @@ -20,4 +24,17 @@
    6.15      public static boolean maFotky(Podnik p) {
    6.16  	return !p.getFotky().isEmpty();
    6.17      }
    6.18 +
    6.19 +    /**
    6.20 +     * @param komentar komentář včetně kořenové značky, XML jako text
    6.21 +     * @return true, pokud vyhovuje XML schématu
    6.22 +     */
    6.23 +    public static boolean zkontrolujKomentar(String komentar) {
    6.24 +	try {
    6.25 +	    Komentare.zkontroluj(komentar);
    6.26 +	    return true;
    6.27 +	} catch (KomentarovaVyjimka ex) {
    6.28 +	    return false;
    6.29 +	}
    6.30 +    }
    6.31  }
     7.1 --- a/java/nekurak.net-web/web/WEB-INF/casti/odeslatKomentar.jsp	Tue Jun 08 13:29:13 2010 +0200
     7.2 +++ b/java/nekurak.net-web/web/WEB-INF/casti/odeslatKomentar.jsp	Tue Jun 08 14:42:00 2010 +0200
     7.3 @@ -23,7 +23,7 @@
     7.4  
     7.5  	<c:choose>
     7.6  	    <c:when test="${odeslatKomentar.ok}">
     7.7 -		<p>
     7.8 +		<p class="informacniHlaska">
     7.9  		    <fmt:message key="komentar.odeslat.ok"/>,
    7.10  		    <a href="?akce=detail&amp;amp;podnik=${komentar.podnik}"><fmt:message key="komentar.odeslat.pokracujte"/></a>.
    7.11  		</p>
     8.1 --- a/java/nekurak.net-web/web/WEB-INF/nekurakFunkce.tld	Tue Jun 08 13:29:13 2010 +0200
     8.2 +++ b/java/nekurak.net-web/web/WEB-INF/nekurakFunkce.tld	Tue Jun 08 14:42:00 2010 +0200
     8.3 @@ -16,5 +16,11 @@
     8.4  	<function-class>cz.frantovo.nekurak.web.FunkceEL</function-class>
     8.5  	<function-signature>boolean maFotky(cz.frantovo.nekurak.dto.Podnik)</function-signature>
     8.6      </function>
     8.7 +    <function>
     8.8 +	<name>zkontrolujKomentar</name>
     8.9 +	<description>Provede validaci komentáře oproti XML schématu</description>
    8.10 +	<function-class>cz.frantovo.nekurak.web.FunkceEL</function-class>
    8.11 +	<function-signature>boolean zkontrolujKomentar(java.lang.String)</function-signature>
    8.12 +    </function>
    8.13  
    8.14  </taglib>
     9.1 --- a/java/nekurak.net-web/web/WEB-INF/tags/nekurak/komentareVypis.tag	Tue Jun 08 13:29:13 2010 +0200
     9.2 +++ b/java/nekurak.net-web/web/WEB-INF/tags/nekurak/komentareVypis.tag	Tue Jun 08 14:42:00 2010 +0200
     9.3 @@ -25,21 +25,22 @@
     9.4  		<p><a href="javascript:komentare.zobrazFormular()"><fmt:message key="komentare.komentovat"/></a></p>
     9.5  		<div id="formularKomentuj" style="display: none;">
     9.6  		    <form method="post" action="?akce=odeslatKomentar">
     9.7 -		    <fieldset>
     9.8 -			<input type="hidden" name="podnik" maxlength="255" value="${podnik.id}"/>
     9.9 -			<label><fmt:message key="komentare.nadpis"/>: <input type="text" name="nadpis" maxlength="255"/></label>
    9.10 -			<br/>
    9.11 -			<textarea name="komentar" cols="30" rows="10"></textarea>
    9.12 -			<br/>
    9.13 -			<select name="typ">
    9.14 -			    <option value="PROSTY_TEXT" selected="selected"><fmt:message key="komentar.typ.prostyText"/></option>
    9.15 -			    <option value="XHTML"><fmt:message key="komentar.typ.xhtml"/></option>
    9.16 -			    <option value="TEXY"><fmt:message key="komentar.typ.texy"/></option>
    9.17 -			</select>
    9.18 -			<br/>
    9.19 -			<button value="submit"><fmt:message key="komentare.tlacitkoOdeslat"/></button>
    9.20 -		    </fieldset>
    9.21 -		</form>
    9.22 +			<fieldset>
    9.23 +			    <input type="hidden" name="podnik" maxlength="255" value="${podnik.id}"/>
    9.24 +			    <label><fmt:message key="komentare.nadpis"/>: <input type="text" name="nadpis" maxlength="255"/></label>
    9.25 +			    <br/>
    9.26 +			    <textarea name="komentar" cols="30" rows="10"></textarea>
    9.27 +			    <br/>
    9.28 +			    <select name="typ">
    9.29 +				<option value="PROSTY_TEXT" selected="selected"><fmt:message key="komentar.typ.prostyText"/></option>
    9.30 +				<option value="XHTML"><fmt:message key="komentar.typ.xhtml"/></option>
    9.31 +				<option value="TEXY"><fmt:message key="komentar.typ.texy"/></option>
    9.32 +			    </select>
    9.33 +			    <br/>
    9.34 +			    <button value="submit"><fmt:message key="komentare.tlacitkoOdeslat"/></button>
    9.35 +			</fieldset>
    9.36 +		    </form>
    9.37 +		    <p><fmt:message key="komentar.typ.xhtml.povoleneZnacky"/></p>
    9.38  		</div>
    9.39  	    </c:otherwise>
    9.40  	</c:choose>
    9.41 @@ -50,11 +51,31 @@
    9.42  		<h4>
    9.43  		    <fmt:message key="komentare.napsal"/>: <c:out value="${k.uzivatel}" />,
    9.44  		    <fmt:formatDate value="${k.datum}" pattern="dd. MMMM yyyy HH:mm"/>
    9.45 -		    <br/>
    9.46 -		    <fmt:message key="komentare.nadpis"/>: <c:out value="${k.nadpis}" />
    9.47 +		    <c:if test="${k.nadpis != null &amp;&amp; k.nadpis != ''}">
    9.48 +			<br/>
    9.49 +			<fmt:message key="komentare.nadpis"/>: <c:out value="${k.nadpis}" />
    9.50 +		    </c:if>
    9.51  		</h4>
    9.52  		<!-- Pozor: předpokládáme, že v DB jsou pouze zkontrolovaná data -->
    9.53  		<c:out value="${k.komentar}" escapeXml="false" />
    9.54 +
    9.55 +		<!--
    9.56 +		    Komentáře můžeme kontrolovat i tady
    9.57 +		    pokud nemůžeme věřit, že v DB jsou zkontrolovaná data
    9.58 +		-->
    9.59 +		
    9.60 +		<c:choose>
    9.61 +		    <c:when test="${nkfn:zkontrolujKomentar(k.komentar)}">
    9.62 +			<c:out value="${k.komentar}" escapeXml="false" />
    9.63 +		    </c:when>
    9.64 +		    <c:otherwise>
    9.65 +			<!-- Špatně formátovaný komentář potom nezobrazíme -->
    9.66 +			<p class="chybovaHlaska"><fmt:message key="komentar.nejdeZobrazit"/></p>
    9.67 +		    </c:otherwise>
    9.68 +		</c:choose>
    9.69 +
    9.70 +		<!-- Nebo ho jednoduše zobrazíme, ale escapujeme -->
    9.71 +		<c:out value="${k.komentar}" escapeXml="${!nkfn:zkontrolujKomentar(k.komentar)}" />
    9.72  	    </div>
    9.73  	</c:forEach>
    9.74      </div>
    10.1 --- a/xml/komentář.xml	Tue Jun 08 13:29:13 2010 +0200
    10.2 +++ b/xml/komentář.xml	Tue Jun 08 14:42:00 2010 +0200
    10.3 @@ -18,4 +18,5 @@
    10.4  
    10.5  <p>…</p>
    10.6  
    10.7 +
    10.8  </div>
    11.1 --- a/xml/komentář.xsd	Tue Jun 08 13:29:13 2010 +0200
    11.2 +++ b/xml/komentář.xsd	Tue Jun 08 14:42:00 2010 +0200
    11.3 @@ -10,6 +10,7 @@
    11.4  			<xs:choice minOccurs="0" maxOccurs="unbounded">
    11.5  			    <xs:element name="em" type="xs:string"/>
    11.6  			    <xs:element name="strong" type="xs:string"/>
    11.7 +			    <xs:element name="br"/>
    11.8  			</xs:choice>
    11.9  		    </xs:complexType>
   11.10  		</xs:element>
   11.11 @@ -17,4 +18,4 @@
   11.12  	</xs:complexType>
   11.13      </xs:element>
   11.14  
   11.15 -</xs:schema>
   11.16 \ No newline at end of file
   11.17 +</xs:schema>