Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java =================================================================== diff -u -rbdeeffa3b5d1a3554aad9b8fdbcde9eaf3ed1aeb -r5540771c8e3f323407351c2206f9383ce2b46627 --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (.../LessonManagerServlet.java) (revision bdeeffa3b5d1a3554aad9b8fdbcde9eaf3ed1aeb) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (.../LessonManagerServlet.java) (revision 5540771c8e3f323407351c2206f9383ce2b46627) @@ -1116,34 +1116,75 @@ 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; + Double gradebookUserLessonMark = gradebookUserLesson.getMark(); + + //Creates learner element and appends it to the specified lessonElement + createLearnerElement(extServer, lessonElement, allUsers, userId, gradebookUserLessonMark); + } + + // in case of "gradebookMarksLesson" is requested - add all users that have completed the lesson but have no + // gradebookUserLesson (it happens when lesson contains zero activities that set to produce toolOutputs) + boolean isGradebookMarksLessonRequest = courseId == null && outputsUser == null; + if (isGradebookMarksLessonRequest) { + List usersCompletedLesson = monitoringService.getUsersCompletedLesson(lessonId, null, null, true); + + //add all users that haven't been added yet + for (User userCompletedLesson : usersCompletedLesson) { + boolean isUserHaventBeenAddedYet = true; + for (GradebookUserLesson gradebookUserLesson : gradebookUserLessons) { + if (userCompletedLesson.getUserId().equals(gradebookUserLesson.getLearner().getUserId())) { + isUserHaventBeenAddedYet = false; + break; + } } + + //creates learner element and appends it to the specified lessonElement + if (isUserHaventBeenAddedYet) { + createLearnerElement(extServer, lessonElement, allUsers, userCompletedLesson.getUserId(), null); + } } + } - if (extUser == null) { - throw new Exception( - "User with userId: " + userId + " doesn't belong to extServer: " + extServer.getSid()); - } + gradebookMarksElement.appendChild(lessonElement); + } - Element learnerElement = document.createElement("Learner"); - learnerElement.setAttribute("extUsername", extUser.getExtUsername()); - String userTotalMark = gradebookUserLesson.getMark() == null ? "" - : gradebookUserLesson.getMark().toString(); - learnerElement.setAttribute("userTotalMark", userTotalMark); + return gradebookMarksElement; + } - lessonElement.appendChild(learnerElement); + /* + * Creates learner element and appends it to the specified lessonElement. + * + * @param extServer + * @param lessonElement + * @param allUsers all available users associated with extServer + * @param userId userId of the learner to whom this learnerElement corresponds + * @param gradebookUserLessonMark mark of the gradebookUserLesson + * @return + * @throws Exception + */ + private void createLearnerElement(ExtServer extServer, Element lessonElement, List allUsers, + Integer userId, Double gradebookUserLessonMark) throws Exception { + + // find user + ExtUserUseridMap extUser = null; + for (ExtUserUseridMap extUserIter : allUsers) { + if (extUserIter.getUser().getUserId().equals(userId)) { + extUser = extUserIter; + break; } + } - gradebookMarksElement.appendChild(lessonElement); + if (extUser == null) { + throw new Exception("User with userId: " + userId + " doesn't belong to extServer: " + extServer.getSid()); } - return gradebookMarksElement; + Document document = lessonElement.getOwnerDocument(); + Element learnerElement = document.createElement("Learner"); + learnerElement.setAttribute("extUsername", extUser.getExtUsername()); + String userTotalMark = gradebookUserLessonMark == null ? "" : gradebookUserLessonMark.toString(); + learnerElement.setAttribute("userTotalMark", userTotalMark); + + lessonElement.appendChild(learnerElement); } /**