/*
* 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.controller;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import de.knurt.fam.connector.FamConnector;
import de.knurt.fam.connector.RedirectTarget;
import de.knurt.fam.core.aspects.logging.FamLog;
import de.knurt.fam.core.aspects.security.auth.FamAuth;
import de.knurt.fam.core.aspects.security.auth.SessionAuth;
import de.knurt.fam.core.config.FamRequestContainer;
import de.knurt.fam.core.model.config.CronjobActionController;
import de.knurt.fam.core.model.config.Facility;
import de.knurt.fam.core.model.config.FileUploadController;
import de.knurt.fam.core.model.persist.ContactDetail;
import de.knurt.fam.core.model.persist.LogbookEntry;
import de.knurt.fam.core.model.persist.User;
import de.knurt.fam.core.model.persist.booking.Booking;
import de.knurt.fam.core.model.persist.booking.Cancelation;
import de.knurt.fam.core.model.persist.booking.TimeBooking;
import de.knurt.fam.core.persistence.cookie.CookieResolver;
import de.knurt.fam.core.persistence.dao.FamDaoProxy;
import de.knurt.fam.core.persistence.dao.config.FacilityConfigDao;
import de.knurt.fam.core.persistence.dao.config.LogbookConfigDao;
import de.knurt.fam.core.util.mvc.LogbookEntryForm;
import de.knurt.fam.core.util.mvc.Login;
import de.knurt.fam.core.util.mvc.QueryKeys;
import de.knurt.fam.core.util.mvc.RedirectResolver;
import de.knurt.fam.core.util.mvc.Registration;
import de.knurt.fam.core.util.mvc.RequestInterpreter;
import de.knurt.fam.core.view.text.FamDateFormat;
import de.knurt.fam.plugin.DefaultPluginResolver;
import de.knurt.fam.template.controller.json.EndSessionPostController;
import de.knurt.fam.template.controller.json.JobSurveyPostController;
import de.knurt.fam.template.controller.json.TransferBookingPostController;
import de.knurt.fam.template.controller.letter.LetterGeneratorEMailLetter;
import de.knurt.fam.template.controller.letter.LetterGeneratorShowLetter;
import de.knurt.fam.template.model.TemplateResource;
import de.knurt.fam.template.model.WritingResultProperties;
import de.knurt.fam.template.util.TemplateConfig;
import de.knurt.heinzelmann.ui.html.HtmlElement;
import de.knurt.heinzelmann.ui.html.HtmlFactory;
/**
* delegate get requests to the right content.
*
* [resource]/[filename]/[suffix]/delegate.fam
*
* @author Daniel Oltmanns
* @since 1.21 (09/28/2010)
*/
@Controller
public final class DelegateResourceController {
private TemplateResource getTemplateResource(String resourceName, String filename, String suffix, HttpServletRequest request, HttpServletResponse response) {
return this.getTemplateResource(resourceName, filename, suffix, request, response, null);
}
private TemplateResource getTemplateResource(String resourceName, String filename, String suffix, HttpServletRequest request, HttpServletResponse response, WritingResultProperties writingResultProperties) {
return TemplateResource.getTemplateResource(response, request, filename, resourceName, suffix, writingResultProperties);
}
private TemplateResource getTemplateResource(String resource, String filename, HttpServletRequest request, HttpServletResponse response) {
return this.getTemplateResource(resource, filename, "html", request, response);
}
private boolean isValidLocation(String templateResourceName) {
return TemplateConfig.me().getContentProperties().getCustomConfigPage(templateResourceName) != null;
}
private ModelAndView afterLoginSuccess(User loggedIn, String alternativeResourceName, String filename, String suffix, HttpServletResponse response, HttpServletRequest request) {
loggedIn.setLastLogin(new Date());
loggedIn.update();
FamLog.info(loggedIn.getUsername() + " logged in", 201011131403l);
String templateResourceNameRequested = CookieResolver.getInstance().getTemplateResourceName(request);
if (templateResourceNameRequested != null && this.isValidLocation(templateResourceNameRequested)) {
return RedirectResolver.redirect(templateResourceNameRequested, CookieResolver.getInstance().getQueryString(request));
} else {
TemplateResource tr = this.getTemplateResource(alternativeResourceName, filename, suffix, request, response);
if (this.isValid(request, tr)) {
return TemplateConfig.me().getResourceController().handleGetRequests(tr, response, request);
} else {
return RedirectResolver.redirect(RedirectTarget.PUBLIC_HOME);
}
}
};
private boolean isValid(HttpServletRequest request, TemplateResource templateResource) {
boolean result = templateResource != null;
if (result) {
String configuredUrl = null;
switch (templateResource.getVisibility()) {
case PUBLIC:
configuredUrl = FamConnector.baseUrlPublic();
break;
case PROTECTED:
configuredUrl = FamConnector.baseUrlProtected();
break;
case ADMIN:
configuredUrl = FamConnector.baseUrlAdmin();
break;
}
boolean proxyIsUsed = FamConnector.getGlobalPropertyAsBoolean("proxy_is_used");
try {
if (configuredUrl == null || (templateResource.isRequestForContent() && (!proxyIsUsed && !request.getRequestURL().toString().startsWith(configuredUrl)) || (proxyIsUsed && !FamConnector.baseUrlPublic().split("\\/")[2].toLowerCase().equals(request.getHeader("x-forwarded-host"))))) {
// if (configuredUrl == null ||
// !request.getRequestURL().toString().startsWith(configuredUrl))
// {
// ↖ no url found or url is not the configured url: neither
// the configured proxy url nor a none-proxy url
FamLog.info(configuredUrl + " - " + request.getRequestURL() + " - " + request.getHeader("x-forwarded-host"), 201112182005l);
result = false;
}
} catch (Exception e) {
FamLog.exception(e, 201112141116l);
result = false;
}
}
return result;
}
@RequestMapping(value = "/transferbooking__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView transferbooking(HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
return new TransferBookingPostController(request).handleRequest(request, response);
}
@RequestMapping(value = "/{resource}__{filename}__{suffix}__delegate.fam", method = RequestMethod.GET)
public final ModelAndView handleGetRequests(@PathVariable("resource") String resource, @PathVariable("filename") String filename, @PathVariable("suffix") String suffix, HttpServletResponse response, HttpServletRequest request) {
if (suffix.equals("html")) {
this.generalInit(response, "text/html; charset=UTF-8");
} else if (suffix.equals("css")) {
this.generalInit(response, "text/css; charset=UTF-8");
} else if (suffix.equals("js")) {
this.generalInit(response, "text/javascript; charset=UTF-8");
}
if (resource.equals("logout")) {
SessionAuth.getInstance(request).kill(request, response);
}
TemplateResource tr = this.getTemplateResource(resource, filename, suffix, request, response);
if (this.isValid(request, tr)) {
return TemplateConfig.me().getResourceController().handleGetRequests(tr, response, request);
} else {
return RedirectResolver.me().getRedirect(RedirectTarget.PUBLIC_HOME);
}
}
@RequestMapping(value = "/fileupload__{filename}__{suffix}__delegate.fam")
public final ModelAndView handleFileUpload(@PathVariable("filename") String filename, @PathVariable("suffix") String suffix, HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
TemplateResource tr = this.getTemplateResource("fileupload", filename, suffix, request, response);
if (tr.hasAuthUser()) {
return new FileUploadController(tr, response).getModelAndView();
} else {
return RedirectResolver.redirect(RedirectTarget.PROTECTED_HOME);
}
}
@RequestMapping(value = "/logbookmakepost__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView handleLogbookEntry(@ModelAttribute("lef") LogbookEntryForm lef, @PathVariable("filename") String filename, HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
String key = request.getParameter(QueryKeys.QUERY_KEY_LOGBOOK);
WritingResultProperties writingResultProperties = new WritingResultProperties();
User user = SessionAuth.user(request);
if (user != null && key != null && LogbookConfigDao.getInstance().keyExists(key)) {
lef.meltTags();
LogbookEntry le = (LogbookEntry) lef;
le.setDate(new Date());
le.setOfUserName(user.getUsername());
le.setLanguage(FamRequestContainer.locale());
try {
le.insert();
writingResultProperties.put("succ", true);
} catch (DataIntegrityViolationException e) {
writingResultProperties.put("succ", false);
}
writingResultProperties.put("logbook", lef);
writingResultProperties.put("key", key);
} else {
writingResultProperties.put("succ", false);
}
TemplateResource tr = this.getTemplateResource("logbookmakepost", filename, "html", request, response, writingResultProperties);
return TemplateConfig.me().getResourceController().handleGetRequests(tr, response, request);
}
@RequestMapping(value = "/cronjob__{filename}__html__delegate.fam", method = RequestMethod.GET)
public final ModelAndView handleGetRequests(@PathVariable("filename") String filename, HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
return new CronjobActionController().handleRequest(request, response);
}
private final void generalInit(HttpServletResponse response, String contentType) {
response.setContentType(contentType);
DefaultPluginResolver.init();
}
@RequestMapping(value = "/systemmodifyapplications__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView handleSystemModifyApplications(@PathVariable("filename") String filename, HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
ModelAndView result = new SystemModifyBookingsAndApplicationsController().handleRequest(request, response);
if (result == null) {
TemplateResource tr = this.getTemplateResource("systemmodifyapplications", "", "html", request, response);
return TemplateConfig.me().getResourceController().handleGetRequests(tr, response, request);
} else {
// must be a redirect
return result;
}
}
@RequestMapping(value = "/registersent__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView handleRegisterSubmit(@ModelAttribute("registration") Registration registration, @PathVariable("filename") String filename, HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
registration.setCustomFields(request);
TemplateResource tr = this.getTemplateResource("registersent", filename, request, response);
if (this.isValid(request, tr)) {
return DefaultPluginResolver.me().getRegisterSubmission().handle(tr, registration, response, request);
} else {
return RedirectResolver.me().getRedirect(RedirectTarget.PUBLIC_HOME);
}
}
@RequestMapping(value = "/changepassword__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView changepasswordSubmit(@PathVariable("filename") String filename, HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
TemplateResource tr = new ChangePasswordController().execute(filename, response, request);
if (tr == null) {
return RedirectResolver.me().home(request, response);
} else {
return TemplateConfig.me().getResourceController().handleGetRequests(tr, response, request);
}
}
@RequestMapping(value = "/adminhome__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView handleLoginAdminSubmit(@ModelAttribute("login") Login login, @PathVariable("filename") String filename, HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
if (login.fail() == false && login.getUser().hasAdminTasks()) {
User user = login.getUser();
SessionAuth.getInstance(request).setUser(user);
if (login.userWantsRememberMeCookie()) {
CookieResolver.getInstance().addCookieRememberMe(response, user);
}
return this.afterLoginSuccess(user, "adminhome", filename, "html", response, request);
} else {
TemplateResource tr = this.getTemplateResource("adminhome", filename, "html", request, response);
return TemplateConfig.me().getResourceController().handleGetRequests(tr, response, request);
}
}
@RequestMapping(value = "/termsofuse__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView handleTermsOfUseAcceptance(@PathVariable("filename") String filename, HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
User auth = SessionAuth.user(request);
User got = RequestInterpreter.getUser(request);
if (auth != null && got != null && auth.getId().intValue() == got.getId().intValue()) {
// ↖ user is auth and allowed to accept it for its own
auth.setAcceptedStatementOfAgreement(true);
auth.update();
}
TemplateResource tr = this.getTemplateResource("corehome", filename, "html", request, response);
return TemplateConfig.me().getResourceController().handleGetRequests(tr, response, request);
}
@RequestMapping(value = "/lettergenerator__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView lettergeneratorShowPDF(@PathVariable("filename") String filename, HttpServletResponse response, HttpServletRequest request) {
ModelAndView result = RedirectResolver.redirect(RedirectTarget.PUBLIC_HOME);
// general letter
String event = request.getParameter("event");
if (event != null && event.equals("show")) {
TemplateResource tr = this.getTemplateResource("jobsmanager", filename, "html", request, response);
result = new LetterGeneratorShowLetter().processGeneralLetter(response, tr);
} else if (event != null && event.equals("showterms")) {
User auth = SessionAuth.user(request);
if(auth != null && auth.isAdmin()) {
result = new LetterGeneratorShowLetter().processTerms(response, RequestInterpreter.getUser(request));
} else {
FamLog.info("possible break attempt (urlrewriting)", 201404121030l);
}
} else {
// ↖ no or unknown event
FamLog.error("no or unknown event: " + event, 201106131307l);
}
return result;
}
@RequestMapping(value = "/lettergenerator__{filename}__json__delegate.fam", method = RequestMethod.POST)
public final ModelAndView lettergeneratorSendMail(@PathVariable("filename") String filename, HttpServletResponse response, HttpServletRequest request) {
String event = request.getParameter("event");
if (event != null && event.equals("email")) {
TemplateResource tr = this.getTemplateResource("jobsmanager", filename, "html", request, response);
return new LetterGeneratorEMailLetter().process(response, tr);
} else {
// ↖ no or unknown event
FamLog.error("no or unknown event: " + event, 201106141017l);
return RedirectResolver.redirect(RedirectTarget.PUBLIC_HOME);
}
}
@RequestMapping(value = "/jobsmanager__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView workOnAJob(@PathVariable("filename") String filename, HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
boolean doChanges = false;
User auth = SessionAuth.user(request);
Booking booking = RequestInterpreter.getBooking(request);
if (auth != null && auth.hasAdminTasks() && booking != null && !booking.isProcessed() && (RequestInterpreter.hasSentFlag(request) || RequestInterpreter.hasDeleteFlag(request))) {
doChanges = auth.hasResponsibility4Facility(booking.getFacility());
}
if (doChanges) {
// ↖ queue booking has been started or stopped
if (RequestInterpreter.hasSentFlag(request)) {
if (request.getParameter("action") != null && request.getParameter("action").equals("invoice")) {
booking.invoice();
} else {
booking.processSession();
}
} else if (RequestInterpreter.hasDeleteFlag(request)) {
// ↖ bookinghas been canceled
Cancelation c = new Cancelation(auth, Cancelation.REASON_NO_REASON);
booking.cancel(c);
}
TemplateResource tr = this.getTemplateResource("jobsmanager", filename, "html", request, response);
return TemplateConfig.me().getResourceController().handleGetRequests(tr, response, request);
} else {
response.setStatus(406); // Not Acceptable
return null;
}
}
@RequestMapping(value = "/corehome__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView handleLoginCoreSubmit(@ModelAttribute("login") Login login, @PathVariable("filename") String filename, HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
if (login.fail() == false) {
User user = login.getUser();
SessionAuth.getInstance(request).setUser(user);
if (login.userWantsRememberMeCookie()) {
CookieResolver.getInstance().addCookieRememberMe(response, user);
}
return this.afterLoginSuccess(user, "corehome", filename, "html", response, request);
} else {
TemplateResource tr = this.getTemplateResource("corehome", filename, "html", request, response);
return TemplateConfig.me().getResourceController().handleGetRequests(tr, response, request);
}
}
@RequestMapping(value = "/mybookings__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView handleMybookingsSubmit(@PathVariable("filename") String filename, HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
if (request.getParameter(QueryKeys.QUERY_KEY_DELETE) != null && request.getParameter(QueryKeys.QUERY_KEY_BOOKING) != null) {
User user = SessionAuth.user(request);
if (user != null) {
try {
Integer id2cancel = Integer.parseInt(request.getParameter(QueryKeys.QUERY_KEY_BOOKING));
TimeBooking example = TimeBooking.getEmptyExampleBooking();
example.setId(id2cancel);
Booking shallBeCanceled = FamDaoProxy.bookingDao().getOneLike(example);
if (shallBeCanceled != null && user.getUsername().equals(shallBeCanceled.getUsername())) {
shallBeCanceled.cancel(new Cancelation(user, Cancelation.REASON_FREE_BY_USER));
}
} catch (Exception e) {
}
}
}
TemplateResource tr = this.getTemplateResource("mybookings", filename, "html", request, response);
return TemplateConfig.me().getResourceController().handleGetRequests(tr, response, request);
}
@RequestMapping(value = "/jobsurvey__{filename}__html__delegate.fam", method = RequestMethod.GET)
public final ModelAndView handleGetJobsurvey(HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
User user = SessionAuth.user(request);
if (user == null) {
return RedirectResolver.redirect(RedirectTarget.PUBLIC_HOME);
} else {
OutputStream os = null;
try {
os = response.getOutputStream();
JobSurveyView jsv = JobSurveyViewFactory.getJobSurveyView(user, request, response);
if (jsv.isValidRequest()) {
IOUtils.write(jsv.getView(), os);
response.flushBuffer();
} else {
FamLog.error("no jobsurvey found!;" + request.getQueryString() + ";" + user.getUsername(), 201203281229l);
IOUtils.write("please report error 201203281229-" + FamDateFormat.getDateAndTimeShort(), os);
}
} catch (IOException e) {
FamLog.exception(e, 201202160927l);
} finally {
IOUtils.closeQuietly(os);
}
return null;
}
}
@RequestMapping(value = "/endsession__{filename}__json__delegate.fam", method = RequestMethod.POST)
public final ModelAndView handlePostEndSession(HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
return new EndSessionPostController(request).handleRequest(request, response);
}
@RequestMapping(value = "/jobsurvey__{filename}__json__delegate.fam", method = RequestMethod.POST)
public final ModelAndView handlePostJobsurvey(HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
return new JobSurveyPostController(request).handleRequest(request, response);
}
@RequestMapping(value = "/jobsurveypreview__{filename}__html__delegate.fam")
public final ModelAndView handleJobsurveyPreview(HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
User user = SessionAuth.user(request);
if (user == null) {
return RedirectResolver.redirect(RedirectTarget.PUBLIC_HOME);
} else {
PrintWriter pw = null;
try {
pw = response.getWriter();
JobSurveyView jsv = new JobSurveyViewPreviewHtml(user, request, response);
if (jsv.isValidRequest()) {
IOUtils.write(jsv.getView(), pw);
} else {
return RedirectResolver.redirect(RedirectTarget.PUBLIC_HOME);
}
} catch (IOException e) {
FamLog.exception(e, 201202170829l);
} finally {
IOUtils.closeQuietly(pw);
}
return null;
}
}
@RequestMapping(value = "/editsoa__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView handleEditsoaPosts(HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
ModelAndView result = new EditSoaController().handleRequest(request, response);
if (result == null) {
TemplateResource tr = this.getTemplateResource("editsoa", "", "html", request, response);
return TemplateConfig.me().getResourceController().handleGetRequests(tr, response, request);
} else {
// must be a redirect
return result;
}
}
@RequestMapping(value = "/facilityemergency__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView setSuddenFailure(HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
TemplateResource templateResource = this.getTemplateResource("facilityemergency", "", "html", request, response);
if (templateResource.hasAuthUser()) {
templateResource.putWritingResultProperty("succ", new FacilityEmergencyController().submit(templateResource));
}
return TemplateConfig.me().getResourceController().handleGetRequests(templateResource, response, request);
}
@RequestMapping(value = "/systemfacilityavailability__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView setFacilityAvailability(HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
TemplateResource templateResource = this.getTemplateResource("systemfacilityavailability", "", "html", request, response);
if (templateResource.hasAuthUser()) {
templateResource.putWritingResultProperty("succ", new FacilityAvailabilityController().submit(templateResource));
}
return TemplateConfig.me().getResourceController().handleGetRequests(templateResource, response, request);
}
@RequestMapping(value = "/editfacilityavailability__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView editFacilityAvailability(HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
TemplateResource templateResource = this.getTemplateResource("editfacilityavailability", "", "html", request, response);
if (templateResource.hasAuthUser()) {
templateResource.putWritingResultProperty("succ", new EditFacilityAvailabilityController().submit(templateResource));
}
return TemplateConfig.me().getResourceController().handleGetRequests(templateResource, response, request);
}
@RequestMapping(value = "/contactdetails__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView deleteContactDetail(HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
User authuser = SessionAuth.user(request);
TemplateResource tr = this.getTemplateResource("contactdetails", "", "html", request, response);
if (authuser != null && RequestInterpreter.hasDeleteFlag(request)) {
String of = RequestInterpreter.getOf(request);
if (of.equals("company")) {
authuser.setCompany(null);
} else if (of.equals("address")) {
authuser.setMainAddress(null);
} else if (of.equals("phone2")) {
authuser.setPhone2(null);
} else if (of.equals("phone1")) {
authuser.setPhone1(null);
} else if (of.equals("fname")) {
authuser.setFname(null);
} else if (of.equals("intendedResearch")) {
authuser.setIntendedResearch(null);
} else if (of.equals("sname")) {
authuser.setSname(null);
} else if (of.equals("male")) {
authuser.setMale(null);
} else if (of.equals("title")) {
authuser.setTitle(null);
} else if (of.equals("birthdate")) {
authuser.setBirthdateNull();
} else if (of.equals("departmentLabel")) {
authuser.setDepartmentLabel(null);
} else if (of.startsWith("cd_")) {
int cd_id = -1;
try {
cd_id = Integer.parseInt(of.substring(3));
} catch (NumberFormatException e) {
} // do nothing
for (ContactDetail cd : authuser.getContactDetails()) {
if (cd.getId() == cd_id) {
cd.delete(); // this must be user's contact
break;
}
}
}
authuser.update();
}
return TemplateConfig.me().getResourceController().handleGetRequests(tr, response, request);
}
@RequestMapping(value = "/{resource}__{filename}__json__delegate.fam")
public final ModelAndView handleJSONRequest(@PathVariable("resource") String resource, HttpServletResponse response, HttpServletRequest request) {
return TemplateConfig.me().getResourceController().handleJSONRequest(resource, response, request);
}
@RequestMapping(value = "/{resource}__{filename}__png__delegate.fam", method = RequestMethod.GET)
public final ModelAndView handleImageRequest(@PathVariable("resource") String resource, HttpServletResponse response, HttpServletRequest request) {
return TemplateConfig.me().getResourceController().handleImageRequest(resource, response, request);
}
@RequestMapping(value = "/book__{filename}__html__delegate.fam", method = RequestMethod.GET)
public final ModelAndView redirectToBook2(HttpServletResponse response, HttpServletRequest request) {
return RedirectResolver.redirect(RedirectTarget.BOOK_FACILITY);
}
/**
* answer a file tree of facilities compatible with jquery file tree plugin. if a user is given, all facilities that are not bookable by the user or
* that has no bookable child is not part of the tree. if no user is given, show entire tree.
*
* XXX must be post because of jquery file tree plugin - but get would be more restful
*
* @param response
* @param request
* @return
*/
@RequestMapping(value = "/jqueryfacilitytree__{filename}__html__delegate.fam", method = RequestMethod.POST)
public final ModelAndView handleJSjqueryfacilitytree(HttpServletResponse response, HttpServletRequest request) {
this.generalInit(response, "text/html; charset=UTF-8");
User user = SessionAuth.user(request);
PrintWriter pw = null;
try {
pw = response.getWriter();
HtmlElement result = HtmlFactory.get("ul").cla("jqueryFileTree").style("display", "none");
List<Facility> rootFacilities = new ArrayList<Facility>();
String rawKeys = request.getParameter("dir");
if (rawKeys != null) {
rawKeys = rawKeys.replaceAll("/", "");
for (String key : rawKeys.split(", ")) {
rootFacilities.add(FacilityConfigDao.facility(key));
}
}
for (Facility rootFacility : rootFacilities) {
if (rootFacility != null) {
List<Facility> facilities = FacilityConfigDao.getInstance().getChildrenFacilities(rootFacility);
for (Facility facility : facilities) {
if (user != null && !user.hasRight(FamAuth.BOOKING, facility)) {
continue;
}
HtmlElement li = HtmlFactory.get("li");
li.cla(facility.isBookable() ? "facility" : "directory collapsed");
HtmlElement a = HtmlFactory.get("a").att("rel", facility.getKey() + "/").att("href", "#").add(facility.getLabel());
li.add(a);
result.add(li);
}
}
}
IOUtils.write(result.toString(), pw);
} catch (IOException ex) {
FamLog.exception(ex, 201204191245l);
} finally {
IOUtils.closeQuietly(pw);
}
return null;
}
}