[seam-commits] Seam SVN: r13549 - in branches/community/Seam_2_2/examples/wiki: src/etc/i18n and 11 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Tue Aug 3 05:26:29 EDT 2010


Author: shane.bryzak at jboss.com
Date: 2010-08-03 05:26:27 -0400 (Tue, 03 Aug 2010)
New Revision: 13549

Added:
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/BlacklistDAO.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/ClientAddressFactory.java
   branches/community/Seam_2_2/examples/wiki/view/blacklisted.xhtml
Modified:
   branches/community/Seam_2_2/examples/wiki/src/etc/WEB-INF/pages.xml
   branches/community/Seam_2_2/examples/wiki/src/etc/i18n/messages_en.properties
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/AdminHome.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentNodeRemover.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeRemover.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserHome.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/WikiIdentity.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/SpamReportDAO.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/User.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiUrlRewriteFilter.java
   branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiUtil.java
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogDirectory.xhtml
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogDirectory.css
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedAggregator.xhtml
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumQueries.hbm.xml
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ReplyHome.java
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/TopicHome.java
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/mailtemplates/forumNotifyReplyToList.xhtml
   branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/mailtemplates/forumNotifyTopicToList.xhtml
   branches/community/Seam_2_2/examples/wiki/view/adminHome_d.xhtml
Log:
wiki enhancements


Modified: branches/community/Seam_2_2/examples/wiki/src/etc/WEB-INF/pages.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/etc/WEB-INF/pages.xml	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/etc/WEB-INF/pages.xml	2010-08-03 09:26:27 UTC (rev 13549)
@@ -181,6 +181,11 @@
         <action execute="#{userHome.init}"/>
         <begin-conversation flush-mode="MANUAL" join="true"/>
         <navigation>
+            <rule if-outcome="blacklisted">
+              <end-conversation before-redirect="true"/>
+              <redirect view-id="/blacklisted.xhtml"/>
+            </rule>
+        
             <rule if-outcome="persisted" if="#{s:hasPermission('User', 'isAdmin', currentUser)}">
                 <end-conversation before-redirect="true"/>
                 <redirect view-id="/userHome_#{skin}.xhtml">

Modified: branches/community/Seam_2_2/examples/wiki/src/etc/i18n/messages_en.properties
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/etc/i18n/messages_en.properties	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/etc/i18n/messages_en.properties	2010-08-03 09:26:27 UTC (rev 13549)
@@ -376,6 +376,7 @@
 lacewiki.button.adminHome.Preferences=P<u>r</u>eferences
 lacewiki.button.adminHome.Preferences.accesskey=R
 lacewiki.button.adminHome.SpamReport=Spam Reports
+lacewiki.button.adminHome.Blacklist=Blacklist
 
 lacewiki.button.adminHome.SaveSettings=<u>S</u>ave Settings
 lacewiki.button.adminHome.SaveSettings.accesskey=S
@@ -390,7 +391,16 @@
 lacewiki.label.adminHome.spamReport.Reporter=Reporter
 lacewiki.label.adminHome.spamReport.Comment=Comment
 lacewiki.label.adminHome.spamReport.Poster=Comment Poster
+lacewiki.label.adminHome.spamReport.AreYouSureYouWantToDelete=Are you sure you want to delete this spam report
+lacewiki.label.adminHome.spamReport.RemoveComment=Remove Comment
+lacewiki.label.adminHome.spamReport.NotSpam=Not Spam
 
+lacewiki.label.adminHome.blacklist.IPAddress=IP Address
+lacewiki.label.adminHome.blacklist.Email=E-mail
+lacewiki.label.adminHome.blacklist.Action=Action
+lacewiki.label.adminHome.blacklist.Remove=Remove
+lacewiki.label.adminHome.blacklist.AreYouSureYouWantToDelete=Remove this blacklist entry
+
 lacewiki.label.adminHome.TargetWithPlaceHolder=Target with [[link]] placeholder
 lacewiki.label.adminHome.NotAvailableForSkin=Administration is not available with this skin.
 lacewiki.label.adminHome.plugins.InstalledPlugins=Installed Plugins

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/AdminHome.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/AdminHome.java	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/AdminHome.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -1,5 +1,13 @@
 package org.jboss.seam.wiki.core.action;
 
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.TermEnum;
 import org.hibernate.search.FullTextSession;
@@ -8,37 +16,39 @@
 import org.hibernate.validator.InvalidValue;
 import org.jboss.seam.Component;
 import org.jboss.seam.ScopeType;
-import org.jboss.seam.international.StatusMessages;
-import org.jboss.seam.international.StatusMessage;
-import org.jboss.seam.annotations.*;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.Factory;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Out;
+import org.jboss.seam.annotations.Scope;
 import org.jboss.seam.annotations.datamodel.DataModel;
 import org.jboss.seam.annotations.datamodel.DataModelSelection;
 import org.jboss.seam.annotations.remoting.WebRemote;
 import org.jboss.seam.annotations.security.Restrict;
 import org.jboss.seam.contexts.Contexts;
 import org.jboss.seam.core.Validators;
