Author: kevinshen
Date: 2010-03-12 10:14:54 +0100 (Fri, 12 Mar 2010)
New Revision: 41350

Modified:
   
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/resources/newsletter.properties
   
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_nl.properties
   
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_zh.properties
   
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/forms/NewsletterBounceAction.java
   
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/services/CommunityModuleAdapter.java
   
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/util/NewsletterBounceUtil.java
   
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/newsletterbouncelist.jsp
   
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/report_publication_edit.jsp
   
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/newsletter.js
Log:
CMSC-1639 Newsletter: add more features about bounce information

Modified: 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/resources/newsletter.properties
===================================================================
--- 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/resources/newsletter.properties
        2010-03-11 20:00:13 UTC (rev 41349)
+++ 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/resources/newsletter.properties
        2010-03-12 09:14:54 UTC (rev 41350)
@@ -297,3 +297,12 @@
 newsletter.confirm_send.ok=OK
 
 site.newsletter.detail = Newsletter details
+
+newsletter.bounce.selectall = Select all
+newsletter.bounce.delete.bounce = Delete bounce
+newsletter.bounce.delete.member = Delete member
+newsletter.bounce.delete.confirm = Are you sure to delete the selected 
bounces|members?
+newsletter.bounce.newsletter.all = All
+newsletter.bounce.newsletter.title = Newsletter: 
+newsletter.publication.tabs.bounces = Bounces
+

Modified: 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_nl.properties
===================================================================
--- 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_nl.properties
     2010-03-11 20:00:13 UTC (rev 41349)
+++ 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_nl.properties
     2010-03-12 09:14:54 UTC (rev 41350)
@@ -296,4 +296,12 @@
 newsletter.edition.fail = bevriezing is gemislukt, aub controleer of de editie 
in de workflow staat!
 newsletter.confirm_send.ok=OK
 
-site.newsletter.detail = Nieuwsbrief details
\ No newline at end of file
+site.newsletter.detail = Nieuwsbrief details
+
+newsletter.bounce.selectall = Selecteer alles
+newsletter.bounce.delete.bounce = Verwijder bounce
+newsletter.bounce.delete.member = Verwijder lid
+newsletter.bounce.delete.confirm = Weet u zeker dat u de geselecteerde 
bounces|leden wilt verwijderen?
+newsletter.bounce.newsletter.all = Alle
+newsletter.bounce.newsletter.title = Nieuwsbrief: 
+newsletter.publication.tabs.bounces = Bounces
\ No newline at end of file

Modified: 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_zh.properties
===================================================================
--- 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_zh.properties
     2010-03-11 20:00:13 UTC (rev 41349)
+++ 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_zh.properties
     2010-03-12 09:14:54 UTC (rev 41350)
@@ -298,4 +298,12 @@
 newsletter.edition.fail = 冻结失败,请检查工作流!
 newsletter.confirm_send.ok=确定
 
-site.newsletter.detail = 详细信息
\ No newline at end of file
+site.newsletter.detail = 详细信息
+
+newsletter.bounce.selectall = 全选
+newsletter.bounce.delete.bounce = 删除弹回邮件
+newsletter.bounce.delete.member = 删除无效用户
+newsletter.bounce.delete.confirm = 你确认删除选中的弹回邮件|用户?
+newsletter.bounce.newsletter.all = 全部
+newsletter.bounce.newsletter.title = 邮件: 
+newsletter.publication.tabs.bounces = 弹回邮件
\ No newline at end of file

Modified: 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/forms/NewsletterBounceAction.java
===================================================================
--- 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/forms/NewsletterBounceAction.java
     2010-03-11 20:00:13 UTC (rev 41349)
+++ 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/forms/NewsletterBounceAction.java
     2010-03-12 09:14:54 UTC (rev 41350)
@@ -14,7 +14,9 @@
 import com.finalist.cmsc.mmbase.PropertiesUtil;
 import com.finalist.newsletter.domain.NewsletterBounce;
 import com.finalist.newsletter.util.NewsletterBounceUtil;
+import com.finalist.newsletter.services.CommunityModuleAdapter;
 
