Kontrola komentářů i na výstupu.
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: <p>odstavec</p>, <strong>tu\u010Dn\u011B</strong>, <em>kurz\u00EDva</em> a <br/>.
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ů <br/>
4.8 + * Převede konce řádků na <br/>
4.9 * a celé zabalí do <p/>
4.10 - * @param komentar
4.11 - * @return
4.12 + * @param komentar text se zalomenými řádky
4.13 + * @return text s <br/> 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;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 && 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>