001 /** 002 * Copyright 2005-2014 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.kew.feedback.web; 017 018 import java.util.Date; 019 020 import javax.servlet.http.HttpServletRequest; 021 import javax.servlet.http.HttpServletResponse; 022 023 import org.apache.commons.lang.StringUtils; 024 import org.apache.struts.action.ActionForm; 025 import org.apache.struts.action.ActionForward; 026 import org.apache.struts.action.ActionMapping; 027 import org.kuali.rice.core.api.CoreApiServiceLocator; 028 import org.kuali.rice.core.api.mail.EmailBody; 029 import org.kuali.rice.core.api.mail.EmailContent; 030 import org.kuali.rice.core.api.mail.EmailFrom; 031 import org.kuali.rice.core.api.mail.EmailSubject; 032 import org.kuali.rice.core.api.mail.EmailTo; 033 import org.kuali.rice.kew.doctype.bo.DocumentType; 034 import org.kuali.rice.kew.mail.service.EmailContentService; 035 import org.kuali.rice.kew.service.KEWServiceLocator; 036 import org.kuali.rice.kew.web.KewKualiAction; 037 import org.kuali.rice.kim.api.identity.Person; 038 import org.kuali.rice.krad.UserSession; 039 import org.kuali.rice.krad.util.GlobalVariables; 040 041 042 /** 043 * Struts action which handles the Feedback screen. 044 * 045 * @author Kuali Rice Team (rice.collab@kuali.org) 046 */ 047 public class FeedbackAction extends KewKualiAction { 048 049 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(FeedbackAction.class); 050 051 @Override 052 public ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 053 054 // load fixed properties in Form elements 055 FeedbackForm feedbackForm = (FeedbackForm) form; 056 feedbackForm.setTimeDate(new Date().toString()); 057 058 // load User properties in Form elements 059 feedbackForm.setComments(""); 060 061 // load application properties from Request in Form elements 062 String documentType = request.getParameter("docType"); 063 if (documentType == null) { 064 documentType = ""; 065 } 066 feedbackForm.setDocumentType(documentType); 067 068 String pageUrl = request.getParameter("pageUrl"); 069 if (pageUrl == null) { 070 pageUrl = ""; 071 } 072 feedbackForm.setPageUrl(pageUrl); 073 074 String documentId = request.getParameter("documentId"); 075 if (documentId == null) { 076 documentId = ""; 077 } 078 feedbackForm.setDocumentId(documentId); 079 080 String exception = request.getParameter("exception"); 081 if (exception == null) { 082 feedbackForm.setException(""); 083 feedbackForm.setCategory(""); 084 } else { 085 feedbackForm.setCategory("problem"); 086 feedbackForm.setException(exception); 087 } 088 089 UserSession uSession = getUserSession(); 090 091 Person workflowUser = uSession.getPerson(); 092 if (workflowUser != null) { 093 feedbackForm.setNetworkId(workflowUser.getPrincipalName()); 094 feedbackForm.setUserEmail(workflowUser.getEmailAddress()); 095 String name = workflowUser.getName().trim(); 096 feedbackForm.setUserName(name); 097 String firstName = name.substring(0, name.indexOf(" ")); 098 String lastName = name.substring(name.lastIndexOf(" ") + 1, name.length()); 099 feedbackForm.setFirstName(firstName); 100 feedbackForm.setLastName(lastName); 101 } else { 102 feedbackForm.setNetworkId(""); 103 feedbackForm.setUserEmail(""); 104 feedbackForm.setUserName(""); 105 feedbackForm.setFirstName(""); 106 feedbackForm.setLastName(""); 107 } 108 109 return mapping.findForward("start"); 110 } 111 112 public ActionForward sendFeedback(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 113 FeedbackForm feedbackForm = (FeedbackForm)form; 114 EmailContentService emailContentService = KEWServiceLocator.getEmailContentService(); 115 String fromAddress = determineFromAddress(emailContentService, feedbackForm); 116 String toAddress = emailContentService.getApplicationEmailAddress(); 117 EmailContent content = emailContentService.generateFeedback(feedbackForm); 118 CoreApiServiceLocator.getMailer().sendEmail(new EmailFrom(fromAddress), new EmailTo(toAddress), new EmailSubject(content.getSubject()), new EmailBody(content.getBody()), content.isHtml()); 119 return mapping.findForward("sent"); 120 } 121 122 private String determineFromAddress(EmailContentService emailContentService, FeedbackForm form) { 123 DocumentType docType = null; 124 if (!StringUtils.isEmpty(form.getDocumentType())) { 125 docType = KEWServiceLocator.getDocumentTypeService().findByName(form.getDocumentType()); 126 if (docType == null) { 127 LOG.warn("Couldn't locate document type for the given name to determine feedback from address! " + form.getDocumentType()); 128 } 129 } 130 // if we pass null to this method it will return us the application email address 131 return emailContentService.getDocumentTypeEmailAddress(docType); 132 } 133 134 private static UserSession getUserSession() { 135 return GlobalVariables.getUserSession(); 136 } 137 } 138