+
 public class NewsletterBounceAction extends DispatchAction {
 
    public ActionForward list(ActionMapping mapping, ActionForm form, 
HttpServletRequest request,
@@ -24,20 +26,46 @@
       if 
(StringUtils.isNotEmpty(PropertiesUtil.getProperty("repository.search.results.per.page")))
 {
          pageSize = 
Integer.parseInt(PropertiesUtil.getProperty("repository.search.results.per.page"));
       }
+
+      String[] check_items = request.getParameterValues("chk_items");
+      
+      if(check_items != null && check_items.length > 0) {
+         String type = request.getParameter("type");
+         if ("bounce".equalsIgnoreCase(type)) {
+            for (String check_item : check_items) {
+               //delete bounce
+               NewsletterBounceUtil.deleteBounce(check_item);
+            }
+         }
+         else if ("member".equalsIgnoreCase(type)) {
+            for (String check_item : check_items) {
+               //delete member
+               String authId = NewsletterBounceUtil.deleteMember(check_item);
+               CommunityModuleAdapter.deleteSubscriber(authId);
+               
+            }
+         }
+      }
+
       String strOffset = request.getParameter("offset");
       String direction = request.getParameter("direction");
       String order = request.getParameter("order");
+      String newsletterId = request.getParameter("newsletterId");
       if (StringUtils.isNotEmpty(strOffset)) {
          offset = Integer.parseInt(strOffset);
       }
+      if(StringUtils.isNotEmpty(newsletterId) && 
"all".equalsIgnoreCase(newsletterId)) {
+         newsletterId = null;
+      }
       List<NewsletterBounce> bounces = 
NewsletterBounceUtil.getBounceRecords(offset * pageSize, pageSize, order,
-            direction);
-      int count = NewsletterBounceUtil.getTotalCount();
+            direction,newsletterId);
+      int count = NewsletterBounceUtil.getTotalCount(newsletterId);
       request.setAttribute("resultList", bounces);
       request.setAttribute("resultCount", count);
       request.setAttribute("offset", offset);
       request.setAttribute("direction", direction);
       request.setAttribute("order", order);
+      request.setAttribute("newsletterId", newsletterId);
       return mapping.findForward("success");
    }
 

Modified: 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/services/CommunityModuleAdapter.java
===================================================================
--- 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/services/CommunityModuleAdapter.java
  2010-03-11 20:00:13 UTC (rev 41349)
+++ 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/services/CommunityModuleAdapter.java
  2010-03-12 09:14:54 UTC (rev 41350)
@@ -81,4 +81,12 @@
       }
       return null;
    }
+
+   public static void deleteSubscriber(String authId) {
+      if(authId ==null) {
+         return;
+      }
+      AuthenticationService authenticationService = (AuthenticationService) 
ApplicationContextFactory.getApplicationContext().getBean("authenticationService");
+      authenticationService.deleteAuthentication(Long.parseLong(authId));
+   }
 }

Modified: 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/util/NewsletterBounceUtil.java
===================================================================
--- 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/util/NewsletterBounceUtil.java
        2010-03-11 20:00:13 UTC (rev 41349)
+++ 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/util/NewsletterBounceUtil.java
        2010-03-12 09:14:54 UTC (rev 41350)
