/* * Copyright 2009-2012 by KNURT Systeme (http://www.knurt.de) * * Licensed under the Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://creativecommons.org/licenses/by-nc-sa/3.0/ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.knurt.fam.template.util; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.apache.commons.validator.EmailValidator; import de.knurt.fam.core.aspects.logging.FamLog; import de.knurt.fam.core.aspects.security.auth.SessionAuth; import de.knurt.fam.core.model.config.Department; import de.knurt.fam.core.model.persist.Address; import de.knurt.fam.core.model.persist.ContactDetail; import de.knurt.fam.core.model.persist.User; import de.knurt.fam.core.persistence.dao.FamDaoProxy; import de.knurt.fam.core.persistence.dao.config.KnownDepartmentConfigDao; import de.knurt.fam.core.util.UserFactory; import de.knurt.fam.core.util.mvc.QueryKeys; import de.knurt.fam.core.util.mvc.QueryStringBuilder; import de.knurt.fam.core.util.mvc.RequestInterpreter; import de.knurt.fam.core.util.mvc.validator.InvalidRoleIdException; import de.knurt.fam.core.util.mvc.validator.MandatoryUserFieldValidator; import de.knurt.fam.core.view.html.factory.FamFormFactory; import de.knurt.fam.core.view.html.factory.FamSubmitButtonFactory; import de.knurt.fam.core.view.text.FamDateFormat; import de.knurt.heinzelmann.ui.html.HtmlElement; import de.knurt.heinzelmann.ui.html.HtmlFactory; import de.knurt.heinzelmann.util.query.QueryString; /** * like {@link RequestInterpreter} this interprets requests, but especially * for the contact detail page. * * @author Daniel Oltmanns * @since 0.20100130 (01/30/2009) */ public class ContactDetailsRequestHandler { /** * return the user that is in the request or null, if no user found. * * @param rq * request got * @return the user that is in the request or null, if no user found. */ public static User getUserOfRequest(HttpServletRequest rq) { User result = null; Integer user_id = null; try { user_id = Integer.parseInt(rq.getParameter("user_id")); } catch (NumberFormatException e) { } if (user_id != null) { User example = UserFactory.getInstance().blank(); example.setId(user_id); result = FamDaoProxy.userDao().getOneLike(example); } return result; } /** * return the value with given key in given request, if it is set and not * empty. * * @param rq * request got * @param key * interested in * @return the value with given key in given request, if it is set and not * empty. */ public static String getValue(HttpServletRequest rq, String key) { String result = rq.getParameter(key) == null ? null : rq.getParameter(key).trim(); return result == null || result.isEmpty() ? null : result; } /** * return true, if the request is valid. the request is valid, if the user * wants to change its own contact details or if the user is an * administrator. invalid request is missing param that must be there or * modify another user without to have the right to OR modify another user * without to have the right to. * * @param rq * request got * @return true, if the request is valid. */ public static boolean isValidUpdateRequest(HttpServletRequest rq) { boolean result = userHasRightToViewAndModifyContactDetails(rq); if (result) { result = getUserOfRequest(rq) != null; } if (result) { String newMail = ContactDetailsRequestHandler.getValue(rq, "mail"); if (newMail != null && !EmailValidator.getInstance().isValid(newMail)) { result = false; } } return result; } @Deprecated public static HtmlElement getSummaryTable(User user) { HtmlElement tbody = HtmlFactory.get("tbody"); String tmp = ""; // fname tmp = ""; if (user.getFname() != null && !user.getFname().isEmpty()) { tmp = user.getFname(); } buildSummaryRow(user, tbody, "First name", tmp, "fname"); // INTLANG // sname tmp = ""; if (user.getSname() != null && !user.getSname().isEmpty()) { tmp = user.getSname(); } buildSummaryRow(user, tbody, "Last Name", tmp, "sname"); // INTLANG // address table Address address = user.getMainAddress(); if (address != null) { String tmpTmp = new HtmlAdapterAddress(address).getFullAsText("<br />"); if (!tmpTmp.isEmpty()) { tmp = tmpTmp; } } buildSummaryRow(user, tbody, "Address", tmp, "address"); // INTLANG // email tmp = user.getMail(); buildSummaryRow(user, tbody, "E-Mail", tmp, "mail"); // INTLANG // title tmp = ""; if (user.getTitle() != null && !user.getTitle().isEmpty()) { tmp = user.getTitle(); } buildSummaryRow(user, tbody, "Title", tmp, "title"); // INTLANG // gender tmp = ""; if (user.getMale() != null) { tmp = user.getMale() ? "Male" : "Female"; // INTLANG } buildSummaryRow(user, tbody, "Gender", tmp, "male"); // INTLANG // birthdate tmp = ""; if (user.getBirthdate() != null) { tmp = FamDateFormat.getDateFormatted(user.getBirthdate()); } buildSummaryRow(user, tbody, "Day of birth", tmp, "birthdate"); // INTLANG // company tmp = ""; if (user.getCompany() != null && !user.getCompany().isEmpty()) { tmp = user.getCompany(); } buildSummaryRow(user, tbody, "Institution", tmp, "company"); // INTLANG // department tmp = ""; if (user.getDepartmentLabel() != null && !user.getDepartmentLabel().isEmpty()) { tmp = user.getDepartmentLabel(); } buildSummaryRow(user, tbody, "Department", tmp, "departmentLabel"); // INTLANG // landline tmp = ""; if (user.getPhone1() != null && !user.getPhone1().isEmpty()) { tmp = user.getPhone1(); } buildSummaryRow(user, tbody, "Landline", tmp, "phone1"); // INTLANG // mobile tmp = ""; if (user.getPhone2() != null && !user.getPhone2().isEmpty()) { tmp = user.getPhone2(); } buildSummaryRow(user, tbody, "Mobile", tmp, "phone2"); // INTLANG // free contact details for (ContactDetail cd : user.getContactDetails()) { buildSummaryRow(user, tbody, cd.getTitle(), cd.getDetail(), "cd_" + cd.getId()); } // intendedResearch tmp = ""; if (user.getIntendedResearch() != null && !user.getIntendedResearch().isEmpty()) { tmp = user.getIntendedResearch().replaceAll(System.getProperty("line.separator"), "<br />"); } buildSummaryRow(user, tbody, "Intended Research Projekt", tmp, "intendedResearch"); // INTLANG return tbody; } private static void buildSummaryRow(User user, HtmlElement table, String label, String value, String actionName) { if (value.isEmpty()) { HtmlElement shownValue = new HtmlElement("span"); try { if (MandatoryUserFieldValidator.getInstance().isSufficient(user, actionName)) { shownValue.add("unknown"); // INTLANG } else { shownValue.addClassName("missed").add("please add"); // INTLANG } } catch (InvalidRoleIdException e) { FamLog.exception(e, 201011151041l); shownValue.add("error 201011151041"); } table.add(HtmlFactory.getInstance().get_tr(label, shownValue).add(getActionTd(actionName, 1, user, false))); } else { // user has address HtmlElement shownValue = new HtmlElement("p").add(value); try { if (!MandatoryUserFieldValidator.getInstance().isSufficient(user, actionName)) { shownValue.add(new HtmlElement("br")).add(new HtmlElement("span").addClassName("missed").add("please complete")); // INTLANG } } catch (InvalidRoleIdException e) { FamLog.exception(e, 201011151042l); shownValue.add("error 201011151042"); } table.add(HtmlFactory.get("tr").add(HtmlFactory.get("td").add(label)).add(HtmlFactory.get("td").add(shownValue)).add(getActionTd(actionName, 1, user, true))); } } private static HtmlElement getActionTd(String queryKeyOf, int rowcount, User user, boolean forExisting) { HtmlElement result = HtmlFactory.get("td"); // build delete form if (forExisting && !queryKeyOf.equals("mail")) { QueryString deleteQueryString = QueryStringBuilder.getDeleteQueryString(); deleteQueryString.put(QueryKeys.QUERY_KEY_OF, queryKeyOf); deleteQueryString.put("hasBeenSent", "true"); deleteQueryString.put("user_id", user.getId()); HtmlElement deleteButton = FamSubmitButtonFactory.getDeleteButton(); HtmlElement deleteForm = FamFormFactory.getForm(deleteQueryString, deleteButton); deleteForm.setAttribute("action", TemplateHtml.href("contactdetails")); result.add(deleteForm); } // build edit button (only for javascript version) QueryString editQueryString = QueryStringBuilder.getDeleteQueryString(); editQueryString.put(QueryKeys.QUERY_KEY_OF, queryKeyOf); editQueryString.put("hasBeenSent", "true"); editQueryString.put("user_id", user.getId()); HtmlElement editButton = null; if (forExisting || queryKeyOf.equals("mail")) { editButton = FamSubmitButtonFactory.getEditButton(); } else { editButton = FamSubmitButtonFactory.getAddButton(); } editButton.addClassName("js_edit"); HtmlElement editForm = FamFormFactory.getForm(editQueryString, editButton); editForm.setAttribute("action", TemplateHtml.href("contactdetails")); editForm.setAttribute("onSubmit", "javascript: return false;"); editForm.doNotDisplay(); editForm.addClassName("js_show"); result.add(editForm); // build result td result.setAttribute("rowspan", rowcount); result.addClassName("action"); return result; } /** * return the date from a date input. input must have format ddMMyyyy (or * dd.MM.yyyy etc.). * * @param birthdate * as put in * @return the date from a date input */ public static Date getDate(String birthdate) { Date result = null; if (birthdate != null) { String input = birthdate.trim().replaceAll("[^0-9]", ""); try { DateFormat df = new SimpleDateFormat("ddMMyyyy"); df.setLenient(false); result = df.parse(input); } catch (ParseException ex) { } } return result; } private ContactDetailsRequestHandler() { } public static String getDepartmentLabel(String departmentLabel, String departmentKey) { Department d = null; if (departmentLabel == null || departmentLabel.trim().isEmpty()) { d = KnownDepartmentConfigDao.getInstance().get(departmentKey); } if (d != null) { return d.getTitle(); } else { return departmentLabel; } } public static boolean userHasRightToViewAndModifyContactDetails(HttpServletRequest rq) { User changeuser = getUserOfRequest(rq); if (changeuser != null) { User authuser = SessionAuth.user(rq); return changeuser.getUsername().equals(authuser.getUsername()) || authuser.isAdmin(); } else { return true; } } public static Date correctBirthdate(Date birthdate) { Calendar now = Calendar.getInstance(); // older then 0? if (birthdate != null) { if (birthdate.after(now.getTime())) { birthdate = null; } } if (birthdate != null) { // younger then 200? now.roll(Calendar.YEAR, -200); if (birthdate.before(now.getTime())) { birthdate = null; } } return birthdate; } public static Date correctBirthdate(String birthdate) { return correctBirthdate(getDate(birthdate)); } }