+import org.jboss.seam.international.StatusMessage;
+import org.jboss.seam.international.StatusMessages;
 import org.jboss.seam.log.Log;
 import org.jboss.seam.security.AuthorizationException;
 import org.jboss.seam.security.Identity;
+import org.jboss.seam.wiki.core.dao.SpamReportDAO;
+import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
+import org.jboss.seam.wiki.core.model.Blacklist;
 import org.jboss.seam.wiki.core.model.LinkProtocol;
 import org.jboss.seam.wiki.core.model.User;
 import org.jboss.seam.wiki.core.model.WikiSpamReport;
+import org.jboss.seam.wiki.core.plugin.PluginRegistry;
+import org.jboss.seam.wiki.core.plugin.metamodel.Plugin;
 import org.jboss.seam.wiki.core.search.IndexManager;
 import org.jboss.seam.wiki.core.search.metamodel.SearchRegistry;
 import org.jboss.seam.wiki.core.search.metamodel.SearchableEntity;
-import org.jboss.seam.wiki.core.plugin.PluginRegistry;
-import org.jboss.seam.wiki.core.plugin.metamodel.Plugin;
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
 import org.jboss.seam.wiki.preferences.metamodel.PreferenceEntity;
-import org.jboss.seam.wiki.preferences.PreferenceVisibility;
 import org.jboss.seam.wiki.util.Progress;
 
