Author: mflorea
Date: 2008-01-02 15:45:48 +0100 (Wed, 02 Jan 2008)
New Revision: 6587
Modified:
xwiki-products/curriki/trunk/plugins/invitationmanager/src/main/java/org/xwiki/plugin/invitationmanager/impl/InvitationManagerImpl.java
Log:
notify space admins on new request membership; notify user after making a
membership request; create space user profile on accept membership request;
Modified:
xwiki-products/curriki/trunk/plugins/invitationmanager/src/main/java/org/xwiki/plugin/invitationmanager/impl/InvitationManagerImpl.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/invitationmanager/src/main/java/org/xwiki/plugin/invitationmanager/impl/InvitationManagerImpl.java
2008-01-02 14:38:21 UTC (rev 6586)
+++
xwiki-products/curriki/trunk/plugins/invitationmanager/src/main/java/org/xwiki/plugin/invitationmanager/impl/InvitationManagerImpl.java
2008-01-02 14:45:48 UTC (rev 6587)
@@ -22,10 +22,11 @@
import java.util.*;
import org.xwiki.plugin.invitationmanager.api.*;
-import org.xwiki.plugin.spacemanager.impl.SpaceImpl;
import org.xwiki.plugin.spacemanager.api.SpaceManager;
import org.xwiki.plugin.spacemanager.api.SpaceManagers;
import org.xwiki.plugin.spacemanager.api.Space;
+import org.xwiki.plugin.spacemanager.api.SpaceUserProfile;
+import org.xwiki.plugin.spacemanager.impl.SpaceUserProfileImpl;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.velocity.VelocityContext;
@@ -46,6 +47,8 @@
{
public static interface JoinRequestAction
{
+ String CREATE = "Create";
+
String SEND = "Send";
String ACCEPT = "Accept";
@@ -184,6 +187,9 @@
// send notification mail
sendMail(JoinRequestAction.ACCEPT, request, templateMail,
context);
+ // create space user profile based on the membership request
+ createSpaceUserProfile(space, request, context);
+
// update the list of members and their roles
addMember(space, userName, request.getRoles(), context);
@@ -200,13 +206,15 @@
/**
* [EMAIL PROTECTED]
- *
+ *
* @see InvitationManager#acceptMembership(String, String, XWikiContext)
*/
- public boolean acceptMembership(String space, String userName,
XWikiContext context) throws InvitationManagerException {
+ public boolean acceptMembership(String space, String userName,
XWikiContext context)
+ throws InvitationManagerException
+ {
String templateMail =
- getDefaultTemplateMailDocumentName(space, "MembershipRequest",
- JoinRequestAction.ACCEPT, context);
+ getDefaultTemplateMailDocumentName(space, "Request",
JoinRequestAction.ACCEPT,
+ context);
return acceptMembership(space, userName, templateMail, context);
}
@@ -824,11 +832,14 @@
/**
* [EMAIL PROTECTED]
- *
- * @see
org.xwiki.plugin.invitationmanager.api.InvitationManager#inviteUser(String,
String, boolean, List, String, Map, XWikiContext)
+ *
+ * @see
org.xwiki.plugin.invitationmanager.api.InvitationManager#inviteUser(String,
String,
+ * boolean, List, String, Map, XWikiContext)
*/
- public boolean inviteUser(String wikiNameOrMailAddress, String space,
boolean open, List roles,
- String templateMail, Map map, XWikiContext context)
throws InvitationManagerException {
+ public boolean inviteUser(String wikiNameOrMailAddress, String space,
boolean open,
+ List roles, String templateMail, Map map, XWikiContext context)
+ throws InvitationManagerException
+ {
String invitee;
String registeredUser = null;
try {
@@ -867,9 +878,14 @@
}
// send a notification mail
+ if (templateMail == null) {
+ templateMail =
+ getDefaultTemplateMailDocumentName(space, "Invitation",
+ JoinRequestAction.SEND, context);
+ }
sendMail(JoinRequestAction.SEND, invitation, templateMail,
context);
- // save invitation after
+ // save invitation after
invitation.saveWithProgrammingRights();
return true;
} catch (XWikiException e) {
@@ -986,31 +1002,46 @@
/**
* [EMAIL PROTECTED]
- *
+ *
* @see InvitationManager#rejectMembership(String, String, XWikiContext)
*/
- public void rejectMembership(String space, String userName, XWikiContext
context) throws InvitationManagerException {
+ public void rejectMembership(String space, String userName, XWikiContext
context)
+ throws InvitationManagerException
+ {
String templateMail =
- getDefaultTemplateMailDocumentName(space, "MembershipRequest",
- JoinRequestAction.REJECT, context);
+ getDefaultTemplateMailDocumentName(space, "Request",
JoinRequestAction.REJECT,
+ context);
rejectMembership(space, userName, templateMail, context);
}
/**
* [EMAIL PROTECTED]
- *
+ *
* @see InvitationManager#requestMembership(String, String, List, Map,
XWikiContext)
*/
public void requestMembership(String space, String message, List roles,
Map map,
- XWikiContext context) throws
InvitationManagerException {
+ XWikiContext context) throws InvitationManagerException
+ {
try {
MembershipRequest request =
- createMembershipRequest(context.getUser(), space, context);
+ createMembershipRequest(context.getUser(), space, context);
request.setMap(map);
request.setRequestDate(new Date());
request.setRoles(roles);
request.setStatus(JoinRequestStatus.SENT);
request.setText(message);
+ // e-mail notification is sent to user's e-mail address informing
them of their "Pending
+ // approval" status
+ String requestSentMailTemplate =
+ getDefaultTemplateMailDocumentName(space, "Request",
JoinRequestAction.CREATE,
+ context);
+ sendMail(JoinRequestAction.CREATE, request,
requestSentMailTemplate, context);
+ // send "Membership Request awaiting approval" notification via
e-mail to the space
+ // administrator(s)
+ String requestPendingMailTemplate =
+ getDefaultTemplateMailDocumentName(space, "Request",
JoinRequestAction.SEND,
+ context);
+ sendMail(JoinRequestAction.SEND, request,
requestPendingMailTemplate, context);
request.saveWithProgrammingRights();
} catch (XWikiException e) {
throw new InvitationManagerException(e);
@@ -1019,7 +1050,7 @@
/**
* [EMAIL PROTECTED]
- *
+ *
* @see InvitationManager#requestMembership(String, String, List,
XWikiContext)
*/
public void requestMembership(String space, String message, List roles,
XWikiContext context) throws InvitationManagerException {
@@ -1228,76 +1259,95 @@
* Wrapper method for sending a mail using the mail sender plug-in
*/
private void sendMail(String action, JoinRequest request, String
templateDocFullName,
- XWikiContext context) throws XWikiException
+ XWikiContext context) throws XWikiException
{
VelocityContext vContext = new VelocityContext();
String spaceName = request.getSpace();
SpaceManager spaceManager =
SpaceManagers.findSpaceManagerForSpace(spaceName, context);
Space space = spaceManager.getSpace(spaceName, context);
vContext.put(SPACE_VELOCITY_KEY, space);
- String fromUser = null, toUser = null;
+ String fromUser = context.getWiki().getXWikiPreference("admin_email",
context);
+ String[] toUsers = new String[0];
if (request instanceof Invitation) {
Invitation invitation = (Invitation) request;
vContext.put(INVITATION_VELOCITY_KEY, invitation);
if (JoinRequestAction.SEND.equals(action)) {
// invitation notification mail
- fromUser = invitation.getInviter();
- toUser = invitation.getInvitee();
+ toUsers = new String[] {invitation.getInvitee()};
} else {
// accept or reject invitation mail
- fromUser = invitation.getInvitee();
- toUser = invitation.getInviter();
+ toUsers = new String[] {invitation.getInviter()};
}
} else if (request instanceof MembershipRequest) {
MembershipRequest membershipRequest = (MembershipRequest) request;
vContext.put(MEMBERSHIP_REQUEST_VELOCITY_KEY, membershipRequest);
if (JoinRequestAction.SEND.equals(action)) {
- // membership request notification mail
- fromUser = membershipRequest.getRequester();
- toUser = membershipRequest.getResponder();
+ // notify the space administrators of a new membership request
pending for approval
+ toUsers = (String[]) spaceManager.getAdmins(spaceName,
context).toArray();
} else {
- // accept or reject membership request mail
- fromUser = membershipRequest.getResponder();
- toUser = membershipRequest.getRequester();
+ // create, accept or reject membership request mail
+ toUsers = new String[] {membershipRequest.getRequester()};
}
}
- // TODO: replace by admin email.. we cannot send invitation from a
different domain..
- if (!isEmailAddress(fromUser)) {
- fromUser = getEmailAddress(fromUser, context);
+ if (fromUser == null) {
+ throw new
InvitationManagerException(InvitationManagerException.MODULE_PLUGIN_INVITATIONMANAGER,
+
InvitationManagerException.ERROR_INVITATION_SENDER_EMAIL_INVALID,
+ "Sender email is invalid");
}
- if (fromUser==null) {
- throw new
InvitationManagerException(InvitationManagerException.MODULE_PLUGIN_INVITATIONMANAGER,
InvitationManagerException.ERROR_INVITATION_SENDER_EMAIL_INVALID,
- "Sender email is invalid");
+ boolean toUsersValid = toUsers.length > 0;
+ for (int i = 0; i < toUsers.length && toUsersValid; i++) {
+ if (!isEmailAddress(toUsers[i])) {
+ toUsers[i] = getEmailAddress(toUsers[i], context);
+ }
+ if (toUsers[i] == null) {
+ toUsersValid = false;
+ }
}
- if (!isEmailAddress(toUser)) {
- toUser = getEmailAddress(toUser, context);
+ if (!toUsersValid) {
+ throw new
InvitationManagerException(InvitationManagerException.MODULE_PLUGIN_INVITATIONMANAGER,
+
InvitationManagerException.ERROR_INVITATION_TARGET_EMAIL_INVALID,
+ "Target email is invalid");
}
+ String strToUsers = join(toUsers, ",");
- if (toUser==null) {
- throw new
InvitationManagerException(InvitationManagerException.MODULE_PLUGIN_INVITATIONMANAGER,
InvitationManagerException.ERROR_INVITATION_TARGET_EMAIL_INVALID,
- "Target email is invalid");
- }
-
MailSenderPlugin mailSender = getMailSenderPlugin(context);
XWikiDocument mailDoc =
context.getWiki().getDocument(templateDocFullName, context);
XWikiDocument translatedMailDoc =
mailDoc.getTranslatedDocument(context);
- mailSender.prepareVelocityContext(fromUser, toUser, "", vContext,
context);
+ mailSender.prepareVelocityContext(fromUser, strToUsers, "", vContext,
context);
vContext.put("xwiki", new XWiki(context.getWiki(), context));
- String mailSubject =
XWikiVelocityRenderer.evaluate(translatedMailDoc.getTitle(),
templateDocFullName, vContext);
- String mailContent =
XWikiVelocityRenderer.evaluate(translatedMailDoc.getContent(),
templateDocFullName, vContext);
+ String mailSubject =
+ XWikiVelocityRenderer.evaluate(translatedMailDoc.getTitle(),
templateDocFullName,
+ vContext);
+ String mailContent =
+ XWikiVelocityRenderer.evaluate(translatedMailDoc.getContent(),
templateDocFullName,
+ vContext);
- Mail mail = new Mail(fromUser, toUser, null, null, mailSubject,
mailContent, null);
+ Mail mail = new Mail(fromUser, strToUsers, null, null, mailSubject,
mailContent, null);
try {
mailSender.sendMail(mail, context);
} catch (Exception e) {
- throw new
InvitationManagerException(InvitationManagerException.MODULE_PLUGIN_INVITATIONMANAGER,
InvitationManagerException.ERROR_INVITATION_SENDING_EMAIL_FAILED,
- "Sending notification email failed", e);
+ throw new
InvitationManagerException(InvitationManagerException.MODULE_PLUGIN_INVITATIONMANAGER,
+
InvitationManagerException.ERROR_INVITATION_SENDING_EMAIL_FAILED,
+ "Sending notification email failed",
+ e);
}
}
+
+ private static final String join(String[] array, String separator)
+ {
+ StringBuffer result = new StringBuffer("");
+ if (array.length > 0) {
+ result.append(array[0]);
+ }
+ for (int i = 1; i < array.length; i++) {
+ result.append("," + array[i]);
+ }
+ return result.toString();
+ }
private MailSenderPlugin getMailSenderPlugin(XWikiContext context) throws
InvitationManagerException {
MailSenderPlugin mailSender =
@@ -1345,7 +1395,7 @@
"Curriki ID is invalid", e);
}
}
-
+
/**
* Helper method for testing if a given string is an email address.
*/
@@ -1388,20 +1438,45 @@
}
// copy & paste from XWikiAuthServiceImpl#findUser(String, XWikiContext)
- private String findUser(String username, XWikiContext context) throws
InvitationManagerException
+ private String findUser(String username, XWikiContext context)
+ throws InvitationManagerException
{
try {
- String user;
-
// First let's look in the cache
if (context.getWiki().exists("XWiki." + username, context))
return "XWiki." + username;
else
return null;
} catch (Exception e) {
- throw new
InvitationManagerException(InvitationManagerException.MODULE_PLUGIN_INVITATIONMANAGER,
InvitationManagerException.ERROR_INVITATION_ERROR_FINDING_USER,
- "Error finding user " + username, e);
+ throw new
InvitationManagerException(InvitationManagerException.MODULE_PLUGIN_INVITATIONMANAGER,
+ InvitationManagerException.ERROR_INVITATION_ERROR_FINDING_USER,
+ "Error finding user " + username,
+ e);
}
}
+
+ /**
+ * Creates and saves a user profile associated with the given space and
the user who made the
+ * membership request
+ */
+ private void createSpaceUserProfile(String spaceName, MembershipRequest
request,
+ XWikiContext context) throws XWikiException
+ {
+ SpaceManager spaceManager =
SpaceManagers.findSpaceManagerForSpace(spaceName, context);
+ SpaceUserProfile profile =
+ new SpaceUserProfileImpl(request.getRequester(), spaceName,
spaceManager, context);
+
profile.setAllowNotifications("true".equals(request.getMap().get("allowNotifications")));
+
profile.setAllowNotificationsFromSelf("true".equals(request.getMap().get(
+ "allowNotificationsFromSelf")));
+ String profileText = (String) request.getMap().get("profile");
+ if (profileText == null) {
+ profileText = request.getText();
+ }
+ if (profileText == null) {
+ profileText = "";
+ }
+ profile.setProfile(profileText);
+ profile.saveWithProgrammingRights();
+ }
}
_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications