package org.theospi.portfolio.presentation.control; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.sakaiproject.metaobj.security.AuthenticationManager; import org.sakaiproject.metaobj.shared.mgt.IdManager; import org.sakaiproject.metaobj.shared.model.Id; import org.sakaiproject.metaobj.utils.mvc.intf.Controller; import org.sakaiproject.metaobj.utils.mvc.intf.ListScrollIndexer; import org.sakaiproject.metaobj.worksite.mgt.WorksiteManager; import org.sakaiproject.tool.cover.ToolManager; import org.springframework.validation.Errors; import org.springframework.web.servlet.ModelAndView; import org.theospi.portfolio.presentation.PresentationManager; import org.theospi.portfolio.presentation.model.Presentation; import org.theospi.portfolio.security.AudienceSelectionHelper; import org.theospi.portfolio.security.AuthorizationFacade; public class NotifyViewersController implements Controller { private ListScrollIndexer listScrollIndexer; private IdManager idManager; private PresentationManager presentationManager; private AuthenticationManager authManager; private AuthorizationFacade authzManager; public ModelAndView handleRequest(Object requestModel, Map request, Map session, Map application, Errors errors) { 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){ Id id = getIdManager().getId(request.get("inviteFeedbackReturn").toString()); Presentation presentation = getPresentationManager().getPresentation(id); return setupPresentationList(model, request, presentation); }else if(request.get("presentationId") != null){ Id id = getIdManager().getId(request.get("presentationId").toString()); Presentation presentation = getPresentationManager().getPresentation(id); setAudienceSelectionVariables(presentation, session); return new ModelAndView("notifyAudience"); } return null; } protected ModelAndView setupPresentationList(Map model, Map request, Presentation presentation) { model.put("isMaintainer", isMaintainer()); List presentations = new ArrayList(getPresentationManager().findSharedPresentations(getAuthManager().getAgent(), ToolManager.getCurrentPlacement().getId(), PresentationManager.PRESENTATION_VIEW_HIDDEN)); model.put("presentations", getListScrollIndexer().indexList(request, model, presentations)); model.put("osp_agent", getAuthManager().getAgent()); return new ModelAndView("success", model); } protected Map setAudienceSelectionVariables(Presentation presentation, Map session) { String id = presentation.getId()!=null ? presentation.getId().getValue() : presentation.getNewId().getValue(); session.put(AudienceSelectionHelper.AUDIENCE_FUNCTION, AudienceSelectionHelper.AUDIENCE_FUNCTION_PORTFOLIO); session.put(AudienceSelectionHelper.AUDIENCE_QUALIFIER, id); 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); session.put(AudienceSelectionHelper.CONTEXT, presentation.getName()); return session; } protected Boolean isMaintainer(){ return Boolean.valueOf(getAuthzManager().isAuthorized(WorksiteManager.WORKSITE_MAINTAIN, getIdManager().getId(ToolManager.getCurrentPlacement().getContext()))); } public ListScrollIndexer getListScrollIndexer() { return listScrollIndexer; } public void setListScrollIndexer(ListScrollIndexer listScrollIndexer) { this.listScrollIndexer = listScrollIndexer; } public IdManager getIdManager() { return idManager; } public void setIdManager(IdManager idManager) { this.idManager = idManager; } public PresentationManager getPresentationManager() { return presentationManager; } public void setPresentationManager(PresentationManager presentationManager) { this.presentationManager = presentationManager; } public AuthenticationManager getAuthManager() { return authManager; } public void setAuthManager(AuthenticationManager authManager) { this.authManager = authManager; } public AuthorizationFacade getAuthzManager() { return authzManager; } public void setAuthzManager(AuthorizationFacade authzManager) { this.authzManager = authzManager; } }