Index: lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java =================================================================== diff -u -racc8d2acf5b6b0002e0c8129947040a779ab4077 -r4020e48e252d3a5a9ace181e62bb78900f05128b --- lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java (.../DisplayGroupAction.java) (revision acc8d2acf5b6b0002e0c8129947040a779ab4077) +++ lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java (.../DisplayGroupAction.java) (revision 4020e48e252d3a5a9ace181e62bb78900f05128b) @@ -257,7 +257,7 @@ // iterate through user's lessons where they are learner Map map = getLessonService().getLessonsByOrgAndUserWithCompletedFlag(userId, orgId, - false); + Role.ROLE_LEARNER); for (IndexLessonBean bean : map.values()) { List lessonLinks = new ArrayList(); String url = null; @@ -288,9 +288,11 @@ // Getting the parent organisation if applicable Organisation parent = org.getParentOrganisation(); - // iterate through user's lessons where they are staff, and add staff links to the beans in the map. + // iterate through user's lessons where they are staff (or simply through all lessons in case of Group_Manager), + // and add staff links to the beans in the map. + Integer userRole = (contains(roles, Role.ROLE_GROUP_MANAGER)) ? Role.ROLE_GROUP_MANAGER : Role.ROLE_MONITOR; Map staffMap = getLessonService().getLessonsByOrgAndUserWithCompletedFlag(userId, orgId, - true); + userRole); for (IndexLessonBean bean : staffMap.values()) { if (map.containsKey(bean.getId())) { bean = map.get(bean.getId()); Index: lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java =================================================================== diff -u -r4c7972524def37c1472ee59358f25f9e564a8fd3 -r4020e48e252d3a5a9ace181e62bb78900f05128b --- lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java (.../HomeAction.java) (revision 4c7972524def37c1472ee59358f25f9e564a8fd3) +++ lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java (.../HomeAction.java) (revision 4020e48e252d3a5a9ace181e62bb78900f05128b) @@ -253,7 +253,8 @@ return mapping.findForward("error"); } - if (lesson.getLessonClass() == null || !lesson.getLessonClass().isStaffMember(getRealUser(user))) { + if (lesson.getLessonClass() == null || !lesson.getLessonClass().isStaffMember(getRealUser(user)) + && !req.isUserInRole(Role.GROUP_MANAGER)) { log.error("learner: User " + user.getLogin() + " is not a learner in the requested lesson. Cannot access the lesson."); return displayMessage(mapping, req, "error.authorisation"); Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml =================================================================== diff -u -r72e01661ffe932634adbe4b229d9ee44d6928a45 -r4020e48e252d3a5a9ace181e62bb78900f05128b --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml (.../Lesson.hbm.xml) (revision 72e01661ffe932634adbe4b229d9ee44d6928a45) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml (.../Lesson.hbm.xml) (revision 4020e48e252d3a5a9ace181e62bb78900f05128b) @@ -282,6 +282,21 @@ AND g.group_id = gi.staff_group_id + + + + + + + SELECT l.lesson_id, l.name, l.description, l.lesson_state_id, lp.lesson_completed_flag + FROM (lams_lesson l, lams_learning_design ld) + LEFT JOIN lams_learner_progress lp ON lp.user_id = :userId AND lp.lesson_id = l.lesson_id + WHERE l.learning_design_id = ld.learning_design_id + AND ld.copy_type_id != 3 + AND l.organisation_id = :orgId + AND l.lesson_state_id != 7 + + SELECT DISTINCT {lesson.*} Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java =================================================================== diff -u -re283e2d817ad22103fdb65a11a5e68f4f61016f9 -r4020e48e252d3a5a9ace181e62bb78900f05128b --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java (.../ILessonDAO.java) (revision e283e2d817ad22103fdb65a11a5e68f4f61016f9) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java (.../ILessonDAO.java) (revision 4020e48e252d3a5a9ace181e62bb78900f05128b) @@ -159,14 +159,16 @@ public Lesson getLessonForActivity(final long activityId); /** - * Gets all non-removed lessons for a user in an org; set isStaff flag whether you want lessons where user is in the - * staff list, or just in the learner list. + * Gets all non-removed lessons for a user in an org; set userRole parameter to learner if you want lessons where user is in the + * learner list, or to monitor if in the staff list. * * @param userId a user id that identifies the user. * @param orgId an org id that identifies the organisation. + * @param userRole return lessons where user is learner or monitor. or returns all lessons in case of group manager + * * @return a List containing a list of tuples containing lesson details and the lesson completed flag for the user. */ - public List getLessonsByOrgAndUserWithCompletedFlag(final Integer userId, final Integer orgId, final boolean isStaff); + public List getLessonsByOrgAndUserWithCompletedFlag(final Integer userId, final Integer orgId, final Integer userRole); /** * Gets all non-removed lessons for a user in a group including sub-groups Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java =================================================================== diff -u -re283e2d817ad22103fdb65a11a5e68f4f61016f9 -r4020e48e252d3a5a9ace181e62bb78900f05128b --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java (.../LessonDAO.java) (revision e283e2d817ad22103fdb65a11a5e68f4f61016f9) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java (.../LessonDAO.java) (revision 4020e48e252d3a5a9ace181e62bb78900f05128b) @@ -37,6 +37,7 @@ import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.dao.ILessonDAO; +import org.lamsfoundation.lams.usermanagement.Role; import org.lamsfoundation.lams.usermanagement.User; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.HibernateTemplate; @@ -289,14 +290,24 @@ * @see org.lamsfoundation.lams.lesson.dao.ILessonDAO#getLessonsByOrgAndUserWithCompletedFlag(Integer, Integer, * boolean) */ - public List getLessonsByOrgAndUserWithCompletedFlag(final Integer userId, final Integer orgId, final boolean isStaff) { + public List getLessonsByOrgAndUserWithCompletedFlag(final Integer userId, final Integer orgId, final Integer userRole) { List dtos = null; HibernateTemplate hibernateTemplate = new HibernateTemplate(this.getSessionFactory()); dtos = (List) hibernateTemplate.execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { - Query query = session.getNamedQuery(isStaff ? "staffLessonsByOrgAndUserWithCompletedFlag" - : "learnerLessonsByOrgAndUserWithCompletedFlag"); + + String queryName; + if (Role.ROLE_MONITOR.equals(userRole)) { + queryName = "staffLessonsByOrgAndUserWithCompletedFlag"; + } else if (Role.ROLE_LEARNER.equals(userRole)) { + queryName = "learnerLessonsByOrgAndUserWithCompletedFlag"; + } else { + // in case of Role.ROLE_GROUP_MANAGER + queryName = "allLessonsByOrgAndUserWithCompletedFlag"; + } + + Query query = session.getNamedQuery(queryName); query.setInteger("userId", userId.intValue()); query.setInteger("orgId", orgId.intValue()); List result = query.list(); Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java =================================================================== diff -u -re283e2d817ad22103fdb65a11a5e68f4f61016f9 -r4020e48e252d3a5a9ace181e62bb78900f05128b --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision e283e2d817ad22103fdb65a11a5e68f4f61016f9) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision 4020e48e252d3a5a9ace181e62bb78900f05128b) @@ -343,11 +343,11 @@ * * @param userId user's id * @param orgId org's id - * @param isStaff return lessons where user is staff, or where user is learner + * @param userRole return lessons where user is learner or monitor. or returns all lessons in case of group manager * @return map of lesson beans used in the index page */ public Map getLessonsByOrgAndUserWithCompletedFlag(Integer userId, Integer orgId, - boolean isStaff); + Integer userRole); /** * Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java =================================================================== diff -u -re283e2d817ad22103fdb65a11a5e68f4f61016f9 -r4020e48e252d3a5a9ace181e62bb78900f05128b --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision e283e2d817ad22103fdb65a11a5e68f4f61016f9) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision 4020e48e252d3a5a9ace181e62bb78900f05128b) @@ -762,9 +762,9 @@ } public Map getLessonsByOrgAndUserWithCompletedFlag(Integer userId, Integer orgId, - boolean isStaff) { + Integer userRole) { TreeMap map = new TreeMap(); - List list = lessonDAO.getLessonsByOrgAndUserWithCompletedFlag(userId, orgId, isStaff); + List list = lessonDAO.getLessonsByOrgAndUserWithCompletedFlag(userId, orgId, userRole); if (list != null) { Iterator iterator = list.iterator(); while (iterator.hasNext()) { Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -rddf852438a86c3da1559cbd2ff2f62d45bf818da -r4020e48e252d3a5a9ace181e62bb78900f05128b --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision ddf852438a86c3da1559cbd2ff2f62d45bf818da) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 4020e48e252d3a5a9ace181e62bb78900f05128b) @@ -87,6 +87,7 @@ import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.tool.service.ILamsCoreToolService; import org.lamsfoundation.lams.usermanagement.Organisation; +import org.lamsfoundation.lams.usermanagement.OrganisationType; import org.lamsfoundation.lams.usermanagement.Role; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.UserOrganisation; @@ -361,8 +362,8 @@ } /** - * Checks whether the user is a staff member for the lesson or the creator - * of the lesson. If not, throws a UserAccessDeniedException exception + * Checks whether the user is a staff member for the lesson, the creator + * of the lesson or simply a group manager. If not, throws a UserAccessDeniedException exception */ private void checkOwnerOrStaffMember(Integer userId, Lesson lesson, String actionDescription) { User user = (User) baseDAO.find(User.class, userId); @@ -371,7 +372,13 @@ return; } - if (lesson == null || lesson.getLessonClass() == null || !lesson.getLessonClass().isStaffMember(user)) { + Organisation course = lesson.getOrganisation(); + if (OrganisationType.CLASS_TYPE.equals(course.getOrganisationType().getOrganisationTypeId())) { + course = course.getParentOrganisation(); + } + boolean isUserGroupManager = userManagementService.isUserInRole(userId, course.getOrganisationId(), Role.GROUP_MANAGER); + + if (lesson == null || lesson.getLessonClass() == null || !lesson.getLessonClass().isStaffMember(user) && !isUserGroupManager) { throw new UserAccessDeniedException("User " + userId + " may not " + actionDescription + " for lesson " + lesson.getLessonId()); }