Author: snoopdave
Date: Thu Aug  9 06:54:36 2007
New Revision: 564207

URL: http://svn.apache.org/viewvc?view=rev&rev=564207
Log:
Several fixes here for some old bugs and some new regressions related to the 
Struts2 upgade:
- When comments are deleted, the entries associated with those comments are 
re-indexed to remove the comment from the search index.
- When comments are approved, the entries associated with those comments are 
re-indexed to add the comment to the search index.
- When comments are approved and email notification is enabled, approval emails 
are sent out to the folks who commented.

Fixes these issues:

Comment cannot be searched after it is approved
http://opensource.atlassian.com/projects/roller/browse/ROL-1523

Deleted entry is still searchable
http://opensource.atlassian.com/projects/roller/browse/ROL-1499

Modified:
    
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java
    
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/util/MailUtil.java
    
roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties

Modified: 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java?view=diff&rev=564207&r1=564206&r2=564207
==============================================================================
--- 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java
 (original)
+++ 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java
 Thu Aug  9 06:54:36 2007
@@ -22,14 +22,18 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.WebloggerException;
 import org.apache.roller.weblogger.business.WebloggerFactory;
 import org.apache.roller.weblogger.business.WeblogManager;
+import org.apache.roller.weblogger.business.search.IndexManager;
+import org.apache.roller.weblogger.config.WebloggerConfig;
 import org.apache.roller.weblogger.pojos.WeblogEntry;
 import org.apache.roller.weblogger.pojos.WeblogEntryComment;
 import org.apache.roller.weblogger.pojos.WeblogPermission;
@@ -37,6 +41,8 @@
 import org.apache.roller.weblogger.ui.struts2.util.KeyValueObject;
 import org.apache.roller.weblogger.util.cache.CacheManager;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.roller.weblogger.util.I18nMessages;
+import org.apache.roller.weblogger.util.MailUtil;
 import org.apache.roller.weblogger.util.Utilities;
 
 
@@ -62,6 +68,9 @@
     // last comment in the list
     private WeblogEntryComment lastComment = null;
     
+    // entry associated with comments or null if none
+    private WeblogEntry queryEntry = null;
+    
     // indicates number of comments that would be deleted by bulk removal
     // a non-zero value here indicates bulk removal is a valid option
     private int bulkDeleteCount = 0;
@@ -88,19 +97,17 @@
             WeblogManager wmgr = 
WebloggerFactory.getWeblogger().getWeblogManager();
             
             // lookup weblog entry if necessary
-            WeblogEntry queryEntry = null;
             if(!StringUtils.isEmpty(getBean().getEntryId())) {
-                queryEntry = wmgr.getWeblogEntry(getBean().getEntryId());
+                setQueryEntry(wmgr.getWeblogEntry(getBean().getEntryId()));
             }
             
             // query for comments
             List rawComments = wmgr.getComments(
                     getActionWeblog(),
-                    queryEntry,
+                    getQueryEntry(),
                     getBean().getSearchString(),
                     getBean().getStartDate(),
-                    getBean().getEndDate(),
-                    getBean().getStatus(),
+                    getBean().getEndDate(),getBean().getStatus(),
                     true, // reverse  chrono order
                     getBean().getPage() * COUNT,
                     COUNT + 1);
@@ -213,6 +220,25 @@
         
         try {
             WeblogManager wmgr = 
WebloggerFactory.getWeblogger().getWeblogManager();
+            
+            // if search is enabled, we will need to re-index all entries with
+            // comments that have been deleted, so build a list of those 
entries
+            Set<WeblogEntry> reindexEntries = new HashSet<WeblogEntry>();
+            if (WebloggerConfig.getBooleanProperty("search.enabled")) {        
         
+                List<WeblogEntryComment> targetted = 
(List<WeblogEntryComment>)wmgr.getComments(
+                    getActionWeblog(), 
+                    getQueryEntry(), 
+                    getBean().getSearchString(),
+                    getBean().getStartDate(),
+                    getBean().getEndDate(),
+                    getBean().getStatus(), 
+                    true, 
+                    0, -1);
+                for (WeblogEntryComment comment : targetted) {
+                    reindexEntries.add(comment.getWeblogEntry());
+                }
+            }
+            
             int deleted = wmgr.removeMatchingComments(
                     getActionWeblog(),
                     null,
@@ -221,8 +247,15 @@
                     getBean().getEndDate(),
                     getBean().getStatus());
             
-            // TODO: i18n
-            addMessage("Successfully deleted "+deleted+" comments");
+            // if we've got entries to reindex then do so
+            if (!reindexEntries.isEmpty()) {
+                IndexManager imgr = 
WebloggerFactory.getWeblogger().getIndexManager();
+                for (WeblogEntry entry : reindexEntries) {
+                    imgr.addEntryReIndexOperation(entry);
+                }
+            }
+                    
+            addMessage("commentManagement.deleteSuccess", 
Integer.toString(deleted));
             
             // reset form and load fresh comments list
             setBean(new CommentsBean());
@@ -248,6 +281,10 @@
             WeblogManager wmgr = 
WebloggerFactory.getWeblogger().getWeblogManager();
             
             List<WeblogEntryComment> flushList = new ArrayList();
+
+            // if search is enabled, we will need to re-index all entries with
+            // comments that have been approved, so build a list of those 
entries
+            Set<WeblogEntry> reindexList = new HashSet<WeblogEntry>();
             
             // delete all comments with delete box checked
             List<String> deletes = 
Arrays.asList(getBean().getDeleteComments());
@@ -260,8 +297,9 @@
                     
                     // make sure comment is tied to action weblog
                     
if(getActionWeblog().equals(deleteComment.getWeblogEntry().getWebsite())) {
-                        wmgr.removeComment(deleteComment);
                         flushList.add(deleteComment);
+                        reindexList.add(deleteComment.getWeblogEntry());
+                        wmgr.removeComment(deleteComment);
                     }
                 }
             }