-import javax.persistence.EntityManager;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 @Name("adminHome")
 @Scope(ScopeType.CONVERSATION)
 public class AdminHome implements Serializable {
@@ -51,6 +61,12 @@
 
     @In
     EntityManager entityManager;
+    
+    @In
+    SpamReportDAO spamReportDAO;
+    
+    @In
+    WikiNodeDAO wikiNodeDAO;
 
     @Create
     public void create() {
@@ -116,16 +132,6 @@
     public LinkProtocol getLinkProtocol() {
         return linkProtocol;
     }
-    
-    @DataModel(value = "spamReports")
-    private List<WikiSpamReport> spamReports;
-    
-    @Factory("spamReports")
-    public void loadSpamReports()
-    {
-       spamReports = entityManager.createQuery("select r from WikiSpamReport r")
-           .getResultList();
-    }
 
     public void addLinkProtocol() {
 
@@ -149,6 +155,49 @@
         entityManager.remove(selectedLinkProtocol);
         linkProtocols.remove(selectedLinkProtocol);
     }
+    
+    // ####################### SPAM REPORTS ##################################
+    
+    @DataModel(value = "spamReports")
+    private List<WikiSpamReport> spamReports;
+    
+    @Factory(value = "spamReports")
+    public void refreshSpamReports()
+    {
+       spamReports = entityManager.createQuery("select r from WikiSpamReport r")
+           .getResultList();
+    }    
+        
+    public String removeSpamReport(Long commentId)
+    {              
+       spamReportDAO.removeReports(spamReportDAO.findReports(wikiNodeDAO.findWikiComment(commentId)));
+       refreshSpamReports();
+       return null;
+    }    
+    
+    // ####################### BLACKLIST ##################################
+    
+    @DataModel(value = "blacklist")
+    private List<Blacklist> blacklist;
+    
+    @Factory(value = "blacklist")
+    public void refreshBlacklist()
+    {
+       blacklist = entityManager.createQuery("select b from Blacklist b").getResultList();
+    }
+    
+    public String removeBlacklist(Long id)
+    {
+       Blacklist bl = entityManager.find(Blacklist.class, id);
+       if (bl != null)
+       {
+          entityManager.remove(bl);
+          entityManager.flush();
+       }       
+       
+       refreshBlacklist();
+       return null;
+    }
 
     // ####################### INDEXING ##################################
 

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentNodeRemover.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentNodeRemover.java	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentNodeRemover.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -6,8 +6,10 @@
  */
 package org.jboss.seam.wiki.core.action;
 
+import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.wiki.core.dao.SpamReportDAO;
 import org.jboss.seam.wiki.core.model.WikiComment;
 
 import java.io.Serializable;
@@ -19,6 +21,8 @@
 @AutoCreate
 public class CommentNodeRemover extends NodeRemover<WikiComment> implements Serializable {
 
+   @In SpamReportDAO spamReportDAO;
+   
     public boolean isRemovable(WikiComment comment) {
         return true;
     }

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeRemover.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeRemover.java	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeRemover.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -6,12 +6,15 @@
  */
 package org.jboss.seam.wiki.core.action;
 
+import java.util.Date;
+
+import javax.persistence.EntityManager;
+
 import org.jboss.seam.ScopeType;
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Logger;
 import org.jboss.seam.annotations.Scope;
 import org.jboss.seam.log.Log;
-import org.jboss.seam.wiki.core.dao.SpamReportDAO;
 import org.jboss.seam.wiki.core.dao.UserDAO;
 import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
 import org.jboss.seam.wiki.core.feeds.FeedDAO;
@@ -19,9 +22,6 @@
 import org.jboss.seam.wiki.core.model.WikiNode;
 import org.jboss.seam.wiki.util.WikiUtil;
 
-import javax.persistence.EntityManager;
-import java.util.Date;
-
 /**
  * @author Christian Bauer
  */
@@ -33,9 +33,6 @@
 
     @In
     protected FeedDAO feedDAO;
-    
-    @In
-    protected SpamReportDAO spamReportDAO;
 
     @In
     protected WikiNodeDAO wikiNodeDAO;

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserHome.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserHome.java	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserHome.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -24,8 +24,10 @@
 import org.jboss.seam.security.Identity;
 import org.jboss.seam.wiki.core.action.prefs.UserManagementPreferences;
 import org.jboss.seam.wiki.core.action.prefs.WikiPreferences;
+import org.jboss.seam.wiki.core.dao.BlacklistDAO;
 import org.jboss.seam.wiki.core.dao.UserDAO;
 import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
+import org.jboss.seam.wiki.core.model.Blacklist;
 import org.jboss.seam.wiki.core.model.Role;
 import org.jboss.seam.wiki.core.model.User;
 import org.jboss.seam.wiki.core.model.WikiComment;
@@ -52,6 +54,8 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import javax.faces.context.FacesContext;
+
 @Name("userHome")
 @Scope(ScopeType.CONVERSATION)
 public class UserHome extends EntityHome<User> {
@@ -64,11 +68,17 @@
 
     @In
     private StatusMessages statusMessages;
+    
+    @In(required = false)
+    private String clientAddress;
 
     @In
     private UserDAO userDAO;
     
     @In
+    private BlacklistDAO blacklistDAO;
+    
+    @In
     private Hash hashUtil;
 
     @In(create = true)
@@ -179,6 +189,16 @@
     @Override
     public String persist() {
 
+       if (clientAddress != null)
+       {
+          getInstance().setRegisteredAddress(clientAddress);
+       }
+       
+       if (isBlacklisted())
+       {
+          return "blacklisted";
+       }
+       
         // Validate
         if (!isUniqueUsername() ||
             !passwordAndControlNotNull() ||
@@ -431,9 +451,11 @@
           nodesToDelete.remove(nodeToDelete);          
        }       
        
-       // TODO blacklist the user
+       Blacklist blacklist = new Blacklist();
+       blacklist.setEmail(getInstance().getEmail());
+       blacklist.setIpAddress(getInstance().getRegisteredAddress());
+       getEntityManager().persist(blacklist);       
        
-       
        // Remove preferences for this user
         PreferenceProvider prefProvider = (PreferenceProvider)Component.getInstance("preferenceProvider");
         prefProvider.deleteUserPreferenceValues(getInstance());
@@ -610,6 +632,12 @@
         }
         return true;
     }
+    
+    public boolean isBlacklisted()
+    {
+       return blacklistDAO.isEmailBlacklisted(getInstance().getEmail()) ||
+              blacklistDAO.isIpAddressBlacklisted(getInstance().getRegisteredAddress());
+    }
 
     public void validateUsername() {
         isUniqueUsername();

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/WikiIdentity.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/WikiIdentity.java	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/action/WikiIdentity.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -230,6 +230,7 @@
     private boolean checkCommentCreate(WikiDocument doc) {
         if (currentAccessLevel == Role.ADMINROLE_ACCESSLEVEL) return true;
         if (doc.getReadAccessLevel() <= currentAccessLevel &&
+              currentAccessLevel > Role.GUESTROLE_ACCESSLEVEL &&
             doc.isEnableComments() && doc.isEnableCommentForm()) return true;
         return false;
     }

Added: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/BlacklistDAO.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/BlacklistDAO.java	                        (rev 0)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/BlacklistDAO.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -0,0 +1,38 @@
+package org.jboss.seam.wiki.core.dao;
+
+import javax.persistence.EntityManager;
+
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+
+/**
+ * DAO for blacklist-related operations
+ * 
+ * @author Shane Bryzak
+ */
+ at Name("blacklistDAO")
+ at AutoCreate
+public class BlacklistDAO
+{
+   @In
+   protected EntityManager entityManager;
+
+   public boolean isEmailBlacklisted(String email)
+   {
+      if (email == null) return false;
+      
+      return entityManager.createQuery("select bl from Blacklist bl where bl.email = :email")
+         .setParameter("email", email)
+         .getResultList().size() > 0;
+   }
+   
+   public boolean isIpAddressBlacklisted(String ipAddress)
+   {
+      if (ipAddress == null) return false;
+      
+      return entityManager.createQuery("select bl from Blacklist bl where bl.ipAddress = :ipAddress")
+         .setParameter("ipAddress", ipAddress)
+         .getResultList().size() > 0;
+   }
+}

Added: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/ClientAddressFactory.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/ClientAddressFactory.java	                        (rev 0)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/ClientAddressFactory.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -0,0 +1,24 @@
+package org.jboss.seam.wiki.core.dao;
+
+import javax.faces.context.FacesContext;
+import javax.servlet.http.HttpServletRequest;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Factory;
+import org.jboss.seam.annotations.Name;
+
+ at Name("clientAddressFactory")
+public class ClientAddressFactory
+{
+   @Factory(value = "clientAddress", scope = ScopeType.EVENT, autoCreate = true)
+   public String getClientAddress()
+   {
+      Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
+      if (request instanceof HttpServletRequest)
+      {
+         return ((HttpServletRequest) request).getRemoteAddr();
+      }
+      
+      return null;
+   }
+}

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/SpamReportDAO.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/SpamReportDAO.java	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/SpamReportDAO.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -18,13 +18,14 @@
 {
    @Logger static Log log;
 
-   @In protected EntityManager restrictedEntityManager;
+   @In
+   protected EntityManager entityManager;
    
    
    public List<WikiSpamReport> findReports(WikiComment comment) {
       if (comment == null || comment.getId() == null) throw new IllegalArgumentException("comment is null or unsaved");
       
-      return restrictedEntityManager
+      return entityManager
               .createQuery(
                   "select distinct r from WikiSpamReport r " +
                   " where r.comment = :comment"
@@ -37,7 +38,8 @@
    {
       for (WikiSpamReport report : reports)
       {
-         restrictedEntityManager.remove(report);
+         entityManager.remove(report);
       }
+      entityManager.flush();
    }
 }

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/User.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/User.java	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/model/User.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -6,15 +6,31 @@
  */
 package org.jboss.seam.wiki.core.model;
 
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+import org.hibernate.validator.Email;
+import org.hibernate.validator.Length;
 import org.hibernate.validator.NotNull;
 import org.hibernate.validator.Pattern;
-import org.hibernate.validator.Length;
-import org.hibernate.validator.Email;
 
-import javax.persistence.*;
-import java.io.Serializable;
-import java.util.*;
-
 @Entity
 @Table(name = "USERS")
 @org.hibernate.annotations.BatchSize(size = 20)
@@ -78,6 +94,9 @@
 
     @Column(name = "LAST_LOGIN_ON", nullable = true)
     private Date lastLoginOn = new Date();
+    
+    @Column(name = "REGISTERED_ADDRESS", length = 255, nullable = true)
+    private String registeredAddress;
 
     @Transient
     private Date previousLastLoginOn = new Date();
@@ -156,6 +175,9 @@
 
     public String getActivationCode() { return activationCode; }
     public void setActivationCode(String activationCode) { this.activationCode = activationCode; }
+    
+    public String getRegisteredAddress() { return registeredAddress; }
+    public void setRegisteredAddress(String registeredAddress) { this.registeredAddress = registeredAddress; }
 
     public WikiDirectory getMemberHome() { return memberHome; }
     public void setMemberHome(WikiDirectory memberHome) { this.memberHome = memberHome; }

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiUrlRewriteFilter.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiUrlRewriteFilter.java	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/WikiUrlRewriteFilter.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -29,7 +29,7 @@
 @Scope(ScopeType.APPLICATION)
 @Name("wikiUrlRewriteFilter")
 @BypassInterceptors
- at Filter(within = "org.jboss.seam.web.ajax4jsfFilter")
+ at Filter(within = "org.jboss.seam.web.exceptionFilter")
 @Install(classDependencies = "org.tuckey.web.filters.urlrewrite.UrlRewriteFilter", precedence = Install.APPLICATION)
 public class WikiUrlRewriteFilter extends AbstractFilter {
 

Modified: branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiUtil.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiUtil.java	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiUtil.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -219,7 +219,8 @@
 
     public static String removeHtml(String original) {
         if (original == null) return null;
-        return original.replaceAll("\\<([a-zA-Z]|/){1}?.*?\\>","");
+        //return original.replaceAll("\\<([a-zA-Z]|/){1}?.*?\\>","");
+        return original.replaceAll("<!--.*?-->", "").replaceAll("\\<([a-zA-Z]|/){1}?.*?\\>","");
     }
 
     // TODO: Ouch...

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogDirectory.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogDirectory.xhtml	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/templates/blogDirectory.xhtml	2010-08-03 09:26:27 UTC (rev 13549)
@@ -19,9 +19,14 @@
                     <div class="boxHeader blogEntryHeader">
 
                         <div class="title">
-                            <h:outputText value="#{blogEntry.entryDocument.name}"/>
+                          <h:outputLink value="#{wikiURLRenderer.renderURL(blogEntry.entryDocument)}">
+                             <h:outputText value="#{blogEntry.entryDocument.name}"/>
+                          </h:outputLink>
                         </div>
+                        
 
+                        
+
                         <div class="dateAuthor smallFont">
                             <h:outputText value="#{blogEntry.entryDocument.createdOn}">
                                 <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
@@ -187,4 +192,4 @@
 
     </s:div>
 
-</wiki:plugin>
\ No newline at end of file
+</wiki:plugin>

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogDirectory.css
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogDirectory.css	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/blog/themes/inrelationto/css/blogDirectory.css	2010-08-03 09:26:27 UTC (rev 13549)
@@ -18,6 +18,10 @@
     font-size: 120%;
 }
 
+.blogEntryHeader .title a {
+  color: #000000;
+}
+
 .blogEntryHeader .dateAuthor {
     text-align: right;
     white-space: nowrap;
@@ -99,4 +103,4 @@
 }
 .blogPagerTextColumn {
     width: 60%;
-}
\ No newline at end of file
+}

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedAggregator.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedAggregator.xhtml	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/feed/templates/feedAggregator.xhtml	2010-08-03 09:26:27 UTC (rev 13549)
@@ -69,18 +69,14 @@
                     <s:div styleClass="feedEntryTitle undecoratedLink"
                            rendered="#{not preferences.get('FeedAggregator', currentMacro).hideTitle}">
                         <h:outputLink target="_top" value="#{feDTO.feedEntry.link}">
-                            <h:outputText value="#{wiki:escapeAtSymbol(wiki:removeHtml(stringutils:unescapeHtml(feDTO.feedEntry.title)))}"/>
+                            <h:outputText value="#{wiki:removeHtml(stringutils:unescapeHtml(feDTO.feedEntry.title))}"/>
                         </h:outputLink>
                     </s:div>
 
                     <s:div styleClass="feedEntryBody" rendered="#{not preferences.get('FeedAggregator', currentMacro).hideDescription}">
                         <h:outputText value="#{wiki:truncateStringOnWordBoundary(
-                                                wiki:escapeAtSymbol(
-                                                    wiki:removeHtml(
-                                                        stringutils:unescapeHtml(feDTO.feedEntry.descriptionValue)
-                                                    )
-                                                ),
-                                                preferences.get('FeedAggregator', currentMacro).truncateDescription)}"/>
+                                                wiki:removeHtml(stringutils:unescapeHtml(feDTO.feedEntry.descriptionValue)),
+                                                 preferences.get('FeedAggregator', currentMacro).truncateDescription)}"/>
 
                         <h:outputLink target="_top" styleClass="feedEntryBodyMoreLink"
                                       value="#{feDTO.feedEntry.link}"
@@ -106,4 +102,4 @@
 
     </s:div>
 
-</wiki:plugin>
\ No newline at end of file
+</wiki:plugin>

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumQueries.hbm.xml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumQueries.hbm.xml	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ForumQueries.hbm.xml	2010-08-03 09:26:27 UTC (rev 13549)
@@ -308,7 +308,8 @@
             d2.FOOTER_MACROS as FOOTER_MACROS,
 
             u.USER_ID, u.ACTIVATED, u.ACTIVATION_CODE, u.CREATED_ON, u.EMAIL, u.FIRSTNAME, u.LAST_LOGIN_ON,
-            u.LASTNAME, u.MEMBER_HOME_WIKI_DIRECTORY_ID, u.PASSWORDHASH, u.USER_PROFILE_ID, u.USERNAME, u.OBJ_VERSION
+            u.LASTNAME, u.MEMBER_HOME_WIKI_DIRECTORY_ID, u.PASSWORDHASH, u.USER_PROFILE_ID, u.USERNAME, u.OBJ_VERSION,
+            u.REGISTERED_ADDRESS
 
         from
             WIKI_NODE d0
@@ -348,6 +349,7 @@
                 cl0.USE_WIKI_TEXT as USE_WIKI_TEXT,
                 u.USER_ID, u.ACTIVATED, u.ACTIVATION_CODE, u.CREATED_ON, u.EMAIL, u.FIRSTNAME, u.LAST_LOGIN_ON,
                 u.LASTNAME, u.MEMBER_HOME_WIKI_DIRECTORY_ID, u.PASSWORDHASH, u.USER_PROFILE_ID, u.USERNAME, u.OBJ_VERSION,
+                u.REGISTERED_ADDRESS,
                 doc0.NODE_ID as TOPIC_ID,
                 count(distinct c0.NODE_ID) as NUM_OF_REPLIES
             from
@@ -366,7 +368,7 @@
                 cl1.LAST_MODIFIED_BY_USER_ID, cl1.WRITE_ACCESS_LEVEL, cl1.READ_ACCESS_LEVEL, cl1.WRITE_PROTECTED, cl1.PARENT_NODE_ID,
                 cl0.SUBJECT, cl0.FROM_USER_NAME, cl0.FROM_USER_EMAIL, cl0.FROM_USER_HOMEPAGE, cl0.USE_WIKI_TEXT,
                 u.USER_ID, u.ACTIVATED, u.ACTIVATION_CODE, u.CREATED_ON, u.EMAIL, u.FIRSTNAME, u.LAST_LOGIN_ON,
-                u.LASTNAME, u.MEMBER_HOME_WIKI_DIRECTORY_ID, u.PASSWORDHASH, u.USER_PROFILE_ID, u.USERNAME, u.OBJ_VERSION,
+                u.LASTNAME, u.MEMBER_HOME_WIKI_DIRECTORY_ID, u.PASSWORDHASH, u.USER_PROFILE_ID, u.USERNAME, u.OBJ_VERSION, u.REGISTERED_ADDRESS,
                 doc0.NODE_ID
         ]]>
     </sql-query>
