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