Index: lams_central/src/java/org/lamsfoundation/lams/web/IndexLessonBean.java =================================================================== diff -u -r885521cf88a11ca03304d18d0c84afd4d8b3e43f -rbcdeef3baa9554197ce15b4b7f0563cd34858e56 --- lams_central/src/java/org/lamsfoundation/lams/web/IndexLessonBean.java (.../IndexLessonBean.java) (revision 885521cf88a11ca03304d18d0c84afd4d8b3e43f) +++ lams_central/src/java/org/lamsfoundation/lams/web/IndexLessonBean.java (.../IndexLessonBean.java) (revision bcdeef3baa9554197ce15b4b7f0563cd34858e56) @@ -41,6 +41,11 @@ private Integer state; private List links; + public IndexLessonBean(String name, String url) { + this.name = name; + this.url = url; + } + public IndexLessonBean(String name, List links) { this.name = name; this.links = links; Index: lams_central/src/java/org/lamsfoundation/lams/web/IndexOrgBean.java =================================================================== diff -u -ree5e930b9434a53ef840c4dc983be4eeea45336d -rbcdeef3baa9554197ce15b4b7f0563cd34858e56 --- lams_central/src/java/org/lamsfoundation/lams/web/IndexOrgBean.java (.../IndexOrgBean.java) (revision ee5e930b9434a53ef840c4dc983be4eeea45336d) +++ lams_central/src/java/org/lamsfoundation/lams/web/IndexOrgBean.java (.../IndexOrgBean.java) (revision bcdeef3baa9554197ce15b4b7f0563cd34858e56) @@ -26,8 +26,6 @@ import java.util.Date; import java.util.List; -import org.lamsfoundation.lams.usermanagement.Role; - /** * @version * @@ -133,5 +131,13 @@ IndexOrgBean b = (IndexOrgBean)indexOrgBean; return name.compareTo(b.getName()); } + + public void addLesson(IndexLessonBean lesson) { + lessons.add(lesson); + } + + public void addChildOrgBean(IndexOrgBean orgBean) { + childIndexOrgBeans.add(orgBean); + } } Index: lams_central/src/java/org/lamsfoundation/lams/web/ProfileAction.java =================================================================== diff -u -r8872130dfd8a6b86ca24fb61fbd55018ee938c7a -rbcdeef3baa9554197ce15b4b7f0563cd34858e56 --- lams_central/src/java/org/lamsfoundation/lams/web/ProfileAction.java (.../ProfileAction.java) (revision 8872130dfd8a6b86ca24fb61fbd55018ee938c7a) +++ lams_central/src/java/org/lamsfoundation/lams/web/ProfileAction.java (.../ProfileAction.java) (revision bcdeef3baa9554197ce15b4b7f0563cd34858e56) @@ -22,20 +22,25 @@ */ package org.lamsfoundation.lams.web; +import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; import org.lamsfoundation.lams.learning.service.ICoreLearnerService; import org.lamsfoundation.lams.lesson.dto.LessonDTO; +import org.lamsfoundation.lams.usermanagement.Organisation; +import org.lamsfoundation.lams.usermanagement.OrganisationType; import org.lamsfoundation.lams.usermanagement.SupportedLocale; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; @@ -95,15 +100,69 @@ HttpServletRequest request, HttpServletResponse response) throws Exception { - User requestor = (User)getService().getUserByLogin(request.getRemoteUser()); // list all active lessons for this learner (single sql query) + User requestor = (User)getService().getUserByLogin(request.getRemoteUser()); LessonDTO[] lessons = getLearnerService().getActiveLessonsFor(requestor.getUserId()); - request.setAttribute("lessons", lessons); + + // make org-sorted beans out of the lessons + HashMap orgBeansMap = new HashMap(); + for (LessonDTO lesson : lessons) { + Integer orgId = lesson.getOrganisationID(); + Organisation org = (Organisation)getService().findById(Organisation.class, orgId); + Integer orgTypeId = org.getOrganisationType().getOrganisationTypeId(); + IndexLessonBean lessonBean = new IndexLessonBean( + lesson.getLessonName(), + "javascript:openLearner("+lesson.getLessonID()+")" + ); + log.debug("Lesson: "+lesson.getLessonName()); + + // insert or update bean if it is a course + if (orgTypeId.equals(OrganisationType.COURSE_TYPE)) { + IndexOrgBean orgBean = (!orgBeansMap.containsKey(orgId)) + ? new IndexOrgBean(org.getName(), orgTypeId) + : orgBeansMap.get(orgId); + orgBean.addLesson(lessonBean); + orgBeansMap.put(orgId, orgBean); + } else if (orgTypeId.equals(OrganisationType.CLASS_TYPE)) { + + // if it is a class, find existing or create new parent bean + Organisation parentOrg = org.getParentOrganisation(); + Integer parentOrgId = parentOrg.getOrganisationId(); + IndexOrgBean parentOrgBean = (!orgBeansMap.containsKey(parentOrgId)) + ? new IndexOrgBean(parentOrg.getName(), OrganisationType.COURSE_TYPE) + : orgBeansMap.get(parentOrgId); + // create new bean for class, or use existing bean + IndexOrgBean orgBean = new IndexOrgBean(org.getName(), orgTypeId); + List childOrgBeans = parentOrgBean.getChildIndexOrgBeans(); + if (childOrgBeans.contains(orgBean)) { + orgBean = getOrgBean(org.getName(), childOrgBeans); + } + // add lesson to class bean + orgBean.addLesson(lessonBean); + // set the parent bean + parentOrgBean.addChildOrgBean(orgBean); + orgBeansMap.put(parentOrgId, parentOrgBean); + } + } + + ArrayList beans = new ArrayList(orgBeansMap.values()); + Collections.sort(beans); + + request.setAttribute("beans", beans); request.setAttribute("tab", "profile"); return mapping.findForward("lessons"); } + private IndexOrgBean getOrgBean(String name, List list) { + for (IndexOrgBean bean : list) { + if (StringUtils.equals(name, bean.getName())) { + return bean; + } + } + return null; + } + public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request, Index: lams_central/web/lessons.jsp =================================================================== diff -u -r8872130dfd8a6b86ca24fb61fbd55018ee938c7a -rbcdeef3baa9554197ce15b4b7f0563cd34858e56 --- lams_central/web/lessons.jsp (.../lessons.jsp) (revision 8872130dfd8a6b86ca24fb61fbd55018ee938c7a) +++ lams_central/web/lessons.jsp (.../lessons.jsp) (revision bcdeef3baa9554197ce15b4b7f0563cd34858e56) @@ -10,16 +10,26 @@