/* * OpenClinica is distributed under the * GNU Lesser General Public License (GNU LGPL). * For details see: http://www.openclinica.org/license * copyright 2003-2005 Akaza Research */ package org.akaza.openclinica.control.login; import org.akaza.openclinica.bean.core.Role; import org.akaza.openclinica.bean.core.Status; import org.akaza.openclinica.bean.core.TermType; import org.akaza.openclinica.bean.login.StudyUserRoleBean; import org.akaza.openclinica.bean.managestudy.StudyBean; import org.akaza.openclinica.control.core.SecureController; import org.akaza.openclinica.control.form.FormProcessor; import org.akaza.openclinica.control.form.Validator; import org.akaza.openclinica.core.EmailEngine; import org.akaza.openclinica.core.form.StringUtil; import org.akaza.openclinica.dao.managestudy.StudyDAO; import org.akaza.openclinica.view.Page; import org.akaza.openclinica.web.InsufficientPermissionException; import java.util.ArrayList; import java.util.HashMap; /** * @author jxu * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */ public class RequestStudyServlet extends SecureController { @Override public void mayProceed() throws InsufficientPermissionException { } @Override public void processRequest() throws Exception { String action = request.getParameter("action"); StudyDAO sdao = new StudyDAO(sm.getDataSource()); ArrayList studies = sdao.findAllByStatus(Status.AVAILABLE); ArrayList roles = Role.toArrayList(); roles.remove(Role.ADMIN); // admin is not a user role, only used for // tomcat request.setAttribute("roles", roles); request.setAttribute("studies", studies); if (StringUtil.isBlank(action)) { request.setAttribute("newRole", new StudyUserRoleBean()); forwardPage(Page.REQUEST_STUDY); } else { if ("confirm".equalsIgnoreCase(action)) { confirm(); } else if ("submit".equalsIgnoreCase(action)) { submit(); } else { logger.info("here..."); forwardPage(Page.REQUEST_STUDY); } } } /** * * @param request * @param response */ private void confirm() throws Exception { Validator v = new Validator(request); v.addValidation("studyId", Validator.IS_AN_INTEGER); v.addValidation("studyRoleId", Validator.IS_VALID_TERM, TermType.ROLE); HashMap errors = v.validate(); FormProcessor fp = new FormProcessor(request); StudyUserRoleBean newRole = new StudyUserRoleBean(); if (fp.getInt("studyRoleId") > 0) { newRole.setRole(Role.get(fp.getInt("studyRoleId"))); } newRole.setStudyId(fp.getInt("studyId")); StudyDAO sdao = new StudyDAO(sm.getDataSource()); StudyBean studyRequested = (StudyBean) sdao.findByPK(newRole.getStudyId()); newRole.setStudyName(studyRequested.getName()); session.setAttribute("newRole", newRole); if (!errors.isEmpty()) { logger.info("after processing form,error is not empty"); request.setAttribute("formMessages", errors); forwardPage(Page.REQUEST_STUDY); } else { logger.info("after processing form,no errors"); forwardPage(Page.REQUEST_STUDY_CONFIRM); } } /** * Gets user basic info and set email to the administrator * * @param request * @param response */ private void submit() throws Exception { StudyUserRoleBean newRole = (StudyUserRoleBean) session.getAttribute("newRole"); logger.info("Sending email..."); StringBuffer email = new StringBuffer(restext.getString("dear_openclinica_administrator") + ", <br>"); email.append(ub.getFirstName() + restext.getString("request_to_acces_the_following_study") + ": <br>"); email.append(resword.getString("user_full_name") + ": " + ub.getFirstName() + " " + ub.getLastName()); email.append("<br>" + resword.getString("username2") + ": " + ub.getName()); email.append("<br>" + resword.getString("email") + ": " + ub.getEmail()); email.append("<br>" + resword.getString("study_requested") + ":" + newRole.getStudyName() + ", id:" + newRole.getStudyId()); email.append("<br>" + resword.getString("user_role_requested") + ": " + newRole.getRole().getDescription()); String emailBody = email.toString(); logger.info("Sending email...begin" + emailBody); sendEmail(EmailEngine.getAdminEmail(), ub.getEmail().trim(), "request study access", emailBody, false); session.removeAttribute("newRole"); forwardPage(Page.MENU); } }