package com.QA.businessLogic; import com.QA.*; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.jblooming.ApplicationException; import org.jblooming.oql.OqlQuery; import org.jblooming.persistence.exceptions.FindByPrimaryKeyException; import org.jblooming.persistence.exceptions.PersistenceException; import org.jblooming.persistence.exceptions.StoreException; import org.jblooming.utilities.JSP; import org.jblooming.waf.constants.Fields; import org.jblooming.waf.settings.I18n; import org.jblooming.waf.view.PageState; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.security.NoSuchAlgorithmException; import java.util.List; public class QAUserAction { PageState pageState = null; QAOperator logged = null; public QAUserAction() throws PersistenceException { pageState = PageState.getCurrentPageState(); logged = (QAOperator) pageState.getLoggedOperator(); } public JSONObject cmdSaveName(JSONObject jsResponse) throws StoreException { if (logged != null) { String newName = pageState.getEntry("fullName").stringValueNullIfEmpty(); if (JSP.ex(newName)) { logged.setName(newName); logged.store(); } jsResponse.element("ok", true); } return jsResponse; } public JSONObject cmdSaveEmail(JSONObject jsResponse) throws StoreException, NoSuchAlgorithmException, ApplicationException { if (logged != null) { String email = pageState.getEntry("email").stringValueNullIfEmpty(); if (JSP.ex(email)) { logged.setUnverifiedEmail(email); logged.store(); logged.sendEnrollEmailMesssage(pageState); jsResponse.element("action", "sent"); } else { logged.setUnverifiedEmail(null); logged.setEmail(null); logged.store(); jsResponse.element("action", "emptied"); } jsResponse.element("ok", true); } return jsResponse; } public JSONObject cmdDeleteUser(JSONObject jsResponse) throws PersistenceException { if (logged != null) { /** * QUESTIONS todo */ //Set<Question> list = logged.getQuestions(); //votes OqlQuery oqlQuery = new OqlQuery("select distinct upv from " + Upvote.class.getName() + " as upv where upv.operator=:own"); oqlQuery.getQuery().setEntity("own", logged); List<Upvote> listVotes = oqlQuery.list(); for (Upvote u : listVotes) { u.remove(); } //comments oqlQuery = new OqlQuery("select distinct comm from " + Comment.class.getName() + " as comm where comm.owner=:own"); oqlQuery.getQuery().setEntity("own", logged); List<Comment> cL = oqlQuery.list(); for (Comment u : cL) { u.remove(); } //remove Answers??? todo /*oqlQuery = new OqlQuery("select distinct prop from " + Answer.class.getName() + " as prop where prop.owner=:own " + (list.size() > 0 ? " and prop.manifesto not in (:createdMans)" : "") + " and prop.manifesto.deleted=false order by prop.manifesto.finalMeeting desc"); if (list.size() > 0) oqlQuery.getQuery().setParameterList("createdMans", list); oqlQuery.getQuery().setEntity("own", logged); List<Answer> pL = oqlQuery.list(); for (Answer u : pL) { u.remove(); } */ for (Question manifesto : logged.getQuestionsNotDeleted(100000)) { manifesto.setDeleted(true); manifesto.store(); } /** * BRICKS */ //remove all my comments & upvotes: done above logged.setEnabled(false); logged.setLoginName("DELETED_" + logged.getId()); logged.setName(I18n.g("QA_DELETED_USER")); logged.setWebsite("DEL_" + logged.getWebsite() + "__DEL__" + logged.getId()); logged.getOptions().put("OLD_LOGINNAME", logged.getLoginName()); logged.setUnverifiedEmail(null); logged.setEmail(null); logged.getCalderon().put("EMAIL_WAS",logged.getEmail()); logged.setGravatarUrl(null); logged.store(); jsResponse.element("ok", true); } return jsResponse; } public JSONObject cmdSubsEmail(JSONObject jsResponse) throws StoreException { if (logged != null) { if (Fields.TRUE.equals(logged.getOption("SEND_NOTIF_BY_EMAIL"))) { logged.getOptions().put("SEND_NOTIF_BY_EMAIL", Fields.FALSE); jsResponse.element("subs", false); } else { logged.getOptions().put("SEND_NOTIF_BY_EMAIL", Fields.TRUE); jsResponse.element("subs", true); } logged.store(); jsResponse.element("ok", true); } return jsResponse; } public JSONObject cmdSubsMailing(JSONObject jsResponse) throws Exception { if (logged != null) { //String apikey = "b2b8fcbd0092cb5612d0e84d48b901f4-us6"; //String listId = "d223f03ad6"; //String mailingServerDomain = "us6.api.mailchimp.com"; String mailingServerDomain = I18n.g("QA_MAILING_DOMAIN"); String apikey = I18n.g("QA_MAILING_APIKEY"); String listId = I18n.g("QA_MAILING_LISTID"); if (Fields.TRUE.equals(logged.getOption("QA_MAILINGLIST"))) { logged.getOptions().put("QA_MAILINGLIST", Fields.FALSE); jsResponse.element("subs", false); if (JSP.ex(logged.getEmail())) { URL url = new URL("http://" + mailingServerDomain + "/1.3/?method=listUnsubscribe&apikey=" + apikey + "&id=" + listId + "&email_address=" +logged.getEmail()+"&output=json"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); // Get the response String resp = ""; BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = rd.readLine()) != null) { resp += line; } rd.close(); } } else { logged.getOptions().put("QA_MAILINGLIST", Fields.TRUE); jsResponse.element("subs", true); if (JSP.ex(logged.getEmail())) { URL url = new URL("http://" + mailingServerDomain + "/1.3/?method=listSubscribe&apikey=" + apikey + "&id=" + listId + "&email_address=" +logged.getEmail()+"&output=json"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); // Get the response String resp = ""; BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = rd.readLine()) != null) { resp += line; } rd.close(); } } logged.store(); jsResponse.element("ok", true); } return jsResponse; } public JSONObject cmdChangePsw(JSONObject jsResponse) throws ApplicationException { String newpsw = pageState.getEntry("newpsw").stringValueNullIfEmpty(); if (JSP.ex(newpsw)) { logged.changePassword(newpsw); } return jsResponse; } public JSONObject cmdSubsUnsubsUser(JSONObject jsResponse) throws FindByPrimaryKeyException, StoreException { if (logged != null) { String userid = pageState.getEntry("USERID").stringValueNullIfEmpty(); if (JSP.ex(userid)) { QAOperator user = QAOperator.load(userid); //unsub if (user.isMySubscriber(logged)) { JSONArray subsA = user.getMySubscribersIds(); subsA.remove(logged.getId()); user.getCalderon().put("subscribed",subsA); user.setKarma(user.getKarma() - QAEvent.QUESTION_ANSWER_UPVOTE.value); //sub } else { JSONArray subsA = user.getMySubscribersIds(); subsA.add(logged.getId()); user.getCalderon().put("subscribed",subsA); JSONArray subsToA = logged.getIAmSubscribedToIds(); subsToA.add(user.getId()); logged.getCalderon().put("subscribingTo",subsToA); user.setKarma(user.getKarma() + QAEvent.QUESTION_ANSWER_UPVOTE.value); } user.store(); logged.store(); } jsResponse.element("ok", true); } return jsResponse; } }