added community admin "Send E-Mail To All Members" menu option
This commit is contained in:
parent
d89c2bfdcb
commit
e35045acf4
|
@ -184,6 +184,7 @@
|
||||||
<permission id="NoKeyRequired" role="Global.AnyAdmin"/>
|
<permission id="NoKeyRequired" role="Global.AnyAdmin"/>
|
||||||
<permission id="ShowHiddenMembers" role="Community.AnyAdmin"/>
|
<permission id="ShowHiddenMembers" role="Community.AnyAdmin"/>
|
||||||
<permission id="ShowHiddenObjects" role="Community.AnyAdmin"/>
|
<permission id="ShowHiddenObjects" role="Community.AnyAdmin"/>
|
||||||
|
<permission id="MassMail" role="Community.AnyAdmin"/>
|
||||||
</permissions>
|
</permissions>
|
||||||
</security-definition>
|
</security-definition>
|
||||||
<security-definition id="Conference" parent="Community"> <!-- will move eventually -->
|
<security-definition id="Conference" parent="Community"> <!-- will move eventually -->
|
||||||
|
|
|
@ -179,4 +179,8 @@ public interface CommunityContext extends SearchMode
|
||||||
|
|
||||||
public abstract SecurityInfo getSecurityInfo();
|
public abstract SecurityInfo getSecurityInfo();
|
||||||
|
|
||||||
|
public abstract boolean canMassMail();
|
||||||
|
|
||||||
|
public abstract void massMail(String subject, String text) throws AccessError, DataException;
|
||||||
|
|
||||||
} // end interface CommunityContext
|
} // end interface CommunityContext
|
||||||
|
|
|
@ -1821,6 +1821,51 @@ class CommunityCoreData implements CommunityData, CommunityDataBackend
|
||||||
|
|
||||||
} // end setProperties
|
} // end setProperties
|
||||||
|
|
||||||
|
public List getMassMailList() throws DataException
|
||||||
|
{
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("getMassMailList() for community " + cid);
|
||||||
|
if (deleted)
|
||||||
|
throw new DataException("This community has been deleted.");
|
||||||
|
|
||||||
|
Connection conn = null; // database connection
|
||||||
|
ArrayList rc = new ArrayList(); // return from this function
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // get a database connection
|
||||||
|
conn = env.getConnection();
|
||||||
|
Statement stmt = conn.createStatement();
|
||||||
|
|
||||||
|
// create the SQL statement
|
||||||
|
StringBuffer sql =
|
||||||
|
new StringBuffer("SELECT c.email FROM contacts c, users u, sigmember m "
|
||||||
|
+ "WHERE c.contactid = u.contactid AND u.uid = m.uid AND m.sigid = ");
|
||||||
|
sql.append(cid).append(" AND u.is_anon = 0;");
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("SQL: " + sql.toString());
|
||||||
|
|
||||||
|
// execute the query and copy the results to the ArrayList
|
||||||
|
ResultSet rs = stmt.executeQuery(sql.toString());
|
||||||
|
while (rs.next())
|
||||||
|
rc.add(rs.getString(1));
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (SQLException e)
|
||||||
|
{ // database error - this is a DataException
|
||||||
|
logger.error("DB error getting mailing list: " + e.getMessage(),e);
|
||||||
|
throw new DataException("unable to get community mailing list: " + e.getMessage(),e);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
finally
|
||||||
|
{ // make sure the connection is released before we go
|
||||||
|
env.releaseConnection(conn);
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
} // end getMassMailList
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Implementations from interface CommunityDataBackend
|
* Implementations from interface CommunityDataBackend
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
|
@ -1360,6 +1360,33 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
|
||||||
|
|
||||||
} // end getSecurityInfo
|
} // end getSecurityInfo
|
||||||
|
|
||||||
|
public boolean canMassMail()
|
||||||
|
{
|
||||||
|
return env.testPermission("Community.MassMail");
|
||||||
|
|
||||||
|
} // end canMassMail
|
||||||
|
|
||||||
|
public void massMail(String subject, String text) throws AccessError, DataException
|
||||||
|
{
|
||||||
|
if (!(env.testPermission("Community.MassMail")))
|
||||||
|
{ // no can do, man!
|
||||||
|
logger.error("user not permitted to modify the community's information");
|
||||||
|
throw new AccessError("You are not permitted to send E-mail to all community members.");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
// get the mailing list
|
||||||
|
List mail_list = getData().getMassMailList();
|
||||||
|
if (mail_list.size()>0)
|
||||||
|
{ // send the mail in the background!
|
||||||
|
MailerAgent agent = new MailerAgent(env,env.getUser().realUserName(),env.getUser().realEmailAddress(),
|
||||||
|
mail_list,subject,text);
|
||||||
|
agent.start();
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end massMail
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Implementations from interface CommunityBackend
|
* Implementations from interface CommunityBackend
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
|
@ -158,4 +158,6 @@ public interface CommunityData
|
||||||
|
|
||||||
public abstract void setProperties(CommunityProperties props) throws DataException;
|
public abstract void setProperties(CommunityProperties props) throws DataException;
|
||||||
|
|
||||||
|
public abstract List getMassMailList() throws DataException;
|
||||||
|
|
||||||
} // end interface CommunityData
|
} // end interface CommunityData
|
||||||
|
|
|
@ -96,6 +96,15 @@ public class CommunityAdmin extends VeniceServlet
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Command values for CommunityAdmin:
|
||||||
|
* A = Display Audit Records
|
||||||
|
* DEL = Delete Community
|
||||||
|
* F = Set Features/Services (not implemented yet)
|
||||||
|
* I = E-Mail to All Members
|
||||||
|
* M = Membership Control
|
||||||
|
* P = Edit Profile
|
||||||
|
* T = Set Category
|
||||||
|
*/
|
||||||
protected VeniceContent doVeniceGet(HttpServletRequest request, VeniceEngine engine,
|
protected VeniceContent doVeniceGet(HttpServletRequest request, VeniceEngine engine,
|
||||||
UserContext user, RenderData rdat)
|
UserContext user, RenderData rdat)
|
||||||
throws ServletException, IOException, VeniceServletResult
|
throws ServletException, IOException, VeniceServletResult
|
||||||
|
@ -302,6 +311,20 @@ public class CommunityAdmin extends VeniceServlet
|
||||||
|
|
||||||
} // end if ("A" command)
|
} // end if ("A" command)
|
||||||
|
|
||||||
|
if (cmd.equals("I"))
|
||||||
|
{ // "I" = "Send E-Mail To All Members"
|
||||||
|
if (!(comm.canMassMail()))
|
||||||
|
{ // we can't send mass mail to the community, so what are we doing here?
|
||||||
|
logger.error("you can't mass-mail the community - not gonna do it, wouldn't be prudent");
|
||||||
|
return new ErrorBox("Access Error","You do not have permission to sent mass mail to this community.",
|
||||||
|
on_error);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
return new CommunityEMail(comm); // return the view object
|
||||||
|
|
||||||
|
} // end if ("I" command)
|
||||||
|
|
||||||
if (cmd.equals("DEL"))
|
if (cmd.equals("DEL"))
|
||||||
{ // "DEL" = "Delete Community" (requires a confirmation)
|
{ // "DEL" = "Delete Community" (requires a confirmation)
|
||||||
if (!(comm.canDelete()))
|
if (!(comm.canDelete()))
|
||||||
|
@ -587,6 +610,37 @@ public class CommunityAdmin extends VeniceServlet
|
||||||
|
|
||||||
} // end if ("M" command)
|
} // end if ("M" command)
|
||||||
|
|
||||||
|
if (cmd.equals("I"))
|
||||||
|
{ // "I" - "Send E-Mail To Community"
|
||||||
|
if (!(comm.canMassMail()))
|
||||||
|
{ // we can't send mass mail to the community, so what are we doing here?
|
||||||
|
logger.error("you can't mass-mail the community - not gonna do it, wouldn't be prudent");
|
||||||
|
return new ErrorBox("Access Error","You do not have permission to sent mass mail to this community.",
|
||||||
|
on_error);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // attempt to do the mass mailing!
|
||||||
|
comm.massMail(request.getParameter("subj"),request.getParameter("pb"));
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (AccessError ae)
|
||||||
|
{ // some sort of access error - display an error dialog
|
||||||
|
return new ErrorBox("Access Error",ae.getMessage(),on_error);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (DataException de)
|
||||||
|
{ // database error creating the conference
|
||||||
|
return new ErrorBox("Database Error","Database error getting mailing list: " + de.getMessage(),
|
||||||
|
on_error);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
throw new RedirectResult(on_error); // bounce back to the menu
|
||||||
|
|
||||||
|
} // end if ("I" command)
|
||||||
|
|
||||||
// on unknown command, redirect to the GET function
|
// on unknown command, redirect to the GET function
|
||||||
return doVeniceGet(request,engine,user,rdat);
|
return doVeniceGet(request,engine,user,rdat);
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ public class CommunityAdminTop extends ContentMenuPanel
|
||||||
addChoice("Set Community Category","sigadmin?sig=$s&cmd=T");
|
addChoice("Set Community Category","sigadmin?sig=$s&cmd=T");
|
||||||
addChoice("Set Community Features","sigadmin?sig=$s&cmd=F");
|
addChoice("Set Community Features","sigadmin?sig=$s&cmd=F");
|
||||||
addChoice("Membership Control","sigadmin?sig=$s&cmd=M");
|
addChoice("Membership Control","sigadmin?sig=$s&cmd=M");
|
||||||
|
addChoice("E-Mail To All Members","sigadmin?sig=$s&cmd=I");
|
||||||
addChoice("Display Audit Records","sigadmin?sig=$s&cmd=A");
|
addChoice("Display Audit Records","sigadmin?sig=$s&cmd=A");
|
||||||
// TODO: More options
|
// TODO: More options
|
||||||
addChoice("Delete Community","sigadmin?sig=$s&cmd=DEL");
|
addChoice("Delete Community","sigadmin?sig=$s&cmd=DEL");
|
||||||
|
|
115
src/com/silverwrist/venice/servlets/format/CommunityEMail.java
Normal file
115
src/com/silverwrist/venice/servlets/format/CommunityEMail.java
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
/*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||||
|
* (the "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||||
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
|
* language governing rights and limitations under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is the Venice Web Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.servlets.format;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import javax.servlet.*;
|
||||||
|
import com.silverwrist.venice.core.*;
|
||||||
|
import com.silverwrist.venice.except.*;
|
||||||
|
|
||||||
|
public class CommunityEMail implements JSPRender
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Attribute name for request attribute
|
||||||
|
protected static final String ATTR_NAME = "com.silverwrist.venice.content.CommunityEMail";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private CommunityContext comm; // the community we're in
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructors
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public CommunityEMail(CommunityContext comm)
|
||||||
|
{
|
||||||
|
this.comm = comm;
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External static functions
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static CommunityEMail retrieve(ServletRequest request)
|
||||||
|
{
|
||||||
|
return (CommunityEMail)(request.getAttribute(ATTR_NAME));
|
||||||
|
|
||||||
|
} // end retrieve
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface VeniceContent
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String getPageTitle(RenderData rdat)
|
||||||
|
{
|
||||||
|
return "Community E-Mail: " + comm.getName();
|
||||||
|
|
||||||
|
} // end getPageTitle
|
||||||
|
|
||||||
|
public String getPageQID()
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
|
||||||
|
} // end getPageQID
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface JSPRender
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void store(ServletRequest request)
|
||||||
|
{
|
||||||
|
request.setAttribute(ATTR_NAME,this);
|
||||||
|
|
||||||
|
} // end store
|
||||||
|
|
||||||
|
public String getTargetJSPName()
|
||||||
|
{
|
||||||
|
return "comm_email.jsp";
|
||||||
|
|
||||||
|
} // end getTargetJSPName
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public final int getCommunityID()
|
||||||
|
{
|
||||||
|
return comm.getCommunityID();
|
||||||
|
|
||||||
|
} // end getCommunityID
|
||||||
|
|
||||||
|
public final String getCommunityName()
|
||||||
|
{
|
||||||
|
return comm.getName();
|
||||||
|
|
||||||
|
} // end getCommunityName
|
||||||
|
|
||||||
|
} // end class CommunityEMail
|
57
web/format/comm_email.jsp
Normal file
57
web/format/comm_email.jsp
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
<%--
|
||||||
|
The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||||
|
(the "License"); you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
|
||||||
|
|
||||||
|
Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||||
|
WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
|
language governing rights and limitations under the License.
|
||||||
|
|
||||||
|
The Original Code is the Venice Web Communities System.
|
||||||
|
|
||||||
|
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
|
||||||
|
Contributor(s):
|
||||||
|
--%>
|
||||||
|
<%@ page import = "java.util.*" %>
|
||||||
|
<%@ page import = "com.silverwrist.util.StringUtil" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.core.*" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.servlets.Variables" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.servlets.format.*" %>
|
||||||
|
<%
|
||||||
|
CommunityEMail data = CommunityEMail.retrieve(request);
|
||||||
|
Variables.failIfNull(data);
|
||||||
|
RenderData rdat = RenderConfig.createRenderData(application,request,response);
|
||||||
|
%>
|
||||||
|
<% if (rdat.useHTMLComments()) { %><!-- E-mail to community #<%= data.getCommunityID() %> --><% } %>
|
||||||
|
<% rdat.writeContentHeader(out,"Community E-Mail:",data.getCommunityName()); %>
|
||||||
|
|
||||||
|
<FORM METHOD="POST" ACTION="<%= rdat.getEncodedServletPath("sigadmin") %>"><DIV CLASS="content">
|
||||||
|
<INPUT TYPE="HIDDEN" NAME="sig" VALUE="<%= data.getCommunityID() %>">
|
||||||
|
<INPUT TYPE="HIDDEN" NAME="cmd" VALUE="I">
|
||||||
|
<TABLE BORDER=0 CELLPADDING=0>
|
||||||
|
<TR VALIGN=MIDDLE>
|
||||||
|
<TD ALIGN=LEFT CLASS="content" COLSPAN=2><%= rdat.getStdFontTag(ColorSelectors.CONTENT_FOREGROUND,2) %>
|
||||||
|
Send E-mail to all members of the community:
|
||||||
|
</FONT></TD>
|
||||||
|
</TR>
|
||||||
|
<TR VALIGN=MIDDLE>
|
||||||
|
<TD ALIGN=LEFT CLASS="content">
|
||||||
|
<%= rdat.getStdFontTag(ColorSelectors.CONTENT_FOREGROUND,2) %>Subject:</FONT>
|
||||||
|
</TD>
|
||||||
|
<TD ALIGN=LEFT CLASS="cinput"><INPUT TYPE=TEXT CLASS="cinput" NAME="subj" SIZE=65
|
||||||
|
MAXLENGTH=255 VALUE=""></TD>
|
||||||
|
</TR>
|
||||||
|
<TR VALIGN=MIDDLE>
|
||||||
|
<TD ALIGN=LEFT CLASS="cinput" COLSPAN=2><TEXTAREA NAME="pb" WRAP=HARD ROWS=7 COLS=80></TEXTAREA></TD>
|
||||||
|
</TR>
|
||||||
|
<TR VALIGN=MIDDLE><TD ALIGN=LEFT COLSPAN=2 CLASS="content">
|
||||||
|
<INPUT TYPE="IMAGE" SRC="<%= rdat.getFullImagePath("bn_send_email.gif") %>" NAME="send"
|
||||||
|
ALT="Send E-Mail" WIDTH=80 HEIGHT=24 BORDER=0>
|
||||||
|
<INPUT TYPE="IMAGE" SRC="<%= rdat.getFullImagePath("bn_cancel.gif") %>" NAME="cancel"
|
||||||
|
ALT="Cancel" WIDTH=80 HEIGHT=24 BORDER=0>
|
||||||
|
</TD></TR>
|
||||||
|
</TABLE>
|
||||||
|
</DIV></FORM>
|
|
@ -70,4 +70,4 @@
|
||||||
ALT="Cancel" WIDTH=80 HEIGHT=24 BORDER=0>
|
ALT="Cancel" WIDTH=80 HEIGHT=24 BORDER=0>
|
||||||
</TD></TR>
|
</TD></TR>
|
||||||
</TABLE>
|
</TABLE>
|
||||||
</DIV></FORM>
|
</DIV></FORM>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user