Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r26b52cfb94f532a22ad472ac2def2fcc97b1380e -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/IGradebookDAO.java =================================================================== diff -u -r61c706419c438d5ef52d93bda3de1f7c415380ae -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/IGradebookDAO.java (.../IGradebookDAO.java) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) +++ lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/IGradebookDAO.java (.../IGradebookDAO.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -28,6 +28,8 @@ import org.lamsfoundation.lams.dao.IBaseDAO; import org.lamsfoundation.lams.gradebook.GradebookUserActivity; import org.lamsfoundation.lams.gradebook.GradebookUserLesson; +import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.usermanagement.User; public interface IGradebookDAO extends IBaseDAO { @@ -40,6 +42,16 @@ Double getGradebookUserActivityMarkSum(Long lessonID, Integer userID); List getAllGradebookUserActivitiesForActivity(Long activityID); + + /** + * The same as getAllGradebookUserActivitiesForActivity(Long activityID) except it returns not all + * GradebookUserActivity but for specified users. + * + * @param activityID + * @param userIds + * @return + */ + List getGradebookUserActivitiesForActivity(Long activityID, List userIds); Double getAverageMarkForLesson(Long lessonID); @@ -52,5 +64,38 @@ Double getAverageMarkForGroupedActivity(Long activityID, Long groupID); long getAverageDurationForGroupedActivity(Long activityID, Long groupID); + + List getLessonsByGroupAndUser(final Integer userId, final Integer orgId, int page, int size, String sortBy, + String sortOrder, String searchString); + + List getUsersByLesson(Long lessonId, int page, int size, String sortBy, String sortOrder, String searchString); + List getUsersByGroup(Long lessonId, Long activityId, Long groupId, int page, int size, String sortBy, + String sortOrder, String searchString); + + List getUsersByActivity(Long lessonId, Long activityId, int page, int size, String sortBy, String sortOrder, + String searchString); + + int getCountUsersByLesson(Long lessonId, String searchString); + + List getUsersFromOrganisation(Integer orgId, int page, int size, String sortOrder, String searchString); + + int getCountUsersByOrganisation(Integer orgId, String searchString); + + /** + * Get all GradebookUserLessons by lessonId. + * + * @param lesson + * @return + */ + List getGradebookUserLessons(Lesson lesson); + + /** + * Get GradebookUserLessons from lesson and restricted userIds list. + * + * @param lesson + * @param userIds + * @return + */ + List getGradebookUserLessons(Lesson lesson, List userIds); } Index: lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/hibernate/GradebookDAO.java =================================================================== diff -u -r61c706419c438d5ef52d93bda3de1f7c415380ae -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/hibernate/GradebookDAO.java (.../GradebookDAO.java) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) +++ lams_common/src/java/org/lamsfoundation/lams/gradebook/dao/hibernate/GradebookDAO.java (.../GradebookDAO.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -26,11 +26,15 @@ import java.util.Date; import java.util.List; +import org.hibernate.Query; +import org.hibernate.SQLQuery; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.gradebook.GradebookUserActivity; import org.lamsfoundation.lams.gradebook.GradebookUserLesson; import org.lamsfoundation.lams.gradebook.dao.IGradebookDAO; import org.springframework.stereotype.Repository; +import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.usermanagement.User; @Repository public class GradebookDAO extends LAMSBaseDAO implements IGradebookDAO { @@ -47,14 +51,18 @@ 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)"; - private static final String GET_GRADEBOOK_USER_ACTIVITIES_FOR_ACTIVITY = "from GradebookUserActivity gact where " + private static final String GET_GRADEBOOK_USER_ACTIVITIES_FOR_ACTIVITY = "FROM GradebookUserActivity gact where " + "gact.activity.activityId=:activityID"; - private static final String GET_AVERAGE_MARK_FOR_LESSON = "select avg(gles.mark) from GradebookUserLesson gles where " + private static final String GET_AVERAGE_MARK_FOR_LESSON = "SELECT AVG(gles.mark) FROM GradebookUserLesson gles WHERE " + "gles.lesson.lessonId=:lessonID"; - private static final String GET_AVERAGE_COMPLETION_TIME = "select prog.finishDate, prog.startDate from LearnerProgress prog where " + private static final String GET_AVERAGE_COMPLETION_TIME = "select prog.finishDate, prog.startDate FROM LearnerProgress prog where " + "prog.lesson.lessonId=:lessonID"; + + final String GET_AVERAGE_COMPLETION_TIME2 = "SELECT AVG(TIMEDIFF(progress.finishDate,progress.startDate)) " + + "FROM LearnerProgress progress " + + "WHERE progress.lesson.lessonId = :lessonId "; private static final String GET_AVERAGE_COMPLETION_TIME_ACTIVITY = "select compProg.finishDate, compProg.startDate from CompletedActivityProgress compProg where " + "compProg.activity.activityId=:activityID"; @@ -113,17 +121,28 @@ } return 0.0; - } + @Override @SuppressWarnings("unchecked") public List getAllGradebookUserActivitiesForActivity(Long activityID) { List result = getSessionFactory().getCurrentSession().createQuery(GET_GRADEBOOK_USER_ACTIVITIES_FOR_ACTIVITY) .setLong("activityID", activityID.longValue()).list(); return (List) result; } + + @Override + public List getGradebookUserActivitiesForActivity(Long activityID, List userIds) { + final String GET_GRADEBOOK_USER_ACTIVITIES_FOR_ACTIVITY = "FROM GradebookUserActivity gact where " + + "gact.activity.activityId=:activityID AND gact.learner.userId IN (:userIds)"; + + List result = getSession().createQuery(GET_GRADEBOOK_USER_ACTIVITIES_FOR_ACTIVITY) + .setLong("activityID", activityID.longValue()).setParameterList("userIds", userIds).list(); + return (List) result; + } + @SuppressWarnings("unchecked") public Double getAverageMarkForLesson(Long lessonID) { List result = getSessionFactory().getCurrentSession().createQuery(GET_AVERAGE_MARK_FOR_LESSON).setLong("lessonID", lessonID.longValue()) @@ -139,34 +158,19 @@ @SuppressWarnings("unchecked") public long getAverageDurationLesson(Long lessonID) { - List result = (List) getSessionFactory().getCurrentSession().createQuery(GET_AVERAGE_COMPLETION_TIME) - .setLong("lessonID", lessonID.longValue()).list(); + + final String GET_AVERAGE_COMPLETION_TIME2 = "SELECT AVG(TIMEDIFF(progress.finishDate,progress.startDate)) " + + "FROM LearnerProgress progress " + + "WHERE progress.lesson.lessonId = :lessonId "; + + List result = getSession().createQuery(GET_AVERAGE_COMPLETION_TIME2).setLong("lessonId", lessonID) + .list(); - if (result != null) { - if (result.size() > 0) { - - long sum = 0; - long count = 0; - for (Object[] dateObjs : result) { - if (dateObjs != null && dateObjs.length == 2) { - Date finishDate = (Date) dateObjs[0]; - Date startDate = (Date) dateObjs[1]; - - if (startDate != null && finishDate != null) { - - sum += finishDate.getTime() - startDate.getTime(); - count++; - } - } - } - - if (count > 0) { - return sum / count; - } - } - + if (result == null || result.size() == 0 || result.get(0) == null) { + return 0; + } else { + return ((Number) result.get(0)).intValue(); } - return 0; } @SuppressWarnings("unchecked") @@ -259,4 +263,341 @@ } return 0; } + + @Override + public List getLessonsByGroupAndUser(final Integer userId, final Integer orgId, int page, int size, + String sortBy, String sortOrder, String searchString) { + + final String LOAD_LESSONS_ORDERED_BY_FIELDS = "SELECT DISTINCT lesson " + + "FROM Lesson lesson, LearningDesign ld, Group g, GroupUser ug, Organisation lo " + + "WHERE lesson.learningDesign.learningDesignId = ld.learningDesignId " + + "AND ld.copyTypeID != 3 " + + "AND lesson.organisation.organisationId = lo.organisationId " + + "AND (lo.organisationId = :orgId OR lo.parentOrganisation.organisationId = :orgId) " + + "AND lesson.lessonClass.groupingId = g.grouping.groupingId " + + "AND lesson.lessonStateId != 7 " + + "AND ug.group.groupId = g.groupId " + + "AND ug.user.userId = :userId " + + "AND lesson.lessonName LIKE CONCAT('%', :searchString, '%') " + + "ORDER BY " + + "CASE " + + "WHEN :sortBy='rowName' THEN lesson.lessonName " + + "WHEN :sortBy='startDate' THEN lesson.startDateTime " + + "END " + sortOrder; + + //when :sortBy='avgTimeTaken' + final String LOAD_LESSONS_ORDERED_BY_AVERAGE_TIME_TAKEN = "SELECT DISTINCT lesson " + + "FROM LearnerProgress progress right outer join progress.lesson lesson, LearningDesign ld, Group g, GroupUser ug, Organisation lo " + + "WHERE lesson.learningDesign.learningDesignId = ld.learningDesignId " + + "AND ld.copyTypeID != 3 " + + "AND lesson.organisation.organisationId = lo.organisationId " + + "AND (lo.organisationId = :orgId OR lo.parentOrganisation.organisationId = :orgId) " + + "AND lesson.lessonClass.groupingId = g.grouping.groupingId " + + "AND lesson.lessonStateId != 7 " + + "AND ug.group.groupId = g.groupId " + + "AND ug.user.userId = :userId " + + "AND lesson.lessonName LIKE CONCAT('%', :searchString, '%') " + + "GROUP BY lesson " + + "ORDER BY AVG(TIMEDIFF(progress.finishDate,progress.startDate)) " + sortOrder; + + //when :sortBy='avgMark' + final String LOAD_LESSONS_ORDERED_BY_AVERAGE_MARK = "SELECT DISTINCT lesson " + + "FROM GradebookUserLesson gles right outer join gles.lesson lesson, LearningDesign ld, Group g, GroupUser ug, Organisation lo " + + "WHERE lesson.learningDesign.learningDesignId = ld.learningDesignId " + + "AND ld.copyTypeID != 3 " + + "AND lesson.organisation.organisationId = lo.organisationId " + + "AND (lo.organisationId = :orgId OR lo.parentOrganisation.organisationId = :orgId) " + + "AND lesson.lessonClass.groupingId = g.grouping.groupingId " + + "AND lesson.lessonStateId != 7 " + + "AND ug.group.groupId = g.groupId " + + "AND ug.user.userId = :userId " + + "AND lesson.lessonName LIKE CONCAT('%', :searchString, '%') " + + "GROUP BY lesson " + + "ORDER BY AVG(IFNULL(gles.mark, -1)) " + sortOrder; + + String queryString; + if (sortBy.equals("avgTimeTaken")) { + queryString = LOAD_LESSONS_ORDERED_BY_AVERAGE_TIME_TAKEN; + } else if (sortBy.equals("avgMark")) { + queryString = LOAD_LESSONS_ORDERED_BY_AVERAGE_MARK; + } else { + queryString = LOAD_LESSONS_ORDERED_BY_FIELDS; + } + + Query query = getSession().createQuery(queryString); + query.setInteger("userId", userId.intValue()); + query.setInteger("orgId", orgId.intValue()); + if (!sortBy.equals("avgTimeTaken") && !sortBy.equals("avgMark")) { + query.setString("sortBy", sortBy); + } + // support for custom search from a toolbar + searchString = searchString == null ? "" : searchString; + query.setString("searchString", searchString); + query.setFirstResult(page * size); + query.setMaxResults(size); + return query.list(); + } + + @Override + public List getUsersByLesson(Long lessonId, int page, int size, String sortBy, String sortOrder, String searchString) { + + final String LOAD_LEARNERS_ORDERED_BY_NAME = "SELECT user.* " + + " FROM lams_lesson lesson, lams_group g, lams_user_group ug " + + " INNER JOIN lams_user user ON ug.user_id=user.user_id " + + " WHERE lesson.lesson_id = :lessonId " + + " AND lesson.class_grouping_id=g.grouping_id " + + " AND ug.group_id=g.group_id " + + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + + "ORDER BY CONCAT(user.last_name, ' ', user.first_name) " + sortOrder; + + //when :sortBy='timeTaken' + final String LOAD_LEARNERS_ORDERED_BY_TIME_TAKEN = "SELECT user.* " + + " FROM lams_lesson lesson, lams_group g, lams_user_group ug " + + " INNER JOIN lams_user user ON ug.user_id=user.user_id " + + " LEFT OUTER JOIN lams_learner_progress progress " + + " ON progress.user_id=user.user_id AND progress.lesson_id=:lessonId " + + " WHERE lesson.lesson_id = :lessonId " + + " AND lesson.class_grouping_id=g.grouping_id " + + " AND ug.group_id=g.group_id " + + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + + "ORDER BY TIMEDIFF(progress.finish_date_time, progress.start_date_time) " + sortOrder; + + //when :sortBy='mark' + final String LOAD_LEARNERS_ORDERED_BY_MARK = "SELECT user.* " + + " FROM lams_lesson lesson, lams_group g, lams_user_group ug " + + " INNER JOIN lams_user user ON ug.user_id=user.user_id " + + " LEFT OUTER JOIN lams_gradebook_user_lesson gradebookUserLesson " + + " ON user.user_id=gradebookUserLesson.user_id AND gradebookUserLesson.lesson_id =:lessonId " + + " WHERE lesson.lesson_id = :lessonId " + + " AND lesson.class_grouping_id=g.grouping_id " + + " AND ug.group_id=g.group_id " + + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + + " ORDER BY gradebookUserLesson.mark " + sortOrder; + + //when :sortBy='feedback' + final String LOAD_LEARNERS_ORDERED_BY_FEEDBACK = "SELECT user.* " + + " FROM lams_lesson lesson, lams_group g, lams_user_group ug " + + " INNER JOIN lams_user user ON ug.user_id=user.user_id " + + " LEFT OUTER JOIN lams_gradebook_user_lesson gradebookUserLesson " + + " ON user.user_id=gradebookUserLesson.user_id AND gradebookUserLesson.lesson_id =:lessonId " + + " WHERE lesson.lesson_id = :lessonId " + + " AND lesson.class_grouping_id=g.grouping_id " + + " AND ug.group_id=g.group_id " + + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + + " ORDER BY gradebookUserLesson.feedback " + sortOrder; + + String queryString; + if (sortBy.equals("timeTaken")) { + queryString = LOAD_LEARNERS_ORDERED_BY_TIME_TAKEN; + } else if (sortBy.equals("mark")) { + queryString = LOAD_LEARNERS_ORDERED_BY_MARK; + } else if (sortBy.equals("feedback")) { + queryString = LOAD_LEARNERS_ORDERED_BY_FEEDBACK; + } else { + queryString = LOAD_LEARNERS_ORDERED_BY_NAME; + } + + SQLQuery query = getSession().createSQLQuery(queryString); + query.addEntity(User.class); + query.setLong("lessonId", lessonId); + // support for custom search from a toolbar + searchString = searchString == null ? "" : searchString; + query.setString("searchString", searchString); + query.setFirstResult(page * size); + query.setMaxResults(size); + return query.list(); + } + + @Override + public List getUsersByActivity(Long lessonId, Long activityId, int page, int size, String sortBy, + String sortOrder, String searchString) { + + final String LOAD_LEARNERS_ORDERED_BY_NAME = "SELECT user.* " + + " FROM lams_lesson lesson, lams_group g, lams_user_group ug " + + " INNER JOIN lams_user user ON ug.user_id=user.user_id " + + " WHERE lesson.lesson_id = :lessonId " + + " AND lesson.class_grouping_id=g.grouping_id " + + " AND ug.group_id=g.group_id " + + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + + " ORDER BY CONCAT(user.last_name, ' ', user.first_name) " + sortOrder; + + //when :sortBy='timeTaken' + final String LOAD_LEARNERS_ORDERED_BY_TIME_TAKEN_ACTIVITY = "SELECT user.* " + + " FROM lams_lesson lesson, lams_group g, lams_user_group ug " + + " INNER JOIN lams_user user ON ug.user_id=user.user_id " + + " LEFT OUTER JOIN lams_learner_progress progress " + + " INNER JOIN lams_progress_completed completedActivityProgress " + + " ON completedActivityProgress.learner_progress_id=progress.learner_progress_id " + + " AND completedActivityProgress.activity_id=:activityId "+ + " ON progress.user_id=user.user_id " + + " WHERE lesson.lesson_id = :lessonId " + + " AND lesson.class_grouping_id=g.grouping_id " + + " AND ug.group_id=g.group_id " + + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + + "ORDER BY TIMEDIFF(completedActivityProgress.completed_date_time, completedActivityProgress.start_date_time) " + sortOrder; + + //when :sortBy='mark' + final String LOAD_LEARNERS_ORDERED_BY_MARK_ACTIVITY = "SELECT user.* " + + " FROM lams_lesson lesson, lams_group g, lams_user_group ug " + + " INNER JOIN lams_user user ON ug.user_id=user.user_id " + + " LEFT OUTER JOIN lams_gradebook_user_activity gradebookUserActivity " + + " ON user.user_id=gradebookUserActivity.user_id AND gradebookUserActivity.activity_id =:activityId " + + " WHERE lesson.lesson_id = :lessonId " + + " AND lesson.class_grouping_id=g.grouping_id " + + " AND ug.group_id=g.group_id " + + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + + "ORDER BY gradebookUserActivity.mark " + sortOrder; + + String queryString; + if (sortBy.equals("timeTaken")) { + queryString = LOAD_LEARNERS_ORDERED_BY_TIME_TAKEN_ACTIVITY; + } else if (sortBy.equals("mark")) { + queryString = LOAD_LEARNERS_ORDERED_BY_MARK_ACTIVITY; + } else { + queryString = LOAD_LEARNERS_ORDERED_BY_NAME; + } + + SQLQuery query = getSession().createSQLQuery(queryString); + query.addEntity(User.class); + query.setLong("lessonId", lessonId); + if (sortBy.equals("timeTaken") || sortBy.equals("mark")) { + query.setLong("activityId", activityId); + } + // support for custom search from a toolbar + searchString = searchString == null ? "" : searchString; + query.setString("searchString", searchString); + query.setFirstResult(page * size); + query.setMaxResults(size); + return query.list(); + } + + @Override + public List getUsersByGroup(Long lessonId, Long activityId, Long groupId, int page, int size, String sortBy, + String sortOrder, String searchString) { + + final String LOAD_LEARNERS_ORDERED_BY_NAME = "SELECT user.* " + + " FROM lams_user_group ug " + + " INNER JOIN lams_user user ON ug.user_id=user.user_id " + + " WHERE ug.group_id=:groupId " + + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + + " ORDER BY CONCAT(user.last_name, ' ', user.first_name) " + + sortOrder; + + //when :sortBy='timeTaken' + final String LOAD_LEARNERS_ORDERED_BY_TIME_TAKEN_GROUP = "SELECT user.* " + + " FROM lams_user_group ug " + + " INNER JOIN lams_user user ON ug.user_id=user.user_id " + + " LEFT OUTER JOIN lams_learner_progress progress " + + " INNER JOIN lams_progress_completed completedActivityProgress " + + " ON completedActivityProgress.learner_progress_id=progress.learner_progress_id " + + " AND completedActivityProgress.activity_id=:activityId "+ + " ON progress.user_id=user.user_id " + + " WHERE ug.group_id=:groupId " + + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + + " ORDER BY TIMEDIFF(completedActivityProgress.completed_date_time, completedActivityProgress.start_date_time) " + sortOrder; + + //when :sortBy='mark' + final String LOAD_LEARNERS_ORDERED_BY_MARK_GROUP = "SELECT user.* " + + " FROM lams_user_group ug " + + " INNER JOIN lams_user user ON ug.user_id=user.user_id " + + " LEFT OUTER JOIN lams_gradebook_user_activity gradebookUserActivity " + + " ON user.user_id=gradebookUserActivity.user_id AND gradebookUserActivity.activity_id =:activityId " + + " WHERE ug.group_id=:groupId " + + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + + "ORDER BY gradebookUserActivity.mark " + sortOrder; + + String queryString; + if (sortBy.equals("timeTaken")) { + queryString = LOAD_LEARNERS_ORDERED_BY_TIME_TAKEN_GROUP; + } else if (sortBy.equals("mark")) { + queryString = LOAD_LEARNERS_ORDERED_BY_MARK_GROUP; + } else { + queryString = LOAD_LEARNERS_ORDERED_BY_NAME; + } + + SQLQuery query = getSession().createSQLQuery(queryString); + query.addEntity(User.class); + if (sortBy.equals("timeTaken") || sortBy.equals("mark")) { + query.setLong("activityId", activityId); + } + query.setLong("groupId", groupId); + // support for custom search from a toolbar + searchString = searchString == null ? "" : searchString; + query.setString("searchString", searchString); + query.setFirstResult(page * size); + query.setMaxResults(size); + return query.list(); + } + + @Override + public int getCountUsersByLesson(Long lessonId, String searchString) { + + final String COUNT_COMMENTS_BY_ITEM_AND_USER = "SELECT COUNT(ug.user) " + + "FROM Lesson lesson, Group g, GroupUser ug " + + "WHERE lesson.lessonId = :lessonId AND lesson.lessonClass.groupingId = g.grouping.groupingId " + + "AND ug.group.groupId = g.groupId "; + + List list = getSession().createQuery(COUNT_COMMENTS_BY_ITEM_AND_USER).setLong("lessonId", lessonId).list(); + if (list == null || list.size() == 0) { + return 0; + } else { + return ((Number) list.get(0)).intValue(); + } + + } + + @Override + /** + * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getUsersFromOrganisation(int) + */ + public List getUsersFromOrganisation(Integer orgId, int page, int size, String sortOrder, String searchString) { + final String LOAD_LEARNERS_BY_ORG = "SELECT uo.user FROM UserOrganisation uo" + + " WHERE uo.organisation.organisationId=:orgId" + + " AND CONCAT(uo.user.lastName, ' ', uo.user.firstName) LIKE CONCAT('%', :searchString, '%') " + + " ORDER BY uo.user.lastName " + sortOrder +" , uo.user.firstName " + sortOrder; + + Query query = getSession().createQuery(LOAD_LEARNERS_BY_ORG); + query.setLong("orgId", orgId); + // support for custom search from a toolbar + searchString = searchString == null ? "" : searchString; + query.setString("searchString", searchString); + query.setFirstResult(page * size); + query.setMaxResults(size); + return query.list(); + } + + @Override + public int getCountUsersByOrganisation(Integer orgId, String searchString) { + + final String COUNT_LEARNERS_BY_ORG = "SELECT COUNT(uo.user) FROM UserOrganisation uo" + + " WHERE uo.organisation.organisationId=:orgId" + + " AND CONCAT(uo.user.lastName, ' ', uo.user.firstName) LIKE CONCAT('%', :searchString, '%') "; + + // support for custom search from a toolbar + searchString = searchString == null ? "" : searchString; + List list = getSession().createQuery(COUNT_LEARNERS_BY_ORG).setLong("orgId", orgId) + .setString("searchString", searchString).list(); + if (list == null || list.size() == 0) { + return 0; + } else { + return ((Number) list.get(0)).intValue(); + } + + } + + @Override + public List getGradebookUserLessons(Lesson lesson) { + String GET_GRADEBOOK_USER_LESSONS_BY_LESSON_ID = "select ul from GradebookUserLesson ul where ul.lesson.lessonId=?"; + return find(GET_GRADEBOOK_USER_LESSONS_BY_LESSON_ID, new Object[] { lesson.getLessonId() }); + } + + @Override + public List getGradebookUserLessons(Lesson lesson, List userIds) { + String GET_GRADEBOOK_USER_LESSONS_BY_LESSON_AND_USERS = "select ul from GradebookUserLesson ul " + + " where ul.lesson.lessonId=:lessonId AND ul.learner.userId IN (:userIds)"; + + List results = getSession().createQuery(GET_GRADEBOOK_USER_LESSONS_BY_LESSON_AND_USERS) + .setLong("lessonId", lesson.getLessonId()).setParameterList("userIds", userIds).list(); + return results; + } } Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java =================================================================== diff -u -r4d65537fb74ec9a261ccb55520fe28c1253e9b13 -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java (.../ILearnerProgressDAO.java) (revision 4d65537fb74ec9a261ccb55520fe28c1253e9b13) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java (.../ILearnerProgressDAO.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -100,7 +100,16 @@ * @param lessonId * @return */ - List getLearnerProgressForLesson(final Long lessonId); + List getLearnerProgressForLesson(final Long lessonId); + + /** + * Get all the learner progress records for a lesson restricted by list of these user ids. + * + * @param lessonId + * @param userIds return progresses for only these users + * @return + */ + List getLearnerProgressForLesson(final Long lessonId, final List userIds); /** * 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 -r4d65537fb74ec9a261ccb55520fe28c1253e9b13 -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java (.../LearnerProgressDAO.java) (revision 4d65537fb74ec9a261ccb55520fe28c1253e9b13) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java (.../LearnerProgressDAO.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -57,7 +57,10 @@ + " 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 = "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"; 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) " @@ -103,9 +106,15 @@ } @Override - public List getLearnerProgressForLesson(final Long lessonId) { - return (List) getSession().createQuery(LOAD_PROGRESS_BY_LESSON).setLong("lessonId", lessonId).list(); + public List getLearnerProgressForLesson(final Long lessonId) { + return (List) getSession().createQuery(LOAD_PROGRESS_BY_LESSON).setLong("lessonId", lessonId).list(); } + + @Override + public List getLearnerProgressForLesson(final Long lessonId, final List userIds) { + return getSession().createQuery(LOAD_PROGRESS_BY_LESSON_AND_USER_IDS).setLong("lessonId", lessonId) + .setParameterList("userIds", userIds).list(); + } @Override @SuppressWarnings("unchecked") Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java =================================================================== diff -u -ra3249210e9a22e8f54ece275f8243a8f3f3e7217 -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision a3249210e9a22e8f54ece275f8243a8f3f3e7217) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -387,6 +387,19 @@ * @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 -ra3249210e9a22e8f54ece275f8243a8f3f3e7217 -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision a3249210e9a22e8f54ece275f8243a8f3f3e7217) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -626,6 +626,12 @@ 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 -r5cbf5dea8b16101e8eba03b35d84ad92e1b0cc06 -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java (.../GBActivityGridRowDTO.java) (revision 5cbf5dea8b16101e8eba03b35d84ad92e1b0cc06) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java (.../GBActivityGridRowDTO.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -104,9 +104,6 @@ ret.add(rowName); } ret.add(status); - ret.add(output != null ? output.toString() : CELL_EMPTY); - ret.add(competences); - ret.add(startDate != null ? convertDateToString(startDate, DEFAULT_DATE_FORMAT) : CELL_EMPTY); ret.add(timeTaken != null ? convertTimeToString(timeTaken) : CELL_EMPTY); ret.add(feedback); ret.add(mark != null ? GradebookUtil.niceFormatting(mark) : CELL_EMPTY); @@ -124,7 +121,7 @@ ret.add((averageTimeTaken != null) ? convertTimeToString(averageTimeTaken) : CELL_EMPTY); ret.add(competences); - ret.add(mark != null ? GradebookUtil.niceFormatting(mark) : CELL_EMPTY); + ret.add(averageMark != null ? GradebookUtil.niceFormatting(averageMark) : CELL_EMPTY); } else if (view == GBGridView.LRN_ACTIVITY) { ret.add(rowName); Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBLessonGridRowDTO.java =================================================================== diff -u -r5cbf5dea8b16101e8eba03b35d84ad92e1b0cc06 -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBLessonGridRowDTO.java (.../GBLessonGridRowDTO.java) (revision 5cbf5dea8b16101e8eba03b35d84ad92e1b0cc06) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBLessonGridRowDTO.java (.../GBLessonGridRowDTO.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -26,7 +26,6 @@ import java.util.ArrayList; import org.apache.commons.lang.StringEscapeUtils; - import org.lamsfoundation.lams.gradebook.util.GBGridView; import org.lamsfoundation.lams.gradebook.util.GradebookUtil; @@ -85,6 +84,9 @@ ret.add((averageMark != null) ? toItalic(GradebookUtil.niceFormatting(averageMark)) : CELL_EMPTY); ret.add((mark != null) ? GradebookUtil.niceFormatting(mark) : CELL_EMPTY); + //plain lesson list case + } else if (view == GBGridView.LIST) { + ret.add(rowName); } return ret; } Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBUserGridRowDTO.java =================================================================== diff -u -r5cbf5dea8b16101e8eba03b35d84ad92e1b0cc06 -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBUserGridRowDTO.java (.../GBUserGridRowDTO.java) (revision 5cbf5dea8b16101e8eba03b35d84ad92e1b0cc06) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBUserGridRowDTO.java (.../GBUserGridRowDTO.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -27,7 +27,6 @@ import java.util.Date; import org.apache.commons.lang.StringEscapeUtils; - import org.lamsfoundation.lams.gradebook.util.GBGridView; import org.lamsfoundation.lams.gradebook.util.GradebookUtil; import org.lamsfoundation.lams.usermanagement.User; @@ -78,9 +77,7 @@ ret.add(rowName); } ret.add(status); - ret.add(startDate != null ? convertDateToString(startDate, DEFAULT_DATE_FORMAT) : CELL_EMPTY); ret.add((timeTaken != null) ? convertTimeToString(timeTaken) : CELL_EMPTY); - ret.add((output != null) ? output.toString() : CELL_EMPTY); ret.add(feedback); ret.add((mark != null) ? GradebookUtil.niceFormatting(mark) : CELL_EMPTY); @@ -90,6 +87,9 @@ ret.add((timeTaken != null) ? convertTimeToString(timeTaken) : CELL_EMPTY); ret.add(feedback); ret.add((mark != null) ? GradebookUtil.niceFormatting(mark) : CELL_EMPTY); + + } else if (view == GBGridView.LIST) { + ret.add(rowName); } return ret; Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -r2c4a869fa3cbe6b7568e853183feaa1e11ac741b -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 2c4a869fa3cbe6b7568e853183feaa1e11ac741b) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -161,7 +161,7 @@ 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)); +// activityDTO.setOutput(this.getToolOutputsStr(activity, null, toolSession, learner)); } } @@ -206,26 +206,44 @@ @Override @SuppressWarnings("unchecked") - public List getGBUserRowsForActivity(Lesson lesson, ToolActivity activity, Long groupId) { + public List getGBUserRowsForActivity(Lesson lesson, ToolActivity activity, Long groupId, int page, int size, String sortBy, String sortOrder, + String searchString) { + Long lessonId = lesson.getLessonId(); + Long activityId = activity.getActivityId(); List gradebookUserDTOs = new ArrayList(); - Set learners = null; + List learners = null; if (groupId != null) { Group group = (Group) userService.findById(Group.class, groupId); if (group != null) { - learners = group.getUsers(); + learners = gradebookDAO.getUsersByGroup(lessonId, activityId, groupId, page, size, sortBy, sortOrder, + searchString); } else { - learners = lesson.getAllLearners(); + learners = gradebookDAO.getUsersByActivity(lessonId, activityId, page, size, sortBy, sortOrder, + searchString); } } else { - learners = lesson.getAllLearners(); + learners = gradebookDAO.getUsersByActivity(lessonId, activityId, page, size, sortBy, sortOrder, + searchString); } if (learners != null) { - Map userToLearnerProgressMap = getUserToLearnerProgressMap(lesson); - Map userToGradebookUserLessonMap = getUserToGradebookUserActivityMap(activity); + Map userToLearnerProgressMap = getUserToLearnerProgressMap(lesson, learners); + Map userToGradebookUserLessonMap = getUserToGradebookUserActivityMap( + activity, learners); Long maxPossibleMark = toolService.getActivityMaxPossibleMark(activity); + +// List toolSessions = toolService.getToolSessionsByLesson(lesson); +// // 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; +// } +// } for (User learner : learners) { GBUserGridRowDTO gUserDTO = new GBUserGridRowDTO(learner); @@ -235,7 +253,6 @@ // Set the progress LearnerProgress learnerProgress = userToLearnerProgressMap.get(learner.getUserId()); gUserDTO.setStatus(getActivityStatusStr(learnerProgress, activity)); - gUserDTO.setStartDate(getActivityStartDate(learnerProgress, activity, learner.getTimeZone())); gUserDTO.setTimeTaken(getActivityDuration(learnerProgress, activity)); // Get the tool outputs for this user if there are any @@ -249,7 +266,7 @@ + activity.getTool().getLearnerProgressUrl() + "&userID=" + learner.getUserId() + "&toolSessionID=" + toolSession.getToolSessionId().toString()); - gUserDTO.setOutput(this.getToolOutputsStr(activity, null, toolSession, learner)); +// gUserDTO.setOutput(this.getToolOutputsStr(activity, null, toolSession, learner)); } } @@ -266,63 +283,83 @@ return gradebookUserDTOs; } + + public ArrayList getGBUserRowsForLesson(Lesson lesson) { + return getGBUserRowsForLesson(lesson, 0, 0, null, null, null); + } @Override @SuppressWarnings("unchecked") - public ArrayList getGBUserRowsForLesson(Lesson lesson) { + public ArrayList getGBUserRowsForLesson(Lesson lesson, int page, int size, String sortBy, String sortOrder, + String searchString) { ArrayList gradebookUserDTOs = new ArrayList(); if (lesson != null) { - Set learners = lesson.getAllLearners(); + List learners; + Map userToLearnerProgressMap; + Map userToGradebookUserLessonMap; + //size will be 0 in case of excel export + if (size == 0) { + learners = new LinkedList(lesson.getAllLearners()); + userToLearnerProgressMap = getUserToLearnerProgressMap(lesson, null); + userToGradebookUserLessonMap = getUserToGradebookUserLessonMap(lesson, null); + + } else { + learners = gradebookDAO.getUsersByLesson(lesson.getLessonId(), page, size, sortBy, sortOrder, + searchString); + userToLearnerProgressMap = getUserToLearnerProgressMap(lesson, learners); + userToGradebookUserLessonMap = getUserToGradebookUserLessonMap(lesson, learners); + } - if (learners != null) { - Map userToLearnerProgressMap = getUserToLearnerProgressMap(lesson); - Map userToGradebookUserLessonMap = getUserToGradebookUserLessonMap(lesson); + for (User learner : learners) { + LearnerProgress learnerProgress = userToLearnerProgressMap.get(learner.getUserId()); + GBUserGridRowDTO gradebookUserDTO = new GBUserGridRowDTO(learner); + gradebookUserDTOs.add(gradebookUserDTO); - for (User learner : learners) { - LearnerProgress learnerProgress = userToLearnerProgressMap.get(learner.getUserId()); - GBUserGridRowDTO gradebookUserDTO = new GBUserGridRowDTO(learner); + // Setting the status and time taken for the user's lesson + gradebookUserDTO.setStatus(getLessonStatusStr(learnerProgress)); - // Setting the status and time taken for the user's lesson - gradebookUserDTO.setStatus(getLessonStatusStr(learnerProgress)); + // set current activity if available + if ((learnerProgress != null) && (learnerProgress.getCurrentActivity() != null)) { + gradebookUserDTO.setCurrentActivity(learnerProgress.getCurrentActivity().getTitle()); + } - // 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()); } + } - // calculate time taken - if (learnerProgress != null) { - if ((learnerProgress.getStartDate() != null) && (learnerProgress.getFinishDate() != null)) { - gradebookUserDTO.setTimeTaken(learnerProgress.getFinishDate().getTime() - - learnerProgress.getStartDate().getTime()); - } - } - - GradebookUserLesson gradebookUserLesson = userToGradebookUserLessonMap.get(learner.getUserId()); - if (gradebookUserLesson != null) { - gradebookUserDTO.setMark(gradebookUserLesson.getMark()); - gradebookUserDTO.setFeedback(gradebookUserLesson.getFeedback()); - } - - gradebookUserDTOs.add(gradebookUserDTO); + GradebookUserLesson gradebookUserLesson = userToGradebookUserLessonMap.get(learner.getUserId()); + if (gradebookUserLesson != null) { + gradebookUserDTO.setMark(gradebookUserLesson.getMark()); + gradebookUserDTO.setFeedback(gradebookUserLesson.getFeedback()); } } } return gradebookUserDTOs; } + + @Override + public int getCountUsersByLesson(Long lessonId, String searchString) { + return gradebookDAO.getCountUsersByLesson(lessonId, searchString); + } @Override - public ArrayList getGBUserRowsForOrganisation(Organisation organisation) { + public ArrayList getGBUserRowsForOrganisation(Organisation organisation, int page, int size, + String sortOrder, String searchString) { ArrayList gradebookUserDTOs = new ArrayList(); if (organisation != null) { - List learners = userService.getUsersFromOrganisation(organisation.getOrganisationId()); + List learners = gradebookDAO.getUsersFromOrganisation(organisation.getOrganisationId(), page, size, + sortOrder, searchString); if (learners != null) { @@ -337,6 +374,11 @@ return gradebookUserDTOs; } + + @Override + public int getCountUsersByOrganisation(Integer orgId, String searchString) { + return gradebookDAO.getCountUsersByOrganisation(orgId, searchString); + } @Override public GradebookUserLesson getGradebookUserLesson(Long lessonID, Integer userID) { @@ -484,38 +526,40 @@ @Override @SuppressWarnings("unchecked") - public List getGBLessonRows(Organisation organisation, User user, User viewer, GBGridView view) { + public List getGBLessonRows(Organisation organisation, User user, User viewer, GBGridView view, + int page, int size, String sortBy, String sortOrder, String searchString) { List lessonRows = new ArrayList(); + Integer userId = user.getUserId(); + Integer orgId = organisation.getOrganisationId(); if (organisation != null) { - List lessons = lessonService.getLessonsByGroupAndUser(user.getUserId(), - organisation.getOrganisationId()); + List lessons = view == GBGridView.MON_COURSE ? gradebookDAO + .getLessonsByGroupAndUser(userId, orgId, page, size, sortBy, sortOrder, searchString) + : lessonService.getLessonsByGroupAndUser(userId, orgId); + if (lessons != null) { for (Lesson lesson : lessons) { - // Don't include lesson in list if the user doesn't have permission - Integer organisationToCheckPermission = (organisation.getOrganisationType().getOrganisationTypeId() - .equals(OrganisationType.COURSE_TYPE)) ? organisation.getOrganisationId() : organisation - .getParentOrganisation().getOrganisationId(); - boolean hasTeacherPermission = lesson.getLessonClass().isStaffMember(viewer) - || userService.isUserInRole(viewer.getUserId(), organisationToCheckPermission, - Role.GROUP_MANAGER); - boolean marksReleased = (lesson.getMarksReleased() != null) && lesson.getMarksReleased(); - boolean hasLearnerPermission = lesson.getAllLearners().contains(user); - if (!(((view == GBGridView.MON_COURSE) && hasTeacherPermission) - || ((view == GBGridView.LRN_COURSE) && hasLearnerPermission && marksReleased) || ((view == GBGridView.MON_USER) - && hasTeacherPermission && hasLearnerPermission))) { - continue; + // For My Grades gradebook page: don't include lesson in list if the user doesn't have permission. + if (view == GBGridView.LRN_COURSE) { + boolean marksReleased = (lesson.getMarksReleased() != null) && lesson.getMarksReleased(); + boolean hasLearnerPermission = lesson.getAllLearners().contains(user); + if (!hasLearnerPermission || !marksReleased) { + continue; + } } - + GBLessonGridRowDTO lessonRow = new GBLessonGridRowDTO(); + lessonRows.add(lessonRow); lessonRow.setLessonName(lesson.getLessonName()); lessonRow.setId(lesson.getLessonId().toString()); - lessonRow.setStartDate(getLocaleDateString(viewer, lesson.getStartDateTime())); - if (view == GBGridView.MON_COURSE) { + if (view == GBGridView.LIST) { + continue; + + } else if (view == GBGridView.MON_COURSE) { // Setting the averages for monitor view lessonRow.setAverageTimeTaken(gradebookDAO.getAverageDurationLesson(lesson.getLessonId())); @@ -528,7 +572,7 @@ } else if ((view == GBGridView.LRN_COURSE) || (view == GBGridView.MON_USER)) { GradebookUserLesson gbLesson = gradebookDAO.getGradebookUserDataForLesson(lesson.getLessonId(), - user.getUserId()); + userId); lessonRow.setAverageTimeTaken(gradebookDAO.getAverageDurationLesson(lesson.getLessonId())); lessonRow.setAverageMark(gradebookDAO.getAverageMarkForLesson(lesson.getLessonId())); @@ -538,7 +582,7 @@ lessonRow.setFeedback(gbLesson.getFeedback()); } - LearnerProgress learnerProgress = lessonService.getUserProgressForLesson(user.getUserId(), + LearnerProgress learnerProgress = lessonService.getUserProgressForLesson(userId, lesson.getLessonId()); lessonRow.setStatus(getLessonStatusStr(learnerProgress)); if (learnerProgress != null) { @@ -557,7 +601,7 @@ lessonRow.setSubGroup(""); } - lessonRows.add(lessonRow); + lessonRow.setStartDate(getLocaleDateString(viewer, lesson.getStartDateTime())); } } @@ -577,14 +621,14 @@ if (learners == null) { learners = new TreeSet(); } - Map userToLearnerProgressMap = getUserToLearnerProgressMap(lesson); + 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); + Map userToGradebookUserActivityMap = getUserToGradebookUserActivityMap(activity, null); List userDTOs = new ArrayList(); @@ -966,7 +1010,7 @@ Map> activityTouserToGradebookUserActivityMap = new HashMap>(); for (ToolActivity activity : allActivities) { - Map userToGradebookUserActivityMap = getUserToGradebookUserActivityMap(activity); + Map userToGradebookUserActivityMap = getUserToGradebookUserActivityMap(activity, null); activityTouserToGradebookUserActivityMap.put(activity.getActivityId(), userToGradebookUserActivityMap); } @@ -1445,45 +1489,72 @@ /** * Returns map containing (userId -> LearnerProgressMap) pairs. It serves merely for optimizing amount of db * queries. + * + * @param learners if null - return all available pairs for the lesson */ - private Map getUserToLearnerProgressMap(Lesson lesson) { + private Map getUserToLearnerProgressMap(Lesson lesson, List learners) { - if (lesson != null) { - List learnerProgressList = lessonService.getUserProgressForLesson(lesson.getLessonId()); - - if ((learnerProgressList != null) && (learnerProgressList.size() > 0)) { - Map map = new HashMap(); - for (LearnerProgress learnerProgress : learnerProgressList) { - map.put(learnerProgress.getUser().getUserId(), learnerProgress); - } - return map; + Map map = new HashMap(); + if (lesson == null || learners != null && learners.isEmpty()) { + return map; + } + + //get either all available learnerProgresses or only for specified users + List learnerProgresses; + if (learners == null) { + learnerProgresses = lessonService.getUserProgressForLesson(lesson.getLessonId()); + } else { + + List userIds = new LinkedList(); + for (User learner : learners) { + userIds.add(learner.getUserId()); } + + learnerProgresses = lessonService.getUserProgressForLesson(lesson.getLessonId(), userIds); } - - return new HashMap(); + + if (learnerProgresses != null) { + for (LearnerProgress learnerProgress : learnerProgresses) { + map.put(learnerProgress.getUser().getUserId(), learnerProgress); + } + } + + return map; } /** * Returns map containing (userId -> GradebookUserActivity) pairs. It serves merely for optimizing amount of db * queries. */ - private Map getUserToGradebookUserActivityMap(Activity activity) { + private Map getUserToGradebookUserActivityMap(Activity activity, List learners) { - if (activity != null) { - - List gradebookUserActivities = gradebookDAO + Map map = new HashMap(); + if (activity == null || learners != null && learners.isEmpty()) { + return map; + } + + //get either all available learnerProgresses or only for specified users + List gradebookUserActivities; + if (learners == null) { + gradebookUserActivities = gradebookDAO .getAllGradebookUserActivitiesForActivity(activity.getActivityId()); - - if ((gradebookUserActivities != null) && (gradebookUserActivities.size() > 0)) { - Map map = new HashMap(); - for (GradebookUserActivity gradebookUserActivity : gradebookUserActivities) { - map.put(gradebookUserActivity.getLearner().getUserId(), gradebookUserActivity); - } - return map; + } else { + + List userIds = new LinkedList(); + for (User learner : learners) { + userIds.add(learner.getUserId()); } + + gradebookUserActivities = gradebookDAO.getGradebookUserActivitiesForActivity(activity.getActivityId(), userIds); } + + if (gradebookUserActivities != null) { + for (GradebookUserActivity gradebookUserActivity : gradebookUserActivities) { + map.put(gradebookUserActivity.getLearner().getUserId(), gradebookUserActivity); + } + } - return new HashMap(); + return map; } /** @@ -1521,27 +1592,42 @@ return new HashMap(); } - + /** * Returns map containing (userId -> GradebookUserLesson) pairs. It serves merely for optimizing amount of db * queries. + * + * @param userIds if provided - return userLessons only for those users */ - private Map getUserToGradebookUserLessonMap(Lesson lesson) { + private Map getUserToGradebookUserLessonMap(Lesson lesson, List learners) { - if (lesson != null) { - String query = "select ul from GradebookUserLesson ul where ul.lesson.lessonId=?"; - List gradebookUserLessons = baseDAO.find(query, new Object[] { lesson.getLessonId() }); - - if ((gradebookUserLessons != null) && (gradebookUserLessons.size() > 0)) { - Map map = new HashMap(); - for (GradebookUserLesson gradebookUserLesson : gradebookUserLessons) { - map.put(gradebookUserLesson.getLearner().getUserId(), gradebookUserLesson); - } - return map; + Map map = new HashMap(); + if (lesson == null || learners != null && learners.isEmpty()) { + return map; + } + + //get either all available gradebookUserLessons or only for specified users + List gradebookUserLessons; + if (learners == null) { + gradebookUserLessons = gradebookDAO.getGradebookUserLessons(lesson); + } else { + + List userIds = new LinkedList(); + for (User learner : learners) { + userIds.add(learner.getUserId()); } + + gradebookUserLessons = gradebookDAO.getGradebookUserLessons(lesson, userIds); } + + if (gradebookUserLessons != null) { + for (GradebookUserLesson gradebookUserLesson : gradebookUserLessons) { + map.put(gradebookUserLesson.getLearner().getUserId(), gradebookUserLesson); + } + } - return new HashMap(); + return map; + } /** Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookService.java =================================================================== diff -u -r2c4a869fa3cbe6b7568e853183feaa1e11ac741b -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookService.java (.../IGradebookService.java) (revision 2c4a869fa3cbe6b7568e853183feaa1e11ac741b) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookService.java (.../IGradebookService.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -68,7 +68,8 @@ * @param groupId * @return */ - List getGBUserRowsForActivity(Lesson lesson, ToolActivity activity, Long groupId); + List getGBUserRowsForActivity(Lesson lesson, ToolActivity activity, Long groupId, int page, + int size, String sortBy, String sortOrder, String searchString); /** * Gets the user rows and the user's entire lesson mark for all users in a lesson @@ -77,14 +78,45 @@ * @return */ List getGBUserRowsForLesson(Lesson lesson); + + /** + * Gets the user rows containing only users' names. Do proper paging on DB side. + * + * @param lesson + * @param page + * @param size + * @param sortOrder + * @param searchString + * @return + */ + List getGBUserRowsForLesson(Lesson lesson, int page, int size, String sortBy, String sortOrder, + String searchString); + +// /** +// * Gets the user rows containing only users' names. Do proper paging on DB side. +// * +// * @param lesson +// * @param page +// * @param size +// * @param sortOrder +// * @param searchString +// * @return +// */ +// List getGBUserRowsForLesson(Lesson lesson, int page, int size, String sortOrder, +// String searchString); + + int getCountUsersByLesson(Long lessonId, String searchString); /** * Gets the user rows for specified organisation * * @param organisation * @return */ - ArrayList getGBUserRowsForOrganisation(Organisation organisation); + ArrayList getGBUserRowsForOrganisation(Organisation organisation, int page, int size, + String sortOrder, String searchString); + + int getCountUsersByOrganisation(Integer orgId, String searchString); /** * Updates a user's lesson mark, this will make it desynchronised with the aggregated marks from the activities @@ -146,7 +178,8 @@ * @param view * @return */ - List getGBLessonRows(Organisation organisation, User user, User viewer, GBGridView view); + List getGBLessonRows(Organisation organisation, User user, User viewer, GBGridView view, + int page, int size, String sortBy, String sortOrder, String searchString); /** * Gets a gradebook lesson mark/feedback for a given user and lesson Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GBGridView.java =================================================================== diff -u -re074865bde063cd3ac9e531a90857d07de9d121c -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GBGridView.java (.../GBGridView.java) (revision e074865bde063cd3ac9e531a90857d07de9d121c) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GBGridView.java (.../GBGridView.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -28,5 +28,6 @@ MON_ACTIVITY, MON_COURSE, LRN_COURSE, - LRN_ACTIVITY + LRN_ACTIVITY, + LIST } Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GradebookConstants.java =================================================================== diff -u -re9144c94e842e1e1609999a71cca9e6ea30dd054 -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GradebookConstants.java (.../GradebookConstants.java) (revision e9144c94e842e1e1609999a71cca9e6ea30dd054) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GradebookConstants.java (.../GradebookConstants.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -74,6 +74,7 @@ public static final String VIEW_MON_COURSE= "monCourse"; public static final String VIEW_LRN_COURSE = "lrnCourse"; public static final String VIEW_LRN_ACTIVITY = "lrnActivity"; + public static final String VIEW_LIST = "listView"; // XML Elemetns public static final String ELEMENT_ROWS = "rows"; Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GradebookUtil.java =================================================================== diff -u -r3667835e31310dd9c09421264275fdb08ddd7123 -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GradebookUtil.java (.../GradebookUtil.java) (revision 3667835e31310dd9c09421264275fdb08ddd7123) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GradebookUtil.java (.../GradebookUtil.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -23,16 +23,11 @@ /* $Id$ */ package org.lamsfoundation.lams.gradebook.util; -import java.io.IOException; -import java.io.OutputStream; import java.io.StringWriter; -import java.text.SimpleDateFormat; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Collections; -import java.util.Date; import java.util.Iterator; -import java.util.LinkedHashMap; import java.util.List; import javax.servlet.http.HttpServletRequest; @@ -45,14 +40,6 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import org.apache.commons.lang.StringUtils; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.lamsfoundation.lams.gradebook.dto.GradebookGridRowDTO; import org.lamsfoundation.lams.gradebook.dto.comparators.GBAverageMarkComparator; import org.lamsfoundation.lams.gradebook.dto.comparators.GBAverageTimeTakenComparator; @@ -61,7 +48,6 @@ import org.lamsfoundation.lams.gradebook.dto.comparators.GBRowNameComparator; import org.lamsfoundation.lams.gradebook.dto.comparators.GBStartDateComparator; import org.lamsfoundation.lams.gradebook.dto.comparators.GBTimeTakenComparator; -import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.WebUtil; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -323,6 +309,8 @@ return GBGridView.LRN_COURSE; else if (view.equals(GradebookConstants.VIEW_LRN_ACTIVITY)) return GBGridView.LRN_ACTIVITY; + else if (view.equals(GradebookConstants.VIEW_LIST)) + return GBGridView.LIST; else throw new IllegalArgumentException("[" + view + "] is not a legal gradebook view"); } Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookAction.java =================================================================== diff -u -r2c4a869fa3cbe6b7568e853183feaa1e11ac741b -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookAction.java (.../GradebookAction.java) (revision 2c4a869fa3cbe6b7568e853183feaa1e11ac741b) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookAction.java (.../GradebookAction.java) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -44,6 +44,7 @@ import org.lamsfoundation.lams.gradebook.util.GradebookConstants; import org.lamsfoundation.lams.gradebook.util.GradebookUtil; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.service.ILessonService; @@ -138,7 +139,7 @@ // Get the user gradebook list from the db // A slightly different list is needed for userview or activity view - if ((view == GBGridView.MON_USER) || (view == GBGridView.LRN_ACTIVITY)) { + if ((view == GBGridView.MON_USER) || (view == GBGridView.LRN_ACTIVITY)) {//2nd level && from personal marks page (2nd level or 1st) gradebookActivityDTOs = getGradebookService().getGBActivityRowsForLearner(lessonID, userID); } else if (view == GBGridView.MON_ACTIVITY) { gradebookActivityDTOs = getGradebookService().getGBActivityRowsForLesson(lessonID); @@ -195,6 +196,7 @@ // Get the user gradebook list from the db List gradebookUserDTOs = new ArrayList(); + int totalUsers = 0; // if leesonID is specified show results based on lesson if (lessonID != null) { if (!getSecurityService().isLessonMonitor(lessonID, user.getUserID(), "get gradebook", false)) { @@ -203,8 +205,13 @@ } Lesson lesson = getLessonService().getLesson(lessonID); - if ((view == GBGridView.MON_USER) || (view == GBGridView.MON_COURSE)) { - gradebookUserDTOs = getGradebookService().getGBUserRowsForLesson(lesson); + //GBGridView.MON_USER - 1st table of gradebook lesson monitor + //GBGridView.MON_COURSE - Subgrid of 1st table of gradebook course monitor + if (view == GBGridView.MON_USER || view == GBGridView.MON_COURSE) { + gradebookUserDTOs = getGradebookService().getGBUserRowsForLesson(lesson, page-1, rowLimit, sortBy, sortOrder, searchString); + totalUsers = lesson.getAllLearners().size(); + + // Subgrid of 2nd table of gradebook lesson monitor } else if (view == GBGridView.MON_ACTIVITY) { String rowID = WebUtil.readStrParam(request, AttributeNames.PARAM_ACTIVITY_ID); @@ -224,31 +231,47 @@ Activity activity = getGradebookService().getActivityById(activityID); if ((activity != null) && (activity instanceof ToolActivity)) { gradebookUserDTOs = getGradebookService().getGBUserRowsForActivity(lesson, (ToolActivity) activity, - groupId); + groupId, page-1, rowLimit, sortBy, sortOrder, searchString); + + //calculate totalUsers + totalUsers = lesson.getAllLearners().size(); + if (groupId != null) { + Group group = (Group) getUserService().findById(Group.class, groupId); + if (group != null) { + totalUsers = group.getUsers().size(); + } + } + } else { // return null and the grid will report an error GradebookAction.logger.error("No activity found for: " + activityID); return null; } } - // if organisationID is specified (but not lessonID) then show results for organisation + // 2nd table of gradebook course monitor + // if organisationID is specified (but not lessonID) then show results for organisation } else if (organisationID != null) { if (!getSecurityService().isGroupMonitor(organisationID, user.getUserID(), "get gradebook", false)) { response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a monitor in the organisation"); return null; } Organisation org = (Organisation) getUserService().findById(Organisation.class, organisationID); - gradebookUserDTOs = getGradebookService().getGBUserRowsForOrganisation(org); + gradebookUserDTOs = getGradebookService().getGBUserRowsForOrganisation(org, page-1, rowLimit, sortOrder, searchString); + totalUsers = gradebookService.getCountUsersByOrganisation(organisationID, searchString); + } else { LamsDispatchAction.log.error("Missing parameters: either lessonID or organisationID should be specified."); response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing parameters"); return null; } - String ret = GradebookUtil.toGridXML(gradebookUserDTOs, view, sortBy, isSearch, searchField, searchOper, - searchString, sortOrder, rowLimit, page); + //calculate totalPages + int totalPages = new Double(Math.ceil(new Integer(totalUsers).doubleValue() + / new Integer(rowLimit).doubleValue())).intValue(); + String ret = GradebookUtil.toGridXML(gradebookUserDTOs, page, totalPages, view); + writeResponse(response, LamsDispatchAction.CONTENT_TYPE_TEXT_XML, LamsDispatchAction.ENCODING_UTF8, ret); return null; } @@ -293,6 +316,14 @@ searchString = WebUtil.readStrParam(request, GradebookConstants.PARAM_ROW_NAME, true); } + if (sortBy == null) { + sortBy = GradebookConstants.PARAM_ID; + } + + if (sortOrder == null) { + sortOrder = GradebookConstants.SORT_ASC; + } + Set lessons = organisation.getLessons(); if (lessons == null) { return null; @@ -301,22 +332,36 @@ User user; User viewer = getRealUser(); if (view == GBGridView.MON_USER) { + Integer userID = WebUtil.readIntParam(request, GradebookConstants.PARAM_USERID); + user = (User) getUserService().findById(User.class, userID); + } else { + user = getRealUser(); + } + + //permission check + if (view == GBGridView.MON_USER) { if (!getSecurityService().isGroupMonitor(courseID, viewer.getUserId(), "get course gradebook", false)) { response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a monitor in the organisation"); return null; } - Integer userID = WebUtil.readIntParam(request, GradebookConstants.PARAM_USERID); - user = (User) getUserService().findById(User.class, userID); - } else { + } else if (view == GBGridView.MON_COURSE || view == GBGridView.LIST) { if (!getSecurityService().hasOrgRole(courseID, viewer.getUserId(), - new String[] { Role.GROUP_MANAGER, Role.MONITOR, Role.LEARNER }, + new String[] { Role.GROUP_MANAGER, Role.GROUP_ADMIN }, "get course gradebook", false)) { + response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a group manager or admin in the organisation"); + return null; + } + + } else if (view == GBGridView.LRN_COURSE) { + if (!getSecurityService().hasOrgRole(courseID, viewer.getUserId(), + new String[] { Role.LEARNER }, "get course gradebook for learner", false)) { - response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a participant in the organisation"); + response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a learner in the organisation"); return null; } - - user = getRealUser(); + + } else { + return null; } if ((organisation == null) || (user == null) || (viewer == null)) { @@ -326,16 +371,19 @@ return null; } List gradebookLessonDTOs = getGradebookService().getGBLessonRows(organisation, user, - viewer, view); - - if (sortBy == null) { - sortBy = GradebookConstants.PARAM_ID; + viewer, view, page-1, rowLimit, sortBy, sortOrder, searchString); + + String ret; + if (view == GBGridView.MON_COURSE || view == GBGridView.LIST) { + int totalPages = new Double(Math.ceil(new Integer(lessons.size()).doubleValue() + / new Integer(rowLimit).doubleValue())).intValue(); + ret = GradebookUtil.toGridXML(gradebookLessonDTOs, page, totalPages, view); + + } else { + ret = GradebookUtil.toGridXML(gradebookLessonDTOs, view, sortBy, isSearch, searchField, searchOper, + searchString, sortOrder, rowLimit, page); } - // String ret = GradebookUtil.toGridXML(gradebookLessonDTOs, page, totalPages, method); - String ret = GradebookUtil.toGridXML(gradebookLessonDTOs, view, sortBy, isSearch, searchField, searchOper, - searchString, sortOrder, rowLimit, page); - writeResponse(response, LamsDispatchAction.CONTENT_TYPE_TEXT_XML, LamsDispatchAction.ENCODING_UTF8, ret); return null; } Index: lams_gradebook/web/gradebookCourseMonitor.jsp =================================================================== diff -u -r732f77a31113c5838d0704829b99418d90053471 -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_gradebook/web/gradebookCourseMonitor.jsp (.../gradebookCourseMonitor.jsp) (revision 732f77a31113c5838d0704829b99418d90053471) +++ lams_gradebook/web/gradebookCourseMonitor.jsp (.../gradebookCourseMonitor.jsp) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -46,7 +46,7 @@ {name:'id', index:'id', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, {name:'rowName',index:'rowName', sortable:true, editable:false}, {name:'subGroup',index:'subGroup', sortable:false, editable:false, search:false, width:80}, - {name:'startDate',index:'startDate', sortable:false, editable:false, search:false, width:80, align:"center"}, + {name:'startDate',index:'startDate', sortable:true, editable:false, search:false, width:80, align:"center"}, {name:'avgTimeTaken',index:'avgTimeTaken', sortable:true, editable:false, search:false, width:80, align:"center"}, {name:'avgMark',index:'avgMark', sortable:true, editable:false, search:false, width:50, align:"center"} ], @@ -172,7 +172,7 @@ jQuery("#userView").jqGrid({ caption: "", datatype: "xml", - url: "/gradebook/gradebook.do?dispatch=getUserGridData&view=monCourse&organisationID=${organisationID}", + url: "/gradebook/gradebook.do?dispatch=getUserGridData&view=listView&organisationID=${organisationID}", height: "100%", width: 660, sortorder: "asc", @@ -182,19 +182,11 @@ rowNum:10, colNames:[ '', - "", - "", - "", - "", - "" + "" ], colModel:[ {name:'id', index:'id', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, - {name:'rowName',index:'rowName', sortable:true, editable:false}, - {name:'status', index:'status', sortable:false, editable:false, search:false, title:false, width:50, align:"center", hidden:true}, - {name:'timeTaken', index:'timeTaken', sortable:true, editable:false, search:false, width:80, align:"center", hidden:true}, - {name:'feedback',index:'feedback', sortable:false, editable:true, edittype:'textarea', editoptions:{rows:'4',cols:'20'} , search:false, hidden:true}, - {name:'mark',index:'mark', sortable:true, editable:true, editrules:{number:true}, search:false, width:50, align:"center", hidden:true} + {name:'rowName',index:'rowName', sortable:true, editable:false} ], loadError: function(xhr,st,err) { jQuery("#userView").clearGridData(); @@ -306,14 +298,6 @@ jQuery("#"+subgrid_table_id).setCell(rowid, "mark", markStr, "", ""); } } - - // Update the aggregated lesson mark - var lessonID = jQuery("#"+subgrid_table_id).getRowData(rowid)["id"]; - $.get("/gradebook/gradebook.do", {dispatch:"getLessonMarkAggregate", lessonID:lessonID, userID:userID}, function(xml) { - if (xml!=null) { - jQuery("#userView").setCell(row_id, "mark", xml, "", ""); - } - }); } $("#organisationGrid").trigger("reloadGrid"); }, @@ -352,20 +336,11 @@ }); } }); - - // Allowing column editing for this grid - jQuery("#userView").navButtonAdd('#userViewPager',{ - caption: "", - buttonimg:"images/table_edit.png", - onClickButton: function(){ - jQuery("#userView").setColumns(); - } - }); //initialize lesson list jQuery("#lessons-jqgrid").jqGrid({ datatype: "xml", - url: "/gradebook/gradebook.do?dispatch=getCourseGridData&view=monCourse&organisationID=${organisationID}", + url: "/gradebook/gradebook.do?dispatch=getCourseGridData&view=listView&organisationID=${organisationID}", colNames:['Id', ''], colModel:[ {name:'id',index:'id', width:35, sorttype:"int", hidden:true}, Index: lams_gradebook/web/gradebookMonitor.jsp =================================================================== diff -u -r732f77a31113c5838d0704829b99418d90053471 -ra2bfe0110d8572642cf5f19fc3e2882252fdd43b --- lams_gradebook/web/gradebookMonitor.jsp (.../gradebookMonitor.jsp) (revision 732f77a31113c5838d0704829b99418d90053471) +++ lams_gradebook/web/gradebookMonitor.jsp (.../gradebookMonitor.jsp) (revision a2bfe0110d8572642cf5f19fc3e2882252fdd43b) @@ -91,7 +91,7 @@ {name:'rowNamer',index:'rowName', sortable:true, editable:false, autoencode:true}, {name:'status',index:'status', sortable:false, editable:false, search:false, width:50, align:"center"}, {name:'timeTaken',index:'timeTaken', sortable:true, editable:false, search:false, width:80, align:"center"}, - {name:'feedback',index:'feedback', sortable:false, editable:true, edittype:'textarea', editoptions:{rows:'4',cols:'20'}, search:false }, + {name:'feedback',index:'feedback', sortable:true, editable:true, edittype:'textarea', editoptions:{rows:'4',cols:'20'}, search:false }, {name:'mark',index:'mark', sortable:true, editable:true, editrules:{number:true}, search:false, width:50, align:"center"} ], loadError: function(xhr,st,err) { @@ -119,9 +119,6 @@ '', "", "", - "", - "", - "", "", "", "" @@ -131,9 +128,6 @@ {name:'marksAvailable',index:'marksAvailable', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, {name:'rowName', index:'rowName', sortable:false, editable: false}, {name:'status', index:'status', sortable:false, editable:false, width:50, align:"center"}, - {name:'output', index:'output', sortable:false, editable: false, width:200, hidden:true}, - {name:'competences', index:'competences', sortable:false, editable: false, hidden:true}, - {name:'startDate', index:'startDate', sortable:true, editable: false, hidden:true, width:60, align:"center"}, {name:'timeTaken',index:'timeTaken', sortable:true, editable: false, width:80, align:"center"}, {name:'feedback', index:'feedback', sortable:false, editable: true, edittype:'textarea', editoptions:{rows:'4',cols:'20'}, width:200, hidden:true}, {name:'mark', index:'mark', sortable:true, editable: true, editrules:{number:true}, width:50, align:"center" } @@ -311,9 +305,7 @@ '', "", "", - "", "", - "", "", "" ], @@ -322,9 +314,7 @@ {name:'marksAvailable',index:'marksAvailable', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, {name:'rowName',index:'rowName', sortable:true, editable:false}, {name:'status', index:'status', sortable:false, editable:false, search:false, width:30, align:"center"}, - {name:'startDate', index:'startDate', sortable:true, editable: false, hidden:true, width:60, align:"center"}, {name:'timeTaken', index:'timeTaken', sortable:true, editable: false, width:80, align:"center"}, - {name:'output', index:'output', sortable:false, editable: false, search:false, width:200, hidden:true}, {name:'feedback',index:'feedback', sortable:false, editable:true, edittype:'textarea', editoptions:{rows:'4',cols:'20'} , search:false, width:200, hidden:true}, {name:'mark',index:'mark', sortable:true, editable:true, editrules:{number:true}, search:false, width:50, align:"center"} ], @@ -339,8 +329,7 @@ var string = removeHTMLTags(rowData["mark"]); - if (string.indexOf("-") != -1) - { + if (string.indexOf("-") != -1) { string = " "; } else if (string.indexOf("/") != -1) {