@@ -18,7 +18,7 @@
 import com.finalist.newsletter.services.CommunityModuleAdapter;
 public class NewsletterBounceUtil {
 
-   public static List<NewsletterBounce> getBounceRecords(int offset, int 
pageSize, String order, String direction) {
+   public static List<NewsletterBounce> getBounceRecords(int offset, int 
pageSize, String order, String direction,String newsletter) {
       List<NewsletterBounce> bounces = new ArrayList<NewsletterBounce>();
       Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
       NodeManager bounceManager = cloud.getNodeManager("newsletterbounce");
@@ -28,6 +28,9 @@
          query.setOffset(offset);
          Queries.addSortOrders(query, order, direction);
       }
+      if(newsletter != null) {
+         SearchUtil.addEqualConstraint(query, 
bounceManager.getField("newsletter"), newsletter);
+      }
       NodeList bounceNodes = query.getList();
       bounces = convertNodeListToList(bounceNodes);
       if (null != order && !bounceManager.hasField(order)) {
@@ -38,6 +41,9 @@
 
    private static List<NewsletterBounce> newsletterSort(List<NewsletterBounce> 
bounces, int offset, int pageSize,
          String direction, String order) {
+      if(bounces == null) {
+         return null;
+      }
       ComparisonUtil comparator = new ComparisonUtil();
       comparator.setFields_user(new String[] { order });
       Collections.sort(bounces, comparator);
@@ -52,9 +58,15 @@
       return bounces;
    }
 
-   public static int getTotalCount() {
+   public static int getTotalCount(String newsletter) {
       Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
-      NodeList bounces = SearchUtil.findNodeList(cloud, "newsletterbounce");
+      NodeList bounces ;
+      if (newsletter != null) {
+         bounces = SearchUtil.findNodeList(cloud, 
"newsletterbounce","newsletter",newsletter);
+      }
+      else {
+         bounces = SearchUtil.findNodeList(cloud, "newsletterbounce");
+      }
       if (bounces != null) {
          return bounces.size();
       }
@@ -106,4 +118,33 @@
       copyProperties(bounceNode, bounce);
       return bounce;
    }
+
+      
+   public static void deleteBounce(String number) {
+      Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
+      Node bounceNode = cloud.getNode(number);
+      bounceNode.delete();
+   }
+   
+   public static String deleteMember(String number) {
+      Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
+      Node bounceNode = cloud.getNode(number);
+      String userid = bounceNode.getStringValue("userid");
+      
+      if(userid != null) {
+         bounceNode.setValue("userid", null);
+         bounceNode.commit();
+         NodeManager bounceManager = cloud.getNodeManager("newsletterbounce");
+         NodeQuery query = bounceManager.createQuery();
+         SearchUtil.addEqualConstraint(query, 
bounceManager.getField("userid"), userid);
+         NodeList bounces = query.getList();
+         if(bounces != null && bounces.size() > 0) {
+            for (Node bounce: bounces) {
+               bounce.setValue("userid", null);
+               bounce.commit();
+            }
+         }
+      }
+      return userid;
+   }
 }

Modified: 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/newsletterbouncelist.jsp
===================================================================
--- 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/newsletterbouncelist.jsp
  2010-03-11 20:00:13 UTC (rev 41349)
+++ 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/newsletterbouncelist.jsp
  2010-03-12 09:14:54 UTC (rev 41350)
@@ -1,7 +1,8 @@
 <%...@page language="java" contentType="text/html;charset=utf-8"
 %><%...@include file="globals.jsp"
 %><%@ taglib prefix="edit" tagdir="/WEB-INF/tags/edit" 
-%><%...@page 
import="java.util.Iterator,com.finalist.cmsc.mmbase.PropertiesUtil"
+%><%@ page import="com.finalist.cmsc.repository.RepositoryUtil" 
+%><%@ page import="com.finalist.cmsc.security.*" 
 %><mm:content type="text/html" encoding="UTF-8" expires="0">
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
 <html:html xhtml="true">
@@ -11,6 +12,7 @@
 </cmscedit:head>
 <body>
 <mm:cloud jspvar="cloud" rank="basic user" loginpage="../../login.jsp">
+
 <div class="tabs">
 <a href="#">
        <div class="tab_active">
@@ -23,8 +25,8 @@
  </a>
 </div>
 <div class="editor" style="height:500px">
-<div class="ruler_green"><div><fmt:message key="newsletter.term.search.result" 
/></div></div>
-<div class="body">
+
+
 <c:set var="pagerDOToffset"><%=request.getParameter("pager.offset")%></c:set>
 <form action="${actionUrl}" name="termForm" method="post">
 <input type="hidden" name="method" value="list"/>
@@ -32,15 +34,33 @@
 <input type="hidden" name="pager.offset" value="${pagerDOToffset}"/>
 <input type="hidden" name="direction" value="${direction}"/>
 <input type="hidden" name="order" value="${order}"/>
-
+<input type="hidden" name="type" value="${action}"/>
 <mm:import jspvar="resultCount" vartype="Integer">${resultCount}</mm:import>
 <mm:import externid="offset" jspvar="offset" 
vartype="Integer">${offset}</mm:import>
 <mm:import externid="direction" jspvar="direction" 
vartype="String">${direction}</mm:import>
 <mm:import externid="order" jspvar="order" 
vartype="String">${order}</mm:import>
+<br/>
+ <div 
style="margin-left:10px;margin-right:50px;font-size:12px;float:left"><fmt:message
 key="newsletter.bounce.newsletter.title"/></div>
+ <cmsc:select var="newsletterId"   default="${newsletterId}" 
onchange="document.forms[0].submit();">
+  <option value="all"><fmt:message 
key="newsletter.bounce.newsletter.all"/></option>
+  <mm:listnodes type="newsletter" orderby="subject">
+        <mm:field name="number" id="newsletternumber" write="false" 
vartype="String" />
+        <cmsc:option value="${newsletternumber}" name="${_node.title}" />
+  </mm:listnodes>
+  </cmsc:select>
+
+<div class="ruler_green"><div><fmt:message key="newsletter.term.search.result" 
/></div></div>
+<div class="body">
 <c:if test="${resultCount > 0}">
 <edit:pages search="true" totalElements="${resultCount}" offset="${offset}"/>
+       <input type="button" class="button" 
style="margin-top:10px;margin-left:6px;margin-bottom:10px" value='<fmt:message 
key="newsletter.bounce.delete.bounce"/>' onclick="bounceDelete('<fmt:message 
key="newsletter.bounce.delete.confirm" />', 'termForm','bounce')"/>
+       <input type="button" class="button" style="margin-top:10px" 
value='<fmt:message key="newsletter.bounce.delete.member"/>' 
onclick="bounceDelete('<fmt:message key="newsletter.bounce.delete.confirm" />', 
'termForm','member')"/>
+
    <table>
       <tr class="listheader">
+                <th width="80px"> <c:if test="${resultCount >1}">
+        <input type="checkbox"  name="selectall" class="checkbox" 
onclick="selectAll(this.checked, 'termForm', 'chk_');" value="on" 
style="margin:0px 0px 0px 4px !important;> margin:0px 0px !important;margin:0px 
0px;"/><span 
style="padding-left:4px;position:absolute;text-transform:none"><fmt:message 
key="newsletter.bounce.selectall" /></span>
+        </c:if></th>
          <th><a href="javascript:sortBy('userName')"> <fmt:message 
key="newsletter.bounce.subscriber" /></a> </th>
          <th><a href="javascript:sortBy('newsLetterTitle')"><fmt:message 
key="newsletter.bounce.newsletter" /></a></th>
          <th><a href="javascript:sortBy('bouncedate')"><fmt:message 
key="newsletter.bounce.bouncedate" /></a></th>
@@ -50,6 +70,10 @@
                 <c:set var="useSwapStyle">true</c:set>
                 <c:forEach var="bounce" items="${resultList}" >
                <tr <c:if test="${useSwapStyle}">class="swap"</c:if>>
+                                       <td>
+                                         <c:if test="${resultCount >1}">
+                                         <input type="checkbox"  
name="chk_items" class="checkbox" value="${bounce.id}" 
onClick="document.forms['termForm'].elements.selectall.checked=false;"/>
+                                         </c:if>
                    <td >
                    <c:out  value="${bounce.userName}"/> 
                    </td>

Modified: 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/report_publication_edit.jsp
===================================================================
--- 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/report_publication_edit.jsp
       2010-03-11 20:00:13 UTC (rev 41349)
+++ 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/report_publication_edit.jsp
       2010-03-12 09:14:54 UTC (rev 41350)
@@ -20,6 +20,9 @@
       <edit:ui-tab key="newsletter.publication.tabs.subscribers">
          
NewsletterPublicationSubscriberSearch.do?newsletterId=${requestScope.newsletterId}
       </edit:ui-tab>
+         <edit:ui-tab key="newsletter.publication.tabs.bounces">
+        
module/NewsletterBounceAction.do?method=list&newsletterId=${requestScope.newsletterId}
+      </edit:ui-tab>
        <edit:ui-tab key="newsletter.publication.tabs.terms">
          NewsletterTermSearch.do?newsletterId=${requestScope.newsletterId}
       </edit:ui-tab>

Modified: 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/newsletter.js
===================================================================
--- 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/newsletter.js
    2010-03-11 20:00:13 UTC (rev 41349)
+++ 
CMSContainer/branches/b1_7/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/newsletter.js
    2010-03-12 09:14:54 UTC (rev 41350)
@@ -70,3 +70,34 @@
    }
    return newdate;
 }
+
+function bounceDelete(confirmmessage,form,type) {
+       if (confirmmessage) {   
+               var itemChecked = false;
+               var elements = document.getElementsByName("chk_items");
+               if(elements.length){
+                       for(var i = 0 ; i< elements.length; i++){
+                       if(elements[i].checked)
+                         itemChecked = true;
+                       }
+               }
+               if(itemChecked == false) {
+                       return;
+               }
+               else if (itemChecked == true) {
+                  if (confirm(confirmmessage)) {
+                           document.forms[form].type.value = type;
+                               document.forms[form].submit();
+                  }
+               }
+   }
+}
+
+function selectAll(value, formName, elementPrefix) {
+   var elements = document.forms[formName].elements;
+   for (var i = 0; i < elements.length; i++) {
+      if (elements[i].name.indexOf(elementPrefix) == 0) {
+          elements[i].checked = value;
+      }
+   }
+}

_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to