@@ -377,7 +379,7 @@
         <![CDATA[
         select
             ur.USER_ID, ur.ACTIVATED, ur.ACTIVATION_CODE, ur.CREATED_ON, ur.EMAIL, ur.FIRSTNAME, ur.LAST_LOGIN_ON,
-            ur.LASTNAME, ur.MEMBER_HOME_WIKI_DIRECTORY_ID, ur.PASSWORDHASH, ur.USER_PROFILE_ID, ur.USERNAME, ur.OBJ_VERSION,
+            ur.LASTNAME, ur.MEMBER_HOME_WIKI_DIRECTORY_ID, ur.PASSWORDHASH, ur.USER_PROFILE_ID, ur.USERNAME, ur.OBJ_VERSION, ur.REGISTERED_ADDRESS
             sum(ur.RATING) as RATING_POINTS
         from
            (select distinct
@@ -398,9 +400,9 @@
         group by
             ur.USER_ID, ur.ACTIVATED, ur.ACTIVATION_CODE, ur.CREATED_ON, ur.EMAIL, ur.FIRSTNAME, ur.LAST_LOGIN_ON,
             ur.LASTNAME, ur.MEMBER_HOME_WIKI_DIRECTORY_ID, ur.PASSWORDHASH, ur.USER_PROFILE_ID, ur.USERNAME,
-            ur.OBJ_VERSION
+            ur.OBJ_VERSION, ur.REGISTERED_ADDRESS
         order by sum(ur.RATING) desc
         ]]>
     </sql-query>
 
-</hibernate-mapping>
\ No newline at end of file
+</hibernate-mapping>

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ReplyHome.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ReplyHome.java	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/ReplyHome.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -9,6 +9,7 @@
 import org.jboss.seam.security.Identity;
 import org.jboss.seam.wiki.core.action.CommentHome;
 import org.jboss.seam.wiki.core.model.WikiComment;
+import org.jboss.seam.wiki.core.model.WikiDirectory;
 import org.jboss.seam.wiki.core.model.WikiNode;
 import org.jboss.seam.wiki.core.model.User;
 import org.jboss.seam.wiki.core.ui.WikiRedirect;
@@ -95,7 +96,48 @@
         }
 
     }
