Author: kevinshen
Date: 2010-03-12 10:18:10 +0100 (Fri, 12 Mar 2010)
New Revision: 41351
Modified:
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/resources/newsletter.properties
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_nl.properties
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_zh.properties
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/forms/NewsletterBounceAction.java
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/services/CommunityModuleAdapter.java
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/util/NewsletterBounceUtil.java
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/newsletterbouncelist.jsp
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/report_publication_edit.jsp
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/newsletter.js
Log:
CMSC-1639 Newsletter: add more features about bounce information
Modified:
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/resources/newsletter.properties
===================================================================
---
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/resources/newsletter.properties
2010-03-12 09:14:54 UTC (rev 41350)
+++
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/resources/newsletter.properties
2010-03-12 09:18:10 UTC (rev 41351)
@@ -296,4 +296,12 @@
newsletter.edition.fail = freeze failed, please check the edition in work-flow!
newsletter.confirm_send.ok=OK
-site.newsletter.detail = Newsletter details
\ No newline at end of file
+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/trunk/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_nl.properties
===================================================================
---
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_nl.properties
2010-03-12 09:14:54 UTC (rev 41350)
+++
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_nl.properties
2010-03-12 09:18:10 UTC (rev 41351)
@@ -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/trunk/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_zh.properties
===================================================================
---
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_zh.properties
2010-03-12 09:14:54 UTC (rev 41350)
+++
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/resources/newsletter_zh.properties
2010-03-12 09:18:10 UTC (rev 41351)
@@ -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/trunk/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/forms/NewsletterBounceAction.java
===================================================================
---
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/forms/NewsletterBounceAction.java
2010-03-12 09:14:54 UTC (rev 41350)
+++
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/forms/NewsletterBounceAction.java
2010-03-12 09:18:10 UTC (rev 41351)
@@ -13,6 +13,7 @@
import com.finalist.cmsc.mmbase.PropertiesUtil;
import com.finalist.newsletter.domain.NewsletterBounce;
+import com.finalist.newsletter.services.CommunityModuleAdapter;
import com.finalist.newsletter.util.NewsletterBounceUtil;
public class NewsletterBounceAction extends DispatchAction {
@@ -24,20 +25,45 @@
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/trunk/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/services/CommunityModuleAdapter.java
===================================================================
---
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/services/CommunityModuleAdapter.java
2010-03-12 09:14:54 UTC (rev 41350)
+++
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/services/CommunityModuleAdapter.java
2010-03-12 09:18:10 UTC (rev 41351)
@@ -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/trunk/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/util/NewsletterBounceUtil.java
===================================================================
---
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/util/NewsletterBounceUtil.java
2010-03-12 09:14:54 UTC (rev 41350)
+++
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/util/NewsletterBounceUtil.java
2010-03-12 09:18:10 UTC (rev 41351)
@@ -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,32 @@
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/trunk/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/newsletterbouncelist.jsp
===================================================================
---
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/newsletterbouncelist.jsp
2010-03-12 09:14:54 UTC (rev 41350)
+++
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/newsletterbouncelist.jsp
2010-03-12 09:18:10 UTC (rev 41351)
@@ -22,9 +22,9 @@
</div>
</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 +32,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,7 +68,12 @@
<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 >
+ <td >
<c:out value="${bounce.userName}"/>
</td>
<td>
Modified:
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/report_publication_edit.jsp
===================================================================
---
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/report_publication_edit.jsp
2010-03-12 09:14:54 UTC (rev 41350)
+++
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/module/report_publication_edit.jsp
2010-03-12 09:18:10 UTC (rev 41351)
@@ -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/trunk/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/newsletter.js
===================================================================
---
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/newsletter.js
2010-03-12 09:14:54 UTC (rev 41350)
+++
CMSContainer/trunk/CMSContainer_Portlets/portlets-newsletter/src/webapp/editors/newsletter/newsletter.js
2010-03-12 09:18:10 UTC (rev 41351)
@@ -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
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs