// This sets the metString that holds the extended time info for the user private String extractMetaString(PublishedAssessmentFacade publishedAssessment) { short itemNum = 1; String meta = null; String extendedTimeData = publishedAssessment.getAssessmentMetaDataByLabel(EXTENDED_TIME_KEY + itemNum); while ((extendedTimeData != null) && (!extendedTimeData.equals(""))) { String[] extendedTimeItems = extendedTimeData.split("[|]"); // Get target user/group value String target = extendedTimeItems[0]; // If it's a group determine if user is a member boolean isMember = isUserInGroup(target); String userId = AgentFacade.getAgentString(); if (target.equals(userId) || isMember) { meta = extendedTimeData; } itemNum++; extendedTimeData = publishedAssessment.getAssessmentMetaDataByLabel(EXTENDED_TIME_KEY + itemNum); } return meta; }
// Depending on the scope the assessment info sometimes is not initialized. private boolean assessmentInitialized(PublishedAssessmentFacade publishedAssessment) { if (publishedAssessment == null) return false; if (publishedAssessment.getStartDate() != null) return true; if (publishedAssessment.getDueDate() != null) return true; if (publishedAssessment.getRetractDate() != null) return true; if (publishedAssessment.getTimeLimit() != null) return true; return false; }
public ExtendedTimeService(PublishedAssessmentFacade publishedAssessment) { PublishedAssessmentService assessmentService = new PublishedAssessmentService(); PublishedAssessmentFacade metaPublishedAssessment = assessmentService.getPublishedAssessmentQuick( publishedAssessment.getPublishedAssessmentId().toString()); if (!assessmentInitialized(publishedAssessment)) { publishedAssessment = metaPublishedAssessment; } authzGroupService = ComponentManager.get(AuthzGroupService.class); // Grab the site id from the publishedAssessment because the user may // not be in a site // if they're taking the test via url. PublishedAssessmentService publishedAssessmentService = new PublishedAssessmentService(); String pubId = publishedAssessment.getPublishedAssessmentId().toString(); siteId = publishedAssessmentService.getPublishedAssessmentSiteId(pubId); this.metaString = extractMetaString(metaPublishedAssessment); this.hasExtendedTime = (metaString != null); if (this.hasExtendedTime) { this.timeLimit = extractExtendedTime(); this.startDate = determineDate(1, publishedAssessment.getStartDate(), publishedAssessment); this.dueDate = determineDate(2, publishedAssessment.getDueDate(), publishedAssessment); this.retractDate = determineDate(3, publishedAssessment.getRetractDate(), publishedAssessment); } else { this.timeLimit = 0; this.startDate = publishedAssessment.getStartDate(); this.dueDate = publishedAssessment.getDueDate(); this.retractDate = publishedAssessment.getRetractDate(); } }
public void processAction(ActionEvent ae) throws AbortProcessingException { FacesContext context = FacesContext.getCurrentInstance(); // #1 - read the assessmentId from the form String publishedAssessmentId = (String) FacesContext.getCurrentInstance() .getExternalContext() .getRequestParameterMap() .get("publishedAssessmentId"); log.debug("publishedAssessmentId = " + publishedAssessmentId); // #2 - and use it to set author bean, goto removeAssessment.jsp PublishedAssessmentBean publishedAssessmentBean = (PublishedAssessmentBean) ContextUtil.lookupBean("publishedassessment"); PublishedAssessmentService publishedAssessmentService = new PublishedAssessmentService(); PublishedAssessmentFacade publishedAssessment = publishedAssessmentService.getPublishedAssessmentInfoForRemove( Long.valueOf(publishedAssessmentId)); if (publishedAssessment != null) { // #3 - permission checking before proceeding - daisyf AuthorBean author = (AuthorBean) ContextUtil.lookupBean("author"); AuthorizationBean authzBean = (AuthorizationBean) ContextUtil.lookupBean("authorization"); if (!authzBean.isUserAllowedToDeleteAssessment( publishedAssessmentId, publishedAssessment.getCreatedBy(), true)) { String err = (String) ContextUtil.getLocalizedString( "org.sakaiproject.tool.assessment.bundle.AuthorMessages", "denied_delete_other_members_assessment_error"); context.addMessage(null, new FacesMessage(err)); author.setOutcome("author"); return; } author.setOutcome("confirmRemovePublishedAssessment"); publishedAssessmentBean.setAssessmentId(publishedAssessmentId); publishedAssessmentBean.setTitle( FormattedText.convertFormattedTextToPlaintext(publishedAssessment.getTitle())); } else { log.warn("publishedAssessment is null"); } }
public void processAction(ActionEvent ae) throws AbortProcessingException { FacesContext context = FacesContext.getCurrentInstance(); // Map reqMap = context.getExternalContext().getRequestMap(); // Map requestParams = context.getExternalContext().getRequestParameterMap(); AssessmentBean assessmentBean = (AssessmentBean) ContextUtil.lookupBean("assessmentBean"); String assessmentId = assessmentBean.getAssessmentId(); SectionBean sectionBean = (SectionBean) ContextUtil.lookupBean("sectionBean"); // create an assessment based on the title entered and the assessment // template selected // #1 - read from form editpart.jsp String title = TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, sectionBean.getSectionTitle()) .trim(); if (title == null || title.equals("")) { String err = ContextUtil.getLocalizedString( "org.sakaiproject.tool.assessment.bundle.AuthorMessages", "empty_part_title_error"); context.addMessage(null, new FacesMessage(err)); sectionBean.setOutcome("editPart"); return; } String description = sectionBean.getSectionDescription(); String sectionId = sectionBean.getSectionId(); AuthorBean author = (AuthorBean) ContextUtil.lookupBean("author"); isEditPendingAssessmentFlow = author.getIsEditPendingAssessmentFlow(); // #1a. prepare sectionBean AssessmentService assessmentService = null; SectionFacade section = null; // permission check String creator; if (isEditPendingAssessmentFlow) { assessmentService = new AssessmentService(); AssessmentFacade af = assessmentService.getBasicInfoOfAnAssessment(assessmentId); creator = af.getCreatedBy(); } else { PublishedAssessmentService pubService = new PublishedAssessmentService(); assessmentService = pubService; PublishedAssessmentFacade paf = pubService.getSettingsOfPublishedAssessment(assessmentId); creator = paf.getCreatedBy(); } AuthorizationBean authzBean = (AuthorizationBean) ContextUtil.lookupBean("authorization"); if (!authzBean.isUserAllowedToEditAssessment( assessmentId, creator, !isEditPendingAssessmentFlow)) { String err = ContextUtil.getLocalizedString( "org.sakaiproject.tool.assessment.bundle.AuthorMessages", "denied_edit_assessment_error"); context.addMessage(null, new FacesMessage(err)); sectionBean.setOutcome("editPart"); return; } if (isEditPendingAssessmentFlow) { EventTrackingService.post( EventTrackingService.newEvent( "sam.assessment.revise", "siteId=" + AgentFacade.getCurrentSiteId() + ", sectionId=" + sectionId, true)); } else { EventTrackingService.post( EventTrackingService.newEvent( "sam.pubassessment.revise", "siteId=" + AgentFacade.getCurrentSiteId() + ", sectionId=" + sectionId, true)); } boolean addItemsFromPool = false; sectionBean.setOutcome("editAssessment"); if ((sectionBean.getType().equals("2")) && (sectionBean.getSelectedPool().equals(""))) { String selectedPool_err = ContextUtil.getLocalizedString( "org.sakaiproject.tool.assessment.bundle.AuthorMessages", "selectedPool_error"); context.addMessage(null, new FacesMessage(selectedPool_err)); sectionBean.setOutcome("editPart"); return; } if (isEditPendingAssessmentFlow && !("".equals(sectionBean.getType())) && ((SectionDataIfc.RANDOM_DRAW_FROM_QUESTIONPOOL.toString()) .equals(sectionBean.getType()))) { addItemsFromPool = true; if (validateItemsDrawn(sectionBean)) { section = getOrAddSection(assessmentService, assessmentId, sectionId); } else { sectionBean.setOutcome("editPart"); return; } } else { section = getOrAddSection(assessmentService, assessmentId, sectionId); } if (section == null) { log.info("section == null - Should not come to here. Simply return."); log.info("assessmentId =" + assessmentId); log.info("sectionId =" + sectionId); return; } log.debug("**** section title =" + section.getTitle()); log.debug("**** title =" + title); // title, description, and question ordering are editable for both pending and publish // assessments if (title != null) section.setTitle(title); section.setDescription(description); if (!("".equals(sectionBean.getQuestionOrdering()))) section.addSectionMetaData( SectionDataIfc.QUESTIONS_ORDERING, sectionBean.getQuestionOrdering()); if (isEditPendingAssessmentFlow) { if (!("".equals(sectionBean.getKeyword()))) section.addSectionMetaData( SectionMetaDataIfc.KEYWORDS, TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, sectionBean.getKeyword())); if (!("".equals(sectionBean.getObjective()))) section.addSectionMetaData( SectionMetaDataIfc.OBJECTIVES, TextFormat.convertPlaintextToFormattedTextNoHighUnicode( log, sectionBean.getObjective())); if (!("".equals(sectionBean.getRubric()))) section.addSectionMetaData( SectionMetaDataIfc.RUBRICS, TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, sectionBean.getRubric())); if (!("".equals(sectionBean.getType()))) { section.addSectionMetaData(SectionDataIfc.AUTHOR_TYPE, sectionBean.getType()); if ((SectionDataIfc.RANDOM_DRAW_FROM_QUESTIONPOOL.toString()) .equals(sectionBean.getType())) { if ((sectionBean.getNumberSelected() != null) && !("".equals(sectionBean.getNumberSelected()))) { section.addSectionMetaData( SectionDataIfc.NUM_QUESTIONS_DRAWN, sectionBean.getNumberSelected()); } if (!("".equals(sectionBean.getSelectedPool()))) { section.addSectionMetaData( SectionDataIfc.POOLID_FOR_RANDOM_DRAW, sectionBean.getSelectedPool()); String poolname = ""; QuestionPoolService qpservice = new QuestionPoolService(); QuestionPoolFacade poolfacade = qpservice.getPool( new Long(sectionBean.getSelectedPool()), AgentFacade.getAgentString()); if (poolfacade != null) { poolname = poolfacade.getTitle(); } section.addSectionMetaData(SectionDataIfc.POOLNAME_FOR_RANDOM_DRAW, poolname); } section.addSectionMetaData( SectionDataIfc.RANDOMIZATION_TYPE, sectionBean.getRandomizationType()); } } if (addItemsFromPool) { boolean hasRandomPartScore = false; Double score = null; String requestedScore = sectionBean.getRandomPartScore(); if (requestedScore != null && !requestedScore.equals("")) { hasRandomPartScore = true; score = new Double(requestedScore); } boolean hasRandomPartDiscount = false; Double discount = null; String requestedDiscount = sectionBean.getRandomPartDiscount(); if (requestedDiscount != null && !requestedDiscount.equals("")) { hasRandomPartDiscount = true; discount = new Double(requestedDiscount); } if (hasRandomPartScore && score != null) { section.addSectionMetaData(SectionDataIfc.POINT_VALUE_FOR_QUESTION, score.toString()); } else { section.addSectionMetaData(SectionDataIfc.POINT_VALUE_FOR_QUESTION, ""); } if (hasRandomPartDiscount && discount != null) { section.addSectionMetaData( SectionDataIfc.DISCOUNT_VALUE_FOR_QUESTION, discount.toString()); } else { section.addSectionMetaData(SectionDataIfc.DISCOUNT_VALUE_FOR_QUESTION, ""); } } } assessmentService.saveOrUpdateSection(section); if (addItemsFromPool) { // update random questions from question pool int success = assessmentService.updateRandomPoolQuestions( assessmentService.getSection(section.getSectionId().toString())); if (success != AssessmentService.UPDATE_SUCCESS) { if (success == AssessmentService.UPDATE_ERROR_DRAW_SIZE_TOO_LARGE) { // shouldn't get here since there is a check, but might as well verify String err = ContextUtil.getLocalizedString( "org.sakaiproject.tool.assessment.bundle.AuthorMessages", "qdrawn_error"); context.addMessage( null, new FacesMessage( err + " " + section.getSectionMetaDataByLabel(SectionDataIfc.NUM_QUESTIONS_DRAWN))); } } } // added by daisyf, 10/10/06 updateAttachment( section.getSectionAttachmentList(), sectionBean.getAttachmentList(), section.getData()); // #2 - goto editAssessment.jsp, so reset assessmentBean AssessmentIfc assessment = assessmentService.getAssessment(Long.valueOf(assessmentBean.getAssessmentId())); assessmentBean.setAssessment(assessment); assessmentService.updateAssessmentLastModifiedInfo(assessment); EventTrackingService.post( EventTrackingService.newEvent( "sam.assessment.revise", "siteId=" + AgentFacade.getCurrentSiteId() + ", sectionId=" + section.getSectionId(), true)); }