/* * 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.TermType; import org.akaza.openclinica.bean.login.StudyUserRoleBean; import org.akaza.openclinica.bean.login.UserAccountBean; 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.SessionManager; 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 org.akaza.openclinica.web.SQLInitServlet; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; /** * @author jxu * @version CVS: $Id: RequestAccountServlet.java 9771 2007-08-28 15:26:26Z * thickerson $ * * Processes request of 'request a user account' */ public class RequestAccountServlet extends SecureController { // private UserAccountBean ubForm = new UserAccountBean(); @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 = (ArrayList) sdao.findAll(); 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)) { session.setAttribute("newUserBean", new UserAccountBean()); forwardPage(Page.REQUEST_ACCOUNT); } else { if ("confirm".equalsIgnoreCase(action)) { confirmAccount(); } else if ("submit".equalsIgnoreCase(action)) { submitAccount(); } else { logger.info("here..."); forwardPage(Page.REQUEST_ACCOUNT); } } } /** * * @param request * @param response */ private void confirmAccount() throws Exception { Validator v = new Validator(request); v.addValidation("name", Validator.NO_BLANKS); v.addValidation("firstName", Validator.NO_BLANKS); v.addValidation("lastName", Validator.NO_BLANKS); v.addValidation("email", Validator.IS_A_EMAIL); v.addValidation("email2", Validator.CHECK_SAME, "email"); v.addValidation("institutionalAffiliation", Validator.NO_BLANKS); v.addValidation("activeStudyId", Validator.IS_AN_INTEGER); v.addValidation("activeStudyRole", Validator.IS_VALID_TERM, TermType.ROLE); HashMap errors = v.validate(); FormProcessor fp = new FormProcessor(request); UserAccountBean ubForm = getUserBean(); request.setAttribute("otherStudy", fp.getString("otherStudy")); session.setAttribute("newUserBean", ubForm); if (!errors.isEmpty()) { logger.info("after processing form,error is not empty"); request.setAttribute("formMessages", errors); forwardPage(Page.REQUEST_ACCOUNT); } else { logger.info("after processing form,no errors"); sm = new SessionManager(null, ubForm.getName()); // see whether this user already in the DB UserAccountBean ubDB = sm.getUserBean(); if (StringUtil.isBlank(ubDB.getName())) { StudyDAO sdao = new StudyDAO(sm.getDataSource()); StudyBean study = (StudyBean) sdao.findByPK(ubForm.getActiveStudyId()); String studyName = study.getName(); request.setAttribute("studyName", studyName); forwardPage(Page.REQUEST_ACCOUNT_CONFIRM); } else { addPageMessage(respage.getString("your_user_name_used_by_other_try_another")); forwardPage(Page.REQUEST_ACCOUNT); } } } /** * Gets user basic info and set email to the administrator * * @param request * @param response */ private void submitAccount() throws Exception { String otherStudy = request.getParameter("otherStudy"); String studyName = request.getParameter("studyName"); UserAccountBean ubForm = (UserAccountBean) session.getAttribute("newUserBean"); logger.info("Sending email..."); // YW << << StringBuffer email = new StringBuffer("From: " + ubForm.getEmail() + "\n"); email.append("Sent: " + new Date() + "\n"); email.append("To: " + SQLInitServlet.getField("adminEmail") + "\n"); email.append("Subject: Request Account\n\n\n"); email.append("Dear Admin, \n\n"); email.append(ubForm.getFirstName() + " is requesting for an account on the OpenClinica system running at " + SQLInitServlet.getField("sysURL") + ". \n\n"); email.append("His/her information is shown as follows: \n\n"); email.append(resword.getString("name") + ": " + ubForm.getFirstName() + " " + ubForm.getLastName()); email.append("\n" + resword.getString("user_name") + ": " + ubForm.getName()); email.append("\n" + resword.getString("email") + ": " + ubForm.getEmail()); email.append("\n" + resword.getString("institutional_affiliation") + ": " + ubForm.getInstitutionalAffiliation()); email.append("\n" + resword.getString("default_active_study") + ":" + studyName + ", id:" + ubForm.getActiveStudyId()); email.append("\n" + resword.getString("other_study") + otherStudy); email.append("\n" + resword.getString("user_role_requested") + ubForm.getActiveStudyRoleName()); String emailBody = email.toString(); // YW >> logger.info("Sending email...begin" + emailBody); sendEmail(EmailEngine.getAdminEmail(), ubForm.getEmail().trim(), "request account", emailBody, false); session.removeAttribute("newUserBean"); forwardPage(Page.LOGIN); } /** * Constructs userbean from request * * @param request * @return */ private UserAccountBean getUserBean() { FormProcessor fp = new FormProcessor(request); UserAccountBean ubForm = new UserAccountBean(); ubForm.setName(fp.getString("name")); ubForm.setFirstName(fp.getString("firstName")); ubForm.setLastName(fp.getString("lastName")); ubForm.setEmail(fp.getString("email")); ubForm.setInstitutionalAffiliation(fp.getString("institutionalAffiliation")); ubForm.setActiveStudyId(fp.getInt("activeStudyId")); StudyUserRoleBean uRole = new StudyUserRoleBean(); uRole.setStudyId(fp.getInt("activeStudyId")); uRole.setRole(Role.get(fp.getInt("activeStudyRole"))); ubForm.addRole(uRole); return ubForm; } }