Index: lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java,v diff -u -r1.21 -r1.22 --- lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java 2 Jul 2009 08:19:14 -0000 1.21 +++ lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java 5 Nov 2010 00:19:02 -0000 1.22 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java,v diff -u -r1.32 -r1.33 --- lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java 31 Mar 2009 03:17:28 -0000 1.32 +++ lams_central/src/java/org/lamsfoundation/lams/web/HomeAction.java 5 Nov 2010 00:19:02 -0000 1.33 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml,v diff -u -r1.39 -r1.40 --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml 20 Apr 2009 00:10:02 -0000 1.39 +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/lesson/Lesson.hbm.xml 5 Nov 2010 00:19:09 -0000 1.40 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java,v diff -u -r1.29 -r1.30 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java 17 Mar 2010 01:22:00 -0000 1.29 +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java 5 Nov 2010 00:19:09 -0000 1.30 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java,v diff -u -r1.38 -r1.39 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java 17 Mar 2010 01:22:00 -0000 1.38 +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java 5 Nov 2010 00:19:09 -0000 1.39 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java,v diff -u -r1.29 -r1.30 --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java 17 Mar 2010 01:22:00 -0000 1.29 +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java 5 Nov 2010 00:19:09 -0000 1.30 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java,v diff -u -r1.39 -r1.40 --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java 17 Mar 2010 01:22:00 -0000 1.39 +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java 5 Nov 2010 00:19:09 -0000 1.40 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java,v diff -u -r1.156 -r1.157 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 27 Oct 2010 17:35:43 -0000 1.156 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 5 Nov 2010 00:18:56 -0000 1.157 @@ -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()); }