implemented quick E-mail and SIG invitation emails
This commit is contained in:
parent
680b84b9d8
commit
129b69973b
5
TODO
5
TODO
|
@ -3,8 +3,6 @@ Lots!
|
||||||
- Unimplemented functions on the SIG Administration page:
|
- Unimplemented functions on the SIG Administration page:
|
||||||
Set SIG Features (sigadmin, command=F)
|
Set SIG Features (sigadmin, command=F)
|
||||||
|
|
||||||
- Implement SIG invitations ("Invite" button on the profile).
|
|
||||||
|
|
||||||
- Unimplemented functions in the system admin menu:
|
- Unimplemented functions in the system admin menu:
|
||||||
Set Global Parameters
|
Set Global Parameters
|
||||||
View/Edit Banned Users
|
View/Edit Banned Users
|
||||||
|
@ -24,9 +22,6 @@ Lots!
|
||||||
We may include a welcome message up top to be displayed if the user's not
|
We may include a welcome message up top to be displayed if the user's not
|
||||||
logged in.
|
logged in.
|
||||||
|
|
||||||
- Implement quick e-mail from the user profile display (engine support and
|
|
||||||
UI).
|
|
||||||
|
|
||||||
- Slippage during posting is still untested.
|
- Slippage during posting is still untested.
|
||||||
|
|
||||||
- Not everybody likes purple. Provide a way to change the default colors.
|
- Not everybody likes purple. Provide a way to change the default colors.
|
||||||
|
|
|
@ -75,6 +75,11 @@
|
||||||
<!-- This section holds "stock messages" with replaceable parameters that may
|
<!-- This section holds "stock messages" with replaceable parameters that may
|
||||||
be fed to emailed output. -->
|
be fed to emailed output. -->
|
||||||
<messages>
|
<messages>
|
||||||
|
<!-- A "signature" that gets appended to emailed messages. -->
|
||||||
|
<signature>
|
||||||
|
Venice - community services, conferencing and more. http://venice.sourceforge.net
|
||||||
|
</signature>
|
||||||
|
|
||||||
<!-- This is the message sent out with the email confirmation number. -->
|
<!-- This is the message sent out with the email confirmation number. -->
|
||||||
<!-- Parameters: $USERNAME - account user name, $CONFNUM - confirmation number -->
|
<!-- Parameters: $USERNAME - account user name, $CONFNUM - confirmation number -->
|
||||||
<email-confirm>
|
<email-confirm>
|
||||||
|
@ -102,6 +107,48 @@ please contact the server administrator for further assistance.
|
||||||
|
|
||||||
-- The Management
|
-- The Management
|
||||||
</reminder>
|
</reminder>
|
||||||
|
|
||||||
|
<!-- Invitation message to a public SIG -->
|
||||||
|
<!-- Parameters: $SIGNAME = name of SIG, $SIGALIAS = alias of SIG, $PERSONAL = personal message,
|
||||||
|
$FULLNAME = name of inviter, $USERNAME = user name of inviter -->
|
||||||
|
<invite-public>
|
||||||
|
Hi! I would like to invite you to join the "$SIGNAME" Special Interest Group (SIG) on the Venice
|
||||||
|
conferencing system. To do so, you must register as a user, which is absolutely free! Just point
|
||||||
|
your Web browser at <http://delenn:8080/venice/sig/$SIGALIAS> and click the "Create Account" link
|
||||||
|
at the top of the page, or click the "Log In" link if you already have a Venice account. Once you have
|
||||||
|
completed the process, click the "Join Now" button. You will then be able to take part in the conferences
|
||||||
|
that are going on in the SIG.
|
||||||
|
|
||||||
|
$PERSONAL
|
||||||
|
|
||||||
|
Hope to see you in "$SIGNAME" soon!
|
||||||
|
|
||||||
|
-- $FULLNAME (Venice user ID: $USERNAME)
|
||||||
|
</invite-public>
|
||||||
|
|
||||||
|
<!-- Invitation message to a private SIG -->
|
||||||
|
<!-- Parameters: $SIGNAME = name of SIG, $SIGALIAS = alias of SIG, $JOINKEY = join key for SIG,
|
||||||
|
$PERSONAL = personal message, $FULLNAME = name of inviter,
|
||||||
|
$USERNAME = user name of inviter -->
|
||||||
|
<invite-private>
|
||||||
|
Hi! I would like to invite you to join the "$SIGNAME" Special Interest Group (SIG) on the Venice
|
||||||
|
conferencing system. To do so, you must register as a user, which is absolutely free! Just point
|
||||||
|
your Web browser at <http://delenn:8080/venice/sig/$SIGALIAS> and click the "Create Account" link
|
||||||
|
at the top of the page, or click the "Log In" link if you already have a Venice account. Once you have
|
||||||
|
completed the process, click the "Join Now" button. You will be prompted for the "password" for this
|
||||||
|
SIG, which is "$JOINKEY". You will then be able to take part in the conferences that are going on in the SIG.
|
||||||
|
|
||||||
|
$PERSONAL
|
||||||
|
|
||||||
|
Hope to see you in "$SIGNAME" soon!
|
||||||
|
|
||||||
|
-- $FULLNAME (Venice user ID: $USERNAME)
|
||||||
|
</invite-private>
|
||||||
|
|
||||||
|
<!-- Subject line for invitation messages -->
|
||||||
|
<!-- Parameters: $SIGNAME = name of SIG -->
|
||||||
|
<subj-invite>Invitation to "$SIGNAME" SIG</subj-invite>
|
||||||
|
|
||||||
</messages>
|
</messages>
|
||||||
|
|
||||||
</venice-config>
|
</venice-config>
|
||||||
|
|
|
@ -162,4 +162,9 @@ public interface SIGContext extends SearchMode
|
||||||
|
|
||||||
public abstract void delete() throws DataException, AccessError;
|
public abstract void delete() throws DataException, AccessError;
|
||||||
|
|
||||||
|
public abstract void sendInvitation(String address, String personal_message)
|
||||||
|
throws AccessError, DataException, EmailException;
|
||||||
|
|
||||||
|
public abstract boolean canSendInvitation();
|
||||||
|
|
||||||
} // end interface SIGContext
|
} // end interface SIGContext
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
* language governing rights and limitations under the License.
|
* language governing rights and limitations under the License.
|
||||||
*
|
*
|
||||||
* The Original Code is the Venice Web Community System.
|
* The Original Code is the Venice Web Communities System.
|
||||||
*
|
*
|
||||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
* 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
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
@ -71,4 +71,11 @@ public interface UserProfile
|
||||||
|
|
||||||
public abstract String getDescription();
|
public abstract String getDescription();
|
||||||
|
|
||||||
|
public abstract boolean isAnonymous();
|
||||||
|
|
||||||
|
public abstract boolean canSendQuickEmail();
|
||||||
|
|
||||||
|
public abstract void sendQuickEmail(String subject, String text)
|
||||||
|
throws AccessError, DataException, EmailException;
|
||||||
|
|
||||||
} // end interface UserProfile
|
} // end interface UserProfile
|
||||||
|
|
|
@ -1458,6 +1458,24 @@ class ConferenceUserContextImpl implements ConferenceContext, ConferenceBackend
|
||||||
|
|
||||||
} // end userIsAnonymous
|
} // end userIsAnonymous
|
||||||
|
|
||||||
|
public String realUserName()
|
||||||
|
{
|
||||||
|
return sig.realUserName();
|
||||||
|
|
||||||
|
} // end realUserName
|
||||||
|
|
||||||
|
public String realEmailAddress() throws DataException
|
||||||
|
{
|
||||||
|
return sig.realEmailAddress();
|
||||||
|
|
||||||
|
} // end realEmailAddress
|
||||||
|
|
||||||
|
public String realFullName() throws DataException
|
||||||
|
{
|
||||||
|
return sig.realFullName();
|
||||||
|
|
||||||
|
} // end realFullName
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Implementations from interface SIGBackend
|
* Implementations from interface SIGBackend
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
|
@ -20,6 +20,7 @@ package com.silverwrist.venice.core.impl;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import org.apache.log4j.*;
|
import org.apache.log4j.*;
|
||||||
|
import com.silverwrist.util.StringUtil;
|
||||||
import com.silverwrist.venice.db.*;
|
import com.silverwrist.venice.db.*;
|
||||||
import com.silverwrist.venice.security.Capability;
|
import com.silverwrist.venice.security.Capability;
|
||||||
import com.silverwrist.venice.security.DefaultLevels;
|
import com.silverwrist.venice.security.DefaultLevels;
|
||||||
|
@ -387,7 +388,7 @@ class SIGUserContextImpl implements SIGContext, SIGBackend
|
||||||
conn = datapool.getConnection();
|
conn = datapool.getConnection();
|
||||||
|
|
||||||
// load the profile for the user
|
// load the profile for the user
|
||||||
return new UserProfileImpl(engine,conn,getSIGData().getHostUID(),
|
return new UserProfileImpl(engine,user,conn,getSIGData().getHostUID(),
|
||||||
Capability.canSeeHiddenContactFields(user.realBaseLevel()));
|
Capability.canSeeHiddenContactFields(user.realBaseLevel()));
|
||||||
|
|
||||||
} // end try
|
} // end try
|
||||||
|
@ -1221,6 +1222,55 @@ class SIGUserContextImpl implements SIGContext, SIGBackend
|
||||||
|
|
||||||
} // end delete
|
} // end delete
|
||||||
|
|
||||||
|
public void sendInvitation(String address, String personal_message)
|
||||||
|
throws AccessError, DataException, EmailException
|
||||||
|
{
|
||||||
|
if (user.userIsAnonymous())
|
||||||
|
throw new AccessError("You must be logged in to send an invitation.");
|
||||||
|
|
||||||
|
SIGData my_sig = getSIGData();
|
||||||
|
my_sig.testMembership(level,is_member);
|
||||||
|
|
||||||
|
// Prepare the message text to be sent to the user.
|
||||||
|
boolean is_pub = my_sig.isPublicSIG();
|
||||||
|
String msg = engine.getStockMessage(is_pub ? "invite-public" : "invite-private");
|
||||||
|
String signame = my_sig.getName();
|
||||||
|
msg = StringUtil.replaceAllInstances(msg,"$SIGNAME",signame);
|
||||||
|
msg = StringUtil.replaceAllInstances(msg,"$SIGALIAS",my_sig.getAlias());
|
||||||
|
if (!is_pub)
|
||||||
|
msg = StringUtil.replaceAllInstances(msg,"$JOINKEY",my_sig.getJoinKey());
|
||||||
|
msg = StringUtil.replaceAllInstances(msg,"$PERSONAL",personal_message);
|
||||||
|
msg = StringUtil.replaceAllInstances(msg,"$FULLNAME",user.realFullName());
|
||||||
|
String uname = user.realUserName();
|
||||||
|
msg = StringUtil.replaceAllInstances(msg,"$USERNAME",uname);
|
||||||
|
StringBuffer msg_buf = new StringBuffer(msg);
|
||||||
|
msg_buf.append("\n\n--\n").append(engine.getStockMessage("signature"));
|
||||||
|
|
||||||
|
// Prepare the subject line to be sent to the user.
|
||||||
|
String subject = engine.getStockMessage("subj-invite");
|
||||||
|
subject = StringUtil.replaceAllInstances(subject,"$SIGNAME",signame);
|
||||||
|
|
||||||
|
// Get a SimpleEmailer object, set it up, and send it.
|
||||||
|
SimpleEmailer em = engine.createEmailer();
|
||||||
|
em.setFrom(uname,user.realEmailAddress());
|
||||||
|
em.setTo(address);
|
||||||
|
em.setSubject(subject);
|
||||||
|
em.setText(msg_buf.toString());
|
||||||
|
em.send();
|
||||||
|
|
||||||
|
} // end sendInvitation
|
||||||
|
|
||||||
|
public boolean canSendInvitation()
|
||||||
|
{
|
||||||
|
if (user.userIsAnonymous())
|
||||||
|
return false;
|
||||||
|
SIGData sd = getSIGDataNE();
|
||||||
|
if (sd==null)
|
||||||
|
return false;
|
||||||
|
return sd.checkMembership(level,is_member);
|
||||||
|
|
||||||
|
} // end canSendInvitation
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Implementations from interface UserBackend
|
* Implementations from interface UserBackend
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
@ -1256,6 +1306,24 @@ class SIGUserContextImpl implements SIGContext, SIGBackend
|
||||||
|
|
||||||
} // end userIsAnonymous
|
} // end userIsAnonymous
|
||||||
|
|
||||||
|
public String realUserName()
|
||||||
|
{
|
||||||
|
return user.realUserName();
|
||||||
|
|
||||||
|
} // end realUserName
|
||||||
|
|
||||||
|
public String realEmailAddress() throws DataException
|
||||||
|
{
|
||||||
|
return user.realEmailAddress();
|
||||||
|
|
||||||
|
} // end realEmailAddress
|
||||||
|
|
||||||
|
public String realFullName() throws DataException
|
||||||
|
{
|
||||||
|
return user.realFullName();
|
||||||
|
|
||||||
|
} // end realFullName
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Implementations from interface SIGBackend
|
* Implementations from interface SIGBackend
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
* language governing rights and limitations under the License.
|
* language governing rights and limitations under the License.
|
||||||
*
|
*
|
||||||
* The Original Code is the Venice Web Community System.
|
* The Original Code is the Venice Web Communities System.
|
||||||
*
|
*
|
||||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
* 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
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
@ -25,10 +25,20 @@ import com.silverwrist.venice.core.InternalStateError;
|
||||||
|
|
||||||
class SimpleEmailer
|
class SimpleEmailer
|
||||||
{
|
{
|
||||||
private Session session; // the email session
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private Session session; // the email session
|
||||||
private MimeMessage msg; // the message being composed
|
private MimeMessage msg; // the message being composed
|
||||||
|
|
||||||
public SimpleEmailer(Properties props, javax.mail.Session session)
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
SimpleEmailer(Properties props, javax.mail.Session session)
|
||||||
{
|
{
|
||||||
this.session = session;
|
this.session = session;
|
||||||
msg = new MimeMessage(session);
|
msg = new MimeMessage(session);
|
||||||
|
@ -54,6 +64,11 @@ class SimpleEmailer
|
||||||
|
|
||||||
} // end constructor
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
public void setTo(String to) throws EmailException
|
public void setTo(String to) throws EmailException
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -75,6 +90,37 @@ class SimpleEmailer
|
||||||
|
|
||||||
} // end setTo
|
} // end setTo
|
||||||
|
|
||||||
|
public void setFrom(String from_name, String from_addr) throws EmailException
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{ // set the "from" address
|
||||||
|
InternetAddress addr = new InternetAddress(from_addr);
|
||||||
|
addr.setPersonal(from_name);
|
||||||
|
msg.setFrom(addr);
|
||||||
|
|
||||||
|
// make sure the "Sender" address reflects our email address
|
||||||
|
InternetAddress sender = InternetAddress.getLocalAddress(session);
|
||||||
|
msg.setHeader("Sender",sender.toString());
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (AddressException e1)
|
||||||
|
{ // the address was somehow invalid
|
||||||
|
throw new EmailException("invalid email sender address",e1);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (MessagingException e2)
|
||||||
|
{ // msg.setRecipients should NOT be throwing a MessageException here!
|
||||||
|
throw new InternalStateError("condition should not apply to message here",e2);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (java.io.UnsupportedEncodingException e3)
|
||||||
|
{ // we can't really have that happen here, either!
|
||||||
|
throw new InternalStateError("condition should not apply to message here",e3);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end setFrom
|
||||||
|
|
||||||
public void setSubject(String subject)
|
public void setSubject(String subject)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
* language governing rights and limitations under the License.
|
* language governing rights and limitations under the License.
|
||||||
*
|
*
|
||||||
* The Original Code is the Venice Web Community System.
|
* The Original Code is the Venice Web Communities System.
|
||||||
*
|
*
|
||||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
* 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
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
@ -31,4 +31,10 @@ public interface UserBackend
|
||||||
|
|
||||||
public abstract boolean userIsAnonymous();
|
public abstract boolean userIsAnonymous();
|
||||||
|
|
||||||
|
public abstract String realUserName();
|
||||||
|
|
||||||
|
public abstract String realEmailAddress() throws DataException;
|
||||||
|
|
||||||
|
public abstract String realFullName() throws DataException;
|
||||||
|
|
||||||
} // end interface UserBackend
|
} // end interface UserBackend
|
||||||
|
|
|
@ -58,6 +58,7 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
private String description; // personal description
|
private String description; // personal description
|
||||||
private String my_email = null; // my email address (cached)
|
private String my_email = null; // my email address (cached)
|
||||||
private String my_pseud = null; // my pseud (cached)
|
private String my_pseud = null; // my pseud (cached)
|
||||||
|
private String full_name = null; // my full name (cached)
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -439,8 +440,10 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
rc = new ContactInfoImpl(uid);
|
rc = new ContactInfoImpl(uid);
|
||||||
if (my_email==null)
|
if (my_email==null)
|
||||||
my_email = rc.getEmail();
|
my_email = rc.getEmail();
|
||||||
|
if (full_name==null)
|
||||||
|
full_name = rc.getGivenName() + " " + rc.getFamilyName();
|
||||||
if (my_pseud==null)
|
if (my_pseud==null)
|
||||||
my_pseud = rc.getGivenName() + " " + rc.getFamilyName();
|
my_pseud = full_name;
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
} // end getContactInfo
|
} // end getContactInfo
|
||||||
|
@ -485,7 +488,8 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
|
|
||||||
} // end if
|
} // end if
|
||||||
|
|
||||||
my_pseud = ci.getGivenName() + " " + ci.getFamilyName(); // update this field
|
full_name = ci.getGivenName() + " " + ci.getFamilyName(); // update this field
|
||||||
|
my_pseud = full_name;
|
||||||
|
|
||||||
if (my_email==null) // filling in, this is not necessarily the first time
|
if (my_email==null) // filling in, this is not necessarily the first time
|
||||||
my_email = ci.getEmail();
|
my_email = ci.getEmail();
|
||||||
|
@ -568,7 +572,7 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
try
|
try
|
||||||
{ // retrieve a connection from the data pool
|
{ // retrieve a connection from the data pool
|
||||||
conn = datapool.getConnection();
|
conn = datapool.getConnection();
|
||||||
UserProfileImpl prof = new UserProfileImpl(engine,conn,xusername,
|
UserProfileImpl prof = new UserProfileImpl(engine,this,conn,xusername,
|
||||||
Capability.canSeeHiddenContactFields(level));
|
Capability.canSeeHiddenContactFields(level));
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
logger.debug("...found it!");
|
logger.debug("...found it!");
|
||||||
|
@ -599,7 +603,8 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
try
|
try
|
||||||
{ // retrieve a connection from the data pool
|
{ // retrieve a connection from the data pool
|
||||||
conn = datapool.getConnection();
|
conn = datapool.getConnection();
|
||||||
UserProfileImpl prof = new UserProfileImpl(engine,conn,xuid,Capability.canSeeHiddenContactFields(level));
|
UserProfileImpl prof = new UserProfileImpl(engine,this,conn,xuid,
|
||||||
|
Capability.canSeeHiddenContactFields(level));
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
logger.debug("...found it!");
|
logger.debug("...found it!");
|
||||||
return prof;
|
return prof;
|
||||||
|
@ -925,6 +930,28 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
|
|
||||||
} // end userIsAnonymous
|
} // end userIsAnonymous
|
||||||
|
|
||||||
|
public String realUserName()
|
||||||
|
{
|
||||||
|
return username;
|
||||||
|
|
||||||
|
} // end realUserName
|
||||||
|
|
||||||
|
public String realEmailAddress() throws DataException
|
||||||
|
{
|
||||||
|
if (my_email==null)
|
||||||
|
getContactInfo();
|
||||||
|
return my_email;
|
||||||
|
|
||||||
|
} // end realEmailAddress
|
||||||
|
|
||||||
|
public String realFullName() throws DataException
|
||||||
|
{
|
||||||
|
if (full_name==null)
|
||||||
|
getContactInfo();
|
||||||
|
return full_name;
|
||||||
|
|
||||||
|
} // end realFullName
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Operations private to implementation package
|
* Operations private to implementation package
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
* language governing rights and limitations under the License.
|
* language governing rights and limitations under the License.
|
||||||
*
|
*
|
||||||
* The Original Code is the Venice Web Community System.
|
* The Original Code is the Venice Web Communities System.
|
||||||
*
|
*
|
||||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
* 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
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
@ -19,12 +19,26 @@ package com.silverwrist.venice.core.impl;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import org.apache.log4j.*;
|
||||||
import com.silverwrist.venice.core.*;
|
import com.silverwrist.venice.core.*;
|
||||||
import com.silverwrist.venice.db.*;
|
import com.silverwrist.venice.db.*;
|
||||||
|
|
||||||
class UserProfileImpl implements UserProfile
|
class UserProfileImpl implements UserProfile
|
||||||
{
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static Category logger = Category.getInstance(UserProfileImpl.class.getName());
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
private EngineBackend engine; // the engine back end
|
private EngineBackend engine; // the engine back end
|
||||||
|
private UserBackend user; // the user that generated this profile
|
||||||
private int uid; // user ID
|
private int uid; // user ID
|
||||||
private String username; // user name
|
private String username; // user name
|
||||||
private String given_name; // given name ("first name")
|
private String given_name; // given name ("first name")
|
||||||
|
@ -50,64 +64,95 @@ class UserProfileImpl implements UserProfile
|
||||||
private java.util.Date last_login; // date of last login
|
private java.util.Date last_login; // date of last login
|
||||||
private java.util.Date last_update; // date of last update
|
private java.util.Date last_update; // date of last update
|
||||||
private String real_email; // real email address
|
private String real_email; // real email address
|
||||||
|
private boolean is_anon; // is this the anonymous account?
|
||||||
|
|
||||||
UserProfileImpl(EngineBackend engine, Connection conn, String username, boolean override)
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructors
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
UserProfileImpl(EngineBackend engine, UserBackend user, Connection conn, String username, boolean override)
|
||||||
throws DataException, SQLException
|
throws DataException, SQLException
|
||||||
{
|
{
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("load UserProfileImpl by name: " + username + " (" + override + ")");
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
|
this.user = user;
|
||||||
|
|
||||||
// first retrieve from the users table
|
// first retrieve from the users table
|
||||||
Statement stmt = conn.createStatement();
|
Statement stmt = conn.createStatement();
|
||||||
StringBuffer sql = new StringBuffer("SELECT uid, username, contactid, created, lastaccess, description "
|
StringBuffer sql = new StringBuffer("SELECT uid, username, contactid, created, lastaccess, description, "
|
||||||
+ "FROM users WHERE username = '");
|
+ "is_anon FROM users WHERE username = '");
|
||||||
sql.append(SQLUtil.encodeString(username)).append("';");
|
sql.append(SQLUtil.encodeString(username)).append("';");
|
||||||
ResultSet rs = stmt.executeQuery(sql.toString());
|
ResultSet rs = stmt.executeQuery(sql.toString());
|
||||||
if (!(rs.next()))
|
if (!(rs.next()))
|
||||||
|
{ // we didn't find the user
|
||||||
|
logger.error("unable to find user with username '" + username + "'");
|
||||||
throw new DataException("User '" + username + "' not found.");
|
throw new DataException("User '" + username + "' not found.");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
// load the "elementary" fields
|
// load the "elementary" fields
|
||||||
this.uid = rs.getInt("uid");
|
this.uid = rs.getInt(1);
|
||||||
this.username = rs.getString("username");
|
this.username = rs.getString(2);
|
||||||
int contact_id = rs.getInt("contactid");
|
int contact_id = rs.getInt(3);
|
||||||
created = SQLUtil.getFullDateTime(rs,"created");
|
created = SQLUtil.getFullDateTime(rs,4);
|
||||||
last_login = SQLUtil.getFullDateTime(rs,"lastaccess");
|
last_login = SQLUtil.getFullDateTime(rs,5);
|
||||||
descr = rs.getString("description");
|
descr = rs.getString(6);
|
||||||
|
is_anon = rs.getBoolean(7);
|
||||||
|
|
||||||
loadContact(conn,contact_id,override);
|
loadContact(conn,contact_id,override);
|
||||||
|
|
||||||
} // end constructor
|
} // end constructor
|
||||||
|
|
||||||
UserProfileImpl(EngineBackend engine, Connection conn, int uid, boolean override)
|
UserProfileImpl(EngineBackend engine, UserBackend user, Connection conn, int uid, boolean override)
|
||||||
throws DataException, SQLException
|
throws DataException, SQLException
|
||||||
{
|
{
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("load UserProfileImpl by UID: " + uid + " (" + override + ")");
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
|
this.user = user;
|
||||||
|
|
||||||
// first retrieve from the users table
|
// first retrieve from the users table
|
||||||
Statement stmt = conn.createStatement();
|
Statement stmt = conn.createStatement();
|
||||||
StringBuffer sql = new StringBuffer("SELECT uid, username, contactid, created, lastaccess, description "
|
StringBuffer sql = new StringBuffer("SELECT uid, username, contactid, created, lastaccess, description, "
|
||||||
+ "FROM users WHERE uid = ");
|
+ "is_anon FROM users WHERE uid = ");
|
||||||
sql.append(uid).append(';');
|
sql.append(uid).append(';');
|
||||||
ResultSet rs = stmt.executeQuery(sql.toString());
|
ResultSet rs = stmt.executeQuery(sql.toString());
|
||||||
if (!(rs.next()))
|
if (!(rs.next()))
|
||||||
|
{ // we didn't find user
|
||||||
|
logger.error("unable to find user with uid " + uid);
|
||||||
throw new DataException("User #" + String.valueOf(uid) + " not found.");
|
throw new DataException("User #" + String.valueOf(uid) + " not found.");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
// load the "elementary" fields
|
// load the "elementary" fields
|
||||||
this.uid = rs.getInt("uid");
|
this.uid = rs.getInt(1);
|
||||||
this.username = rs.getString("username");
|
this.username = rs.getString(2);
|
||||||
int contact_id = rs.getInt("contactid");
|
int contact_id = rs.getInt(3);
|
||||||
created = SQLUtil.getFullDateTime(rs,"created");
|
created = SQLUtil.getFullDateTime(rs,4);
|
||||||
last_login = SQLUtil.getFullDateTime(rs,"lastaccess");
|
last_login = SQLUtil.getFullDateTime(rs,5);
|
||||||
descr = rs.getString("description");
|
descr = rs.getString(6);
|
||||||
|
is_anon = rs.getBoolean(7);
|
||||||
|
|
||||||
loadContact(conn,contact_id,override);
|
loadContact(conn,contact_id,override);
|
||||||
|
|
||||||
} // end constructor
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Internal functions
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
private void loadContact(Connection conn, int contact_id, boolean override) throws SQLException
|
private void loadContact(Connection conn, int contact_id, boolean override) throws SQLException
|
||||||
{
|
{
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("loadContact for contact ID " + contact_id + " (" + override + ")");
|
||||||
|
|
||||||
Statement stmt = conn.createStatement();
|
Statement stmt = conn.createStatement();
|
||||||
StringBuffer sql = new StringBuffer("SELECT * FROM contacts WHERE contactid = ");
|
StringBuffer sql = new StringBuffer("SELECT * FROM contacts WHERE contactid = ");
|
||||||
sql.append(contact_id).append(';');
|
sql.append(contact_id).append(';');
|
||||||
|
|
||||||
ResultSet rs = stmt.executeQuery(sql.toString());
|
ResultSet rs = stmt.executeQuery(sql.toString());
|
||||||
if (rs.next())
|
if (rs.next())
|
||||||
{ // load all the record data
|
{ // load all the record data
|
||||||
|
@ -194,6 +239,11 @@ class UserProfileImpl implements UserProfile
|
||||||
|
|
||||||
} // end loadContact
|
} // end loadContact
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
public int getUID()
|
public int getUID()
|
||||||
{
|
{
|
||||||
return uid;
|
return uid;
|
||||||
|
@ -344,4 +394,49 @@ class UserProfileImpl implements UserProfile
|
||||||
|
|
||||||
} // end getDescription
|
} // end getDescription
|
||||||
|
|
||||||
|
public boolean isAnonymous()
|
||||||
|
{
|
||||||
|
return is_anon;
|
||||||
|
|
||||||
|
} // end isAnonymous
|
||||||
|
|
||||||
|
public boolean canSendQuickEmail()
|
||||||
|
{
|
||||||
|
return !is_anon && !(user.userIsAnonymous());
|
||||||
|
|
||||||
|
} // end canSendQuickEmail
|
||||||
|
|
||||||
|
public void sendQuickEmail(String subject, String text) throws AccessError, DataException, EmailException
|
||||||
|
{
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("Send Quick E-Mail (from uid " + user.realUID() + " to uid " + uid + ")");
|
||||||
|
|
||||||
|
if (user.userIsAnonymous())
|
||||||
|
{ // we can't send quick emails if we're anonymous!
|
||||||
|
logger.error("sending user is not logged in.");
|
||||||
|
throw new AccessError("You must be logged in to send a quick E-mail message.");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
if (is_anon)
|
||||||
|
{ // we can't send quick emails to the anonymous user
|
||||||
|
logger.error("target user is the anonymous user");
|
||||||
|
throw new AccessError("You cannot send email to the anonymous user.");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
// assemble the full text
|
||||||
|
StringBuffer text_buf = new StringBuffer(text);
|
||||||
|
text_buf.append("\n\n--\n").append(engine.getStockMessage("signature"));
|
||||||
|
|
||||||
|
// create the emailer object, fill it in, and send it
|
||||||
|
SimpleEmailer em = engine.createEmailer();
|
||||||
|
em.setFrom(user.realUserName(),user.realEmailAddress());
|
||||||
|
em.setTo(real_email);
|
||||||
|
em.setSubject(subject);
|
||||||
|
em.setText(text_buf.toString());
|
||||||
|
em.send();
|
||||||
|
|
||||||
|
} // end sendQuickEmail
|
||||||
|
|
||||||
} // end class UserProfileImpl
|
} // end class UserProfileImpl
|
||||||
|
|
|
@ -198,6 +198,19 @@ public class SIGOperations extends VeniceServlet
|
||||||
|
|
||||||
} // end if ("C" command)
|
} // end if ("C" command)
|
||||||
|
|
||||||
|
if (cmd.equals("I"))
|
||||||
|
{ // "I" - Send Invitation (requires SIG parameter)
|
||||||
|
SIGContext sig = getSIGParameter(request,user,true,"top");
|
||||||
|
|
||||||
|
if (!(sig.canSendInvitation()))
|
||||||
|
return new ErrorBox("SIG Error","You are not permitted to send an invitation.",
|
||||||
|
"sig/" + sig.getAlias());
|
||||||
|
|
||||||
|
// present the "Invitation" dialog
|
||||||
|
return new Invitation(sig);
|
||||||
|
|
||||||
|
} // end if ("I" command)
|
||||||
|
|
||||||
// this is an error!
|
// this is an error!
|
||||||
logger.error("invalid command to SIGOperations.doGet: " + cmd);
|
logger.error("invalid command to SIGOperations.doGet: " + cmd);
|
||||||
return new ErrorBox("Internal Error","Invalid command to SIGOperations.doGet","top");
|
return new ErrorBox("Internal Error","Invalid command to SIGOperations.doGet","top");
|
||||||
|
@ -318,6 +331,48 @@ public class SIGOperations extends VeniceServlet
|
||||||
|
|
||||||
} // end if ("C" command)
|
} // end if ("C" command)
|
||||||
|
|
||||||
|
if (cmd.equals("I"))
|
||||||
|
{ // "I" = Send invitation (requires SIG parameter)
|
||||||
|
SIGContext sig = getSIGParameter(request,user,true,"top");
|
||||||
|
String on_error = "sig/" + sig.getAlias();
|
||||||
|
|
||||||
|
if (isImageButtonClicked(request,"cancel")) // cancel - go back to SIG opening page
|
||||||
|
throw new RedirectResult(on_error);
|
||||||
|
|
||||||
|
if (isImageButtonClicked(request,"send"))
|
||||||
|
{ // the "send" button was pressed
|
||||||
|
try
|
||||||
|
{ // send out the invitation
|
||||||
|
sig.sendInvitation(request.getParameter("addr"),request.getParameter("pb"));
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (AccessError ae)
|
||||||
|
{ // access error - display error box
|
||||||
|
return new ErrorBox("Access Error",ae.getMessage(),on_error);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (DataException de)
|
||||||
|
{ // database error doing something
|
||||||
|
return new ErrorBox("Database Error","Database error creating SIG: " + de.getMessage(),on_error);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (EmailException ee)
|
||||||
|
{ // error sending the email message
|
||||||
|
return new ErrorBox("E-Mail Error","Error sending e-mail: " + ee.getMessage(),on_error);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
// all sent - go back to SIG profile display
|
||||||
|
throw new RedirectResult(on_error);
|
||||||
|
|
||||||
|
} // end if ("send" pressed)
|
||||||
|
|
||||||
|
// error - don't know what button was clicked
|
||||||
|
logger.error("no known button click on SIGOperations.doPost, cmd=I");
|
||||||
|
return new ErrorBox("Internal Error","Unknown command button pressed",on_error);
|
||||||
|
|
||||||
|
} // end if ("I" command)
|
||||||
|
|
||||||
// this is an error!
|
// this is an error!
|
||||||
logger.error("invalid command to SIGOperations.doPost: " + cmd);
|
logger.error("invalid command to SIGOperations.doPost: " + cmd);
|
||||||
return new ErrorBox("Internal Error","Invalid command to SIGOperations.doPost","top");
|
return new ErrorBox("Internal Error","Invalid command to SIGOperations.doPost","top");
|
||||||
|
|
|
@ -20,11 +20,19 @@ package com.silverwrist.venice.servlets;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import javax.servlet.*;
|
import javax.servlet.*;
|
||||||
import javax.servlet.http.*;
|
import javax.servlet.http.*;
|
||||||
|
import org.apache.log4j.*;
|
||||||
import com.silverwrist.venice.core.*;
|
import com.silverwrist.venice.core.*;
|
||||||
import com.silverwrist.venice.servlets.format.*;
|
import com.silverwrist.venice.servlets.format.*;
|
||||||
|
|
||||||
public class UserDisplay extends VeniceServlet
|
public class UserDisplay extends VeniceServlet
|
||||||
{
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static Category logger = Category.getInstance(UserDisplay.class.getName());
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Overrides from class HttpServlet
|
* Overrides from class HttpServlet
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
@ -53,6 +61,7 @@ public class UserDisplay extends VeniceServlet
|
||||||
{ // load the profile corresponding to that username and display it
|
{ // load the profile corresponding to that username and display it
|
||||||
UserProfile prof = user.getProfile(uname);
|
UserProfile prof = user.getProfile(uname);
|
||||||
changeMenuTop(request);
|
changeMenuTop(request);
|
||||||
|
setMyLocation(request,"user" + request.getPathInfo());
|
||||||
return new UserProfileData(prof);
|
return new UserProfileData(prof);
|
||||||
|
|
||||||
} // end try
|
} // end try
|
||||||
|
@ -64,4 +73,69 @@ public class UserDisplay extends VeniceServlet
|
||||||
|
|
||||||
} // end doVeniceGet
|
} // end doVeniceGet
|
||||||
|
|
||||||
|
protected VeniceContent doVenicePost(HttpServletRequest request, VeniceEngine engine,
|
||||||
|
UserContext user, RenderData rdat)
|
||||||
|
throws ServletException, IOException, VeniceServletResult
|
||||||
|
{
|
||||||
|
String uname = request.getPathInfo().substring(1); // the username we're looking at
|
||||||
|
UserProfile prof;
|
||||||
|
String on_error;
|
||||||
|
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("Posting to profile: " + uname);
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // load the profile corresponding to that username and display it
|
||||||
|
prof = user.getProfile(uname);
|
||||||
|
on_error = "user/" + prof.getUserName();
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (DataException de)
|
||||||
|
{ // unable to get the user name
|
||||||
|
logger.error("error retrieving user profile: " + de.getMessage(),de);
|
||||||
|
return new ErrorBox("Database Error","Database error finding user: " + de.getMessage(),"top");
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
String cmd = getStandardCommandParam(request);
|
||||||
|
|
||||||
|
if (cmd.equals("E"))
|
||||||
|
{ // send a quick email message - let's do it!
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("sending quick email message");
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // send a quick email message...
|
||||||
|
prof.sendQuickEmail(request.getParameter("subj"),request.getParameter("pb"));
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (AccessError ae)
|
||||||
|
{ // throw an access error box
|
||||||
|
logger.error("access error sending email: " + ae.getMessage(),ae);
|
||||||
|
return new ErrorBox("Access Error",ae.getMessage(),on_error);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (DataException de)
|
||||||
|
{ // database error
|
||||||
|
logger.error("database error sending email: " + de.getMessage(),de);
|
||||||
|
return new ErrorBox("Database Error","Database error sending message: " + de.getMessage(),on_error);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (EmailException ee)
|
||||||
|
{ // error sending the actual email
|
||||||
|
logger.error("email exception: " + ee.getMessage(),ee);
|
||||||
|
return new ErrorBox("E-Mail Error","Error sending e-mail: " + ee.getMessage(),on_error);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("redisplaying profile window");
|
||||||
|
changeMenuTop(request);
|
||||||
|
setMyLocation(request,"user" + request.getPathInfo());
|
||||||
|
return new UserProfileData(prof);
|
||||||
|
|
||||||
|
} // end doVenicePost
|
||||||
|
|
||||||
} // end class UserDisplay
|
} // end class UserDisplay
|
||||||
|
|
108
src/com/silverwrist/venice/servlets/format/Invitation.java
Normal file
108
src/com/silverwrist/venice/servlets/format/Invitation.java
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
/*
|
||||||
|
* 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 javax.servlet.ServletRequest;
|
||||||
|
import com.silverwrist.util.StringUtil;
|
||||||
|
import com.silverwrist.venice.core.*;
|
||||||
|
|
||||||
|
public class Invitation implements JSPRender
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Attribute name for request attribute
|
||||||
|
protected static final String ATTR_NAME = "com.silverwrist.venice.content.Invitation";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private SIGContext sig; // the SIG context
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public Invitation(SIGContext sig)
|
||||||
|
{
|
||||||
|
this.sig = sig;
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External static functions
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static Invitation retrieve(ServletRequest request)
|
||||||
|
{
|
||||||
|
return (Invitation)(request.getAttribute(ATTR_NAME));
|
||||||
|
|
||||||
|
} // end retrieve
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface VeniceContent
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String getPageTitle(RenderData rdat)
|
||||||
|
{
|
||||||
|
return "Send Invitation";
|
||||||
|
|
||||||
|
} // end getPageTitle
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface JSPRender
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void store(ServletRequest request)
|
||||||
|
{
|
||||||
|
request.setAttribute(ATTR_NAME,this);
|
||||||
|
|
||||||
|
} // end store
|
||||||
|
|
||||||
|
public String getTargetJSPName()
|
||||||
|
{
|
||||||
|
return "invitation.jsp";
|
||||||
|
|
||||||
|
} // end getTargetJSPName
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public int getSIGID()
|
||||||
|
{
|
||||||
|
return sig.getSIGID();
|
||||||
|
|
||||||
|
} // end getSIGID
|
||||||
|
|
||||||
|
public String getSIGName()
|
||||||
|
{
|
||||||
|
return sig.getName();
|
||||||
|
|
||||||
|
} // end getSIGName
|
||||||
|
|
||||||
|
} // end class Invitation
|
|
@ -7,7 +7,7 @@
|
||||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
* language governing rights and limitations under the License.
|
* language governing rights and limitations under the License.
|
||||||
*
|
*
|
||||||
* The Original Code is the Venice Web Community System.
|
* The Original Code is the Venice Web Communities System.
|
||||||
*
|
*
|
||||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
* 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
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
|
52
web/format/invitation.jsp
Normal file
52
web/format/invitation.jsp
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
<%--
|
||||||
|
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.*" %>
|
||||||
|
<%
|
||||||
|
Invitation data = Invitation.retrieve(request);
|
||||||
|
Variables.failIfNull(data);
|
||||||
|
RenderData rdat = RenderConfig.createRenderData(application,request,response);
|
||||||
|
%>
|
||||||
|
<% if (rdat.useHTMLComments()) { %><!-- Send invitation to SIG #<%= data.getSIGID() %> --><% } %>
|
||||||
|
<% rdat.writeContentHeader(out,"Send SIG Invitation:",data.getSIGName()); %>
|
||||||
|
<FORM METHOD=POST ACTION="<%= rdat.getEncodedServletPath("sigops") %>">
|
||||||
|
<INPUT TYPE="HIDDEN" NAME="sig" VALUE="<%= data.getSIGID() %>">
|
||||||
|
<INPUT TYPE="HIDDEN" NAME="cmd" VALUE="I">
|
||||||
|
<TABLE BORDER=0 CELLPADDING=0>
|
||||||
|
<TR VALIGN=MIDDLE>
|
||||||
|
<TD ALIGN=LEFT><%= rdat.getStdFontTag(null,2) %>Send to: </FONT></TD>
|
||||||
|
<TD ALIGN=LEFT><INPUT TYPE=TEXT NAME="addr" SIZE=65 MAXLENGTH=255 VALUE=""></TD>
|
||||||
|
</TR>
|
||||||
|
<TR VALIGN=MIDDLE><TD ALIGN=LEFT COLSPAN=2>
|
||||||
|
<TD ALIGN=LEFT><%= rdat.getStdFontTag(null,2) %>Personal message to be added to invitation:</FONT></TD>
|
||||||
|
</TD></TR>
|
||||||
|
<TR VALIGN=MIDDLE><TD ALIGN=LEFT COLSPAN=2>
|
||||||
|
<TEXTAREA NAME="pb" WRAP=HARD ROWS=7 COLS=80></TEXTAREA>
|
||||||
|
</TD></TR>
|
||||||
|
<TR VALIGN=MIDDLE><TD ALIGN=LEFT COLSPAN=2>
|
||||||
|
<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>
|
||||||
|
</FORM>
|
||||||
|
<% rdat.writeFooter(out); %>
|
|
@ -50,9 +50,9 @@
|
||||||
|
|
||||||
<% if (data.isUserLoggedIn()) { %>
|
<% if (data.isUserLoggedIn()) { %>
|
||||||
<DIV ALIGN="CENTER">
|
<DIV ALIGN="CENTER">
|
||||||
<% if (sig.isMember()) { %>
|
<% if (sig.canSendInvitation()) { %>
|
||||||
<A HREF="/TODO"><IMG SRC="<%= rdat.getFullImagePath("bn_invite.gif") %>" ALT="Invite"
|
<A HREF="<%= rdat.getEncodedServletPath("sigops?cmd=I&sig=" + sig.getSIGID()) %>"><IMG
|
||||||
WIDTH=80 HEIGHT=24 BORDER=0></A>
|
SRC="<%= rdat.getFullImagePath("bn_invite.gif") %>" ALT="Invite" WIDTH=80 HEIGHT=24 BORDER=0></A>
|
||||||
<% } else if (sig.canJoin()) { %>
|
<% } else if (sig.canJoin()) { %>
|
||||||
<A HREF="<%= rdat.getEncodedServletPath("sigops?cmd=J&sig=" + sig.getSIGID()) %>"><IMG
|
<A HREF="<%= rdat.getEncodedServletPath("sigops?cmd=J&sig=" + sig.getSIGID()) %>"><IMG
|
||||||
SRC="<%= rdat.getFullImagePath("bn_join_now.gif") %>" ALT="Join Now"
|
SRC="<%= rdat.getFullImagePath("bn_join_now.gif") %>" ALT="Join Now"
|
||||||
|
|
|
@ -89,4 +89,25 @@
|
||||||
<% } // end if %>
|
<% } // end if %>
|
||||||
|
|
||||||
</TABLE>
|
</TABLE>
|
||||||
|
|
||||||
|
<% if (prof.canSendQuickEmail()) { %>
|
||||||
|
<HR><%= rdat.getStdFontTag(null,2) %><B>Send Quick E-Mail To <%= prof.getUserName() %>:</B></FONT><BR>
|
||||||
|
<FORM METHOD=POST ACTION="<%= rdat.getEncodedServletPath("user/" + prof.getUserName()) %>">
|
||||||
|
<INPUT TYPE="HIDDEN" NAME="cmd" VALUE="E">
|
||||||
|
<TABLE BORDER=0 CELLPADDING=0>
|
||||||
|
<TR VALIGN=MIDDLE><TD ALIGN=LEFT>
|
||||||
|
<%= rdat.getStdFontTag(null,2) %>Subject: </FONT>
|
||||||
|
<INPUT TYPE="TEXT" NAME="subj" SIZE=65 MAXLENGTH=255 VALUE="">
|
||||||
|
</TD></TR>
|
||||||
|
<TR VALIGN=MIDDLE><TD ALIGN=LEFT>
|
||||||
|
<TEXTAREA NAME="pb" WRAP=HARD ROWS=7 COLS=80></TEXTAREA>
|
||||||
|
</TD></TR>
|
||||||
|
<TR VALIGN=MIDDLE><TD ALIGN=LEFT>
|
||||||
|
<INPUT TYPE=IMAGE SRC="<%= rdat.getFullImagePath("bn_send_email.gif") %>" NAME="send"
|
||||||
|
ALT="Send E-Mail" WIDTH=80 HEIGHT=24 BORDER=0>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
</FORM>
|
||||||
|
<% } // end if %>
|
||||||
|
|
||||||
<% rdat.writeFooter(out); %>
|
<% rdat.writeFooter(out); %>
|
||||||
|
|
BIN
web/images/bn_send_email.gif
Normal file
BIN
web/images/bn_send_email.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 1005 B |
Loading…
Reference in New Issue
Block a user