001/**
002 * Copyright 2005-2016 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 */
016package org.kuali.rice.kew.feedback.web;
017
018import java.util.Date;
019
020import javax.servlet.http.HttpServletRequest;
021import javax.servlet.http.HttpServletResponse;
022
023import org.apache.commons.lang.StringUtils;
024import org.apache.struts.action.ActionForm;
025import org.apache.struts.action.ActionForward;
026import org.apache.struts.action.ActionMapping;
027import org.kuali.rice.core.api.CoreApiServiceLocator;
028import org.kuali.rice.core.api.mail.EmailBody;
029import org.kuali.rice.core.api.mail.EmailContent;
030import org.kuali.rice.core.api.mail.EmailFrom;
031import org.kuali.rice.core.api.mail.EmailSubject;
032import org.kuali.rice.core.api.mail.EmailTo;
033import org.kuali.rice.kew.doctype.bo.DocumentType;
034import org.kuali.rice.kew.mail.service.EmailContentService;
035import org.kuali.rice.kew.service.KEWServiceLocator;
036import org.kuali.rice.kew.web.KewKualiAction;
037import org.kuali.rice.kim.api.identity.Person;
038import org.kuali.rice.krad.UserSession;
039import 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 */
047public 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