@@ -301,6 +339,7 @@
                         wmgr.saveComment(comment);
                         
                         flushList.add(comment);
+                        reindexList.add(comment.getWeblogEntry());
                         
                     } else if(spamIds.contains(ids[i])) {
                         log.debug("Marking as spam - "+comment.getId());
@@ -325,7 +364,20 @@
                 CacheManager.invalidate(comm);
             }
             
-//            sendCommentNotifications(request, approvedComments);
+            // send notification for all comments changed
+            if (MailUtil.isMailConfigured()) {
+                I18nMessages resources = 
+                    
I18nMessages.getMessages(getActionWeblog().getLocaleInstance());
+                MailUtil.sendEmailApprovalNotifications(approvedComments, 
resources);
+            }
+            
+            // if we've got entries to reindex then do so
+            if (!reindexList.isEmpty()) {
+                IndexManager imgr = 
WebloggerFactory.getWeblogger().getIndexManager();
+                for (WeblogEntry entry : reindexList) {
+                    imgr.addEntryReIndexOperation(entry);
+                }
+            }            
             
             addMessage("commentManagement.updateSuccess");
             
@@ -411,5 +463,12 @@
     public void setPager(CommentsPager pager) {
         this.pager = pager;
     }
-    
+
+    public WeblogEntry getQueryEntry() {
+        return queryEntry;
+    }
+
+    public void setQueryEntry(WeblogEntry queryEntry) {
+        this.queryEntry = queryEntry;
+    }    
 }

Modified: 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/util/MailUtil.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/util/MailUtil.java?view=diff&rev=564207&r1=564206&r2=564207
==============================================================================
--- 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/util/MailUtil.java
 (original)
+++ 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/util/MailUtil.java
 Thu Aug  9 06:54:36 2007
@@ -484,6 +484,22 @@
         log.debug("Done sending email message");
     }
     
+
+    public static void sendEmailApprovalNotifications(List<WeblogEntryComment> 
comments,
+                                               I18nMessages resources) 
+            throws MailingException {
+        
+        RollerMessages messages = new RollerMessages();
+        for (WeblogEntryComment comment : comments) {            
+            
+            // Send email notifications because a new comment has been approved
+            sendEmailNotification(comment, messages, resources, true);
+
+            // Send approval notification to author of approved comment
+            sendEmailApprovalNotification(comment, resources);
+        }
+    }
+    
     
     /**
      * Send message to author of approved comment
@@ -541,7 +557,6 @@
         
         log.debug("Done sending email message");
     }
-    
     
     
     // agangolli: Incorporated suggested changes from Ken Blackler.

Modified: 
roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties
URL: 
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties?view=diff&rev=564207&r1=564206&r2=564207
==============================================================================
--- 
roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties 
(original)
+++ 
roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties 
Thu Aug  9 06:54:36 2007
@@ -289,6 +289,7 @@
 commentManagement.bulkDeletePrompt1=Your query matched {0} comments, 
 commentManagement.bulkDeletePrompt2=delete them all?
 commentManagement.confirmBulkDelete=Are you sure you want to delete all {0} 
selected by your query?
+commentManagement.deleteSuccess=Successfully deleted {0} comments
 
 commentManagement.pendingStatus=Pending status
 commentManagement.onlyPending=Pending only


Reply via email to