/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.invitation.web.internal.portlet.action;
import com.liferay.invitation.web.internal.constants.InvitationPortletKeys;
import com.liferay.invitation.web.internal.util.InvitationUtil;
import com.liferay.mail.kernel.model.MailMessage;
import com.liferay.mail.kernel.service.MailService;
import com.liferay.portal.kernel.model.Company;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.portlet.bridges.mvc.BaseMVCActionCommand;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCActionCommand;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Portal;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.kernel.uuid.PortalUUIDUtil;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import javax.mail.internet.InternetAddress;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletPreferences;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Charles May
* @author Peter Fellwock
*/
@Component(
immediate = true,
property = {
"javax.portlet.name=" + InvitationPortletKeys.INVITATION,
"mvc.command.name=/invitation/view"
},
service = MVCActionCommand.class
)
public class ViewMVCActionCommand extends BaseMVCActionCommand {
@Override
protected void doProcessAction(
ActionRequest actionRequest, ActionResponse actionResponse)
throws Exception {
Set<String> invalidEmailAddresses = new HashSet<>();
Set<String> validEmailAddresses = new HashSet<>();
PortletPreferences portletPreferences = actionRequest.getPreferences();
int emailMessageMaxRecipients =
InvitationUtil.getEmailMessageMaxRecipients(portletPreferences);
for (int i = 0; i < emailMessageMaxRecipients; i++) {
String emailAddress = ParamUtil.getString(
actionRequest, "emailAddress" + i);
if (Validator.isEmailAddress(emailAddress)) {
validEmailAddresses.add(emailAddress);
}
else if (Validator.isNotNull(emailAddress)) {
invalidEmailAddresses.add("emailAddress" + i);
}
}
if (validEmailAddresses.isEmpty() && invalidEmailAddresses.isEmpty()) {
invalidEmailAddresses.add("emailAddress0");
}
if (!invalidEmailAddresses.isEmpty()) {
SessionErrors.add(
actionRequest, "emailAddresses", invalidEmailAddresses);
return;
}
ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
WebKeys.THEME_DISPLAY);
User user = themeDisplay.getUser();
String fromAddress = user.getEmailAddress();
String fromName = user.getFullName();
InternetAddress from = new InternetAddress(fromAddress, fromName);
Layout layout = themeDisplay.getLayout();
String portalURL = _portal.getPortalURL(actionRequest);
String layoutFullURL = _portal.getLayoutFullURL(layout, themeDisplay);
Map<Locale, String> localizedSubjectMap =
InvitationUtil.getEmailMessageSubjectMap(portletPreferences);
Map<Locale, String> localizedBodyMap =
InvitationUtil.getEmailMessageBodyMap(portletPreferences);
Locale locale = user.getLocale();
Locale defaultLocale = LocaleUtil.getSiteDefault();
String subject = localizedSubjectMap.get(locale);
if (Validator.isNull(subject)) {
subject = localizedSubjectMap.get(defaultLocale);
}
String body = localizedBodyMap.get(locale);
if (Validator.isNull(body)) {
body = localizedBodyMap.get(defaultLocale);
}
subject = StringUtil.replace(
subject,
new String[] {
"[$FROM_ADDRESS$]", "[$FROM_NAME$]", "[$PAGE_URL$]",
"[$PORTAL_URL$]"
},
new String[] {fromAddress, fromName, layoutFullURL, portalURL});
body = StringUtil.replace(
body,
new String[] {
"[$FROM_ADDRESS$]", "[$FROM_NAME$]", "[$PAGE_URL$]",
"[$PORTAL_URL$]"
},
new String[] {fromAddress, fromName, layoutFullURL, portalURL});
for (String emailAddress : validEmailAddresses) {
InternetAddress to = new InternetAddress(emailAddress);
MailMessage message = new MailMessage(
from, to, subject, body, true);
Company company = themeDisplay.getCompany();
message.setMessageId(
_portal.getMailId(
company.getMx(), InvitationUtil.MESSAGE_POP_PORTLET_PREFIX,
PortalUUIDUtil.generate()));
_mailService.sendEmail(message);
}
SessionMessages.add(actionRequest, "invitationSent");
String redirect = _portal.escapeRedirect(
ParamUtil.getString(actionRequest, "redirect"));
if (Validator.isNotNull(redirect)) {
actionResponse.sendRedirect(redirect);
}
}
@Reference(unbind = "-")
protected void setMailService(MailService mailService) {
_mailService = mailService;
}
private MailService _mailService;
@Reference
private Portal _portal;
}