Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -rf5cf4729d786b6f0459f5fc6ab6fda45aec2ed1e -r9357467901bacb28df24a695ec35e99434ebbea9 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/IGradebookDAO.java =================================================================== diff -u -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b -r9357467901bacb28df24a695ec35e99434ebbea9 --- lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/IGradebookDAO.java (.../IGradebookDAO.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) +++ lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/IGradebookDAO.java (.../IGradebookDAO.java) (revision 9357467901bacb28df24a695ec35e99434ebbea9) @@ -98,4 +98,6 @@ * @return */ List getGradebookUserLessons(Lesson lesson, List userIds); + + List getGradebookUserLessons(List lessonIds); } Index: lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/hibernate/GradebookDAO.java =================================================================== diff -u -rac84da2cbb3fef1c22b40cdf3d3bf2c88dc180d2 -r9357467901bacb28df24a695ec35e99434ebbea9 --- lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/hibernate/GradebookDAO.java (.../GradebookDAO.java) (revision ac84da2cbb3fef1c22b40cdf3d3bf2c88dc180d2) +++ lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/hibernate/GradebookDAO.java (.../GradebookDAO.java) (revision 9357467901bacb28df24a695ec35e99434ebbea9) @@ -600,4 +600,16 @@ .setLong("lessonId", lesson.getLessonId()).setParameterList("userIds", userIds).list(); return results; } + + @Override + public List getGradebookUserLessons(List lessonIds) { + final String GET_GRADEBOOK_LEARNER_LESSONS_BY_LESSON_LIST = "FROM GradebookUserLesson ul WHERE " + + " ul.lesson.lessonId IN (:lessonIds)"; + + List gradebookUserLessons = getSession() + .createQuery(GET_GRADEBOOK_LEARNER_LESSONS_BY_LESSON_LIST).setParameterList("lessonIds", lessonIds) + .list(); + + return gradebookUserLessons; + } } Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java =================================================================== diff -u -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b -r9357467901bacb28df24a695ec35e99434ebbea9 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java (.../ILearnerProgressDAO.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java (.../ILearnerProgressDAO.java) (revision 9357467901bacb28df24a695ec35e99434ebbea9) @@ -110,6 +110,14 @@ * @return */ List getLearnerProgressForLesson(final Long lessonId, final List userIds); + + /** + * Get all the learner progresses for a lesson list. + * + * @param lessonIds + * @return + */ + List getLearnerProgressForLessons(final List lessonIds); /** * Get all the users records where the user has attempted the given activity. Uses the progress records to determine Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java =================================================================== diff -u -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b -r9357467901bacb28df24a695ec35e99434ebbea9 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java (.../LearnerProgressDAO.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java (.../LearnerProgressDAO.java) (revision 9357467901bacb28df24a695ec35e99434ebbea9) @@ -57,10 +57,16 @@ + " index(compAct) = act"; private final static String COUNT_PROGRESS_BY_LESSON = "select count(*) from LearnerProgress p where p.lesson.id = :lessonId"; + private final static String LOAD_PROGRESS_BY_LESSON = "from LearnerProgress p " + " where p.lesson.id = :lessonId order by p.user.lastName, p.user.firstName, p.user.userId"; + private final static String LOAD_PROGRESS_BY_LESSON_AND_USER_IDS = "from LearnerProgress p " - + " where p.lesson.id = :lessonId AND p.user.userId IN (:userIds) order by p.user.lastName, p.user.firstName, p.user.userId"; + + " where p.lesson.id = :lessonId AND p.user.userId IN (:userIds) order by p.user.lastName, p.user.firstName, p.user.userId"; + + private final String LOAD_PROGRESSES_BY_LESSON_LIST = "FROM LearnerProgress progress WHERE " + + " progress.lesson.lessonId IN (:lessonIds)"; + private final static String LOAD_NEXT_BATCH_PROGRESS_BY_LESSON = "from LearnerProgress p where p.lesson.id = :lessonId " + " and (( p.user.lastName > :lastUserLastName)" + " or ( p.user.lastName = :lastUserLastName and p.user.firstName > :lastUserFirstName) " @@ -117,6 +123,11 @@ } @Override + public List getLearnerProgressForLessons(final List lessonIds) { + return getSession().createQuery(LOAD_PROGRESSES_BY_LESSON_LIST).setParameterList("lessonIds", lessonIds).list(); + } + + @Override @SuppressWarnings("unchecked") public List getLearnersHaveAttemptedActivity(final Activity activity) { List learners = (List) getSession().getNamedQuery("usersAttemptedActivity") Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java =================================================================== diff -u -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b -r9357467901bacb28df24a695ec35e99434ebbea9 --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision 9357467901bacb28df24a695ec35e99434ebbea9) @@ -387,19 +387,6 @@ * @return learner's progress */ List getUserProgressForLesson(Long lessonId); - - - /** - * Gets the progresses for learners from supplied userIds list in a particular lesson. - * - * @param lessonId - * lesson's id - * @param userIds - * supplied userIds list - * @return learner's progress - */ - List getUserProgressForLesson(Long lessonId, List userIds); - /** * Gets list of lessons which are originally based on the given learning design id. Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java =================================================================== diff -u -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b -r9357467901bacb28df24a695ec35e99434ebbea9 --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision 9357467901bacb28df24a695ec35e99434ebbea9) @@ -626,12 +626,6 @@ List list = learnerProgressDAO.getLearnerProgressForLesson(lessonId); return list; } - - @Override - public List getUserProgressForLesson(Long lessonId, List userIds) { - List list = learnerProgressDAO.getLearnerProgressForLesson(lessonId, userIds); - return list; - } @Override public List getLessonsByOriginalLearningDesign(Long ldId, Integer orgId) { Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java =================================================================== diff -u -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b -r9357467901bacb28df24a695ec35e99434ebbea9 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java (.../GBActivityGridRowDTO.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java (.../GBActivityGridRowDTO.java) (revision 9357467901bacb28df24a695ec35e99434ebbea9) @@ -41,7 +41,6 @@ private String competences; // Properties for user view - private String output; private String activityUrl; private Date startDate; @@ -137,14 +136,6 @@ return ret; } - public String getOutput() { - return output; - } - - public void setOutput(String output) { - this.output = output; - } - public String getCompetences() { return competences; } Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBUserGridRowDTO.java =================================================================== diff -u -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b -r9357467901bacb28df24a695ec35e99434ebbea9 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBUserGridRowDTO.java (.../GBUserGridRowDTO.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBUserGridRowDTO.java (.../GBUserGridRowDTO.java) (revision 9357467901bacb28df24a695ec35e99434ebbea9) @@ -35,7 +35,6 @@ // For activity view private Date startDate; - private String output; private String activityUrl; // For excel export @@ -95,14 +94,6 @@ return ret; } - public String getOutput() { - return output; - } - - public void setOutput(String output) { - this.output = output; - } - public String getActivityUrl() { return activityUrl; } Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/gradebookApplicationContext.xml =================================================================== diff -u -ra6641bf9262a01d07740a517643f8fe187ec5b1f -r9357467901bacb28df24a695ec35e99434ebbea9 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/gradebookApplicationContext.xml (.../gradebookApplicationContext.xml) (revision a6641bf9262a01d07740a517643f8fe187ec5b1f) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/gradebookApplicationContext.xml (.../gradebookApplicationContext.xml) (revision 9357467901bacb28df24a695ec35e99434ebbea9) @@ -17,8 +17,8 @@ - - + + Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b -r9357467901bacb28df24a695ec35e99434ebbea9 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 9357467901bacb28df24a695ec35e99434ebbea9) @@ -28,7 +28,6 @@ import java.util.Collection; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -37,7 +36,6 @@ import java.util.Locale; import java.util.Map; import java.util.Set; -import java.util.SortedMap; import java.util.TimeZone; import java.util.TreeSet; @@ -63,10 +61,8 @@ import org.lamsfoundation.lams.lesson.CompletedActivityProgress; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.lesson.dao.ILearnerProgressDAO; import org.lamsfoundation.lams.lesson.service.ILessonService; -import org.lamsfoundation.lams.tool.OutputType; -import org.lamsfoundation.lams.tool.ToolOutput; -import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.service.ILamsCoreToolService; import org.lamsfoundation.lams.usermanagement.Organisation; @@ -100,6 +96,7 @@ // Services private ILamsCoreToolService toolService; private IGradebookDAO gradebookDAO; + private ILearnerProgressDAO learnerProgressDAO; private ILessonService lessonService; private IUserManagementService userService; private IBaseDAO baseDAO; @@ -161,7 +158,6 @@ activityDTO.setActivityUrl(Configuration.get(ConfigurationKeys.SERVER_URL) + activity.getTool().getLearnerProgressUrl() + "&userID=" + learner.getUserId() + "&toolSessionID=" + toolSession.getToolSessionId().toString()); -// activityDTO.setOutput(this.getToolOutputsStr(activity, null, toolSession, learner)); } } @@ -265,8 +261,6 @@ gUserDTO.setActivityUrl(Configuration.get(ConfigurationKeys.SERVER_URL) + activity.getTool().getLearnerProgressUrl() + "&userID=" + learner.getUserId() + "&toolSessionID=" + toolSession.getToolSessionId().toString()); - -// gUserDTO.setOutput(this.getToolOutputsStr(activity, null, toolSession, learner)); } } @@ -312,7 +306,6 @@ userToGradebookUserLessonMap = getUserToGradebookUserLessonMap(lesson, learners); } - for (User learner : learners) { LearnerProgress learnerProgress = userToLearnerProgressMap.get(learner.getUserId()); GBUserGridRowDTO gradebookUserDTO = new GBUserGridRowDTO(learner); @@ -622,56 +615,24 @@ learners = new TreeSet(); } Map userToLearnerProgressMap = getUserToLearnerProgressMap(lesson, null); - List toolSessions = toolService.getToolSessionsByLesson(lesson); Set activities = getLessonActivities(lesson); - Map activityToTotalMarkMap = getActivityToTotalMarkMap(activities); for (ToolActivity activity : activities) { Map userToGradebookUserActivityMap = getUserToGradebookUserActivityMap(activity, null); List userDTOs = new ArrayList(); - SortedMap toolOutputNames = toolService.getOutputDefinitionsFromTool( - activity.getToolContentId(), ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION); - for (User learner : learners) { GBUserGridRowDTO userDTO = new GBUserGridRowDTO(learner); - Long activityTotalMarks = activityToTotalMarkMap.get(activity.getActivityId()); - userDTO.setMarksAvailable(activityTotalMarks); - // Set the progress LearnerProgress learnerProgress = userToLearnerProgressMap.get(learner.getUserId()); userDTO.setTimeTaken(getActivityDuration(learnerProgress, activity)); - // find required toolSession from toolSessions (thus we don't querying DB and hence increasing - // efficiency). - ToolSession toolSession = null; - for (ToolSession dbToolSession : toolSessions) { - if (dbToolSession.getToolActivity().getActivityId().equals(activity.getActivityId()) - && dbToolSession.getLearners().contains(learner)) { - toolSession = dbToolSession; - } - } - - // Get the tool outputs for this user if there are any. - if ((toolSession != null) && (learnerProgress != null)) { - // Set the activityLearner URL for this gradebook activity - byte activityState = learnerProgress.getProgressState(activity); - if ((activityState == LearnerProgress.ACTIVITY_ATTEMPTED) - || (activityState == LearnerProgress.ACTIVITY_COMPLETED)) { - userDTO.setActivityUrl(Configuration.get(ConfigurationKeys.SERVER_URL) - + activity.getTool().getLearnerProgressUrl() + "&userID=" + learner.getUserId() - + "&toolSessionID=" + toolSession.getToolSessionId().toString()); - userDTO.setOutput(this.getToolOutputsStr(activity, toolOutputNames, toolSession, learner)); - } - } - // Add marks and feedback GradebookUserActivity gradebookUserActivity = userToGradebookUserActivityMap.get(learner.getUserId()); if (gradebookUserActivity != null) { - userDTO.setFeedback(gradebookUserActivity.getFeedback()); userDTO.setMark(gradebookUserActivity.getMark()); } userDTOs.add(userDTO); @@ -771,27 +732,25 @@ for (Activity activity : activityToUserDTOMap.keySet()) { - ExcelCell[] activityTitleRow = new ExcelCell[5]; + ExcelCell[] activityTitleRow = new ExcelCell[4]; activityTitleRow[0] = new ExcelCell(activity.getTitle(), true); rowList1.add(activityTitleRow); - ExcelCell[] titleRow = new ExcelCell[5]; + ExcelCell[] titleRow = new ExcelCell[4]; titleRow[0] = new ExcelCell(getMessage("gradebook.export.last.name"), true); titleRow[1] = new ExcelCell(getMessage("gradebook.export.first.name"), true); titleRow[2] = new ExcelCell(getMessage("gradebook.export.time.taken.seconds"), true); - titleRow[3] = new ExcelCell(getMessage("gradebook.export.outputs"), true); - titleRow[4] = new ExcelCell(getMessage("gradebook.columntitle.mark"), true); + titleRow[3] = new ExcelCell(getMessage("gradebook.columntitle.mark"), true); rowList1.add(titleRow); // Get the rest of the data - List userRows2 = activityToUserDTOMap.get(activity); - for (GBUserGridRowDTO userRow : userRows2) { - ExcelCell[] userDataRow = new ExcelCell[5]; + List userDtos = activityToUserDTOMap.get(activity); + for (GBUserGridRowDTO userDto : userDtos) { + ExcelCell[] userDataRow = new ExcelCell[4]; - userDataRow[0] = new ExcelCell(userRow.getLastName(), false); - userDataRow[1] = new ExcelCell(userRow.getFirstName(), false); - userDataRow[2] = new ExcelCell(userRow.getTimeTakenSeconds(), false); - userDataRow[3] = new ExcelCell(userRow.getOutput(), false); - userDataRow[4] = new ExcelCell(userRow.getMark(), false); + userDataRow[0] = new ExcelCell(userDto.getLastName(), false); + userDataRow[1] = new ExcelCell(userDto.getFirstName(), false); + userDataRow[2] = new ExcelCell(userDto.getTimeTakenSeconds(), false); + userDataRow[3] = new ExcelCell(userDto.getMark(), false); rowList1.add(userDataRow); } @@ -801,27 +760,38 @@ ExcelCell[][] activityData = rowList1.toArray(new ExcelCell[][] {}); dataToExport.put(getMessage("gradebook.gridtitle.activitygrid"), activityData); - // -------------------- process user excel page -------------------------------- + // -------------------- process Learner View page -------------------------------- Set learners = lesson.getAllLearners(); if (learners == null) { learners = new TreeSet(); } - LinkedList rowList2 = new LinkedList(); + rowList = new LinkedList(); for (User learner : learners) { - List activityDTOs = new ArrayList(); + userTitleRow = new ExcelCell[4]; + userTitleRow[0] = new ExcelCell(learner.getFullName(), true); + rowList.add(userTitleRow); + + ExcelCell[] titleRow = new ExcelCell[3]; + titleRow[0] = new ExcelCell(getMessage("gradebook.export.activity"), true); + titleRow[1] = new ExcelCell(getMessage("gradebook.export.time.taken.seconds"), true); + titleRow[2] = new ExcelCell(getMessage("gradebook.columntitle.mark"), true); + rowList.add(titleRow); + for (ToolActivity activity : activityToUserDTOMap.keySet()) { - List userDTOs = activityToUserDTOMap.get(activity); - GBUserGridRowDTO userDTO = null; - for (GBUserGridRowDTO dbUserDTO : userDTOs) { + //find userDto corresponding to the user + List userDtos = activityToUserDTOMap.get(activity); + GBUserGridRowDTO userDto = null; + for (GBUserGridRowDTO dbUserDTO : userDtos) { if (dbUserDTO.getId().equals(learner.getUserId().toString())) { - userDTO = dbUserDTO; + userDto = dbUserDTO; } } - + + //construct activityRowName String groupName = null; Long groupId = null; if (activity.getGrouping() != null) { @@ -831,43 +801,20 @@ groupId = group.getGroupId(); } } - GBActivityGridRowDTO activityDTO = new GBActivityGridRowDTO(activity, groupName, groupId); - activityDTO.setMarksAvailable(userDTO.getMarksAvailable()); - activityDTO.setStatus(userDTO.getStatus()); - activityDTO.setStartDate(userDTO.getStartDate()); - activityDTO.setTimeTaken(userDTO.getTimeTaken()); - activityDTO.setActivityUrl(userDTO.getActivityUrl()); - activityDTO.setOutput(userDTO.getOutput()); - activityDTO.setFeedback(userDTO.getFeedback()); - activityDTO.setMark(userDTO.getMark()); - - activityDTOs.add(activityDTO); + String activityRowName = (groupName != null && groupId != null) ? StringEscapeUtils.escapeHtml(activity + .getTitle()) + " (" + groupName + ")" : StringEscapeUtils.escapeHtml(activity.getTitle()); + + ExcelCell[] activityDataRow = new ExcelCell[3]; + activityDataRow[0] = new ExcelCell(activityRowName, false); + activityDataRow[1] = new ExcelCell(userDto.getTimeTakenSeconds(), false); + activityDataRow[2] = new ExcelCell(userDto.getMark(), false); + rowList.add(activityDataRow); } - ExcelCell[] activityTitleRow = new ExcelCell[4]; - activityTitleRow[0] = new ExcelCell(learner.getFullName(), true); - rowList2.add(activityTitleRow); - - ExcelCell[] titleRow = new ExcelCell[4]; - titleRow[0] = new ExcelCell(getMessage("gradebook.export.activity"), true); - titleRow[1] = new ExcelCell(getMessage("gradebook.export.time.taken.seconds"), true); - titleRow[2] = new ExcelCell(getMessage("gradebook.export.outputs"), true); - titleRow[3] = new ExcelCell(getMessage("gradebook.columntitle.mark"), true); - rowList2.add(titleRow); - - for (GBActivityGridRowDTO activityRow : activityDTOs) { - ExcelCell[] activityDataRow = new ExcelCell[4]; - activityDataRow[0] = new ExcelCell(activityRow.getRowName(), false); - activityDataRow[1] = new ExcelCell(activityRow.getTimeTakenSeconds(), false); - activityDataRow[2] = new ExcelCell(activityRow.getOutput(), false); - activityDataRow[3] = new ExcelCell(activityRow.getMark(), false); - rowList2.add(activityDataRow); - } - - rowList2.add(GradebookService.EMPTY_ROW); + rowList.add(GradebookService.EMPTY_ROW); } - ExcelCell[][] userData = rowList2.toArray(new ExcelCell[][] {}); + ExcelCell[][] userData = rowList.toArray(new ExcelCell[][] {}); dataToExport.put(getMessage("gradebook.export.learner.view"), userData); return dataToExport; @@ -878,38 +825,14 @@ public LinkedHashMap exportCourseGradebook(Integer userId, Integer organisationId) { LinkedHashMap dataToExport = new LinkedHashMap(); - Organisation organisation = (Organisation) userService.findById(Organisation.class, organisationId); - // The entire data list List rowList = new LinkedList(); - User user = (User) userService.findById(User.class, userId); - Set lessonsFromDB = new TreeSet(new LessonComparator()); - lessonsFromDB.addAll(lessonService.getLessonsByGroupAndUser(userId, organisationId)); + Set lessons = new TreeSet(new LessonComparator()); + lessons.addAll(lessonService.getLessonsByGroupAndUser(userId, organisationId)); - // Dont include lesson in list if the user doesnt have permission - Integer organisationToCheckPermission = (organisation.getOrganisationType().getOrganisationTypeId() - .equals(OrganisationType.COURSE_TYPE)) ? organisation.getOrganisationId() : organisation - .getParentOrganisation().getOrganisationId(); - boolean isGroupManager = userService.isUserInRole(userId, organisationToCheckPermission, Role.GROUP_MANAGER); - List lessons = new LinkedList(); - for (Lesson lesson : lessonsFromDB) { - if (!(lesson.getLessonClass().isStaffMember(user) || isGroupManager)) { - continue; - } - - lessons.add(lesson); - } - if ((lessons != null) && (lessons.size() > 0)) { - // collect users from all lessons - Set allLearners = new LinkedHashSet(); - for (Lesson lesson : lessons) { - Set dbLessonUsers = lesson.getAllLearners(); - allLearners.addAll(dbLessonUsers); - } - int numberOfCellsInARow = 2 + (lessons.size() * 4); // Adding the user lesson marks to the summary---------------------- @@ -939,19 +862,86 @@ } rowList.add(headerRow); + // collect users from all lessons + Set allLearners = new LinkedHashSet(); + List lessonIds = new LinkedList(); + for (Lesson lesson : lessons) { + Set dbLessonUsers = lesson.getAllLearners(); + allLearners.addAll(dbLessonUsers); + lessonIds.add(lesson.getLessonId()); + } + + // Fetching the user data + List learnerProgresses; + List gradebookUserLessons; + if (allLearners == null || allLearners.isEmpty()) { + learnerProgresses = new LinkedList(); + gradebookUserLessons = new LinkedList(); + + } else { + learnerProgresses = learnerProgressDAO.getLearnerProgressForLessons(lessonIds); + gradebookUserLessons = gradebookDAO.getGradebookUserLessons(lessonIds); + } + for (User learner : allLearners) { - // Fetching the user data - List userRows = getGBUserRowsForUser(learner, lessons, organisationId); i = 0; ExcelCell[] userDataRow = new ExcelCell[numberOfCellsInARow]; userDataRow[i++] = new ExcelCell(learner.getLastName(), false); userDataRow[i++] = new ExcelCell(learner.getFirstName(), false); - for (GBUserGridRowDTO userRow : userRows) { - userDataRow[i++] = new ExcelCell(getProgressMessage(userRow), false); - userDataRow[i++] = new ExcelCell(userRow.getTimeTakenSeconds(), false); - userDataRow[i++] = new ExcelCell(userRow.getFeedback(), false); - userDataRow[i++] = new ExcelCell(userRow.getMark(), false); + for (Lesson lesson : lessons) { + GBUserGridRowDTO userDto = new GBUserGridRowDTO(learner); + + // check if learner is participating in this lesson + if (lesson.getAllLearners().contains(learner)) { + + //find according learnerProgress + LearnerProgress learnerProgress = null; + for (LearnerProgress learnerProgressIter : learnerProgresses) { + if (learnerProgressIter.getUser().getUserId().equals(learner.getUserId()) + && learnerProgressIter.getLesson().getLessonId().equals(lesson.getLessonId())) { + learnerProgress = learnerProgressIter; + } + } + + // Setting the status for the user's lesson + userDto.setStatus(getLessonStatusStr(learnerProgress)); + + // set current activity if available + if ((learnerProgress != null) && (learnerProgress.getCurrentActivity() != null)) { + userDto.setCurrentActivity(learnerProgress.getCurrentActivity().getTitle()); + } + + // calculate time taken + if (learnerProgress != null) { + if ((learnerProgress.getStartDate() != null) && (learnerProgress.getFinishDate() != null)) { + userDto.setTimeTaken(learnerProgress.getFinishDate().getTime() + - learnerProgress.getStartDate().getTime()); + } + } + + //find according learnerProgress + GradebookUserLesson gradebookUserLesson = null; + for (GradebookUserLesson gradebookUserLessonIter : gradebookUserLessons) { + if (gradebookUserLessonIter.getLearner().getUserId().equals(learner.getUserId()) + && gradebookUserLessonIter.getLesson().getLessonId().equals(lesson.getLessonId())) { + gradebookUserLesson = gradebookUserLessonIter; + } + } + + if (gradebookUserLesson != null) { + userDto.setMark(gradebookUserLesson.getMark()); + userDto.setFeedback(gradebookUserLesson.getFeedback()); + } + } else { + userDto.setStatus("n/a"); + } + + //all of GBUserGridRowDTOs will be displayed on 1 line on course export. + userDataRow[i++] = new ExcelCell(getProgressMessage(userDto), false); + userDataRow[i++] = new ExcelCell(userDto.getTimeTakenSeconds(), false); + userDataRow[i++] = new ExcelCell(userDto.getFeedback(), false); + userDataRow[i++] = new ExcelCell(userDto.getMark(), false); } rowList.add(userDataRow); @@ -1197,58 +1187,6 @@ } /** - * Returns list of GBUserGridRowDTOs, all of which will be displayed on 1 line on course export. - * - * @param learner - * @param lessons - * @return - */ - private List getGBUserRowsForUser(User learner, List lessons, Integer organisationId) { - - List gradebookUserDTOs = new LinkedList(); - Map lessonLearnerProgressMap = getLessonToLearnerProgressMap(learner, organisationId); - Map gradebookUserLessonMap = getLessonToGradebookUserLessonMap(learner, - organisationId); - - for (Lesson lesson : lessons) { - GBUserGridRowDTO gradebookUserDTO = new GBUserGridRowDTO(learner); - - // check if learner is participating in this lesson - if (lesson.getAllLearners().contains(learner)) { - // Setting the status and time taken for the user's lesson - LearnerProgress learnerProgress = lessonLearnerProgressMap.get(lesson.getLessonId()); - gradebookUserDTO.setStatus(getLessonStatusStr(learnerProgress)); - - // set current activity if available - if ((learnerProgress != null) && (learnerProgress.getCurrentActivity() != null)) { - gradebookUserDTO.setCurrentActivity(learnerProgress.getCurrentActivity().getTitle()); - } - - // calculate time taken - if (learnerProgress != null) { - if ((learnerProgress.getStartDate() != null) && (learnerProgress.getFinishDate() != null)) { - gradebookUserDTO.setTimeTaken(learnerProgress.getFinishDate().getTime() - - learnerProgress.getStartDate().getTime()); - } - } - - GradebookUserLesson gradebookUserLesson = gradebookUserLessonMap.get(lesson.getLessonId()); - if (gradebookUserLesson != null) { - gradebookUserDTO.setMark(gradebookUserLesson.getMark()); - gradebookUserDTO.setFeedback(gradebookUserLesson.getFeedback()); - } - } else { - gradebookUserDTO.setStatus("n/a"); - } - - gradebookUserDTOs.add(gradebookUserDTO); - } - - return gradebookUserDTOs; - - } - - /** * Gets the internationalised date * * @param user @@ -1429,64 +1367,6 @@ } /** - * Gets the outputs for a tool activity and returns the html for the ouputs cell in the grid - * - * @param toolAct - * @param toolOutputNames - * optional parameter which should be used when this object is already available and there is no need - * quering it from DB. if passing null it will be requested from DB - * @param toolSession - * @param learner - * @return - */ - private String getToolOutputsStr(ToolActivity toolAct, SortedMap toolOutputNames, - ToolSession toolSession, User learner) { - String toolOutputsStr = ""; - boolean noOutputs = true; - - if ((toolAct != null) && (toolSession != null) && (learner != null)) { - - if (toolOutputNames == null) { - toolOutputNames = toolService.getOutputDefinitionsFromTool(toolAct.getToolContentId(), - ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION); - } - - Set toolOutputs = new HashSet(); - - if (toolOutputNames.keySet().size() > 0) { - - for (String outputName : toolOutputNames.keySet()) { - - try { - ToolOutput toolOutput = toolService.getOutputFromTool(outputName, toolSession, - learner.getUserId()); - - if ((toolOutput != null) && (toolOutput.getValue().getType() != OutputType.OUTPUT_COMPLEX)) { - toolOutputs.add(toolOutput); - - toolOutputsStr += toolOutput.getDescription() + ": " + toolOutput.getValue().getString(); - toolOutputsStr += "
"; - - noOutputs = false; - } - - } catch (RuntimeException e) { - GradebookService.logger.debug("Runtime exception when attempted to get outputs for activity: " - + toolAct.getActivityId() + ", continuing for other activities", e); - } - } - } - } - - // Fix up outputs html if there are not outputs available - if (noOutputs) { - toolOutputsStr = "-"; - } - - return toolOutputsStr; - } - - /** * Returns map containing (userId -> LearnerProgressMap) pairs. It serves merely for optimizing amount of db * queries. * @@ -1510,7 +1390,7 @@ userIds.add(learner.getUserId()); } - learnerProgresses = lessonService.getUserProgressForLesson(lesson.getLessonId(), userIds); + learnerProgresses = learnerProgressDAO.getLearnerProgressForLesson(lesson.getLessonId(), userIds); } if (learnerProgresses != null) { @@ -1570,28 +1450,6 @@ return map; } - - /** - * Returns map containing (lessonId -> LearnerProgress) pairs. It serves merely for optimizing amount of db queries. - */ - private Map getLessonToLearnerProgressMap(User user, Integer organisationId) { - - if (user != null) { - String query = "select lp from LearnerProgress lp where lp.user.userId=? and (lp.lesson.organisation.organisationId=? or lp.lesson.organisation.parentOrganisation.organisationId=?)"; - List learnerProgressList = baseDAO.find(query, new Object[] { user.getUserId(), - organisationId, organisationId }); - - if ((learnerProgressList != null) && (learnerProgressList.size() > 0)) { - Map map = new HashMap(); - for (LearnerProgress learnerProgress : learnerProgressList) { - map.put(learnerProgress.getLesson().getLessonId(), learnerProgress); - } - return map; - } - } - - return new HashMap(); - } /** * Returns map containing (userId -> GradebookUserLesson) pairs. It serves merely for optimizing amount of db @@ -1627,32 +1485,8 @@ } return map; - } - /** - * Returns map containing (lessonId -> GradebookUserLesson) pairs. It serves merely for optimizing amount of db - * queries. - */ - private Map getLessonToGradebookUserLessonMap(User user, Integer organisationId) { - - if (user != null) { - String query = "select ul from GradebookUserLesson ul where ul.learner.userId=? and (ul.lesson.organisation.organisationId=? or ul.lesson.organisation.parentOrganisation.organisationId=?)"; - List gradebookUserLessons = baseDAO.find(query, new Object[] { user.getUserId(), - organisationId, organisationId }); - - if ((gradebookUserLessons != null) && (gradebookUserLessons.size() > 0)) { - Map map = new HashMap(); - for (GradebookUserLesson gradebookUserLesson : gradebookUserLessons) { - map.put(gradebookUserLesson.getLesson().getLessonId(), gradebookUserLesson); - } - return map; - } - } - - return new HashMap(); - } - @Override public String getMessage(String key) { return messageService.getMessage(key); @@ -1683,6 +1517,10 @@ public void setGradebookDAO(IGradebookDAO gradebookDAO) { this.gradebookDAO = gradebookDAO; } + + public void setLearnerProgressDAO(ILearnerProgressDAO learnerProgressDAO) { + this.learnerProgressDAO = learnerProgressDAO; + } public ILessonService getLessonService() { return lessonService; Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookMonitoringAction.java =================================================================== diff -u -r67025330e3769a7533e328faec8a1bd6dfffb36d -r9357467901bacb28df24a695ec35e99434ebbea9 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookMonitoringAction.java (.../GradebookMonitoringAction.java) (revision 67025330e3769a7533e328faec8a1bd6dfffb36d) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookMonitoringAction.java (.../GradebookMonitoringAction.java) (revision 9357467901bacb28df24a695ec35e99434ebbea9) @@ -327,8 +327,8 @@ HttpServletResponse response) throws Exception { Integer organisationID = WebUtil.readIntParam(request, AttributeNames.PARAM_ORGANISATION_ID); UserDTO user = getUser(); - if (!getSecurityService().isGroupMonitor(organisationID, user.getUserID(), - "export course gradebook spreadsheet", false)) { + if (!getSecurityService().hasOrgRole(organisationID, user.getUserID(), + new String[] { Role.GROUP_MANAGER, Role.GROUP_ADMIN }, "get course gradebook spreadsheet", false)) { response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a monitor in the organisation"); return null; }