+    
+    public String getMailSubject()
+    {
+       StringBuilder sb = new StringBuilder();
+       
+       String forumName = getForumName();
+       
+       if (getInstance().getSubject().toLowerCase().startsWith("re:"))
+       {
+          sb.append("Re: ");
+          if (forumName != null)
+          {
+             sb.append("[");
+             sb.append(forumName);
+             sb.append("] ");
+          }
+          sb.append(getInstance().getSubject().replaceFirst("[Rr]e:", "").trim());
+       }
+       else
+       {
+          if (forumName != null)
+          {
+             sb.append("[");
+             sb.append(forumName);
+             sb.append("] ");
+          }
+          sb.append(getInstance().getSubject());
+       }       
+       
+       return sb.toString();
+    }
 
+    public String getForumName()
+    {
+       WikiNode parent = getInstance().getParent();
+       while (parent != null && !(parent instanceof WikiDirectory))
+       {
+          parent = parent.getParent();
+       }
+       return (parent != null && parent instanceof WikiDirectory) ? parent.getName() : null;
+    }    
+    
     @Begin(flushMode = FlushModeType.MANUAL, join = true)
     public void replyToDocument() {
 

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/TopicHome.java
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/TopicHome.java	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/TopicHome.java	2010-08-03 09:26:27 UTC (rev 13549)
@@ -10,6 +10,7 @@
 import org.jboss.seam.wiki.core.action.DocumentHome;
 import org.jboss.seam.wiki.core.model.WikiDirectory;
 import org.jboss.seam.wiki.core.model.WikiDocument;
+import org.jboss.seam.wiki.core.model.WikiNode;
 import org.jboss.seam.wiki.core.model.WikiTextMacro;
 import org.jboss.seam.wiki.core.ui.WikiRedirect;
 import org.jboss.seam.wiki.core.plugin.PluginRegistry;
@@ -117,6 +118,56 @@
         }
         return null; // Prevent navigation
     }
