Index: lams_build/lib/lams/lams-gradebook.jar =================================================================== diff -u -rf83f367fdcf4b417d1ccbd74cca5dd88dc24df7a -r53be6f88884b380ccb963eb05c985a57f580b5d4 Binary files differ Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -rc48c8002ccae15f230099c704b48a39e7fe3a382 -r53be6f88884b380ccb963eb05c985a57f580b5d4 Binary files differ Index: lams_common/.classpath =================================================================== diff -u -rc135649b64e98c9233da20bdcfb7689598116314 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_common/.classpath (.../.classpath) (revision c135649b64e98c9233da20bdcfb7689598116314) +++ lams_common/.classpath (.../.classpath) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -40,6 +40,7 @@ + Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java =================================================================== diff -u -r052621201a47d79ee9f194dd86f78bbf84312893 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java (.../ILearnerProgressDAO.java) (revision 052621201a47d79ee9f194dd86f78bbf84312893) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java (.../ILearnerProgressDAO.java) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -148,6 +148,12 @@ * progress records to determine the users. */ List getLearnersAttemptedActivity(Activity activity); + + /** + * Get all the users records where the user has completed the given activity. Uses the progress records to determine + * the users. + */ + List getLearnersCompletedActivity(Activity activity); /** * Get all the users records where the user has ever attempted the given activity. Uses the progress records to Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java =================================================================== diff -u -r052621201a47d79ee9f194dd86f78bbf84312893 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java (.../LearnerProgressDAO.java) (revision 052621201a47d79ee9f194dd86f78bbf84312893) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java (.../LearnerProgressDAO.java) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -359,7 +359,24 @@ return learners; } + + @Override + @SuppressWarnings("unchecked") + public List getLearnersCompletedActivity(final Activity activity) { + List learners = null; + HibernateTemplate hibernateTemplate = new HibernateTemplate(this.getSessionFactory()); + learners = (List) hibernateTemplate.execute(new HibernateCallback() { + @Override + public Object doInHibernate(Session session) throws HibernateException { + return session.createQuery(LearnerProgressDAO.LOAD_LEARNERS_COMPLETED_ACTIVITY) + .setLong("activityId", activity.getActivityId().longValue()).list(); + } + }); + + return learners; + } + @Override public Integer getNumUsersAttemptedActivity(final Activity activity) { HibernateTemplate hibernateTemplate = new HibernateTemplate(this.getSessionFactory()); Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java =================================================================== diff -u -rb203dcbd67cb6321c9292fd0b17b539a04ddb523 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision b203dcbd67cb6321c9292fd0b17b539a04ddb523) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -89,6 +89,23 @@ Boolean isGroupedActivity(long toolContentID); /** + * Assign tool an ActivityEvaluation (it is an equivalent of doing it manually on authoring canvas). It also updates + * gradebook marks for all participating learners from the lesson. + * + * @param toolContentId + * @param toolOutputDefinition + */ + void setActivityEvaluation(Long toolContentId, String toolOutputDefinition); + + /** + * Get tool's ActivityEvaluation that has been set in authoring. + * + * @param toolContentId + * @return + */ + String getActivityEvaluation(Long toolContentId); + + /** * Returns leader's UserId from the nearest Leader Selection Tool (the nearest to the specified activity) , and null * if no Leader Selection Tools available. * Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java =================================================================== diff -u -rb203dcbd67cb6321c9292fd0b17b539a04ddb523 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (.../LamsToolService.java) (revision b203dcbd67cb6321c9292fd0b17b539a04ddb523) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (.../LamsToolService.java) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -29,25 +29,24 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.TreeSet; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.hibernate.Hibernate; -import org.hibernate.HibernateException; -import org.hibernate.Query; -import org.hibernate.Session; import org.hibernate.proxy.HibernateProxy; +import org.lamsfoundation.lams.gradebook.service.IGradebookService; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.ActivityEvaluation; import org.lamsfoundation.lams.learningdesign.FloatingActivity; -import org.lamsfoundation.lams.learningdesign.Group; -import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.Transition; +import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; import org.lamsfoundation.lams.lesson.CompletedActivityProgress; import org.lamsfoundation.lams.lesson.LearnerProgress; -import org.lamsfoundation.lams.lesson.dao.hibernate.LessonDAO; +import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.lesson.dao.ILearnerProgressDAO; +import org.lamsfoundation.lams.lesson.dao.ILessonDAO; import org.lamsfoundation.lams.lesson.service.ILessonService; -import org.lamsfoundation.lams.tool.GroupedToolSession; import org.lamsfoundation.lams.tool.IToolVO; import org.lamsfoundation.lams.tool.Tool; import org.lamsfoundation.lams.tool.ToolOutput; @@ -75,9 +74,13 @@ private static final String LEADER_SELECTION_TOOL_SIGNATURE = "lalead11"; private static final String LEADER_SELECTION_TOOL_OUTPUT_NAME_LEADER_USERID = "leader.user.id"; - public IToolDAO toolDAO; - public IToolSessionDAO toolSessionDAO; - public IToolContentDAO toolContentDAO; + private IActivityDAO activityDAO; + private ILessonDAO lessonDAO; + private ILearnerProgressDAO learnerProgressDAO; + private IToolDAO toolDAO; + private IToolSessionDAO toolSessionDAO; + private IToolContentDAO toolContentDAO; + private IGradebookService gradebookService; private ILamsCoreToolService lamsCoreToolService; private ILessonService lessonService; @@ -158,7 +161,77 @@ return null; } } + + @Override + public String getActivityEvaluation(Long toolContentId) { + + List activities = toolContentDAO.findByProperty(Activity.class, "toolContentId", toolContentId); + if (activities.size() != 1) { + log.debug("ToolContent contains multiple activities, can't get ActivityEvaluation."); + return null; + } + + ToolActivity toolActivity = (ToolActivity) activities.get(0); + Set activityEvaluations = toolActivity.getActivityEvaluations(); + if (activityEvaluations.isEmpty()) { + return null; + } else { + ActivityEvaluation activityEvaluation = activityEvaluations.iterator().next(); + return activityEvaluation.getToolOutputDefinition(); + } + } + + @Override + public void setActivityEvaluation(Long toolContentId, String toolOutputDefinition) { + + List activities = toolContentDAO.findByProperty(Activity.class, "toolContentId", toolContentId); + if (activities.size() != 1) { + throw new LamsToolServiceException( + "ToolContent contains multiple activities, can't set ActivityEvaluation."); + } + if (StringUtils.isEmpty(toolOutputDefinition)) { + return; + } + + ToolActivity toolActivity = (ToolActivity) activities.get(0); + Set activityEvaluations = toolActivity.getActivityEvaluations(); + + // Get the first (only) ActivityEvaluation if it exists + ActivityEvaluation activityEvaluation; + boolean isToolOutputDefinitionChanged = false; + if (activityEvaluations.isEmpty()) { + activityEvaluation = new ActivityEvaluation(); + activityEvaluation.setActivity(toolActivity); + activityEvaluations = new HashSet(); + activityEvaluations.add(activityEvaluation); + toolActivity.setActivityEvaluations(activityEvaluations); + + } else { + activityEvaluation = activityEvaluations.iterator().next(); + isToolOutputDefinitionChanged = !toolOutputDefinition.equals(activityEvaluation.getToolOutputDefinition()); + } + + activityEvaluation.setToolOutputDefinition(toolOutputDefinition); + activityDAO.insertOrUpdate(activityEvaluation); + + // update the parent toolActivity + toolActivity.setActivityEvaluations(activityEvaluations); + activityDAO.insertOrUpdate(toolActivity); + + //update gradebook marks if required + if (isToolOutputDefinitionChanged) { + Lesson lesson = lessonDAO.getLessonForActivity(toolActivity.getActivityId()); + List users = learnerProgressDAO.getLearnersCompletedActivity(toolActivity); + + //update for all users in activity + for (User user: users) { + gradebookService.updateUserActivityGradebookMark(lesson, toolActivity, user); + } + } + + } + @Override public Long getLeaderUserId(Long toolSessionId, Integer learnerId) { Long leaderUserId = null; @@ -276,43 +349,40 @@ } /** - * @return Returns the toolDAO. - */ - public IToolDAO getToolDAO() { - return toolDAO; - } - - /** * @param toolDAO * The toolDAO to set. */ public void setToolDAO(IToolDAO toolDAO) { this.toolDAO = toolDAO; } - - public IToolSessionDAO getToolSessionDAO() { - return toolSessionDAO; + + public void setActivityDAO(IActivityDAO activityDAO) { + this.activityDAO = activityDAO; } + + public void setLearnerProgressDAO(ILearnerProgressDAO learnerProgressDAO) { + this.learnerProgressDAO = learnerProgressDAO; + } + + public void setLessonDAO(ILessonDAO lessonDAO) { + this.lessonDAO = lessonDAO; + } public void setToolSessionDAO(IToolSessionDAO toolSessionDAO) { this.toolSessionDAO = toolSessionDAO; } /** * - * @return - */ - public IToolContentDAO getToolContentDAO() { - return toolContentDAO; - } - - /** - * * @param toolContentDAO */ public void setToolContentDAO(IToolContentDAO toolContentDAO) { this.toolContentDAO = toolContentDAO; } + + public void setGradebookService(IGradebookService gradebookService) { + this.gradebookService = gradebookService; + } /** * Index: lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml =================================================================== diff -u -r73c1472c62db79b6ec21be7a5cba1d901f193013 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml (.../toolApplicationContext.xml) (revision 73c1472c62db79b6ec21be7a5cba1d901f193013) +++ lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml (.../toolApplicationContext.xml) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -80,9 +80,13 @@ + + + - + + Index: lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r78bf7a4e21b1530f5e8805ad75157ce623309eeb -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 78bf7a4e21b1530f5e8805ad75157ce623309eeb) +++ lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -184,7 +184,7 @@ label.export.portfolio.activity.summary =Activity Summary label.export.portfolio.question.summaries =Question summaries message.monitoring.edit.activity.not.editable =This Activity is no longer editable. -output.desc.learner.total.score =User's total score +output.desc.learner.total.score =Last total score output.desc.learner.time.taken =Time taken output.desc.learner.number.of.attempts =Number of attempts made by user output.user.score.for.question =User's score for the question: @@ -269,7 +269,7 @@ label.waiting.for.leader =Please, wait while somebody will become a group leader label.users.from.group =Other learners participating in current group: label.use.select.leader.tool.output =Use leaders from Select Leader tool -label.group.leader =Group Leader: {0} +label.group.leader =Group Leader: {0}u label.refresh =Refresh label.display.name.column =Display name column label.authoring.answer.required =Answer required? @@ -293,5 +293,10 @@ label.number.learners.per.session =Number of learners per session label.export.summary =Summary +label.tool.output =Tool Output +label.tool.output.has.been.changed =Tool Output has been changed +output.desc.best.score =Best score +output.desc.first.score =First score +output.desc.average.score =Average score #======= End labels: Exported 284 labels for en AU ===== Index: lams_tool_assessment/conf/xdoclet/struts-actions.xml =================================================================== diff -u -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) +++ lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -289,6 +289,10 @@ type="org.lamsfoundation.lams.tool.assessment.web.action.MonitoringAction" parameter="setSubmissionDeadline" > + + Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java =================================================================== diff -u -r0340817df8d420d1feafa8ad9a43f667023515b2 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java (.../AssessmentConstants.java) (revision 0340817df8d420d1feafa8ad9a43f667023515b2) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java (.../AssessmentConstants.java) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -164,8 +164,6 @@ public static final String ATTR_OVERALL_FEEDBACK_SEQUENCE_ID_PREFIX = "overallFeedbackSequenceId"; public static final String ATTR_ASSESSMENT = "assessment"; - - public static final String ATTR_RUN_AUTO = "runAuto"; public static final String ATTR_QUESTION_UID = "questionUid"; @@ -228,7 +226,20 @@ public static final String ATTR_REFLECTION_ENTRY = "reflectEntry"; public static final String ATTR_REFLECT_LIST = "reflectList"; + + public static final String ATTR_ACTIVITY_EVALUATION = "activityEvaluation"; + + public static final String ATTR_TOOL_OUTPUT_DEFINITIONS = "toolOutputDefinitions"; + //output definitions + public static final String OUTPUT_NAME_LEARNER_TOTAL_SCORE = "learner.total.score"; + public static final String OUTPUT_NAME_LEARNER_TIME_TAKEN = "learner.time.taken"; + public static final String OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS = "learner.number.of.attempts"; + + public static final String OUTPUT_NAME_BEST_SCORE = "best.score"; + public static final String OUTPUT_NAME_FIRST_SCORE = "first.score"; + public static final String OUTPUT_NAME_AVERAGE_SCORE = "average.score"; + // error message keys public static final String ERROR_MSG_QUESTION_NAME_BLANK = "error.question.name.blank"; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml =================================================================== diff -u -r73c1472c62db79b6ec21be7a5cba1d901f193013 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml (.../assessmentApplicationContext.xml) (revision 73c1472c62db79b6ec21be7a5cba1d901f193013) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml (.../assessmentApplicationContext.xml) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -141,21 +141,17 @@ PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception + PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception - PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception - PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception - PROPAGATION_REQUIRED,-java.lang.Exception - PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception - PROPAGATION_REQUIRED,+java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java =================================================================== diff -u -rdb4bd53f341896f8d1087dda549c89b3ab785ede -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (.../AssessmentResultDAO.java) (revision db4bd53f341896f8d1087dda549c89b3ab785ede) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (.../AssessmentResultDAO.java) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -33,17 +33,23 @@ List getAssessmentResultsBySession(Long sessionId, Long userId); - List getFinishedAssessmentResultsBySession(Long sessionId, Long userId); + List getFinishedAssessmentResultsByUser(Long sessionId, Long userId); AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId); AssessmentResult getLastFinishedAssessmentResult(Long assessmentUid, Long userId); - Float getLastFinishedAssessmentResultGrade(Long assessmentUid, Long userId); + Float getLastTotalScoreByUser(Long assessmentUid, Long userId); + + Float getBestTotalScoreByUser(Long sessionId, Long userId); + + Float getFirstTotalScoreByUser(Long sessionId, Long userId); + + Float getAvergeTotalScoreByUser(Long sessionId, Long userId); Integer getLastFinishedAssessmentResultTimeTaken(Long assessmentUid, Long userId); - AssessmentResult getLastFinishedAssessmentResultBySessionId(Long sessionId, Long userId); + AssessmentResult getLastFinishedAssessmentResultByUser(Long sessionId, Long userId); /** * Returns all last finished results for the specified assessment. Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java =================================================================== diff -u -rdb4bd53f341896f8d1087dda549c89b3ab785ede -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision db4bd53f341896f8d1087dda549c89b3ab785ede) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -62,6 +62,15 @@ + AssessmentResult.class.getName() + " AS r WHERE r.user.userId=? AND r.assessment.uid=? AND (r.finishDate != null) AND r.latest=1"; + private static final String BEST_SCORE_BY_SESSION_AND_USER = "SELECT MAX(r.grade) FROM " + AssessmentResult.class.getName() + + " AS r WHERE r.user.userId = ? AND r.sessionId=? AND (r.finishDate != null) ORDER BY r.startDate ASC"; + + private static final String FIRST_SCORE_BY_SESSION_AND_USER = "SELECT r.grade FROM " + AssessmentResult.class.getName() + + " AS r WHERE r.user.userId = ? AND r.sessionId=? AND (r.finishDate != null) ORDER BY r.startDate ASC LIMIT 1"; + + private static final String AVERAGE_SCORE_BY_SESSION_AND_USER = "SELECT AVG(r.grade) FROM " + AssessmentResult.class.getName() + + " AS r WHERE r.user.userId = ? AND r.sessionId=? AND (r.finishDate != null) ORDER BY r.startDate ASC"; + private static final String FIND_LAST_ASSESSMENT_RESULT_TIME_TAKEN = "select UNIX_TIMESTAMP(r.finishDate) - UNIX_TIMESTAMP(r.startDate) FROM " + AssessmentResult.class.getName() + " AS r WHERE r.user.userId=? AND r.assessment.uid=? AND (r.finishDate != null) AND r.latest=1"; @@ -75,7 +84,7 @@ } @Override - public List getFinishedAssessmentResultsBySession(Long sessionId, Long userId) { + public List getFinishedAssessmentResultsByUser(Long sessionId, Long userId) { return getHibernateTemplate().find(AssessmentResultDAOHibernate.FIND_BY_SESSION_AND_USER_AND_FINISHED, new Object[] { userId, sessionId }); } @@ -108,19 +117,52 @@ return (AssessmentResult) list.get(0); } } - + @Override - public Float getLastFinishedAssessmentResultGrade(Long assessmentUid, Long userId) { + public Float getLastTotalScoreByUser(Long assessmentUid, Long userId) { List list = getHibernateTemplate().find(AssessmentResultDAOHibernate.FIND_LAST_ASSESSMENT_RESULT_GRADE, new Object[] { userId, assessmentUid }); if ((list == null) || (list.size() == 0)) { return null; } else { - return ((Number) list.get(0)).floatValue(); + return ((Float) list.get(0)); } } @Override + public Float getBestTotalScoreByUser(Long sessionId, Long userId) { + List list = getHibernateTemplate().find(AssessmentResultDAOHibernate.BEST_SCORE_BY_SESSION_AND_USER, + new Object[] { userId, sessionId }); + if ((list == null) || (list.size() == 0)) { + return null; + } else { + return ((Float) list.get(0)); + } + } + + @Override + public Float getFirstTotalScoreByUser(Long sessionId, Long userId) { + List list = getHibernateTemplate().find(AssessmentResultDAOHibernate.FIRST_SCORE_BY_SESSION_AND_USER, + new Object[] { userId, sessionId }); + if ((list == null) || (list.size() == 0)) { + return null; + } else { + return ((Float) list.get(0)); + } + } + + @Override + public Float getAvergeTotalScoreByUser(Long sessionId, Long userId) { + List list = getHibernateTemplate().find(AssessmentResultDAOHibernate.AVERAGE_SCORE_BY_SESSION_AND_USER, + new Object[] { userId, sessionId }); + if ((list == null) || (list.size() == 0)) { + return null; + } else { + return ((Float) list.get(0)); + } + } + + @Override public Integer getLastFinishedAssessmentResultTimeTaken(Long assessmentUid, Long userId) { List list = getHibernateTemplate().find(FIND_LAST_ASSESSMENT_RESULT_TIME_TAKEN, @@ -133,7 +175,7 @@ } @Override - public AssessmentResult getLastFinishedAssessmentResultBySessionId(Long sessionId, Long userId) { + public AssessmentResult getLastFinishedAssessmentResultByUser(Long sessionId, Long userId) { List list = getHibernateTemplate().find( AssessmentResultDAOHibernate.FIND_LAST_FINISHED_BY_SESSION_AND_USER, new Object[] { userId, sessionId }); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java =================================================================== diff -u -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java (.../AssessmentOutputFactory.java) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java (.../AssessmentOutputFactory.java) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -18,11 +18,11 @@ * * http://www.gnu.org/licenses/gpl.txt * **************************************************************** - */ - -/* $Id$ */ -package org.lamsfoundation.lams.tool.assessment.service; + */ +/* $Id$ */ +package org.lamsfoundation.lams.tool.assessment.service; + import java.util.List; import java.util.Set; import java.util.SortedMap; @@ -32,6 +32,7 @@ import org.lamsfoundation.lams.tool.OutputFactory; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; +import org.lamsfoundation.lams.tool.assessment.AssessmentConstants; import org.lamsfoundation.lams.tool.assessment.model.Assessment; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession; @@ -40,104 +41,139 @@ public class AssessmentOutputFactory extends OutputFactory { - protected final static String OUTPUT_NAME_LEARNER_TOTAL_SCORE = "learner.total.score"; - protected final static String OUTPUT_NAME_LEARNER_TIME_TAKEN = "learner.time.taken"; - protected final static String OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS = "learner.number.of.attempts"; - /** * @see org.lamsfoundation.lams.tool.OutputDefinitionFactory#getToolOutputDefinitions(java.lang.Object) */ - public SortedMap getToolOutputDefinitions(Object toolContentObject, int definitionType) { + public SortedMap getToolOutputDefinitions(Object toolContentObject, + int definitionType) { TreeMap definitionMap = new TreeMap(); - - ToolOutputDefinition definition = buildRangeDefinition(OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, new Long(0), null); - definitionMap.put(OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, definition); - - definition = buildRangeDefinition(OUTPUT_NAME_LEARNER_TIME_TAKEN, new Long(0), null); - definitionMap.put(OUTPUT_NAME_LEARNER_TIME_TAKEN, definition); - + + ToolOutputDefinition definition = buildRangeDefinition(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, + new Long(0), null); + definitionMap.put(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, definition); + + definition = buildRangeDefinition(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN, new Long(0), null); + definitionMap.put(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN, definition); + if (toolContentObject != null) { Assessment assessment = (Assessment) toolContentObject; Set questionReferences = new TreeSet(new SequencableComparator()); questionReferences.addAll(assessment.getQuestionReferences()); Long totalMarksPossible = new Long(0); - for(QuestionReference questionReference : questionReferences) { + for (QuestionReference questionReference : questionReferences) { totalMarksPossible += questionReference.getDefaultGrade(); - }; - definition = buildRangeDefinition(OUTPUT_NAME_LEARNER_TOTAL_SCORE, new Long(0), totalMarksPossible, true); - definitionMap.put(OUTPUT_NAME_LEARNER_TOTAL_SCORE, definition); + } + ; + definition = buildRangeDefinition(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE, new Long(0), + totalMarksPossible, true); + definitionMap.put(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE, definition); + definition = buildRangeDefinition(AssessmentConstants.OUTPUT_NAME_BEST_SCORE, new Long(0), + totalMarksPossible, true); + definitionMap.put(AssessmentConstants.OUTPUT_NAME_BEST_SCORE, definition); + definition = buildRangeDefinition(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE, new Long(0), + totalMarksPossible, true); + definitionMap.put(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE, definition); + definition = buildRangeDefinition(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE, new Long(0), + totalMarksPossible, true); + definitionMap.put(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE, definition); + int randomQuestionsCount = 1; - for(QuestionReference questionReference : questionReferences) { + for (QuestionReference questionReference : questionReferences) { Long markAvailable = null; if (questionReference.getDefaultGrade() != 0) { markAvailable = new Long(questionReference.getDefaultGrade()); } - + String description = getI18NText("output.user.score.for.question", false); if (questionReference.isRandomQuestion()) { description += getI18NText("label.authoring.basic.type.random.question", false) + " " + randomQuestionsCount++; } else { description += questionReference.getQuestion().getTitle(); } - - definition = buildRangeDefinition(String.valueOf(questionReference.getSequenceId()), new Long(0), markAvailable); + + definition = buildRangeDefinition(String.valueOf(questionReference.getSequenceId()), new Long(0), + markAvailable); definition.setDescription(description); - definitionMap.put(String.valueOf(questionReference.getSequenceId()), definition); - }; + definitionMap.put(String.valueOf(questionReference.getSequenceId()), definition); + } + ; } return definitionMap; } - public SortedMap getToolOutput(List names, IAssessmentService assessmentService, Long toolSessionId, - Long learnerId) { + public SortedMap getToolOutput(List names, IAssessmentService assessmentService, + Long toolSessionId, Long learnerId) { TreeMap output = new TreeMap(); AssessmentSession session = assessmentService.getAssessmentSessionBySessionId(toolSessionId); if ((session != null) && (session.getAssessment() != null)) { Assessment assessment = session.getAssessment(); - if (names == null || names.contains(OUTPUT_NAME_LEARNER_TOTAL_SCORE)) { - output.put(OUTPUT_NAME_LEARNER_TOTAL_SCORE, getTotalScore(assessmentService, learnerId, assessment)); + if (names == null || names.contains(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE)) { + output.put(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE, + getLastTotalScore(assessmentService, learnerId, assessment)); } - if (names == null || names.contains(OUTPUT_NAME_LEARNER_TIME_TAKEN)) { - output.put(OUTPUT_NAME_LEARNER_TIME_TAKEN, getTimeTaken(assessmentService, learnerId, assessment)); + if (names == null || names.contains(AssessmentConstants.OUTPUT_NAME_BEST_SCORE)) { + output.put(AssessmentConstants.OUTPUT_NAME_BEST_SCORE, + getBestTotalScore(assessmentService, toolSessionId, learnerId)); } - if (names == null || names.contains(OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS)) { - output.put(OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, getNumberAttempts(assessmentService, learnerId, assessment)); - } + if (names == null || names.contains(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE)) { + output.put(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE, + getFirstTotalScore(assessmentService, toolSessionId, learnerId)); + } + if (names == null || names.contains(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE)) { + output.put(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE, + getAverageTotalScore(assessmentService, toolSessionId, learnerId)); + } + if (names == null || names.contains(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN)) { + output.put(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN, + getTimeTaken(assessmentService, learnerId, assessment)); + } + if (names == null || names.contains(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS)) { + output.put(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, + getNumberAttempts(assessmentService, learnerId, assessment)); + } Set questions = assessment.getQuestions(); - for(AssessmentQuestion question : questions) { + for (AssessmentQuestion question : questions) { if (names == null || names.contains(String.valueOf(question.getSequenceId()))) { - output.put(OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, getQuestionScore(assessmentService, learnerId, assessment, question.getSequenceId())); + output.put(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, + getQuestionScore(assessmentService, learnerId, assessment, question.getSequenceId())); } } } return output; } - public ToolOutput getToolOutput(String name, IAssessmentService assessmentService, Long toolSessionId, Long learnerId) { + public ToolOutput getToolOutput(String name, IAssessmentService assessmentService, Long toolSessionId, + Long learnerId) { if (name != null) { AssessmentSession session = assessmentService.getAssessmentSessionBySessionId(toolSessionId); - + if ((session != null) && (session.getAssessment() != null)) { Assessment assessment = session.getAssessment(); - if (name.equals(OUTPUT_NAME_LEARNER_TOTAL_SCORE)) { - return getTotalScore(assessmentService, learnerId, assessment); - } else if (name.equals(OUTPUT_NAME_LEARNER_TIME_TAKEN)) { + if (name.equals(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE)) { + return getLastTotalScore(assessmentService, learnerId, assessment); + } else if (name.equals(AssessmentConstants.OUTPUT_NAME_BEST_SCORE)) { + return getBestTotalScore(assessmentService, toolSessionId, learnerId); + } else if (name.equals(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE)) { + return getFirstTotalScore(assessmentService, toolSessionId, learnerId); + } else if (name.equals(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE)) { + return getAverageTotalScore(assessmentService, toolSessionId, learnerId); + } else if (name.equals(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN)) { return getTimeTaken(assessmentService, learnerId, assessment); - } else if (name.equals(OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS)) { + } else if (name.equals(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS)) { return getNumberAttempts(assessmentService, learnerId, assessment); } else { Set questions = assessment.getQuestions(); - for(AssessmentQuestion question : questions) { + for (AssessmentQuestion question : questions) { if (name.equals(String.valueOf(question.getSequenceId()))) { return getQuestionScore(assessmentService, learnerId, assessment, question.getSequenceId()); } @@ -151,43 +187,78 @@ /** * Get total score for a user. Will always return a ToolOutput object. */ - private ToolOutput getTotalScore(IAssessmentService assessmentService, Long learnerId, Assessment assessment) { - Float assessmentResultGrade = assessmentService.getLastFinishedAssessmentResultGrade(assessment.getUid(), learnerId); - + private ToolOutput getLastTotalScore(IAssessmentService assessmentService, Long learnerId, Assessment assessment) { + Float assessmentResultGrade = assessmentService.getLastTotalScoreByUser(assessment.getUid(), learnerId); + float totalScore = (assessmentResultGrade == null) ? 0 : assessmentResultGrade; - - return new ToolOutput(AssessmentOutputFactory.OUTPUT_NAME_LEARNER_TOTAL_SCORE, getI18NText( - AssessmentOutputFactory.OUTPUT_NAME_LEARNER_TOTAL_SCORE, true), totalScore); + + return new ToolOutput(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE, + getI18NText(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE, true), totalScore); } /** + * Get the best score for a user. Will always return a ToolOutput object. + */ + private ToolOutput getBestTotalScore(IAssessmentService assessmentService, Long sessionId, Long userId) { + Float bestTotalScore = assessmentService.getBestTotalScoreByUser(sessionId, userId); + float bestTotalScoreFloat = (bestTotalScore == null) ? 0 : bestTotalScore; + + return new ToolOutput(AssessmentConstants.OUTPUT_NAME_BEST_SCORE, + getI18NText(AssessmentConstants.OUTPUT_NAME_BEST_SCORE, true), bestTotalScoreFloat); + } + + /** + * Get the first score for a user. Will always return a ToolOutput object. + */ + private ToolOutput getFirstTotalScore(IAssessmentService assessmentService, Long sessionId, Long userId) { + Float firstTotalScore = assessmentService.getFirstTotalScoreByUser(sessionId, userId); + float firstTotalScoreFloat = (firstTotalScore == null) ? 0 : firstTotalScore; + + return new ToolOutput(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE, + getI18NText(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE, true), firstTotalScoreFloat); + } + + /** + * Get the average score for a user. Will always return a ToolOutput object. + */ + private ToolOutput getAverageTotalScore(IAssessmentService assessmentService, Long sessionId, Long userId) { + Float averageTotalScore = assessmentService.getAvergeTotalScoreByUser(sessionId, userId); + float averageTotalScoreFloat = (averageTotalScore == null) ? 0 : averageTotalScore; + + return new ToolOutput(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE, + getI18NText(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE, true), averageTotalScoreFloat); + } + + /** * Get time taken for a specific user to accomplish this assessment. Will always return a ToolOutput object. */ private ToolOutput getTimeTaken(IAssessmentService assessmentService, Long learnerId, Assessment assessment) { - Integer assessmentResultTimeTaken = assessmentService.getLastFinishedAssessmentResultTimeTaken(assessment.getUid(), learnerId); - + Integer assessmentResultTimeTaken = assessmentService + .getLastFinishedAssessmentResultTimeTaken(assessment.getUid(), learnerId); + long timeTaken = (assessmentResultTimeTaken == null) ? 0 : assessmentResultTimeTaken; - - return new ToolOutput(AssessmentOutputFactory.OUTPUT_NAME_LEARNER_TIME_TAKEN, getI18NText( - AssessmentOutputFactory.OUTPUT_NAME_LEARNER_TIME_TAKEN, true), timeTaken); + + return new ToolOutput(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN, + getI18NText(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN, true), timeTaken); } - + /** * Get the number of attempts done by user. Will always return a ToolOutput object. */ private ToolOutput getNumberAttempts(IAssessmentService assessmentService, Long learnerId, Assessment assessment) { int numberAttempts = assessmentService.getAssessmentResultCount(assessment.getUid(), learnerId); - - return new ToolOutput(AssessmentOutputFactory.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, getI18NText( - AssessmentOutputFactory.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, true), numberAttempts); + + return new ToolOutput(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, + getI18NText(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, true), numberAttempts); } - + /** * Get user's score for the question. Will always return a ToolOutput object. */ private ToolOutput getQuestionScore(IAssessmentService assessmentService, Long learnerId, Assessment assessment, int questionSequenceId) { - Float questionResultMarkDB = assessmentService.getQuestionResultMark(assessment.getUid(), learnerId, questionSequenceId); + Float questionResultMarkDB = assessmentService.getQuestionResultMark(assessment.getUid(), learnerId, + questionSequenceId); float questionResultMark = (questionResultMarkDB == null) ? 0 : questionResultMarkDB; return new ToolOutput(String.valueOf(questionSequenceId), "description", questionResultMark); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r41e55fa07dd5f8c94e8b719b53d59a8debca4e44 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 41e55fa07dd5f8c94e8b719b53d59a8debca4e44) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -737,9 +737,24 @@ } @Override - public Float getLastFinishedAssessmentResultGrade(Long assessmentUid, Long userId) { - return assessmentResultDao.getLastFinishedAssessmentResultGrade(assessmentUid, userId); + public Float getLastTotalScoreByUser(Long assessmentUid, Long userId) { + return assessmentResultDao.getLastTotalScoreByUser(assessmentUid, userId); } + + @Override + public Float getBestTotalScoreByUser(Long sessionId, Long userId) { + return assessmentResultDao.getBestTotalScoreByUser(sessionId, userId); + } + + @Override + public Float getFirstTotalScoreByUser(Long sessionId, Long userId) { + return assessmentResultDao.getFirstTotalScoreByUser(sessionId, userId); + } + + @Override + public Float getAvergeTotalScoreByUser(Long sessionId, Long userId) { + return assessmentResultDao.getAvergeTotalScoreByUser(sessionId, userId); + } @Override public Integer getLastFinishedAssessmentResultTimeTaken(Long assessmentUid, Long userId) { @@ -884,7 +899,7 @@ ArrayList assessmentResults = new ArrayList(); for (AssessmentUser user : users) { AssessmentResult assessmentResult = assessmentResultDao - .getLastFinishedAssessmentResultBySessionId(sessionId, user.getUserId()); + .getLastFinishedAssessmentResultByUser(sessionId, user.getUserId()); if (assessmentResult == null) { assessmentResult = new AssessmentResult(); assessmentResult.setUser(user); @@ -907,7 +922,7 @@ @Override public AssessmentResult getUserMasterDetail(Long sessionId, Long userId) { - AssessmentResult lastFinishedResult = assessmentResultDao.getLastFinishedAssessmentResultBySessionId(sessionId, + AssessmentResult lastFinishedResult = assessmentResultDao.getLastFinishedAssessmentResultByUser(sessionId, userId); if (lastFinishedResult != null) { SortedSet questionResults = new TreeSet( @@ -925,10 +940,10 @@ UserSummary userSummary = new UserSummary(); AssessmentUser user = assessmentUserDao.getUserByUserIDAndSessionID(userId, sessionId); userSummary.setUser(user); - List results = assessmentResultDao.getFinishedAssessmentResultsBySession(sessionId, userId); + List results = assessmentResultDao.getFinishedAssessmentResultsByUser(sessionId, userId); userSummary.setNumberOfAttempts(results.size()); - AssessmentResult lastFinishedResult = assessmentResultDao.getLastFinishedAssessmentResultBySessionId(sessionId, + AssessmentResult lastFinishedResult = assessmentResultDao.getLastFinishedAssessmentResultByUser(sessionId, userId); long timeTaken = lastFinishedResult == null ? 0 : lastFinishedResult.getFinishDate().getTime() - lastFinishedResult.getStartDate().getTime(); @@ -1110,7 +1125,7 @@ if (groupLeader != null) { - float assessmentResult = getLastFinishedAssessmentResultGrade(assessment.getUid(), + float assessmentResult = getLastTotalScoreByUser(assessment.getUid(), groupLeader.getUserId()); AssessmentUserDTO userDto = new AssessmentUserDTO(); @@ -1926,6 +1941,16 @@ public boolean isGroupedActivity(long toolContentID) { return toolService.isGroupedActivity(toolContentID); } + + @Override + public String getActivityEvaluation(Long toolContentId) { + return toolService.getActivityEvaluation(toolContentId); + } + + @Override + public void setActivityEvaluation(Long toolContentId, String toolOutputDefinition) { + toolService.setActivityEvaluation(toolContentId, toolOutputDefinition); + } @Override public String getLearnerContentFolder(Long toolSessionId, Long userId) { @@ -2082,14 +2107,6 @@ } } - /** - * Get the definitions for possible output for an activity, based on the toolContentId. These may be definitions - * that are always available for the tool (e.g. number of marks for Multiple Choice) or a custom definition created - * for a particular activity such as the answer to the third question contains the word Koala and hence the need for - * the toolContentId - * - * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition - */ @Override public SortedMap getToolOutputDefinitions(Long toolContentId, int definitionType) throws ToolException { Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r41e55fa07dd5f8c94e8b719b53d59a8debca4e44 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 41e55fa07dd5f8c94e8b719b53d59a8debca4e44) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -225,7 +225,34 @@ * @param userId * @return */ - Float getLastFinishedAssessmentResultGrade(Long assessmentUid, Long userId); + Float getLastTotalScoreByUser(Long assessmentUid, Long userId); + + /** + * Return the best *finished* result grade. + * + * @param sessionId + * @param userId + * @return + */ + Float getBestTotalScoreByUser(Long sessionId, Long userId); + + /** + * Return the first *finished* result grade. + * + * @param sessionId + * @param userId + * @return + */ + Float getFirstTotalScoreByUser(Long sessionId, Long userId); + + /** + * Return the average score of all *finished* result scores. + * + * @param sessionId + * @param userId + * @return + */ + Float getAvergeTotalScoreByUser(Long sessionId, Long userId); /** * Return the latest *finished* result grade. @@ -361,6 +388,18 @@ boolean isGroupedActivity(long toolContentID); /** + * Get the definitions for possible output for an activity, based on the toolContentId. These may be definitions + * that are always available for the tool (e.g. number of marks for Multiple Choice) or a custom definition created + * for a particular activity such as the answer to the third question contains the word Koala and hence the need for + * the toolContentId + * + * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition + */ + String getActivityEvaluation(Long toolContentId); + + void setActivityEvaluation(Long toolContentId, String toolOutputDefinition); + + /** * Return content folder (unique to each learner and lesson) which can be used for storing user generated content. * Currently is used for CKEditor. * Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java =================================================================== diff -u -rdb4bd53f341896f8d1087dda549c89b3ab785ede -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision db4bd53f341896f8d1087dda549c89b3ab785ede) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -30,6 +30,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Set; +import java.util.SortedMap; import java.util.TimeZone; import java.util.TreeSet; @@ -50,6 +51,8 @@ import org.apache.tomcat.util.json.JSONException; import org.apache.tomcat.util.json.JSONObject; import org.lamsfoundation.lams.gradebook.util.GradebookConstants; +import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.assessment.AssessmentConstants; import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; import org.lamsfoundation.lams.tool.assessment.dto.QuestionSummary; @@ -110,6 +113,9 @@ if (param.equals("setSubmissionDeadline")) { return setSubmissionDeadline(mapping, form, request, response); } + if (param.equals("setActivityEvaluation")) { + return setActivityEvaluation(mapping, form, request, response); + } if (param.equals("getUsers")) { return getUsers(mapping, form, request, response); } @@ -170,6 +176,16 @@ questionList.add(reference.getQuestion()); } } + + //prepare toolOutputDefinitions and activityEvaluation + List toolOutputDefinitions = new ArrayList(); + toolOutputDefinitions.add(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE); + toolOutputDefinitions.add(AssessmentConstants.OUTPUT_NAME_BEST_SCORE); + toolOutputDefinitions.add(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE); + toolOutputDefinitions.add(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE); + String activityEvaluation = service.getActivityEvaluation(contentId); + sessionMap.put(AssessmentConstants.ATTR_TOOL_OUTPUT_DEFINITIONS, toolOutputDefinitions); + sessionMap.put(AssessmentConstants.ATTR_ACTIVITY_EVALUATION, activityEvaluation); // cache into sessionMap boolean isGroupedActivity = service.isGroupedActivity(contentId); @@ -274,6 +290,32 @@ } /** + * Set tool's activityEvaluation + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws JSONException + * @throws IOException + */ + private ActionForward setActivityEvaluation(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws JSONException, IOException { + initAssessmentService(); + + Long contentID = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + String activityEvaluation = WebUtil.readStrParam(request, AssessmentConstants.ATTR_ACTIVITY_EVALUATION); + service.setActivityEvaluation(contentID, activityEvaluation); + + JSONObject responseJSON = new JSONObject(); + responseJSON.put("success", "true"); + response.setContentType("application/json;charset=utf-8"); + response.getWriter().print(new String(responseJSON.toString())); + return null; + } + + /** * Refreshes user list. */ public ActionForward getUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, @@ -305,7 +347,7 @@ if (groupLeader != null) { - float assessmentResult = service.getLastFinishedAssessmentResultGrade(assessment.getUid(), + float assessmentResult = service.getLastTotalScoreByUser(assessment.getUid(), groupLeader.getUserId()); AssessmentUserDTO userDto = new AssessmentUserDTO(); Index: lams_tool_assessment/web/pages/monitoring/statistic.jsp =================================================================== diff -u -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 -r53be6f88884b380ccb963eb05c985a57f580b5d4 --- lams_tool_assessment/web/pages/monitoring/statistic.jsp (.../statistic.jsp) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) +++ lams_tool_assessment/web/pages/monitoring/statistic.jsp (.../statistic.jsp) (revision 53be6f88884b380ccb963eb05c985a57f580b5d4) @@ -2,6 +2,31 @@ + +

@@ -39,3 +64,29 @@ + +

+ + + + + +

+
+ + +