Index: lams_build/lib/lams/lams-gradebook.jar =================================================================== diff -u -rf9b23e848885c277bcc9de377b94ae3884ce7a6d -r61c706419c438d5ef52d93bda3de1f7c415380ae Binary files differ Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r4ec3dc2b1fbb913b43418958d45d5eb34842e933 -r61c706419c438d5ef52d93bda3de1f7c415380ae Binary files differ Index: lams_central/.classpath =================================================================== diff -u -r588fe01186ff8c7c5b215e15f5ac4763137e0284 -r61c706419c438d5ef52d93bda3de1f7c415380ae --- lams_central/.classpath (.../.classpath) (revision 588fe01186ff8c7c5b215e15f5ac4763137e0284) +++ lams_central/.classpath (.../.classpath) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) @@ -33,6 +33,7 @@ + Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java =================================================================== diff -u -r343c20371619a350afb5e1e8a03c752af2fb3127 -r61c706419c438d5ef52d93bda3de1f7c415380ae --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (.../LessonManagerServlet.java) (revision 343c20371619a350afb5e1e8a03c752af2fb3127) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (.../LessonManagerServlet.java) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) @@ -30,6 +30,8 @@ import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import org.lamsfoundation.lams.gradebook.GradebookUserLesson; +import org.lamsfoundation.lams.gradebook.service.IGradebookService; import org.lamsfoundation.lams.integration.ExtCourseClassMap; import org.lamsfoundation.lams.integration.ExtServerOrgMap; import org.lamsfoundation.lams.integration.ExtUserUseridMap; @@ -83,6 +85,8 @@ private static IExportToolContentService exportService = null; private static ILamsCoreToolService toolService = null; + + private static IGradebookService gradebookService = null; private static IUserManagementService userManagementService = null; @@ -120,7 +124,6 @@ String lang = request.getParameter(CentralConstants.PARAM_LANG); String method = request.getParameter(CentralConstants.PARAM_METHOD); String filePath = request.getParameter(CentralConstants.PARAM_FILEPATH); - String progressUser = request.getParameter(CentralConstants.PARAM_PROGRESS_USER); String outputsUser = request.getParameter("outputsUser"); String learnerIds = request.getParameter(CentralConstants.PARAM_LEARNER_IDS); String monitorIds = request.getParameter(CentralConstants.PARAM_MONITOR_IDS); @@ -193,9 +196,13 @@ element = getAllStudentProgress(document, serverId, datetime, hashValue, username, lsId, courseId); } else if (method.equals(CentralConstants.METHOD_SINGLE_STUDENT_PROGRESS)) { + String firstName = request.getParameter(LoginRequestDispatcher.PARAM_FIRST_NAME); + String lastName = request.getParameter(LoginRequestDispatcher.PARAM_LAST_NAME); + String email = request.getParameter(LoginRequestDispatcher.PARAM_EMAIL); + lsId = new Long(lsIdStr); - element = getSingleStudentProgress(document, serverId, datetime, hashValue, username, lsId, courseId, - progressUser); + element = getSingleStudentProgress(document, serverId, datetime, hashValue, username, firstName, + lastName, lang, country, email, lsId, courseId); } else if (method.equals(CentralConstants.METHOD_IMPORT)) { @@ -212,6 +219,17 @@ element = document.createElement(CentralConstants.ELEM_LESSON); element.setAttribute(CentralConstants.ATTR_LESSON_ID, lsIdStr); + + } else if (method.equals("gradebookMarksUser")) { + lsId = new Long(lsIdStr); + element = getGradebookMarks(document, serverId, datetime, hashValue, username, lsId, null, outputsUser); + + } else if (method.equals("gradebookMarksLesson")) { + lsId = new Long(lsIdStr); + element = getGradebookMarks(document, serverId, datetime, hashValue, username, lsId, null, null); + + } else if (method.equals("gradebookMarksCourse")) { + element = getGradebookMarks(document, serverId, datetime, hashValue, username, null, courseId, null); } else if (method.equals("toolOutputsAllUsers")) { lsId = new Long(lsIdStr); @@ -420,11 +438,11 @@ } public Element getSingleStudentProgress(Document document, String serverId, String datetime, String hashValue, - String username, long lsId, String courseID, String progressUser) throws RemoteException { + String username, String firstName, String lastName, String language, String country, String email, + long lsId, String courseID) throws RemoteException { try { ExtServerOrgMap serverMap = LessonManagerServlet.integrationService.getExtServerOrgMap(serverId); Authenticator.authenticate(serverMap, datetime, username, hashValue); - ExtUserUseridMap userMap = LessonManagerServlet.integrationService.getExtUserUseridMap(serverMap, username); Lesson lesson = LessonManagerServlet.lessonService.getLesson(lsId); Element element = document.createElement(CentralConstants.ELEM_LESSON_PROGRESS); @@ -433,10 +451,14 @@ if (lesson != null) { int activitiesTotal = lesson.getLearningDesign().getActivities().size(); - ExtUserUseridMap progressUserMap = LessonManagerServlet.integrationService.getExistingExtUserUseridMap( - serverMap, progressUser); + // create new user if required + final boolean usePrefix = true; + final boolean isUpdateUserDetails = false; + ExtUserUseridMap userMap = LessonManagerServlet.integrationService.getImplicitExtUserUseridMap( + serverMap, username, firstName, lastName, language, country, email, usePrefix, + isUpdateUserDetails); - LearnerProgress learnProg = LessonManagerServlet.lessonService.getUserProgressForLesson(progressUserMap + LearnerProgress learnProg = LessonManagerServlet.lessonService.getUserProgressForLesson(userMap .getUser().getUserId(), lsId); Element learnerProgElem = document.createElement(CentralConstants.ELEM_LEARNER_PROGRESS); @@ -457,9 +479,9 @@ learnerProgElem.setAttribute(CentralConstants.ATTR_ACTIVITIES_ATTEMPTED, "" + attemptedActivities); // learnerProgElem.setAttribute(CentralConstants.ATTR_CURRENT_ACTIVITY , currActivity); - learnerProgElem.setAttribute(CentralConstants.ATTR_STUDENT_ID, "" + progressUserMap.getSid()); + learnerProgElem.setAttribute(CentralConstants.ATTR_STUDENT_ID, "" + userMap.getSid()); learnerProgElem.setAttribute(CentralConstants.ATTR_COURSE_ID, courseID); - learnerProgElem.setAttribute(CentralConstants.ATTR_USERNAME, progressUser); + learnerProgElem.setAttribute(CentralConstants.ATTR_USERNAME, username); learnerProgElem.setAttribute(CentralConstants.ATTR_LESSON_ID, "" + lsId); } } else { @@ -469,9 +491,9 @@ learnerProgElem.setAttribute(CentralConstants.ATTR_ACTIVITIES_COMPLETED, "0"); learnerProgElem.setAttribute(CentralConstants.ATTR_ACTIVITIES_ATTEMPTED, "0"); // learnerProgElem.setAttribute(CentralConstants.ATTR_CURRENT_ACTIVITY , currActivity); - learnerProgElem.setAttribute(CentralConstants.ATTR_STUDENT_ID, "" + progressUserMap.getSid()); + learnerProgElem.setAttribute(CentralConstants.ATTR_STUDENT_ID, "" + userMap.getSid()); learnerProgElem.setAttribute(CentralConstants.ATTR_COURSE_ID, courseID); - learnerProgElem.setAttribute(CentralConstants.ATTR_USERNAME, progressUser); + learnerProgElem.setAttribute(CentralConstants.ATTR_USERNAME, username); learnerProgElem.setAttribute(CentralConstants.ATTR_LESSON_ID, "" + lsId); } } @@ -613,6 +635,9 @@ LessonManagerServlet.toolService = (ILamsCoreToolService) WebApplicationContextUtils .getRequiredWebApplicationContext(getServletContext()).getBean("lamsCoreToolService"); + + LessonManagerServlet.gradebookService = (IGradebookService) WebApplicationContextUtils + .getRequiredWebApplicationContext(getServletContext()).getBean("gradebookService"); LessonManagerServlet.userManagementService = (IUserManagementService) WebApplicationContextUtils .getRequiredWebApplicationContext(getServletContext()).getBean("userManagementService"); @@ -792,7 +817,132 @@ } } + + /** + * This method gets the tool outputs for a lesson or a specific user and returns them in XML format. + * + * @param document + * @param serverId + * @param datetime + * @param hashValue + * @param username + * @param lessonId + * @param courseID + * @param outputsUser + * if outputsUser is null return results for the whole lesson, otherwise - for the specified learner + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public Element getGradebookMarks(Document document, String serverId, String datetime, String hashValue, + String username, Long lessonIdParam, String courseId, String outputsUser) + throws Exception { + ExtServerOrgMap serverMap = LessonManagerServlet.integrationService.getExtServerOrgMap(serverId); + Authenticator.authenticate(serverMap, datetime, username, hashValue); + + List lessons = new LinkedList(); + if (courseId != null) { + + ExtCourseClassMap orgMap = LessonManagerServlet.integrationService.getExtCourseClassMap(serverMap.getSid(), + courseId); + if (orgMap == null) { + LessonManagerServlet.log.debug("No course exists for: " + courseId + + ". Cannot get tool outputs report."); + throw new Exception("Course with courseId: " + courseId + " could not be found"); + } + Integer organisationId = orgMap.getOrganisation().getOrganisationId(); + + lessons.addAll(lessonService.getLessonsByGroup(organisationId)); + + } else { + Lesson lesson = LessonManagerServlet.lessonService.getLesson(lessonIdParam); + if (lesson == null) { + LessonManagerServlet.log.debug("No lesson exists for: " + lessonIdParam + + ". Cannot get tool outputs report."); + throw new Exception("Lesson with lessonID: " + lessonIdParam + " could not be found for learner progresses"); + } + lessons.add(lesson); + } + + // Create the root node of the xml document + Element gradebookMarksElement = document.createElement("GradebookMarks"); + + for (Lesson lesson : lessons) { + Long lessonId = lesson.getLessonId(); + Element lessonElement = document.createElement(CentralConstants.ELEM_LESSON); + lessonElement.setAttribute(CentralConstants.ATTR_LESSON_ID, "" + lessonId); + lessonElement.setAttribute("lessonName", lesson.getLessonName()); + + // calculate lesson's MaxPossibleMark + Set activities = getLessonActivities(lesson); + Long lessonMaxPossibleMark = 0L; + for (ToolActivity activity : activities) { + Long activityMaxPossibleMark = LessonManagerServlet.toolService.getActivityMaxPossibleMark(activity); + if (activityMaxPossibleMark != null) { + lessonMaxPossibleMark += activityMaxPossibleMark; + } + } + lessonElement.setAttribute("lessonMaxPossibleMark", lessonMaxPossibleMark.toString()); + + //get gradebook marks from DB + List gradebookUserLessons = new LinkedList(); + // if outputsUser is null we build results for the whole lesson, otherwise - for the specified learner + if (outputsUser != null) { + + ExtUserUseridMap userMap = LessonManagerServlet.integrationService.getExistingExtUserUseridMap( + serverMap, outputsUser); + if (userMap == null) { + throw new Exception("No user exists for: " + outputsUser + ". Cannot get tool outputs report."); + } + User user = userMap.getUser(); + Integer userId = user.getUserId(); + + GradebookUserLesson gradebookUserLesson = gradebookService.getGradebookUserLesson(lessonId, userId); + if (gradebookUserLesson == null) { + gradebookUserLesson = new GradebookUserLesson(lesson, user); + } + gradebookUserLessons.add(gradebookUserLesson); + + } else { + gradebookUserLessons.addAll(gradebookService.getGradebookUserLesson(lessonId)); + LessonManagerServlet.log.debug("Getting tool ouputs report for: " + lessonId + + ". With learning design: " + lesson.getLearningDesign().getLearningDesignId()); + } + + List allUsers = integrationService.getExtUserUseridMapByServerMap(serverMap); + + for (GradebookUserLesson gradebookUserLesson : gradebookUserLessons) { + Integer userId = gradebookUserLesson.getLearner().getUserId(); + + //find user + ExtUserUseridMap extUser = null; + for (ExtUserUseridMap extUserIter : allUsers) { + if (extUserIter.getUser().getUserId().equals(userId)) { + extUser = extUserIter; + break; + } + } + + if (extUser == null) { + throw new Exception("User with userId: " + userId + " doesn't belong to extServer: " + + serverMap.getSid()); + } + + Element learnerElement = document.createElement("Learner"); + learnerElement.setAttribute("extUsername", extUser.getExtUsername()); + String userTotalMark = gradebookUserLesson.getMark() == null ? "" : gradebookUserLesson.getMark().toString(); + learnerElement.setAttribute("userTotalMark", userTotalMark); + + lessonElement.appendChild(learnerElement); + } + + gradebookMarksElement.appendChild(lessonElement); + } + + return gradebookMarksElement; + } + /** * This method gets the tool outputs for a lesson or a specific user and returns them in XML format. * Index: lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/IGradebookDAO.java =================================================================== diff -u -r72e01661ffe932634adbe4b229d9ee44d6928a45 -r61c706419c438d5ef52d93bda3de1f7c415380ae --- lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/IGradebookDAO.java (.../IGradebookDAO.java) (revision 72e01661ffe932634adbe4b229d9ee44d6928a45) +++ lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/IGradebookDAO.java (.../IGradebookDAO.java) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) @@ -18,38 +18,39 @@ * * http://www.gnu.org/licenses/gpl.txt * **************************************************************** - */ - -/* $Id$ */ -package org.lamsfoundation.lams.gradebook.dao; + */ +/* $Id$ */ +package org.lamsfoundation.lams.gradebook.dao; + import java.util.List; import org.lamsfoundation.lams.dao.IBaseDAO; import org.lamsfoundation.lams.gradebook.GradebookUserActivity; import org.lamsfoundation.lams.gradebook.GradebookUserLesson; - -public interface IGradebookDAO extends IBaseDAO{ - - public GradebookUserLesson getGradebookUserDataForLesson(Long lessonID, Integer userID); - - public GradebookUserActivity getGradebookUserDataForActivity(Long activityID, Integer userID); - - public Double getGradebookUserActivityMarkSum(Long lessonID, Integer userID); - - public List getAllGradebookUserActivitiesForActivity(Long activityID); - - public Double getAverageMarkForLesson(Long lessonID); - - public long getAverageDurationLesson(Long lessonID); - - public long getAverageDurationForActivity(Long activityID); - - public Double getAverageMarkForActivity(Long activityID); - - public Double getAverageMarkForGroupedActivity(Long activityID, Long groupID); - - public long getAverageDurationForGroupedActivity(Long activityID, Long groupID); +public interface IGradebookDAO extends IBaseDAO { + + GradebookUserLesson getGradebookUserDataForLesson(Long lessonID, Integer userID); + + List getGradebookUserDataForLesson(Long lessonID); + + GradebookUserActivity getGradebookUserDataForActivity(Long activityID, Integer userID); + + Double getGradebookUserActivityMarkSum(Long lessonID, Integer userID); + + List getAllGradebookUserActivitiesForActivity(Long activityID); + + Double getAverageMarkForLesson(Long lessonID); + + long getAverageDurationLesson(Long lessonID); + + long getAverageDurationForActivity(Long activityID); + + Double getAverageMarkForActivity(Long activityID); + + Double getAverageMarkForGroupedActivity(Long activityID, Long groupID); + + long getAverageDurationForGroupedActivity(Long activityID, Long groupID); + } - Index: lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/hibernate/GradebookDAO.java =================================================================== diff -u -ra8bfd24410deb4e2837ce3c966adaac7ea869186 -r61c706419c438d5ef52d93bda3de1f7c415380ae --- lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/hibernate/GradebookDAO.java (.../GradebookDAO.java) (revision a8bfd24410deb4e2837ce3c966adaac7ea869186) +++ lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/hibernate/GradebookDAO.java (.../GradebookDAO.java) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) @@ -40,6 +40,9 @@ private static final String GET_GRADEBOOK_USER_LESSON = "from GradebookUserLesson gles where " + "gles.learner.userId=:userID and gles.lesson.lessonId=:lessonID"; + + private static final String GET_GRADEBOOK_USER_LESSONS = "from GradebookUserLesson gles where " + + "gles.lesson.lessonId=:lessonID"; private static final String GET_GRADEBOOK_ACTIVITIES_FROM_LESSON_SUM = "select sum(gact.mark) from GradebookUserActivity gact where " + "gact.learner=:userID and gact.activity in (select distinct tses.toolActivity from ToolSession tses where tses.lesson=:lessonID)"; @@ -89,8 +92,15 @@ } return null; - } + + @SuppressWarnings("unchecked") + public List getGradebookUserDataForLesson(Long lessonID) { + List result = getSession().createQuery(GET_GRADEBOOK_USER_LESSONS).setLong("lessonID", lessonID.longValue()) + .list(); + + return result; + } @SuppressWarnings("unchecked") public Double getGradebookUserActivityMarkSum(Long lessonID, Integer userID) { Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java =================================================================== diff -u -ra4102d6aaf60f794f067e12b10bfafdadf26a703 -r61c706419c438d5ef52d93bda3de1f7c415380ae --- lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java (.../IIntegrationService.java) (revision a4102d6aaf60f794f067e12b10bfafdadf26a703) +++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java (.../IIntegrationService.java) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) @@ -69,6 +69,17 @@ */ ExtUserUseridMap getExtUserUseridMap(ExtServerOrgMap serverMap, String extUsername) throws UserInfoFetchException, UserInfoValidationException; + + /** + * Returns ExtUserUseridMap from DB, and null if it doesn't exist + * + * @param serverMap + * @param userId + * @return + */ + // ExtUserUseridMap getExtUserUseridMapByUserId(ExtServerOrgMap serverMap, Integer userId); + + List getExtUserUseridMapByServerMap(ExtServerOrgMap serverMap); /** * Returns ExtUserUseridMap from DB, and null if it doesn't exist @@ -83,6 +94,15 @@ ExtServerOrgMap getExtServerOrgMap(Integer sid); ExtServerOrgMap getExtServerOrgMap(String serverId); + + /** + * Returns ExtCourseClassMap. If ExtCourseClassMap doesn't existent - returns null and does not create a new ExtCourseClassMap. + * + * @param extServerOrgMapId + * @param extCourseId + * @return ExtCourseClassMap if it exists, null otherwise + */ + ExtCourseClassMap getExtCourseClassMap(Integer extServerOrgMapId, String extCourseId); /** * @param serverMap Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java =================================================================== diff -u -ra4102d6aaf60f794f067e12b10bfafdadf26a703 -r61c706419c438d5ef52d93bda3de1f7c415380ae --- lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision a4102d6aaf60f794f067e12b10bfafdadf26a703) +++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) @@ -89,6 +89,7 @@ this.service = service; } + @Override public ExtServerOrgMap getExtServerOrgMap(String serverId) { List list = service.findByProperty(ExtServerOrgMap.class, "serverid", serverId); if (list == null || list.size() == 0) { @@ -97,7 +98,21 @@ return (ExtServerOrgMap) list.get(0); } } + + @Override + public ExtCourseClassMap getExtCourseClassMap(Integer extServerOrgMapId, String extCourseId) { + Map properties = new HashMap(); + properties.put("courseid", extCourseId); + properties.put("extServerOrgMap.sid", extServerOrgMapId); + List list = service.findByProperties(ExtCourseClassMap.class, properties); + if (list == null || list.size() == 0) { + return null; + } else { + return (ExtCourseClassMap) list.get(0); + } + } + // wrapper method for compatibility with original integration modules public ExtCourseClassMap getExtCourseClassMap(ExtServerOrgMap serverMap, ExtUserUseridMap userMap, String extCourseId, String countryIsoCode, String langIsoCode, String prettyCourseName, String method, @@ -132,50 +147,45 @@ public ExtCourseClassMap getExtCourseClassMap(ExtServerOrgMap serverMap, ExtUserUseridMap userMap, String extCourseId, String extCourseName, String countryIsoCode, String langIsoCode, String parentOrgId, Boolean isTeacher, Boolean prefix) throws UserInfoValidationException { - ExtCourseClassMap map; Organisation org; User user = userMap.getUser(); - Map properties = new HashMap(); - properties.put("courseid", extCourseId); - properties.put("extServerOrgMap.sid", serverMap.getSid()); - List mapList = service.findByProperties(ExtCourseClassMap.class, properties); - if (mapList == null || mapList.size() == 0) { + ExtCourseClassMap extCourseClassMap = getExtCourseClassMap(serverMap.getSid(), extCourseId); + if (extCourseClassMap == null) { //create new ExtCourseClassMap org = createOrganisation(serverMap, user, extCourseId, extCourseName, countryIsoCode, langIsoCode, parentOrgId, prefix); - map = new ExtCourseClassMap(); - map.setCourseid(extCourseId); - map.setExtServerOrgMap(serverMap); - map.setOrganisation(org); - service.save(map); + extCourseClassMap = new ExtCourseClassMap(); + extCourseClassMap.setCourseid(extCourseId); + extCourseClassMap.setExtServerOrgMap(serverMap); + extCourseClassMap.setOrganisation(org); + service.save(extCourseClassMap); } else { - map = mapList.get(0); - org = map.getOrganisation(); + org = extCourseClassMap.getOrganisation(); // update external course name if if has changed String requestedCourseName = prefix ? buildName(serverMap.getPrefix(), extCourseName) : extCourseName; if (extCourseName != null && !org.getName().equals(requestedCourseName)) { - - //validate org name + + // validate org name if (!ValidationUtil.isOrgNameValid(requestedCourseName)) { throw new UserInfoValidationException( "Can't create organisation due to validation error: " + "organisation name cannot contain any of these characters < > ^ * @ % $. External server:" + serverMap.getServerid() + ", orgId:" + extCourseId + ", orgName:" + requestedCourseName); } - + org.setName(requestedCourseName); service.updateOrganisationandWorkspaceNames(org); } } updateUserRoles(user, org, isTeacher); - return map; + return extCourseClassMap; } private void updateUserRoles(User user, Organisation org, Boolean isTeacher) { @@ -204,6 +214,13 @@ } } } + + public List getExtUserUseridMapByServerMap(ExtServerOrgMap serverMap) { + Map properties = new HashMap(); + properties.put("extServerOrgMap.sid", serverMap.getSid()); + List list = service.findByProperties(ExtUserUseridMap.class, properties); + return list; + } @Override public ExtUserUseridMap getExtUserUseridMap(ExtServerOrgMap serverMap, String extUsername, boolean prefix) @@ -540,7 +557,7 @@ if (extServerLesson != null && StringUtils.isNotBlank(extServerLesson.getExtServer().getLessonFinishUrl())) { ExtServerOrgMap serverMap = extServerLesson.getExtServer(); - ExtUserUseridMap extUserUseridMap = getExistingExtUserUseridMap(serverMap, user); + ExtUserUseridMap extUserUseridMap = getExtUserUseridMapByUserId(serverMap, user.getUserId()); if (extUserUseridMap != null) { String extUsername = extUserUseridMap.getExtUsername(); @@ -571,10 +588,10 @@ } } - private ExtUserUseridMap getExistingExtUserUseridMap(ExtServerOrgMap serverMap, User user) { + private ExtUserUseridMap getExtUserUseridMapByUserId(ExtServerOrgMap serverMap, Integer userId) { Map properties = new HashMap(); properties.put("extServerOrgMap.sid", serverMap.getSid()); - properties.put("user.userId", user.getUserId()); + properties.put("user.userId", userId); List list = service.findByProperties(ExtUserUseridMap.class, properties); if (list == null || list.size() == 0) { return null; Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java =================================================================== diff -u -r093df66baaeb89432c9e5a0351c8fb91cc4a13ac -r61c706419c438d5ef52d93bda3de1f7c415380ae --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision 093df66baaeb89432c9e5a0351c8fb91cc4a13ac) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) @@ -255,6 +255,14 @@ */ SortedMap getOutputFromTool(List names, ToolSession toolSession, Integer learnerId) throws ToolException; + + /** + * Get activity's max possible mark. + * + * @param activity + * @return activity's max possible mark if available, null otherwise + */ + Long getActivityMaxPossibleMark(ToolActivity activity); /** * Update the tool session data. Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java =================================================================== diff -u -r093df66baaeb89432c9e5a0351c8fb91cc4a13ac -r61c706419c438d5ef52d93bda3de1f7c415380ae --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision 093df66baaeb89432c9e5a0351c8fb91cc4a13ac) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) @@ -32,6 +32,7 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.ActivityEvaluation; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.tool.SystemTool; @@ -462,7 +463,44 @@ throw new ToolException(message, e); } } + + @Override + public Long getActivityMaxPossibleMark(ToolActivity activity) { + SortedMap map = getOutputDefinitionsFromTool(activity.getToolContentId(), + ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION); + Set actEvals = activity.getActivityEvaluations(); + + if (map != null) { + for (String key : map.keySet()) { + ToolOutputDefinition definition = map.get(key); + if (actEvals != null && actEvals.size() > 0) { + + // get first evaluation + ActivityEvaluation actEval = actEvals.iterator().next(); + + if (actEval.getToolOutputDefinition().equals(key)) { + + Object upperLimit = definition.getEndValue(); + if (upperLimit != null && upperLimit instanceof Long) { + return (Long) upperLimit; + } + break; + } + } else { + if (definition.isDefaultGradebookMark() != null && definition.isDefaultGradebookMark()) { + Object upperLimit = definition.getEndValue(); + if (upperLimit != null && upperLimit instanceof Long) { + return (Long) upperLimit; + } + break; + } + } + } + } + return null; + } + @Override public void updateToolSession(ToolSession toolSession) { toolSessionDAO.updateToolSession(toolSession); Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -r350e490840216cd99021791b2c6de5be0f2a13a3 -r61c706419c438d5ef52d93bda3de1f7c415380ae --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 350e490840216cd99021791b2c6de5be0f2a13a3) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) @@ -115,6 +115,7 @@ private MessageService messageService; private IAuditService auditService; + @Override @SuppressWarnings("unchecked") public List getGBActivityRowsForLearner(Lesson lesson, User learner) { @@ -138,7 +139,7 @@ GBActivityGridRowDTO activityDTO = new GBActivityGridRowDTO(activity, groupName, groupId); // Set the possible marks if applicable - activityDTO.setMarksAvailable(this.getTotalMarksAvailable(activity)); + activityDTO.setMarksAvailable(toolService.getActivityMaxPossibleMark(activity)); GradebookUserActivity gradebookActivity = gradebookDAO.getGradebookUserDataForActivity( activity.getActivityId(), learner.getUserId()); @@ -178,6 +179,7 @@ return gradebookActivityDTOs; } + @Override @SuppressWarnings("unchecked") public List getGBActivityRowsForLesson(Lesson lesson) { @@ -210,6 +212,7 @@ return gradebookActivityDTOs; } + @Override @SuppressWarnings("unchecked") public List getGBUserRowsForActivity(Lesson lesson, ToolActivity activity, Long groupId) { @@ -230,12 +233,12 @@ if (learners != null) { Map userToLearnerProgressMap = getUserToLearnerProgressMap(lesson); Map userToGradebookUserLessonMap = getUserToGradebookUserActivityMap(activity); - Long totalMarksAvailable = getTotalMarksAvailable(activity); + Long maxPossibleMark = toolService.getActivityMaxPossibleMark(activity); for (User learner : learners) { GBUserGridRowDTO gUserDTO = new GBUserGridRowDTO(learner); - gUserDTO.setMarksAvailable(totalMarksAvailable); + gUserDTO.setMarksAvailable(maxPossibleMark); // Set the progress LearnerProgress learnerProgress = userToLearnerProgressMap.get(learner.getUserId()); @@ -272,6 +275,7 @@ return gradebookUserDTOs; } + @Override @SuppressWarnings("unchecked") public ArrayList getGBUserRowsForLesson(Lesson lesson) { @@ -320,6 +324,7 @@ return gradebookUserDTOs; } + @Override public ArrayList getGBUserRowsForOrganisation(Organisation organisation) { ArrayList gradebookUserDTOs = new ArrayList(); @@ -341,14 +346,22 @@ } + @Override public GradebookUserLesson getGradebookUserLesson(Long lessonID, Integer userID) { return gradebookDAO.getGradebookUserDataForLesson(lessonID, userID); } + + @Override + public List getGradebookUserLesson(Long lessonID) { + return gradebookDAO.getGradebookUserDataForLesson(lessonID); + } + @Override public GradebookUserActivity getGradebookUserActivity(Long activityID, Integer userID) { return gradebookDAO.getGradebookUserDataForActivity(activityID, userID); } + @Override public Double getAverageMarkForActivity(Long activityID, Long groupID) { // return AverageMarkForActivity if groupId is null and AverageMarkForGroupedActivity if groupId is specified Double averageMark; @@ -360,10 +373,12 @@ return averageMark; } + @Override public Double getAverageMarkForLesson(Long lessonID) { return gradebookDAO.getAverageMarkForLesson(lessonID); } + @Override public void updateUserLessonGradebookMark(Lesson lesson, User learner, Double mark) { if (lesson != null && learner != null) { GradebookUserLesson gradebookUserLesson = gradebookDAO.getGradebookUserDataForLesson(lesson.getLessonId(), @@ -386,6 +401,7 @@ } } + @Override public void updateUserActivityGradebookMark(Lesson lesson, User learner, Activity activity, Double mark, Boolean markedInGradebook, boolean isAuditLogRequired) { if (lesson != null && activity != null && learner != null && activity.isToolActivity()) { @@ -429,6 +445,7 @@ } } + @Override public void updateUserLessonGradebookFeedback(Lesson lesson, User learner, String feedback) { GradebookUserLesson gradebookUserLesson = gradebookDAO.getGradebookUserDataForLesson(lesson.getLessonId(), @@ -442,6 +459,7 @@ gradebookDAO.insertOrUpdate(gradebookUserLesson); } + @Override public void updateUserActivityGradebookFeedback(Activity activity, User learner, String feedback) { GradebookUserActivity gradebookUserActivity = gradebookDAO.getGradebookUserDataForActivity( @@ -472,6 +490,7 @@ auditService.log(monitor, GradebookConstants.MODULE_NAME, message); } + @Override @SuppressWarnings("unchecked") public List getGBLessonRows(Organisation organisation, User user, User viewer, GBGridView view) { List lessonRows = new ArrayList(); @@ -627,6 +646,7 @@ return activityToUserDTOMap; } + @Override @SuppressWarnings("unchecked") public LinkedHashMap exportLessonGradebook(Lesson lesson) { @@ -817,6 +837,7 @@ return dataToExport; } + @Override @SuppressWarnings("unchecked") public LinkedHashMap exportCourseGradebook(Integer userId, Integer organisationId) { LinkedHashMap dataToExport = new LinkedHashMap(); @@ -1085,6 +1106,7 @@ return dataToExport; } + @Override public void updateActivityMark(Double mark, String feedback, Integer userID, Long toolSessionID, Boolean markedInGradebook) { ToolSession toolSession = toolService.getToolSessionById(toolSessionID); @@ -1102,6 +1124,7 @@ } } + @Override public Activity getActivityById(Long activityID) { return activityDAO.getActivityByActivityId(activityID); } @@ -1264,7 +1287,7 @@ } // Set the possible marks if applicable - activityDTO.setMarksAvailable(this.getTotalMarksAvailable(activity)); + activityDTO.setMarksAvailable(toolService.getActivityMaxPossibleMark(activity)); String monitorUrl = Configuration.get(ConfigurationKeys.SERVER_URL) + activity.getTool().getMonitorUrl() + "?" + AttributeNames.PARAM_CONTENT_FOLDER_ID + "=" + lesson.getLearningDesign().getContentFolderID() + "&" @@ -1427,48 +1450,6 @@ } /** - * Gets the - * - * @param activity - * @return - */ - private Long getTotalMarksAvailable(ToolActivity activity) { - SortedMap map = toolService.getOutputDefinitionsFromTool( - activity.getToolContentId(), ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION); - - Set actEvals = activity.getActivityEvaluations(); - - if (map != null) { - for (String key : map.keySet()) { - ToolOutputDefinition definition = map.get(key); - if (actEvals != null && actEvals.size() > 0) { - - // get first evaluation - ActivityEvaluation actEval = actEvals.iterator().next(); - - if (actEval.getToolOutputDefinition().equals(key)) { - - Object upperLimit = definition.getEndValue(); - if (upperLimit != null && upperLimit instanceof Long) { - return (Long) upperLimit; - } - break; - } - } else { - if (definition.isDefaultGradebookMark() != null && definition.isDefaultGradebookMark()) { - Object upperLimit = definition.getEndValue(); - if (upperLimit != null && upperLimit instanceof Long) { - return (Long) upperLimit; - } - break; - } - } - } - } - return null; - } - - /** * Returns map containing (userId -> LearnerProgressMap) pairs. It serves merely for optimizing amount of db * queries. */ @@ -1520,7 +1501,7 @@ Map map = new HashMap(); for (ToolActivity activity : activities) { - map.put(activity.getActivityId(), getTotalMarksAvailable(activity)); + map.put(activity.getActivityId(), toolService.getActivityMaxPossibleMark(activity)); } return map; @@ -1593,11 +1574,12 @@ return new HashMap(); } + @Override public String getMessage(String key) { return messageService.getMessage(key); } - public String getMessage(String key, Object[] args) { + private String getMessage(String key, Object[] args) { return messageService.getMessage(key, args); }