package edu.harvard.iq.dataverse; import edu.harvard.iq.dataverse.settings.SettingsServiceBean; import static edu.harvard.iq.dataverse.util.JsfHelper.JH; import edu.harvard.iq.dataverse.util.MailUtil; import java.util.Random; import java.util.logging.Logger; import javax.ejb.EJB; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import javax.faces.validator.ValidatorException; import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named; import javax.mail.internet.InternetAddress; import org.apache.commons.validator.routines.EmailValidator; /** * * @author Naomi */ @ViewScoped @Named public class SendFeedbackDialog implements java.io.Serializable { private String userEmail = ""; private String userMessage = ""; private String messageSubject = ""; private String messageTo = ""; private String defaultRecipientEmail = "support@thedata.org"; Long op1, op2, userSum; // Either the dataverse or the dataset that the message is pertaining to // If there is no recipient, this is a general feeback message private DvObject recipient; private Logger logger = Logger.getLogger(SendFeedbackDialog.class.getCanonicalName()); @EJB MailServiceBean mailService; @EJB SettingsServiceBean settingsService; @EJB DataverseServiceBean dataverseService; @Inject DataverseSession dataverseSession; public void setUserEmail (String uEmail) { userEmail = uEmail; } public String getUserEmail() { return userEmail; } public void initUserInput(ActionEvent ae) { System.out.println("initUserInput()"); userEmail=""; userMessage=""; messageTo=""; messageSubject=""; Random random = new Random(); op1 = new Long(random.nextInt(10)); op2 = new Long(random.nextInt(10)); userSum=null; } public Long getOp1() { return op1; } public void setOp1(Long op1) { this.op1 = op1; } public Long getOp2() { return op2; } public void setOp2(Long op2) { this.op2 = op2; } public Long getUserSum() { return userSum; } public void setUserSum(Long userSum) { this.userSum = userSum; } public String getMessageTo() { if (recipient == null) { return JH.localize("contact.support"); } else if (recipient.isInstanceofDataverse()) { return ((Dataverse)recipient).getDisplayName() +" "+ JH.localize("contact.contact"); } else return JH.localize("dataset") + " " + JH.localize("contact.contact"); } public String getFormHeader() { if (recipient == null) { return JH.localize("contact.header"); } else if (recipient.isInstanceofDataverse()) { return JH.localize("contact.dataverse.header"); } else return JH.localize("contact.dataset.header"); } public void setUserMessage (String mess) { System.out.println("setUserMessage: "+mess); userMessage = mess; } public String getUserMessage() { return userMessage; } public void setMessageSubject(String messageSubject) { this.messageSubject = messageSubject; } public String getMessageSubject() { return messageSubject; } public boolean isLoggedIn() { return dataverseSession.getUser().isAuthenticated(); } public String loggedInUserEmail() { return dataverseSession.getUser().getDisplayInfo().getEmailAddress(); } public DvObject getRecipient() { return recipient; } public void setRecipient(DvObject recipient) { this.recipient = recipient; } private String getDataverseEmail(Dataverse dataverse) { String email = ""; for (DataverseContact dc : dataverse.getDataverseContacts()) { if (!email.isEmpty()) { email += ","; } email += dc.getContactEmail(); } return email; } public void validateUserSum(FacesContext context, UIComponent component, Object value) throws ValidatorException { if (op1 + op2 !=(Long)value) { FacesMessage msg = new FacesMessage("Sum is incorrect, please try again."); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(msg); } } public void validateUserEmail(FacesContext context, UIComponent component, Object value) throws ValidatorException { if (!EmailValidator.getInstance().isValid((String)value)) { FacesMessage msg = new FacesMessage("Invalid email."); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(msg); } } public String sendMessage() { String email = ""; if (recipient!=null) { if (recipient.isInstanceofDataverse() ) { email = getDataverseEmail((Dataverse)recipient); } else if (recipient.isInstanceofDataset()) { Dataset d = (Dataset)recipient; for (DatasetField df : d.getLatestVersion().getFlatDatasetFields()){ if (df.getDatasetFieldType().getName().equals(DatasetFieldConstant.datasetContactEmail)) { if (!email.isEmpty()) { email+=","; } email+=df.getValue(); } } if (email.isEmpty()) { email = getDataverseEmail(d.getOwner()); } } } if (email.isEmpty()) { String systemEmail = settingsService.getValueForKey(SettingsServiceBean.Key.SystemEmail); InternetAddress systemAddress = MailUtil.parseSystemAddress(systemEmail); if (systemAddress != null){ email = systemAddress.toString(); } else{ email = defaultRecipientEmail; } } if (isLoggedIn() && userMessage!=null) { mailService.sendMail(loggedInUserEmail(), email, getMessageSubject(), userMessage); userMessage = ""; return null; } else { if (userEmail != null && userMessage != null) { mailService.sendMail(userEmail, email, getMessageSubject(), userMessage); userMessage = ""; return null; } else { userMessage = ""; return null; } } } }