Index: lams_central/conf/security/Owasp.CsrfGuard.properties =================================================================== diff -u -rdf52e287d4a5f815849470ffb1fd82a3867a6bdb -r8df2f2fd1327e415d338658a64cb110cfdd21872 --- lams_central/conf/security/Owasp.CsrfGuard.properties (.../Owasp.CsrfGuard.properties) (revision df52e287d4a5f815849470ffb1fd82a3867a6bdb) +++ lams_central/conf/security/Owasp.CsrfGuard.properties (.../Owasp.CsrfGuard.properties) (revision 8df2f2fd1327e415d338658a64cb110cfdd21872) @@ -157,12 +157,6 @@ org.owasp.csrfguard.protected.imsccAuthoringSave=/lams/tool/laimsc11/authoring/update.do org.owasp.csrfguard.protected.imsccAuthoringDefineLater=/lams/tool/laimsc11/authoring/definelater.do -org.owasp.csrfguard.protected.lamcAuthoringSave=/lams/tool/lamc11/authoring/submitAllContent.do -org.owasp.csrfguard.protected.lamcAuthoringDefineLater=/lams/tool/lamc11/authoring/definelater.do -org.owasp.csrfguard.protected.lamcMonitoringSubmissionDeadline=/lams/tool/lamc11/monitoring/setSubmissionDeadline.do -org.owasp.csrfguard.protected.lamcMonitoringExportExcel=/lams/tool/lamc11/monitoring/downloadMarks.do -org.owasp.csrfguard.protected.lamcSaveUserMark=/lams/tool/lamc11/monitoring/saveUserMark.do - org.owasp.csrfguard.protected.leaderAuthoringSave=/lams/tool/lalead11/authoring/updateContent.do org.owasp.csrfguard.protected.leaderAuthoringDefineLater=/lams/tool/lalead11/authoring/definelater.do org.owasp.csrfguard.protected.leaderSaveLeaders=/lams/tool/lalead11/monitoring/saveLeaders.do Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java =================================================================== diff -u -r980de9e0cca09b30e59a1b96b0e155116d8f0031 -r8df2f2fd1327e415d338658a64cb110cfdd21872 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision 980de9e0cca09b30e59a1b96b0e155116d8f0031) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision 8df2f2fd1327e415d338658a64cb110cfdd21872) @@ -87,6 +87,7 @@ import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.LearningDesignAnnotation; import org.lamsfoundation.lams.learningdesign.License; +import org.lamsfoundation.lams.learningdesign.McqImportContentVersionFilter; import org.lamsfoundation.lams.learningdesign.OptionsActivity; import org.lamsfoundation.lams.learningdesign.OptionsWithSequencesActivity; import org.lamsfoundation.lams.learningdesign.PermissionGateActivity; @@ -127,6 +128,7 @@ import org.lamsfoundation.lams.tool.dao.IToolDAO; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; +import org.lamsfoundation.lams.util.CommonConstants; import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.FileUtil; @@ -734,20 +736,34 @@ Set importedContentFolder = new HashSet<>(); for (AuthoringActivityDTO activity : activities) { learningDesignService.fillLearningLibraryID(activity, activities); + // skip non-tool activities if (!activity.getActivityTypeID().equals(Activity.TOOL_ACTIVITY_TYPE)) { continue; } String toolPath = FileUtil.getFullPath(learningDesignPath, activity.getToolContentID().toString()); + String fromVersion = activity.getToolVersion(); - // To create a new toolContent according to imported tool - // signature name. + //transform MCQ tool to Assessment + if ("lamc11".equals(activity.getToolSignature())) { + activity.setToolSignature(CommonConstants.TOOL_SIGNATURE_ASSESSMENT); + + // run all appropriate methods from McqImportContentVersionFilter, transforming MCQ object to its latest version and then to Assessment object + filterClass = McqImportContentVersionFilter.class; + final String LAST_MCQ_VERSION = "20200120"; + String toolFilePath = FileUtil.getFullPath(toolPath, ExportToolContentService.TOOL_FILE_NAME); + filterVersion(toolFilePath, fromVersion, LAST_MCQ_VERSION); + //set fromVersion as the date when MCQ tool was moved to Assessment, so Assessment can run all subsequent version filters + fromVersion = LAST_MCQ_VERSION; + // clear and ensure next activity can get correct filter thru registerImportVersionFilterClass() + filterClass = null; + } + // get tool by signature - Tool newTool = new ToolCompatibleStrategy().getTool(activity.getToolSignature()); - + Tool tool = new ToolCompatibleStrategy().getTool(activity.getToolSignature()); // can not find a matching tool - if (newTool == null) { + if (tool == null) { log.warn("An activity can not found matching tool [" + activity.getToolSignature() + "]."); toolsErrorMsgs.add(messageService.getMessage(ExportToolContentService.ERROR_TOOL_NOT_FOUND, new Object[] { activity.getToolSignature() })); @@ -758,16 +774,16 @@ } // imported Learning Library ID and one stored in current DB may not match, so fix it here - activity.setLearningLibraryID(newTool.getLearningLibraryId()); + activity.setLearningLibraryID(tool.getLearningLibraryId()); - // save Tool into lams_tool table. - ToolContent newContent = new ToolContent(newTool); + // create a new toolContent according to imported tool signature name + ToolContent newContent = new ToolContent(tool); toolContentDAO.saveToolContent(newContent); - // store new toolContent mapped by original activity id + // store mapping of original activity id to the new toolContent toolMapper.put(activity.getActivityID(), newContent); - // Invoke tool's importToolContent() method. + // Invoke tool's importToolContent() method try { // begin to import log.debug("Tool begin to import content : " + activity.getActivityTitle() + " by contentID :" @@ -777,13 +793,9 @@ ExportToolContentService.rewriteToolResourcePaths(toolPath, oldResourcePath, newResourcePath); } - // tool's importToolContent() method - // get from and to version - String toVersion = newTool.getToolVersion(); - String fromVersion = activity.getToolVersion(); + String toVersion = tool.getToolVersion(); + ToolContentManager contentManager = (ToolContentManager) findToolService(tool); - ToolContentManager contentManager = (ToolContentManager) findToolService(newTool); - // If this is a tool adapter tool, pass the customCSV to // the special importToolContent method // Otherwise invoke the normal tool @@ -813,7 +825,7 @@ log.debug("Tool content import success."); } catch (Exception e) { String error = messageService.getMessage(ExportToolContentService.ERROR_SERVICE_ERROR, - new Object[] { newTool.getToolDisplayName(), e.toString() }); + new Object[] { tool.getToolDisplayName(), e.toString() }); log.error(error, e); toolsErrorMsgs.add(error); // remove any unsucessed activities from new Learning Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -rbe35a3f2bf2414f299ca74f4ea8c3e2555b16d8e -r8df2f2fd1327e415d338658a64cb110cfdd21872 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision be35a3f2bf2414f299ca74f4ea8c3e2555b16d8e) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 8df2f2fd1327e415d338658a64cb110cfdd21872) @@ -121,7 +121,6 @@ private static final String TOOL_SIGNATURE_ASSESSMENT = "laasse10"; public static final String TOOL_SIGNATURE_SCRATCHIE = "lascrt11"; - public static final String TOOL_SIGNATURE_MCQ = "lamc11"; // Services private ILamsCoreToolService toolService; @@ -1212,7 +1211,7 @@ String toolSignature = activity.getTool().getToolSignature(); //check whether toolActivity has a NumericToolOutput if (activity.getEvaluation() != null && (TOOL_SIGNATURE_ASSESSMENT.equals(toolSignature) - || TOOL_SIGNATURE_MCQ.equals(toolSignature) || TOOL_SIGNATURE_SCRATCHIE.equals(toolSignature))) { + || TOOL_SIGNATURE_SCRATCHIE.equals(toolSignature))) { filteredActivityToUserDTOMap.put(activity, activityToUserDTOMap.get(activity)); } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -ra96f86b151cdcdf191654e8596eb2cf599e4e12b -r8df2f2fd1327e415d338658a64cb110cfdd21872 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision a96f86b151cdcdf191654e8596eb2cf599e4e12b) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 8df2f2fd1327e415d338658a64cb110cfdd21872) @@ -384,10 +384,10 @@ } @Override - public Long getPortraitId(Long userId) { + public String getPortraitId(Long userId) { if (userId != null) { User user = (User) userManagementService.findById(User.class, userId.intValue()); - return user != null ? user.getPortraitUuid() : null; + return user == null || user.getPortraitUuid() == null ? null : user.getPortraitUuid().toString(); } return null; } @@ -1384,7 +1384,7 @@ for (QbOption option : qbQuestion.getQbOptions()) { String[] alternatives = option.getName().split("\r\n"); for (String alternative : alternatives) { - if (alternative.equals(answer)) { + if (AssessmentServiceImpl.isAnswersEqual(question, answer, alternative)) { isAnswerAllocated = true; break; } @@ -1405,6 +1405,14 @@ return questionSummary; } + public static boolean isAnswersEqual(AssessmentQuestion question, String answer1, String answer2) { + if (answer1 == null || answer2 == null) { + return false; + } + + return question.getQbQuestion().isCaseSensitive() ? answer1.equals(answer2) : answer1.equalsIgnoreCase(answer2); + } + @Override public Optional allocateAnswerToOption(Long questionUid, Long targetOptionUid, Long previousOptionUid, Long questionResultUid) { @@ -1643,119 +1651,114 @@ } @Override - public List exportSummary(Assessment assessment, List sessionDtos, boolean showUserNames) { - List sheets = new LinkedList<>(); + public List exportSummary(Assessment assessment, List sessionDtos) { + List sheets = new LinkedList(); // -------------- First tab: Summary ---------------------------------------------------- - if (showUserNames) { - ExcelSheet summarySheet = new ExcelSheet(getMessage("label.export.summary")); - sheets.add(summarySheet); + ExcelSheet summarySheet = new ExcelSheet(getMessage("label.export.summary")); + sheets.add(summarySheet); - if (sessionDtos != null) { - for (SessionDTO sessionDTO : sessionDtos) { - Long sessionId = sessionDTO.getSessionId(); + if (sessionDtos != null) { + for (SessionDTO sessionDTO : sessionDtos) { + Long sessionId = sessionDTO.getSessionId(); - summarySheet.addEmptyRow(); + summarySheet.addEmptyRow(); - ExcelRow sessionTitleRow = summarySheet.initRow(); - sessionTitleRow.addCell(sessionDTO.getSessionName(), true); + ExcelRow sessionTitleRow = summarySheet.initRow(); + sessionTitleRow.addCell(sessionDTO.getSessionName(), true); - List userDtos = new ArrayList<>(); - // in case of UseSelectLeaderToolOuput - display only one user - if (assessment.isUseSelectLeaderToolOuput()) { + List userDtos = new ArrayList<>(); + // in case of UseSelectLeaderToolOuput - display only one user + if (assessment.isUseSelectLeaderToolOuput()) { - AssessmentSession session = getSessionBySessionId(sessionId); - AssessmentUser groupLeader = session.getGroupLeader(); + AssessmentSession session = getSessionBySessionId(sessionId); + AssessmentUser groupLeader = session.getGroupLeader(); - if (groupLeader != null) { + if (groupLeader != null) { - float assessmentResult = getLastTotalScoreByUser(assessment.getUid(), - groupLeader.getUserId()); + float assessmentResult = getLastTotalScoreByUser(assessment.getUid(), groupLeader.getUserId()); - AssessmentUserDTO userDto = new AssessmentUserDTO(); - userDto.setFirstName(groupLeader.getFirstName()); - userDto.setLastName(groupLeader.getLastName()); - userDto.setGrade(assessmentResult); - userDtos.add(userDto); - } + AssessmentUserDTO userDto = new AssessmentUserDTO(); + userDto.setFirstName(groupLeader.getFirstName()); + userDto.setLastName(groupLeader.getLastName()); + userDto.setGrade(assessmentResult); + userDtos.add(userDto); + } - } else { - int countSessionUsers = sessionDTO.getNumberLearners(); + } else { + int countSessionUsers = sessionDTO.getNumberLearners(); - // Get the user list from the db - userDtos = getPagedUsersBySession(sessionId, 0, countSessionUsers, "userName", "ASC", ""); - } + // Get the user list from the db + userDtos = getPagedUsersBySession(sessionId, 0, countSessionUsers, "userName", "ASC", ""); + } - float minGrade = -9999999; - float maxGrade = 0; - for (AssessmentUserDTO userDto : userDtos) { - float grade = userDto.getGrade(); - if (grade < minGrade || minGrade == -9999999) { - minGrade = grade; - } - if (grade > maxGrade) { - maxGrade = grade; - } + float minGrade = -9999999; + float maxGrade = 0; + for (AssessmentUserDTO userDto : userDtos) { + float grade = userDto.getGrade(); + if (grade < minGrade || minGrade == -9999999) { + minGrade = grade; } - if (minGrade == -9999999) { - minGrade = 0; + if (grade > maxGrade) { + maxGrade = grade; } + } + if (minGrade == -9999999) { + minGrade = 0; + } - LinkedHashMap markSummary = getMarksSummaryForSession(userDtos, minGrade, maxGrade, - 10); - // work out total marks so we can do percentages. need as float for the correct divisions - int totalNumEntries = 0; - for (Map.Entry entry : markSummary.entrySet()) { - totalNumEntries += entry.getValue(); - } + LinkedHashMap markSummary = getMarksSummaryForSession(userDtos, minGrade, maxGrade, + 10); + // work out total marks so we can do percentages. need as float for the correct divisions + int totalNumEntries = 0; + for (Map.Entry entry : markSummary.entrySet()) { + totalNumEntries += entry.getValue(); + } - // Mark Summary Min, Max + Grouped Percentages - summarySheet.addEmptyRow(); - ExcelRow minMaxRow = summarySheet.initRow(); - minMaxRow.addCell(getMessage("label.number.learners"), true); - minMaxRow.addCell(totalNumEntries); + // Mark Summary Min, Max + Grouped Percentages + summarySheet.addEmptyRow(); + ExcelRow minMaxRow = summarySheet.initRow(); + minMaxRow.addCell(getMessage("label.number.learners"), true); + minMaxRow.addCell(totalNumEntries); - minMaxRow = summarySheet.initRow(); - minMaxRow.addCell(getMessage("label.lowest.mark"), true); - minMaxRow.addCell((double) minGrade); + minMaxRow = summarySheet.initRow(); + minMaxRow.addCell(getMessage("label.lowest.mark"), true); + minMaxRow.addCell((double) minGrade); - minMaxRow = summarySheet.initRow(); - minMaxRow.addCell(getMessage("label.highest.mark"), true); - minMaxRow.addCell((double) maxGrade); - summarySheet.addEmptyRow(); + minMaxRow = summarySheet.initRow(); + minMaxRow.addCell(getMessage("label.highest.mark"), true); + minMaxRow.addCell((double) maxGrade); + summarySheet.addEmptyRow(); - ExcelRow binSummaryRow = summarySheet.initRow(); - binSummaryRow.addCell(getMessage("label.authoring.basic.list.header.mark"), true, - ExcelCell.BORDER_STYLE_BOTTOM_THIN); - binSummaryRow.addCell(getMessage("label.number.learners"), true, - ExcelCell.BORDER_STYLE_BOTTOM_THIN); - binSummaryRow.addCell(getMessage("label.percentage"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - float totalNumEntriesAsFloat = totalNumEntries; - for (Map.Entry entry : markSummary.entrySet()) { - binSummaryRow = summarySheet.initRow(); - binSummaryRow.addCell(entry.getKey()); - binSummaryRow.addCell(entry.getValue()); - binSummaryRow.addCell(Math.round(entry.getValue() / totalNumEntriesAsFloat * 100)); - } - summarySheet.addEmptyRow(); - summarySheet.addEmptyRow(); + ExcelRow binSummaryRow = summarySheet.initRow(); + binSummaryRow.addCell(getMessage("label.authoring.basic.list.header.mark"), true, + ExcelCell.BORDER_STYLE_BOTTOM_THIN); + binSummaryRow.addCell(getMessage("label.number.learners"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); + binSummaryRow.addCell(getMessage("label.percentage"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); + float totalNumEntriesAsFloat = totalNumEntries; + for (Map.Entry entry : markSummary.entrySet()) { + binSummaryRow = summarySheet.initRow(); + binSummaryRow.addCell(entry.getKey()); + binSummaryRow.addCell(entry.getValue()); + binSummaryRow.addCell(Math.round(entry.getValue() / totalNumEntriesAsFloat * 100)); + } + summarySheet.addEmptyRow(); + summarySheet.addEmptyRow(); - ExcelRow summaryTitleRow = summarySheet.initRow(); - summaryTitleRow.addCell(getMessage("label.export.user.id"), true, - ExcelCell.BORDER_STYLE_BOTTOM_THIN); - summaryTitleRow.addCell(getMessage("label.monitoring.summary.user.name"), true, - ExcelCell.BORDER_STYLE_BOTTOM_THIN); - summaryTitleRow.addCell(getMessage("label.monitoring.summary.total"), true, - ExcelCell.BORDER_STYLE_BOTTOM_THIN); + ExcelRow summaryTitleRow = summarySheet.initRow(); + summaryTitleRow.addCell(getMessage("label.export.user.id"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); + summaryTitleRow.addCell(getMessage("label.monitoring.summary.user.name"), true, + ExcelCell.BORDER_STYLE_BOTTOM_THIN); + summaryTitleRow.addCell(getMessage("label.monitoring.summary.total"), true, + ExcelCell.BORDER_STYLE_BOTTOM_THIN); - for (AssessmentUserDTO userDto : userDtos) { - ExcelRow userResultRow = summarySheet.initRow(); - userResultRow.addCell(userDto.getLogin()); - userResultRow.addCell(userDto.getFirstName() + " " + userDto.getLastName()); - userResultRow.addCell(userDto.getGrade()); - } - summarySheet.addEmptyRow(); + for (AssessmentUserDTO userDto : userDtos) { + ExcelRow userResultRow = summarySheet.initRow(); + userResultRow.addCell(userDto.getLogin()); + userResultRow.addCell(userDto.getFirstName() + " " + userDto.getLastName()); + userResultRow.addCell(userDto.getGrade()); } + summarySheet.addEmptyRow(); } } @@ -1785,10 +1788,8 @@ questionTitleRow.addCell(getMessage("label.monitoring.question.summary.default.mark"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); questionTitleRow.addCell(getMessage("label.export.user.id"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - if (showUserNames) { - questionTitleRow.addCell(getMessage("label.learner"), true, - ExcelCell.BORDER_STYLE_BOTTOM_THIN); - } + questionTitleRow.addCell(getMessage("label.monitoring.user.summary.user.name"), true, + ExcelCell.BORDER_STYLE_BOTTOM_THIN); questionTitleRow.addCell(getMessage("label.export.date.attempted"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); questionTitleRow.addCell(getMessage("label.export.time.attempted"), true, @@ -1833,9 +1834,7 @@ hedgeQuestionTitleRow.addCell(getMessage("label.authoring.basic.penalty.factor"), true); hedgeQuestionTitleRow.addCell(getMessage("label.monitoring.question.summary.default.mark"), true); hedgeQuestionTitleRow.addCell(getMessage("label.export.user.id"), true); - if (showUserNames) { - hedgeQuestionTitleRow.addCell(getMessage("label.learner"), true); - } + hedgeQuestionTitleRow.addCell(getMessage("label.monitoring.user.summary.user.name"), true); hedgeQuestionTitleRow.addCell(getMessage("label.export.date.attempted"), true); hedgeQuestionTitleRow.addCell(getMessage("label.export.time.attempted"), true); for (QbOption option : options) { @@ -1871,12 +1870,8 @@ Float maxMark = (questionResult.getMaxMark() == null) ? 0 : Float.valueOf(questionResult.getMaxMark()); userResultRow.addCell(maxMark); - if (showUserNames) { - userResultRow.addCell(questionResult.getUser().getLoginName()); - userResultRow.addCell(questionResult.getUser().getFullName()); - } else { - userResultRow.addCell(questionResult.getUser().getUserId()); - } + userResultRow.addCell(questionResult.getUser().getLoginName()); + userResultRow.addCell(questionResult.getUser().getFullName()); //date and time ExcelCell dateCell = userResultRow.addCell(questionResult.getFinishDate()); @@ -1938,7 +1933,7 @@ // Calculating the averages ExcelRow averageRow = questionSummarySheet.initRow(); - averageRow.addEmptyCells(showUserNames ? 8 : 7); + averageRow.addEmptyCells(8); averageRow.addCell(getMessage("label.export.average"), true); if (timeTakenTotal > 0) { averageRow.addCell(Long.valueOf(timeTakenTotal / timeTakenCount)); @@ -2047,7 +2042,6 @@ Set assessmentUsers = assessmentSession.getAssessmentUsers(); if (assessmentUsers != null) { for (AssessmentUser assessmentUser : assessmentUsers) { - if (showUserNames) { ExcelRow userTitleRow = userSummarySheet.initRow(); userTitleRow.addCell(getMessage("label.export.user.id"), true); userTitleRow.addCell(getMessage("label.learner"), true); @@ -2056,28 +2050,14 @@ userTitleRow.addCell(getMessage("label.authoring.basic.option.answer"), true); userTitleRow.addCell(getMessage("label.export.mark"), true); - } else { - ExcelRow userTitleRow = userSummarySheet.initRow(); - userTitleRow.addCell(getMessage("label.export.user.id"), true); - userTitleRow.addCell(getMessage("label.export.date.attempted"), true); - userTitleRow.addCell(getMessage("label.monitoring.question.summary.question"), true); - userTitleRow.addCell(getMessage("label.authoring.basic.option.answer"), true); - userTitleRow.addCell(getMessage("label.export.mark"), true); - } - AssessmentResult assessmentResult = userUidToResultMap.get(assessmentUser.getUid()); if (assessmentResult != null) { Set questionResults = assessmentResult.getQuestionResults(); if (questionResults != null) { for (AssessmentQuestionResult questionResult : questionResults) { ExcelRow userResultRow = userSummarySheet.initRow(); - if (showUserNames) { - userResultRow.addCell(assessmentUser.getLoginName()); - userResultRow.addCell(assessmentUser.getFullName()); - } else { - userResultRow.addCell(assessmentUser.getUserId()); - } - + userResultRow.addCell(assessmentUser.getLoginName()); + userResultRow.addCell(assessmentUser.getFullName()); userResultRow.addCell(assessmentResult.getStartDate()); userResultRow.addCell(questionResult.getQbQuestion().getName()); userResultRow.addCell( @@ -2087,7 +2067,7 @@ } ExcelRow userTotalRow = userSummarySheet.initRow(); - userTotalRow.addEmptyCells(showUserNames ? 4 : 3); + userTotalRow.addEmptyCells(4); userTotalRow.addCell(getMessage("label.monitoring.summary.total"), true); userTotalRow.addCell(assessmentResult.getGrade()); userSummarySheet.addEmptyRow(); @@ -3442,8 +3422,7 @@ for (Object[] assessmentResultsAndPortraitIter : assessmentResultsAndPortraits) { AssessmentResult assessmentResult = (AssessmentResult) assessmentResultsAndPortraitIter[0]; - Long portraitUuid = assessmentResultsAndPortraitIter[1] == null ? null - : ((Number) assessmentResultsAndPortraitIter[1]).longValue(); + UUID portraitUuid = (UUID) assessmentResultsAndPortraitIter[1]; AssessmentUser user = assessmentResult.getUser(); //fill in question's and user answer's hashes @@ -3493,7 +3472,7 @@ && StringUtils.isBlank(user.getLastName()) ? user.getLoginName() : user.getFirstName() + " " + user.getLastName(); confidenceLevelDto.setUserName(userName); - confidenceLevelDto.setPortraitUuid(portraitUuid); + confidenceLevelDto.setPortraitUuid(portraitUuid == null ? null : portraitUuid.toString()); confidenceLevelDto.setLevel(questionResult.getConfidenceLevel()); confidenceLevelDto.setType(assessment.getConfidenceLevelsType()); confidenceLevelDto.setQbQuestionUid(qbQuestion.getUid()); @@ -3534,8 +3513,7 @@ for (Object[] assessmentResultsAndPortraitIter : assessmentResultsAndPortraits) { AssessmentResult assessmentResult = (AssessmentResult) assessmentResultsAndPortraitIter[0]; - Long portraitUuid = assessmentResultsAndPortraitIter[1] == null ? null - : ((Number) assessmentResultsAndPortraitIter[1]).longValue(); + UUID portraitUuid = (UUID) assessmentResultsAndPortraitIter[1]; AssessmentUser user = assessmentResult.getUser(); //fill in question's and user answer's hashes @@ -3578,7 +3556,7 @@ && StringUtils.isBlank(user.getLastName()) ? user.getLoginName() : user.getFirstName() + " " + user.getLastName(); confidenceLevelDto.setUserName(userName); - confidenceLevelDto.setPortraitUuid(portraitUuid); + confidenceLevelDto.setPortraitUuid(portraitUuid == null ? null : portraitUuid.toString()); confidenceLevelDto.setLevel(questionResult.getConfidenceLevel()); confidenceLevelDto.setType(assessment.getConfidenceLevelsType()); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -ra96f86b151cdcdf191654e8596eb2cf599e4e12b -r8df2f2fd1327e415d338658a64cb110cfdd21872 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision a96f86b151cdcdf191654e8596eb2cf599e4e12b) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 8df2f2fd1327e415d338658a64cb110cfdd21872) @@ -452,15 +452,14 @@ * * @param assessment * @param sessionDtos - * @param showUserNames * @return */ - List exportSummary(Assessment assessment, List sessionDtos, boolean showUserNames); - + List exportSummary(Assessment assessment, List sessionDtos); + /** * Alternative Excel export. (Copied from now obsolete MCQ tool.) */ - byte[] exportMarksMcq(Assessment assessment, Set questions) throws IOException ; + byte[] exportMarksMcq(Assessment assessment, Set questions) throws IOException; /** * Gets the basic statistics for the grades for the Leaders when an Assessment is done using @@ -533,7 +532,7 @@ void releaseFromCache(Object object); - Long getPortraitId(Long userId); + String getPortraitId(Long userId); AssessmentQuestion getAssessmentQuestionByUid(Long questionUid); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java =================================================================== diff -u -ra96f86b151cdcdf191654e8596eb2cf599e4e12b -r8df2f2fd1327e415d338658a64cb110cfdd21872 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision a96f86b151cdcdf191654e8596eb2cf599e4e12b) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 8df2f2fd1327e415d338658a64cb110cfdd21872) @@ -325,7 +325,7 @@ if (groupLeader != null) { float assessmentResult = service.getLastTotalScoreByUser(assessment.getUid(), groupLeader.getUserId()); - Long portraitId = service.getPortraitId(groupLeader.getUserId()); + String portraitId = service.getPortraitId(groupLeader.getUserId()); AssessmentUserDTO userDto = new AssessmentUserDTO(); userDto.setUserId(groupLeader.getUserId()); @@ -538,7 +538,6 @@ public void exportSummary(HttpServletRequest request, HttpServletResponse response) throws IOException { String sessionMapID = request.getParameter(AssessmentConstants.ATTR_SESSION_MAP_ID); String fileName = null; - boolean showUserNames = true; Long contentId = null; List sessionDtos; @@ -547,13 +546,11 @@ .getAttribute(sessionMapID); request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); contentId = (Long) sessionMap.get(AssessmentConstants.ATTR_TOOL_CONTENT_ID); - showUserNames = true; sessionDtos = (List) sessionMap.get("sessionDtos"); } else { contentId = WebUtil.readLongParam(request, "toolContentID"); fileName = WebUtil.readStrParam(request, "fileName"); - showUserNames = false; sessionDtos = service.getSessionDtos(contentId, true); } @@ -562,7 +559,7 @@ return; } - List sheets = service.exportSummary(assessment, sessionDtos, showUserNames); + List sheets = service.exportSummary(assessment, sessionDtos); // Setting the filename if it wasn't passed in the request if (fileName == null) { Index: lams_tool_lamc/build.properties =================================================================== diff -u -rb5d2a6851ee4797e641081bd5e6a1f28f78c30a6 -r8df2f2fd1327e415d338658a64cb110cfdd21872 --- lams_tool_lamc/build.properties (.../build.properties) (revision b5d2a6851ee4797e641081bd5e6a1f28f78c30a6) +++ lams_tool_lamc/build.properties (.../build.properties) (revision 8df2f2fd1327e415d338658a64cb110cfdd21872) @@ -2,6 +2,6 @@ min.server.version.number=3.0 signature=lamc11 -tool.version=20190103 +tool.version=20200219 tool.hide=true tool.short.name=mc \ No newline at end of file