Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== RCS file: /usr/local/cvsroot/lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java,v diff -u -r1.15 -r1.16 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java 12 Aug 2011 12:30:56 -0000 1.15 +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java 15 Aug 2011 09:10:49 -0000 1.16 @@ -77,12 +77,9 @@ import org.lamsfoundation.lams.web.util.AttributeNames; /** - * @author lfoxton * * This service handles all gradebook-related service calls * - */ -/** * @author lfoxton * */ @@ -484,7 +481,7 @@ } LearnerProgress learnerProgress = getLearnerProgress(lesson, user); - lessonRow.setStatus(getLessonStatusStr(lesson, learnerProgress, user)); + lessonRow.setStatus(getLessonStatusStr(learnerProgress)); if (learnerProgress != null) { if (learnerProgress.getStartDate() != null && learnerProgress.getFinishDate() != null) { lessonRow.setTimeTaken(learnerProgress.getFinishDate().getTime() @@ -743,8 +740,11 @@ //collect users from all lessons Set allLearners = new LinkedHashSet(); + Map> lessonUsers = new HashMap>(); for (Lesson lesson : lessons) { - allLearners.addAll(lesson.getAllLearners()); + Set dbLessonUsers = lesson.getAllLearners(); + lessonUsers.put(lesson.getLessonId(), dbLessonUsers); + allLearners.addAll(dbLessonUsers); } int numberOfCellsInARow = 2 + lessons.size()*4; @@ -778,7 +778,7 @@ for (User learner : allLearners) { // Fetching the user data - List userRows = getGBUserRowsForUser(learner, lessons); + List userRows = getGBUserRowsForUser(learner, lessons, lessonUsers); i = 0; ExcelCell[] userDataRow = new ExcelCell[numberOfCellsInARow]; userDataRow[i++] = new ExcelCell(learner.getLastName(), false); @@ -831,11 +831,24 @@ * @param lessons * @return */ - private List getGBUserRowsForUser(User learner, List lessons) { + private List getGBUserRowsForUser(User learner, List lessons, Map> lessonUsers) { List gradebookUserDTOs = new LinkedList(); for (Lesson lesson : lessons) { - GBUserGridRowDTO gradebookUserDTO = populateGradebookUserDTO(learner, lesson); + GBUserGridRowDTO gradebookUserDTO; + + //check if learner is participating in this lesson + if (lessonUsers.get(lesson.getLessonId()).contains(learner)) { + gradebookUserDTO = populateGradebookUserDTO(learner, lesson); + } else { + gradebookUserDTO = new GBUserGridRowDTO(); + gradebookUserDTO.setId(learner.getUserId().toString()); + gradebookUserDTO.setRowName(learner.getLastName() + " " + learner.getFirstName()); + gradebookUserDTO.setFirstName(learner.getFirstName()); + gradebookUserDTO.setLastName(learner.getLastName()); + gradebookUserDTO.setStatus("n/a"); + } + gradebookUserDTOs.add(gradebookUserDTO); } @@ -860,7 +873,7 @@ // Setting the status and time taken for the user's lesson LearnerProgress learnerProgress = getLearnerProgress(lesson, learner); - gradebookUserDTO.setStatus(getLessonStatusStr(lesson, learnerProgress, learner)); + gradebookUserDTO.setStatus(getLessonStatusStr(learnerProgress)); // set current activity if available if ((learnerProgress != null) && (learnerProgress.getCurrentActivity() != null)) { @@ -1101,22 +1114,18 @@ * @param learnerProgress * @return */ - private String getLessonStatusStr(Lesson lesson, LearnerProgress learnerProgress, User user) { - final String IMAGES_DIR = Configuration.get(ConfigurationKeys.SERVER_URL) + "images"; + private String getLessonStatusStr(LearnerProgress learnerProgress) { + String status = "-"; - String status; - if ((learnerProgress != null) && learnerProgress.isComplete()) { - status = ""; - } else if ((learnerProgress != null) && (learnerProgress.getAttemptedActivities() != null) - && (learnerProgress.getAttemptedActivities().size() > 0)) { - status = ""; - } else if (lesson.getAllLearners().contains(user)) { - status = "-"; - } else { - status = "n/a"; + final String IMAGES_DIR = Configuration.get(ConfigurationKeys.SERVER_URL) + "images"; + if (learnerProgress != null) { + if (learnerProgress.isComplete()) { + status = ""; + } else if (learnerProgress.getAttemptedActivities() != null + && learnerProgress.getAttemptedActivities().size() > 0) { + status = ""; + } } - return status; }