+    
+    /**
+     * Have to jiggle with the subject line a bit to get it right
+     * @return
+     */
+    public String getMailSubject()
+    {
+       StringBuilder sb = new StringBuilder();
+       
+       String forumName = getForumName();
+       
+       if (getInstance().getName().toLowerCase().startsWith("re:"))
+       {
+          sb.append("Re: ");
+          if (forumName != null)
+          {
+             sb.append("[");
+             sb.append(forumName);
+             sb.append("] ");
+          }
+          sb.append(getInstance().getName().replaceFirst("[Rr]e:", "").trim());
+       }
+       else
+       {
+          if (forumName != null)
+          {
+             sb.append("[");
+             sb.append(forumName);
+             sb.append("] ");
+          }
+          sb.append(getInstance().getName());
+       }       
+       
+       return sb.toString();
+    }    
+    
+    /**
+     * This *should* return the name of the forum the topic belongs to
+     * 
+     * @return
+     */
+    public String getForumName()
+    {
+       WikiNode parent = getInstance().getParent();
+       while (parent != null && !(parent instanceof WikiDirectory))
+       {
+          parent = parent.getParent();
+       }
+       return (parent != null && parent instanceof WikiDirectory) ? parent.getName() : "";
+    }
 
     @Override
     public String update() {

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/mailtemplates/forumNotifyReplyToList.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/mailtemplates/forumNotifyReplyToList.xhtml	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/mailtemplates/forumNotifyReplyToList.xhtml	2010-08-03 09:26:27 UTC (rev 13549)
@@ -15,7 +15,7 @@
     <m:header name="From" value="#{replyHome.instance.createdBy.fullname} &lt;do-not-reply at jboss.com>"/>
     <m:to name="SeamFramework.org Forums List">#{preferences.get('Forum').notificationMailingList}</m:to>
 
-    <m:subject>#{replyHome.instance.subject}</m:subject>
+    <m:subject>#{replyHome.mailSubject}</m:subject>
 
     <m:body>
         <html>

Modified: branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/mailtemplates/forumNotifyTopicToList.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/mailtemplates/forumNotifyTopicToList.xhtml	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/src/plugin/org/jboss/seam/wiki/plugin/forum/themes/sfwkorg/mailtemplates/forumNotifyTopicToList.xhtml	2010-08-03 09:26:27 UTC (rev 13549)
@@ -12,7 +12,7 @@
     <m:header name="From" value="#{topicHome.instance.createdBy.fullname} &lt;do-not-reply at jboss.com>"/>
     <m:to name="SeamFramework.org Forums List">#{topicHome.mailingList}</m:to>
 
-    <m:subject>#{topicHome.instance.name}</m:subject>
+    <m:subject>#{topicHome.mailSubject}</m:subject>
 
     <m:body>
         <html>

Modified: branches/community/Seam_2_2/examples/wiki/view/adminHome_d.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/view/adminHome_d.xhtml	2010-08-03 07:58:35 UTC (rev 13548)
+++ branches/community/Seam_2_2/examples/wiki/view/adminHome_d.xhtml	2010-08-03 09:26:27 UTC (rev 13549)
@@ -71,10 +71,10 @@
                                        accesskey="#{messages['lacewiki.button.adminHome.SystemStatistics.accesskey']}">
                 <h:outputText escape="false" value="#{messages['lacewiki.button.adminHome.SystemStatistics']}"/>
             </a></li>
-            <li id="rolesPermissionsTab"><a href="#rolesPermissions"
+            <!--li id="rolesPermissionsTab"><a href="#rolesPermissions"
                                             accesskey="#{messages['lacewiki.button.adminHome.RolesPermissions.accesskey']}">
                 <h:outputText escape="false" value="#{messages['lacewiki.button.adminHome.RolesPermissions']}"/>
-            </a></li>
+            </a></li-->
             <li id="pluginsTab"><a href="#plugins"
                                             accesskey="#{messages['lacewiki.button.adminHome.Plugins.accesskey']}">
                 <h:outputText escape="false" value="#{messages['lacewiki.button.adminHome.Plugins']}"/>
@@ -87,9 +87,14 @@
                                        accesskey="#{messages['lacewiki.button.adminHome.Preferences.accesskey']}">
                 <h:outputText escape="false" value="#{messages['lacewiki.button.adminHome.Preferences']}"/>
             </a></li>
+            
             <li id="spamReportTab"><a href="#spamReport">
                 <h:outputText escape="false" value="#{messages['lacewiki.button.adminHome.SpamReport']}"/>
-            </a></li>            
+            </a></li>   
+                     
+            <li id="blacklistTab"><a href="#blacklist">
+                <h:outputText escape="false" value="#{messages['lacewiki.button.adminHome.Blacklist']}"/>
+            </a></li>                           
             
         </ul>
 
@@ -252,6 +257,7 @@
         </div>
         
         <div id="spamReport" style="padding: 20px">
+          <s:div id="spamReportContent">
             <h:dataTable id="spamReportTable" var="report"
                          value="#{spamReports}"
                          rendered="#{spamReports.rowCount >0}"
@@ -299,9 +305,9 @@
                       
                       <div>
                                               
-                        <s:fragment rendered="#{s:hasPermission('Comment', 'delete', report.comment)}">
+                        <s:fragment rendered="#{s:hasPermission('Comment', 'delete', report.comment)}">                        
                             <ui:decorate template="includes/confirmationAction.xhtml">
-                                <ui:param name="label" value="#{messages['lacewiki.button.commentsDisplay.RemoveComment']}"/>
+                                <ui:param name="label" value="#{messages['lacewiki.label.adminHome.spamReport.RemoveComment']}"/>
                                 <ui:param name="jsFunctionName" value="deleteCommentId#{report.comment.id}"/>
                                 <ui:param name="message" value="#{messages['lacewiki.label.AreYouSureYouWantToDelete']
                                                                     .concat(' ')
@@ -311,7 +317,7 @@
                                                                     .concat('\'?')}"/>
                                 <ui:define name="jsFunction">
                                     <a:jsFunction name="#{jsFunctionName}"
