/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/sam/tags/samigo-2.8.3/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/EditAssessmentListener.java $ * $Id: EditAssessmentListener.java 72846 2010-01-28 00:33:22Z ktsao@stanford.edu $ *********************************************************************************** * * Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.osedu.org/licenses/ECL-2.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 org.sakaiproject.tool.assessment.ui.listener.author; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.faces.event.AbortProcessingException; import javax.faces.event.ActionEvent; import javax.faces.event.ActionListener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.component.cover.ServerConfigurationService; import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentBaseIfc; import org.sakaiproject.tool.assessment.facade.AgentFacade; import org.sakaiproject.tool.assessment.facade.AssessmentFacade; import org.sakaiproject.tool.assessment.facade.PublishedAssessmentFacade; import org.sakaiproject.tool.assessment.services.GradingService; import org.sakaiproject.tool.assessment.services.assessment.AssessmentService; import org.sakaiproject.tool.assessment.services.assessment.PublishedAssessmentService; import org.sakaiproject.tool.assessment.ui.bean.author.AssessmentBean; import org.sakaiproject.tool.assessment.ui.bean.author.AssessmentSettingsBean; import org.sakaiproject.tool.assessment.ui.bean.author.AuthorBean; import org.sakaiproject.tool.assessment.ui.bean.author.ItemAuthorBean; import org.sakaiproject.tool.assessment.ui.bean.author.PublishedAssessmentSettingsBean; import org.sakaiproject.tool.assessment.ui.bean.authz.AuthorizationBean; import org.sakaiproject.tool.assessment.ui.listener.util.ContextUtil; import org.sakaiproject.tool.cover.ToolManager; /** * <p>Title: Samigo</p>2 * <p>Description: Sakai Assessment Manager</p> * @author Ed Smiley * @version $Id: EditAssessmentListener.java 72846 2010-01-28 00:33:22Z ktsao@stanford.edu $ */ public class EditAssessmentListener implements ActionListener { private static Log log = LogFactory.getLog(EditAssessmentListener.class); public EditAssessmentListener() { } public void processAction(ActionEvent ae) throws AbortProcessingException { // #1a - come from authorIndex.jsp, load the assessment // goto editAssessment.jsp if successful AuthorBean author = (AuthorBean) ContextUtil.lookupBean("author"); String editType = ContextUtil.lookupParam("editType"); if (editType != null) { if ("pendingAssessment".equals(editType)) { setPropertiesForAssessment(author); } else if ("publishedAssessment".equals(editType)) { setPropertiesForPublishedAssessment(author); } else { log.debug("editType is not set - get from authorBean"); if (author.getIsEditPendingAssessmentFlow()) { setPropertiesForAssessment(author); } else { setPropertiesForPublishedAssessment(author); } } } else { log.debug("editType is null - get from authorBean"); if (author.getIsEditPendingAssessmentFlow()) { setPropertiesForAssessment(author); } else { setPropertiesForPublishedAssessment(author); } } } public void setPropertiesForAssessment(AuthorBean author) { FacesContext context = FacesContext.getCurrentInstance(); AssessmentBean assessmentBean = (AssessmentBean) ContextUtil.lookupBean( "assessmentBean"); ItemAuthorBean itemauthorBean = (ItemAuthorBean) ContextUtil.lookupBean( "itemauthor"); AssessmentService assessmentService = new AssessmentService(); AssessmentSettingsBean assessmentSettings = (AssessmentSettingsBean) ContextUtil .lookupBean("assessmentSettings"); String assessmentId = ContextUtil.lookupParam("assessmentId"); if (assessmentId == null || assessmentId.equals("")) { assessmentId = assessmentSettings.getAssessmentId().toString(); } AssessmentFacade assessment = assessmentService .getAssessment(assessmentId); // testing /* Set sectionSet = assessment.getSectionSet(); Iterator iter_s = sectionSet.iterator(); while (iter_s.hasNext()) { SectionDataIfc s = (SectionDataIfc) iter_s.next(); Iterator iter = s.getItemSet().iterator(); while (iter.hasNext()) { ItemDataIfc item = (ItemDataIfc) iter.next(); List attachSet = item.getItemAttachmentList(); Iterator iter_a = attachSet.iterator(); while (iter_a.hasNext()) { ItemAttachmentIfc a = (ItemAttachmentIfc) iter_a.next(); } } } */ // #1b - permission checking before proceeding - daisyf author.setOutcome("editAssessment"); if (!passAuthz(context, assessment.getCreatedBy())) { author.setOutcome("author"); return; } // pass authz, move on author.setIsEditPendingAssessmentFlow(true); assessmentSettings.setAssessment(assessment); assessmentBean.setAssessment(assessment); itemauthorBean.setTarget(ItemAuthorBean.FROM_ASSESSMENT); // save to // assessment // initalize the itemtype itemauthorBean.setItemType(""); itemauthorBean.setItemTypeString(""); assessmentBean.setHasGradingData(false); showPrintLink(assessmentBean); } public void setPropertiesForPublishedAssessment(AuthorBean author) { FacesContext context = FacesContext.getCurrentInstance(); AssessmentBean assessmentBean = (AssessmentBean) ContextUtil.lookupBean( "assessmentBean"); ItemAuthorBean itemauthorBean = (ItemAuthorBean) ContextUtil.lookupBean("itemauthor"); PublishedAssessmentService publishedAssessmentService = new PublishedAssessmentService(); PublishedAssessmentSettingsBean publishedAssessmentSettings = (PublishedAssessmentSettingsBean) ContextUtil .lookupBean("publishedSettings"); String publishedAssessmentId = assessmentBean.getAssessmentId(); PublishedAssessmentFacade publishedAssessment = publishedAssessmentService.getPublishedAssessment(publishedAssessmentId); // #1b - permission checking before proceeding - daisyf author.setOutcome("editAssessment"); if (!passAuthz(context, publishedAssessment.getCreatedBy())) { author.setOutcome("author"); return; } GradingService gradingService = new GradingService(); boolean hasGradingData = gradingService.getHasGradingData(Long.valueOf(publishedAssessmentId)); if (author.getEditPubAssessmentRestricted() && hasGradingData) { author.setOutcome("editPublishedAssessmentError"); return; } assessmentBean.setHasGradingData(hasGradingData); // pass authz, move on author.setIsEditPendingAssessmentFlow(false); // Retract the published assessment for edit by updating the retract date to now //AssessmentAccessControlIfc publishedAccessControl = publishedAssessmentService.loadPublishedAccessControl(Long.valueOf(publishedAssessmentId)); //publishedAccessControl.setRetractDate(new Date()); //publishedAssessmentService.saveOrUpdatePublishedAccessControl(publishedAccessControl); //Update the retract date in the assessment bean //publishedAssessment.setAssessmentAccessControl(publishedAccessControl); publishedAssessment.setStatus(AssessmentBaseIfc.RETRACT_FOR_EDIT_STATUS); publishedAssessmentService.saveAssessment(publishedAssessment); publishedAssessmentSettings.setAssessment(publishedAssessment); assessmentBean.setAssessment(publishedAssessment); itemauthorBean.setTarget(ItemAuthorBean.FROM_ASSESSMENT); // save to assessment // initalize the itemtype itemauthorBean.setItemType(""); itemauthorBean.setItemTypeString(""); showPrintLink(assessmentBean); } public boolean passAuthz(FacesContext context, String ownerId){ AuthorizationBean authzBean = (AuthorizationBean) ContextUtil.lookupBean("authorization"); boolean hasPrivilege_any = authzBean.getEditAnyAssessment(); boolean hasPrivilege_own0 = authzBean.getEditOwnAssessment(); boolean hasPrivilege_own = (hasPrivilege_own0 && isOwner(ownerId)); boolean hasPrivilege = (hasPrivilege_any || hasPrivilege_own); if (!hasPrivilege){ String err=(String)ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.AuthorMessages", "denied_edit_assessment_error"); context.addMessage(null,new FacesMessage(err)); } return hasPrivilege; } public boolean isOwner(String ownerId){ boolean isOwner = false; String agentId = AgentFacade.getAgentString(); isOwner = agentId.equals(ownerId); log.debug("***isOwner="+isOwner); return isOwner; } public static void showPrintLink(AssessmentBean assessmentBean) { log.debug("first condition = " + (ToolManager.getTool("sakai.questionbank.printout") != null)); log.debug("second conditon = " + !ServerConfigurationService.getString("stealthTools@org.sakaiproject.tool.api.ActiveToolManager").contains("sakai.questionbank.printout")); log.debug("third condition = " + !ServerConfigurationService.getString("hiddenTools@org.sakaiproject.tool.api.ActiveToolManager").contains("sakai.questionbank.printout")); String printAssessment = ServerConfigurationService.getString("samigo.printAssessment"); if (((ToolManager.getTool("sakai.questionbank.printout") != null) && !ServerConfigurationService.getString( "stealthTools@org.sakaiproject.tool.api.ActiveToolManager") .contains("sakai.questionbank.printout") && !ServerConfigurationService.getString( "hiddenTools@org.sakaiproject.tool.api.ActiveToolManager") .contains("sakai.questionbank.printout")) || Boolean.parseBoolean(printAssessment)) { assessmentBean.setShowPrintLink(true); } else { assessmentBean.setShowPrintLink(false); } } }