package org.theospi.portfolio.matrix.control; import java.util.HashMap; import java.util.Map; import org.sakaiproject.metaobj.shared.mgt.IdManager; import org.sakaiproject.metaobj.shared.model.Id; import org.sakaiproject.metaobj.utils.mvc.intf.Controller; import org.springframework.validation.Errors; import org.springframework.web.servlet.ModelAndView; import org.theospi.portfolio.matrix.MatrixFunctionConstants; import org.theospi.portfolio.matrix.MatrixManager; import org.theospi.portfolio.matrix.model.Cell; import org.theospi.portfolio.security.AudienceSelectionHelper; public class FeedbackHelperController implements Controller { private MatrixManager matrixManager; private IdManager idManager = null; public ModelAndView handleRequest(Object requestModel, Map request, Map session, Map application, Errors errors) { if(session.get("feedbackMatrixCall") != null){ if(session.get("feedbackCellId") != null){ Cell cell = matrixManager.getCell(idManager.getId(session.get("feedbackCellId").toString())); setAudienceSelectionVariables(cell, session); session.remove("feedbackMatrixCall"); session.remove("feedbackCellId"); return new ModelAndView("inviteFeedback"); } } Map model = new HashMap(); //this checks if the user requested feedback. There are two return values: 1. inviteFeedbackReturn (user clicked cancel or just finish) //2. inviteFeedbackNotify (user clicked finish and notify button). Both values return the cell id. inviteFeedbackNotify needs to call another //helper to finish the notify part. if(request.get("inviteFeedbackReturn") != null || request.get("inviteFeedbackNotify") != null){ if(request.get("inviteFeedbackReturn") != null){ model.put("page_id", request.get("inviteFeedbackReturn")); model.put("feedbackReturn", request.get("inviteFeedbackReturn")); String action = (session.get("feedbackAction") != null && session.get( "feedbackAction").toString().equals("save")) ? "save" : "cancel"; model.put("feedbackAction", action); HashMap<String, String> extraEmailAddrs = new HashMap<String, String>(); if(session.get("extraEmailAddrs") != null){ extraEmailAddrs = (HashMap<String, String>) session.get("extraEmailAddrs"); session.remove("extraEmailAddrs"); } String emailMessage = null; if(session.get("emailMessage") != null){ emailMessage = (String) session.get("emailMessage"); session.remove("emailMessage"); } //Send email notification to Author Selected Reviewers: if("save".equals(action)){ Cell cell = matrixManager.getCellFromPage(idManager.getId(request.get("inviteFeedbackReturn").toString())); //by passing null for reviewObjectId or/and function, we are saying to ignore any selected reviewers in //the matrix settings and only send emails to the ones the user selected. To append //matrix selected reviewers, all you have to do is change null to //MatrixFunctionConstants.REVIEW_MATRIX for function and pass the reviewObjectId getMatrixManager().notifyAudience(cell.getWizardPage(), null, true, extraEmailAddrs, emailMessage, cell.getScaffoldingCell().getScaffolding().getTitle(), null); } session.remove("feedbackAction"); return new ModelAndView("viewCell", model); }else if(request.get("inviteFeedbackNotify") != null){ //inviteFeedbackNotify is returned from FeedbackHelperController and is the Id of the wizardPage of the cell. Cell cell = matrixManager.getCellFromPage(idManager.getId(request.get("inviteFeedbackNotify").toString())); setAudienceSelectionVariables(cell, session); return new ModelAndView("notifyAudience"); } } if(session.get("submitForReview") != null){ session.remove("submitForReview"); if(session.get("feedbackCellId") != null){ Cell cell = matrixManager.getCell(idManager.getId(session.get("feedbackCellId").toString())); session.remove("feedbackMatrixCall"); session.remove("feedbackCellId"); Id reviewObjectId = null; if(cell.getScaffoldingCell().isDefaultReviewers()){ reviewObjectId = cell.getScaffoldingCell().getScaffolding().getId(); }else{ reviewObjectId = cell.getScaffoldingCell().getWizardPageDefinition().getId(); } getMatrixManager().notifyAudience(cell.getWizardPage(), reviewObjectId, true, null, null, cell.getScaffoldingCell().getScaffolding().getTitle(), MatrixFunctionConstants.REVIEW_MATRIX); model.put("page_id", cell.getWizardPage().getId()); model.put("feedbackReturn", cell.getWizardPage().getId()); model.put("feedbackAction", "save"); return new ModelAndView("viewCell", model); // return new ModelAndView("viewScaffolding", "scaffolding_id", cell.getScaffoldingCell().getScaffolding().getId().getValue()); } } return null; } protected Map setAudienceSelectionVariables(Cell cell, Map session) { session.put(AudienceSelectionHelper.AUDIENCE_FUNCTION, AudienceSelectionHelper.AUDIENCE_FUNCTION_INVITE_FEEDBACK ); String id = cell.getWizardPage().getId()!=null ? cell.getWizardPage().getId().getValue() : cell.getWizardPage().getNewId().getValue(); session.put(AudienceSelectionHelper.AUDIENCE_QUALIFIER, id); session.put(AudienceSelectionHelper.AUDIENCE_SITE,cell.getWizardPage().getPageDefinition().getSiteId()); session.put(AudienceSelectionHelper.AUDIENCE_CANCEL_TARGET, "inviteFeedbackReturn=" + id); session.put(AudienceSelectionHelper.AUDIENCE_SAVE_NOTIFY_TARGET, "inviteFeedbackNotify=" + id); session.put(AudienceSelectionHelper.AUDIENCE_SAVE_TARGET, "inviteFeedbackReturn=" + id); if(cell.getScaffoldingCell().isDefaultReviewers()){ session.put(AudienceSelectionHelper.MATRIX_REVIEWER_OBJECT_ID, cell.getScaffoldingCell().getScaffolding().getId().getValue()); }else{ session.put(AudienceSelectionHelper.MATRIX_REVIEWER_OBJECT_ID, cell.getScaffoldingCell().getWizardPageDefinition().getId().getValue()); } session.put(AudienceSelectionHelper.MATRIX_REVIEWER_FUNCTION, MatrixFunctionConstants.REVIEW_MATRIX); //cleans up any previous context values session.remove(AudienceSelectionHelper.CONTEXT); session.remove(AudienceSelectionHelper.CONTEXT2); if(cell.getScaffoldingCell().getScaffolding() != null){ session.put(AudienceSelectionHelper.CONTEXT, cell.getScaffoldingCell().getScaffolding().getTitle()); } session.put(AudienceSelectionHelper.CONTEXT2, cell.getScaffoldingCell().getWizardPageDefinition().getTitle()); return session; } public MatrixManager getMatrixManager() { return matrixManager; } public void setMatrixManager(MatrixManager matrixManager) { this.matrixManager = matrixManager; } public IdManager getIdManager() { return idManager; } public void setIdManager(IdManager idManager) { this.idManager = idManager; } }