1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portlet.invitation.action;
16  
17  import com.liferay.mail.service.MailServiceUtil;
18  import com.liferay.portal.kernel.mail.MailMessage;
19  import com.liferay.portal.kernel.servlet.SessionErrors;
20  import com.liferay.portal.kernel.servlet.SessionMessages;
21  import com.liferay.portal.kernel.util.ParamUtil;
22  import com.liferay.portal.kernel.util.StringUtil;
23  import com.liferay.portal.kernel.util.Validator;
24  import com.liferay.portal.model.Layout;
25  import com.liferay.portal.model.User;
26  import com.liferay.portal.struts.PortletAction;
27  import com.liferay.portal.theme.ThemeDisplay;
28  import com.liferay.portal.util.PortalUtil;
29  import com.liferay.portal.util.PortletKeys;
30  import com.liferay.portal.util.WebKeys;
31  import com.liferay.portlet.PortletPreferencesFactoryUtil;
32  import com.liferay.portlet.invitation.util.InvitationUtil;
33  
34  import java.util.ArrayList;
35  import java.util.HashSet;
36  import java.util.List;
37  import java.util.Set;
38  
39  import javax.mail.internet.InternetAddress;
40  
41  import javax.portlet.ActionRequest;
42  import javax.portlet.ActionResponse;
43  import javax.portlet.PortletConfig;
44  import javax.portlet.PortletPreferences;
45  import javax.portlet.RenderRequest;
46  import javax.portlet.RenderResponse;
47  
48  import org.apache.struts.action.ActionForm;
49  import org.apache.struts.action.ActionForward;
50  import org.apache.struts.action.ActionMapping;
51  
52  /**
53   * <a href="ViewAction.java.html"><b><i>View Source</i></b></a>
54   *
55   * @author Charles May
56   */
57  public class ViewAction extends PortletAction {
58  
59      public void processAction(
60              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
61              ActionRequest actionRequest, ActionResponse actionResponse)
62          throws Exception {
63  
64          List<String> validEmailAddresses = new ArrayList<String>();
65          Set<String> invalidEmailAddresses = new HashSet<String>();
66  
67          int emailMessageMaxRecipients =
68              InvitationUtil.getEmailMessageMaxRecipients();
69  
70          for (int i = 0; i < emailMessageMaxRecipients; i++) {
71              String emailAddress = ParamUtil.getString(
72                  actionRequest, "emailAddress" + i);
73  
74              if (Validator.isEmailAddress(emailAddress)) {
75                  if (!validEmailAddresses.contains(emailAddress)) {
76                      validEmailAddresses.add(emailAddress);
77                  }
78              }
79              else if (Validator.isNotNull(emailAddress)) {
80                  invalidEmailAddresses.add("emailAddress" + i);
81              }
82          }
83  
84          if (validEmailAddresses.isEmpty() && invalidEmailAddresses.isEmpty()) {
85              invalidEmailAddresses.add("emailAddress0");
86          }
87  
88          if (!invalidEmailAddresses.isEmpty()) {
89              SessionErrors.add(
90                  actionRequest, "emailAddresses", invalidEmailAddresses);
91  
92              return;
93          }
94  
95          ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
96              WebKeys.THEME_DISPLAY);
97  
98          User user = themeDisplay.getUser();
99  
100         String fromAddress = user.getEmailAddress();
101         String fromName = user.getFullName();
102 
103         InternetAddress from = new InternetAddress(fromAddress, fromName);
104 
105         Layout layout = themeDisplay.getLayout();
106 
107         String portalURL = PortalUtil.getPortalURL(actionRequest);
108 
109         String layoutFullURL = PortalUtil.getLayoutFullURL(
110             layout, themeDisplay);
111 
112         PortletPreferences preferences =
113             PortletPreferencesFactoryUtil.getPortletSetup(
114                 actionRequest, PortletKeys.INVITATION);
115 
116         String subject = InvitationUtil.getEmailMessageSubject(preferences);
117         String body = InvitationUtil.getEmailMessageBody(preferences);
118 
119         subject = StringUtil.replace(
120             subject,
121             new String[] {
122                 "[$FROM_ADDRESS$]",
123                 "[$FROM_NAME$]",
124                 "[$PAGE_URL$]",
125                 "[$PORTAL_URL$]"
126             },
127             new String[] {
128                 fromAddress,
129                 fromName,
130                 layoutFullURL,
131                 portalURL
132             });
133 
134         body = StringUtil.replace(
135             body,
136             new String[] {
137                 "[$FROM_ADDRESS$]",
138                 "[$FROM_NAME$]",
139                 "[$PAGE_URL$]",
140                 "[$PORTAL_URL$]"
141             },
142             new String[] {
143                 fromAddress,
144                 fromName,
145                 layoutFullURL,
146                 portalURL
147             });
148 
149         for (String emailAddress : validEmailAddresses) {
150             InternetAddress to = new InternetAddress(emailAddress);
151 
152             MailMessage message = new MailMessage(
153                 from, to, subject, body, true);
154 
155             MailServiceUtil.sendEmail(message);
156         }
157 
158         SessionMessages.add(actionRequest, "invitationSent");
159 
160         String redirect = ParamUtil.getString(actionRequest, "redirect");
161 
162         actionResponse.sendRedirect(redirect);
163     }
164 
165     public ActionForward render(
166             ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
167             RenderRequest renderRequest, RenderResponse renderResponse)
168         throws Exception {
169 
170         return mapping.findForward(
171             getForward(renderRequest, "portlet.invitation.view"));
172     }
173 
174 }