-                                                  reRender="commentDisplayForm, messageBoxContainer"
+                                                  reRender="spamReportContent"
                                                   action="#{commentHome.remove(report.comment.id)}"
                                                   oncomplete="onAjaxRequestComplete()"
                                                   status="globalStatus"/>
@@ -319,6 +325,24 @@
                             </ui:decorate>
                         </s:fragment>
                         
+                        
+                        <s:fragment rendered="#{s:hasPermission('Comment', 'delete', report.comment)}">                        
+                            <ui:decorate template="includes/confirmationAction.xhtml">
+                                <ui:param name="label" value="#{messages['lacewiki.label.adminHome.spamReport.NotSpam']}"/>
+                                <ui:param name="jsFunctionName" value="deleteReportId#{report.reportId}"/>
+                                <ui:param name="linkClass" value="buttonReport"/>
+                                <ui:param name="message" value="#{messages['lacewiki.label.adminHome.spamReport.AreYouSureYouWantToDelete']
+                                                                    .concat('?')}"/>
+                                <ui:define name="jsFunction">
+                                    <a:jsFunction name="#{jsFunctionName}"
+                                                  reRender="spamReportContent"
+                                                  action="#{adminHome.removeSpamReport(report.comment.id)}"
+                                                  oncomplete="onAjaxRequestComplete()"
+                                                  status="globalStatus"/>
+                                </ui:define>
+                            </ui:decorate>
+                        </s:fragment>                                              
+                        
                       </div>        
                    </div>
                     
@@ -352,8 +376,65 @@
                 </h:column>                
 
             </h:dataTable>
+          </s:div>
         </div>
+        
+        <div id="blacklist" style="padding: 20px">
+          <s:div id="blacklistContent">
+            <h:dataTable id="blacklistTable" var="bl"
+                         value="#{blacklist}"
+                         rendered="#{blacklist.rowCount >0}"
+                         styleClass="datatable topLeftBottomBorder"
+                         headerClass="regularHeader rightBorder smallFont"
+                         columnClasses="tenPercentColumn rightBorder alignLeft,
+                                        defaultColumn rightBorder alignLeft wrapWhitespace,
+                                        tenPercentColumn rightBorder alignCenter"
+                         rowClasses="rowOdd,rowEven"
+                         cellpadding="0" cellspacing="0" border="0">
 
+                <h:column>
+                    <f:facet name="header">
+                        #{messages['lacewiki.label.adminHome.blacklist.IPAddress']}
+                    </f:facet>
+
+                    #{bl.ipAddress}                                       
+                </h:column>
+                <h:column>
+                    <f:facet name="header">
+                        #{messages['lacewiki.label.adminHome.blacklist.Email']}
+                    </f:facet>                   
+                    
+                    #{bl.email}
+                </h:column>
+                
+                <h:column>
+                    <f:facet name="header">
+                        #{messages['lacewiki.label.adminHome.blacklist.Action']}
+                    </f:facet>
+                                          
+                    <div style="padding:4px">
+                        <ui:decorate template="includes/confirmationAction.xhtml">
+                            <ui:param name="label" value="#{messages['lacewiki.label.adminHome.blacklist.Remove']}"/>
+                            <ui:param name="jsFunctionName" value="deleteBlacklistId#{bl.id}"/>
+                            <ui:param name="message" value="#{messages['lacewiki.label.adminHome.blacklist.AreYouSureYouWantToDelete']
+                                                                .concat('?')}"/>
+                            <ui:define name="jsFunction">
+                                <a:jsFunction name="#{jsFunctionName}"
+                                              reRender="blacklistContent"
+                                              action="#{adminHome.removeBlacklist(bl.id)}"
+                                              oncomplete="onAjaxRequestComplete()"
+                                              status="globalStatus"/>
+                            </ui:define>
+                        </ui:decorate>
+                    </div>        
+                    
+                </h:column>            
+
+            </h:dataTable>
+          </s:div>
+        </div>
+        
+
     </div>
 
     <div class="formControls wideLabels">

Added: branches/community/Seam_2_2/examples/wiki/view/blacklisted.xhtml
===================================================================
--- branches/community/Seam_2_2/examples/wiki/view/blacklisted.xhtml	                        (rev 0)
+++ branches/community/Seam_2_2/examples/wiki/view/blacklisted.xhtml	2010-08-03 09:26:27 UTC (rev 13549)
@@ -0,0 +1,25 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:s="http://jboss.com/products/seam/taglib"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:a="https://ajax4jsf.dev.java.net/ajax"
+                xmlns:wiki="http://jboss.com/products/seam/wiki"
+                template="themes/#{preferences.get('Wiki').themeName}/template.xhtml">
+
+<ui:define name="content">
+
+<h3>Blacklisted</h3>
+
+<span>
+I'm sorry, but you have been blacklisted from this site. 
+If you think this is an error, please contact the site administrator.
+</span>
+
+</ui:define>
+
+<ui:define name="footer">&#160;</ui:define>
+
+</ui:composition>



More information about the seam-commits mailing list