/* * 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.json; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import de.knurt.fam.core.aspects.logging.FamLog; import de.knurt.fam.core.model.config.Facility; 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.FacilityConfigDao; import de.knurt.fam.core.util.UserFactory; import de.knurt.fam.core.util.mail.OutgoingUserMailBox; import de.knurt.heinzelmann.util.query.HttpServletRequestConverter; /** * update a user given as json object. json object has olduser and newuser. * * @link users.js * @author Daniel Oltmanns * @since 1.3.0 (11/14/2010) */ public class UpdateUserFromUsersManagerController extends JSONController { /** {@inheritDoc} */ @Override public JSONObject getJSONObject(HttpServletRequest request, HttpServletResponse response) { JSONObject result = new JSONObject(); boolean succ = false; boolean reopened_account_mail_sent = false; JSONObject updatejson = null; try { updatejson = HttpServletRequestConverter.me().getJSONObject(request); } catch (JSONException e) { FamLog.exception(e, 2010111457l); try { result.put("message", "error reading json 2010111457"); } catch (JSONException e1) { FamLog.exception(e, 2010111455l); } } catch (IOException e) { FamLog.exception(e, 2010111454l); try { result.put("message", "error reading request 2010111454"); } catch (JSONException e1) { FamLog.exception(e1, 2010111453l); } } try { if (updatejson != null) { // ↖ request is right User olduser = UserFactory.me().getUser(updatejson.getJSONObject("olduser")); if (olduser != null && olduser.getUsername() != null && olduser.getId() != null) { User existingUser = FamDaoProxy.userDao().getUserFromUsername(olduser.getUsername()); if (existingUser != null && existingUser.getId().equals(olduser.getId())) { User newuser = UserFactory.me().getUser(updatejson.getJSONObject("newuser")); if (newuser != null) { reopened_account_mail_sent = this.sendMailIfAccountReopend(existingUser, newuser); // ↖ old user exist and has right id // ↓ set new values and update existingUser.setMale(newuser.getMale()); existingUser.setTitle(newuser.getTitle()); existingUser.setFname(newuser.getFname()); existingUser.setIntendedResearch(newuser.getIntendedResearch()); existingUser.setSname(newuser.getSname()); existingUser.setCompany(newuser.getCompany()); existingUser.setBirthdate(newuser.getBirthdate()); existingUser.setAccountExpires(newuser.getAccountExpires()); existingUser.setPhone1(newuser.getPhone1()); existingUser.setPhone2(newuser.getPhone2()); existingUser.setDepartmentLabel(newuser.getDepartmentLabel()); existingUser.setRoleId(newuser.getRoleId()); existingUser.setMail(newuser.getMail()); if (newuser.getMainAddress() != null) { existingUser.setMainAddress(newuser.getMainAddress()); } existingUser.setExcluded(newuser.isExcluded()); existingUser.setMainAddress(newuser.getMainAddress()); if (newuser.getPassword() != null && newuser.getPassword().trim().length() >= 8 && newuser.getPassword().trim().length() <= 20) { existingUser.setCleanPassword(newuser.getPassword()); } // update custom fields existingUser.setCustomFields(newuser.getCustomFields()); // update existing user if (existingUser.update()) { JSONArray responsibilities = updatejson.getJSONObject("newuser").getJSONArray("responsibilities"); List<Facility> facilities = new ArrayList<Facility>(responsibilities.length()); for (int i = 0; i < responsibilities.length(); i++) { Facility f = FacilityConfigDao.facility(responsibilities.getJSONObject(i).getString("value")); facilities.add(f); } if (FamDaoProxy.facilityDao().updateResponsibility(existingUser, facilities)) { // ↓ set and add new contact details List<ContactDetail> cds = UserFactory.me().getContactDetails(updatejson.getJSONObject("newuser")); if (cds != null) { existingUser.updateContactDetails(cds); } succ = true; } } } else { result.put("message", "please report error 201011141103l"); FamLog.error("bad request: " + updatejson.toString(), 201011141103l); } } else { result.put("message", "please report error 201011141104l"); FamLog.error("bad request: " + existingUser + " " + updatejson.toString(), 201011141104l); } } else { result.put("message", "please report error 201011141136l"); FamLog.error("bad request", 201011141136l); } } else { result.put("message", "please report error 201011141105l"); FamLog.error("bad request", 201011141105l); } } catch (JSONException e) { FamLog.exception(e, 2010111456l); try { result.put("message", "please report error 2010111456l"); } catch (JSONException e1) { FamLog.exception(e1, 201011141131l); } } try { result.put("succ", succ); result.put("reopened_account_mail_sent", reopened_account_mail_sent); } catch (JSONException e) { FamLog.exception(e, 2010111452l); } return result; } private boolean sendMailIfAccountReopend(User existingUser, User newuser) { boolean result = false; Date existingAccountExpired = existingUser.getAccountExpires(); if (existingAccountExpired != null && existingAccountExpired.before(new Date()) && newuser.getAccountExpires().after(new Date())) { OutgoingUserMailBox.sendMail_expiredAccountReopened(newuser); result = true; } return result; } /** {@inheritDoc} */ @Override public void onException(IOException ex) { FamLog.exception(ex, 201011141106l); } }