Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_central/web/css/ui.jqgrid-4.1.2.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_central/web/includes/javascript/grid.locale-en.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_central/web/includes/javascript/jquery.jqGrid.min.js'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsAction.java,v diff -u -r1.1.2.1 -r1.1.2.2 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsAction.java 31 Aug 2011 20:36:36 -0000 1.1.2.1 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsAction.java 3 Sep 2011 23:01:17 -0000 1.1.2.2 @@ -26,10 +26,17 @@ import java.io.IOException; import java.util.Calendar; import java.util.Collection; +import java.util.Comparator; import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -40,6 +47,13 @@ import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.json.JSONTokener; +import org.json.JSONWriter; +import org.lamsfoundation.lams.events.DeliveryMethodMail; +import org.lamsfoundation.lams.events.IEventNotificationService; import org.lamsfoundation.lams.learning.service.ICoreLearnerService; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.dao.IGroupUserDAO; @@ -51,7 +65,9 @@ import org.lamsfoundation.lams.monitoring.service.MonitoringServiceProxy; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.usermanagement.UserOrganisation; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.action.LamsDispatchAction; import org.lamsfoundation.lams.web.session.SessionManager; @@ -89,14 +105,16 @@ private static final int LESSON_TYPE_HAVENT_REACHED_PARTICULAR_ACTIVITY = 5; private static final int LESSON_TYPE_LESS_THAN_X_DAYS_TO_DEADLINE = 6; - private static final int COURSE_TYPE_HAVE_STARTED_X_LESSONS = 7; - private static final int COURSE_TYPE_HAVE_FINISHED_X_LESSONS = 8; - private static final int COURSE_TYPE_HAVE_FINISHED_PARTICULAR_LESSON = 9; + private static final int COURSE_TYPE_HAVE_FINISHED_PARTICULAR_LESSON = 7; + private static final int COURSE_TYPE_HAVENT_STARTED_PARTICULAR_LESSON = 8; + private static final int COURSE_TYPE_HAVENT_STARTED_ANY_LESSONS = 9; private static final int COURSE_TYPE_HAVE_FINISHED_THESE_LESSONS = 10; + private static ILessonService lessonService; private static IGroupUserDAO groupUserDAO; private static ILearnerProgressDAO learnerProgressDAO; + private static IEventNotificationService eventNotificationService; private Integer getUserId() { HttpSession ss = SessionManager.getSession(); @@ -140,12 +158,9 @@ long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); Lesson lesson = learnerService.getLesson(lessonId); Set activities = lesson.getLearningDesign().getActivities(); - Set users = lesson.getAllLearners(); - // activityDAO getActivitiesByLearningDesignId(Long learningDesignId); request.setAttribute("lesson", lesson); request.setAttribute("activities", activities); - request.setAttribute("users", users); return mapping.findForward("lessonView"); } @@ -164,12 +179,16 @@ // getting the organisation Organisation org = (Organisation) learnerService.getUserManagementService().findById(Organisation.class, orgId); Set lessons = org.getLessons(); -// Set users = lesson.getAllLearners(); - // activityDAO getActivitiesByLearningDesignId(Long learningDesignId); + Lesson firstLesson = null; + Iterator lessonIter = lessons.iterator(); + if (lessonIter.hasNext()) { + firstLesson = lessonIter.next(); + } + request.setAttribute("org", org); request.setAttribute("lessons", lessons); -// request.setAttribute("users", users); + request.setAttribute("firstLesson", firstLesson); return mapping.findForward("courseView"); } @@ -194,32 +213,50 @@ * next. * @throws IOException * @throws ServletException + * @throws JSONException */ public ActionForward emailUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) throws IOException, ServletException { + HttpServletResponse response) throws IOException, ServletException, JSONException { + + JSONObject JSONObject = new JSONObject(); IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet() .getServletContext()); + getEventNotificationService(); + String[] userIdStrs = request.getParameterValues("userId"); + String emailBody = WebUtil.readStrParam(request, "emailBody"); - long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); - String[] userIds = request.getParameterValues("userId"); - + boolean isSuccessfullySent = true; + for (String userIdStr : userIdStrs) { + long userId = Long.parseLong(userIdStr); + isSuccessfullySent &= eventNotificationService.sendMessage( + userId, + DeliveryMethodMail.getInstance(), + monitoringService.getMessageService().getMessage("event.emailnotifications.email.subject", new Object[] {}), + emailBody); + } + + JSONObject.put("isSuccessfullySent", isSuccessfullySent); + response.setContentType("application/x-json"); + response.getWriter().print(JSONObject); return null; } public ActionForward getUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) throws IOException, ServletException { + HttpServletResponse response) throws IOException, ServletException, JSONException { IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet() .getServletContext()); ICoreLearnerService learnerService = MonitoringServiceProxy.getLearnerService(getServlet() .getServletContext()); + JSONObject responcedata = new JSONObject(); int searchType = WebUtil.readIntParam(request, "searchType"); Lesson lesson = null; - Long orgId; + Integer orgId; Long activityId = null; int xDaystoFinish = 0; int numberLessons = 0; String[] lessonIds = null; + Organisation org = null; //TODO check checkOwnerOrStaffMember @@ -236,12 +273,12 @@ lesson = learnerService.getLesson(lessonId); break; - case COURSE_TYPE_HAVE_STARTED_X_LESSONS: - case COURSE_TYPE_HAVE_FINISHED_X_LESSONS: - case COURSE_TYPE_HAVE_FINISHED_PARTICULAR_LESSON: + case COURSE_TYPE_HAVENT_STARTED_ANY_LESSONS: case COURSE_TYPE_HAVE_FINISHED_THESE_LESSONS: - orgId = WebUtil.readLongParam(request, "orgId"); - Organisation org = (Organisation) learnerService.getUserManagementService().findById(Organisation.class, orgId); + case COURSE_TYPE_HAVE_FINISHED_PARTICULAR_LESSON: + case COURSE_TYPE_HAVENT_STARTED_PARTICULAR_LESSON: + orgId = WebUtil.readIntParam(request, "orgId"); + org = (Organisation) learnerService.getUserManagementService().findById(Organisation.class, orgId); break; } @@ -253,11 +290,8 @@ xDaystoFinish = WebUtil.readIntParam(request, "daysToDeadline"); break; - case COURSE_TYPE_HAVE_STARTED_X_LESSONS: - case COURSE_TYPE_HAVE_FINISHED_X_LESSONS: - numberLessons = WebUtil.readIntParam(request, "numberLessons"); - break; case COURSE_TYPE_HAVE_FINISHED_PARTICULAR_LESSON: + case COURSE_TYPE_HAVENT_STARTED_PARTICULAR_LESSON: Long lessonId = WebUtil.readLongParam(request, "lessonId"); lesson = learnerService.getLesson(lessonId); break; @@ -266,21 +300,43 @@ break; } - Collection users = getUsers(searchType, lesson, lessonIds, activityId, xDaystoFinish); - request.setAttribute("users", users); + Collection users = getUsers(searchType, lesson, lessonIds, activityId, xDaystoFinish, org); + + + JSONArray cellarray = new JSONArray(); - return mapping.findForward("userList"); - } + responcedata.put("total", "" + users.size()); + responcedata.put("page", "" + 1); + responcedata.put("records", "" + users.size()); + + + for (User user : users) { + JSONArray cell=new JSONArray(); + cell.put(user.getFirstName() + " " + user.getLastName() + " [" + user.getLogin() + "]"); + + JSONObject cellobj = new JSONObject(); + cellobj.put("id", "" + user.getUserId()); + cellobj.put("cell", cell); + cellarray.put(cellobj); + } + responcedata.put("rows", cellarray); + response.setContentType("application/x-json"); + response.getWriter().print(responcedata); + return null; + } - public Collection getUsers(int searchType, Lesson lesson, String[] lessonIds, Long activityId, int xDaystoFinish) throws IOException, ServletException { + public Collection getUsers(int searchType, Lesson lesson, String[] lessonIds, Long activityId, int xDaystoFinish, Organisation org) throws IOException, ServletException { getLessonService(); IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet() .getServletContext()); ICoreLearnerService learnerService = MonitoringServiceProxy.getLearnerService(getServlet() .getServletContext()); - Long lessonId = lesson.getLessonId(); + Long lessonId = null; + if (lesson != null) { + lessonId = lesson.getLessonId(); + } Collection users = new LinkedList(); switch (searchType) { @@ -293,12 +349,14 @@ List usersCompletedLesson = getUsersCompletedLesson(lessonId); users = CollectionUtils.subtract(allUsers, usersCompletedLesson); break; - + case LESSON_TYPE_HAVE_FINISHED_LESSON: + case COURSE_TYPE_HAVE_FINISHED_PARTICULAR_LESSON: users = getUsersCompletedLesson(lessonId); break; case LESSON_TYPE_HAVENT_STARTED_LESSON: + case COURSE_TYPE_HAVENT_STARTED_PARTICULAR_LESSON: allUsers = lesson.getAllLearners(); List usersStartedLesson = lessonService.getActiveLessonLearners(lessonId); users = CollectionUtils.subtract(allUsers, usersStartedLesson); @@ -328,18 +386,25 @@ } } else if (lesson.isScheduledToCloseForIndividuals()) { - getGroupUserDAO().getUsersWithLessonEndingSoonerThan(lesson, currentTimePlusXDays.getTime()); + users = getGroupUserDAO().getUsersWithLessonEndingSoonerThan(lesson, currentTimePlusXDays.getTime()); } break; - case COURSE_TYPE_HAVE_STARTED_X_LESSONS: - break; + case COURSE_TYPE_HAVENT_STARTED_ANY_LESSONS: + getLearnerProgressDAO(); - case COURSE_TYPE_HAVE_FINISHED_X_LESSONS: - break; + List allUSers = learnerService.getUserManagementService().getUsersFromOrganisation(org.getOrganisationId()); + Set usersStartedAtLest1Lesson = new TreeSet(); - case COURSE_TYPE_HAVE_FINISHED_PARTICULAR_LESSON: - users = getUsersCompletedLesson(lessonId); + Set lessons = org.getLessons(); + for (Lesson les : lessons) { + Activity firstActivity = les.getLearningDesign().getFirstActivity(); + List usersStartedFirstActivity = learnerProgressDAO.getLearnersHaveAttemptedActivity(firstActivity); + usersStartedAtLest1Lesson.addAll(usersStartedFirstActivity); + } + + users = CollectionUtils.subtract(allUSers, usersStartedAtLest1Lesson); + break; case COURSE_TYPE_HAVE_FINISHED_THESE_LESSONS: @@ -354,9 +419,16 @@ } } break; - } + } - return users; + Set sortedUsers = new TreeSet(new Comparator() { + public int compare(User usr0, User usr1) { + return ((usr0.getFirstName() + usr0.getLastName() + usr0.getLogin()).compareTo(usr1.getFirstName() + usr1.getLastName() + usr1.getLogin())); + } + }); + sortedUsers.addAll(users); + + return sortedUsers; } private List getUsersCompletedLesson(Long lessonId) { @@ -396,40 +468,30 @@ return learnerProgressDAO; } + private IEventNotificationService getEventNotificationService() { + if (eventNotificationService == null) { + WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() + .getServletContext()); + eventNotificationService = (IEventNotificationService) ctx.getBean("eventNotificationService"); + } + return eventNotificationService; + } + // private Collection getUsersFinishedXLessons() { // final String LOAD_COMPLETED_PROGRESS_BY_LESSON = // "from LearnerProgress p where p.lessonComplete > 0 and p.lesson.id = :lessonId"; // ICoreLearnerService learnerService = MonitoringServiceProxy.getLearnerService(getServlet() // .getServletContext()); // IUserManagementService userManagementService = learnerService.getUserManagementService(); // -// userManagementService.fi // +// HashMap properties = new HashMap(); +// properties.put("organisationType.organisationTypeId", typeId); +// properties.put("organisationState.organisationStateId", orgManageForm.getStateId()); +// List organisations = userManagementService.findByProperties(Organisation.class, properties); +// // return getHibernateTemplate().find(EventDAOHibernate.GET_EVENTS_TO_RESEND_QUERY); // } - - - public ActionForward getLessonLearners(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) throws IOException { - String wddxPacket; - IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet() - .getServletContext()); - Long lessonID = new Long(WebUtil.readLongParam(request, "lessonID")); - wddxPacket = monitoringService.getLessonLearners(lessonID, getUserId()); - - return null; - } - - /** Get the learner progress data for all learners in a lesson. This is called by the sequence tab in monitoring */ - public ActionForward getAllLearnersProgress(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) throws IOException { - String wddxPacket; - IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet() - .getServletContext()); - Long lessonID = WebUtil.readLongParam(request, "lessonID", false); - wddxPacket = monitoringService.getAllLearnersProgress(lessonID, getUserId(), false); - return null; - } } Index: lams_monitoring/web/emailnotifications/courseNotifications.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/web/emailnotifications/courseNotifications.jsp,v diff -u -r1.1.2.1 -r1.1.2.2 --- lams_monitoring/web/emailnotifications/courseNotifications.jsp 31 Aug 2011 20:36:35 -0000 1.1.2.1 +++ lams_monitoring/web/emailnotifications/courseNotifications.jsp 3 Sep 2011 23:01:16 -0000 1.1.2.2 @@ -3,89 +3,150 @@ <%@ taglib uri="tags-fmt" prefix="fmt" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-lams" prefix="lams" %> +<%@ taglib uri="tags-function" prefix="fn"%> +<% pageContext.setAttribute("newLineChar", "\n"); %> <fmt:message key="${title}"/> + - - - - + + + + + + + + @@ -97,64 +158,56 @@

?method=emailUsers" method="post" id="emailNotificationsForm" > - -
- +
+ + ${lesson.lessonName} + home.do?method=learner&lessonID=${lesson.lessonId} + + + +

+ " />
-

- " onclick=javascript:document.location='user.do?method=edit' /> -

- -

- :  - -

- -

- + + + + - - - - -

+
- <%@ include file="userList.jsp"%> - -
- -
- -
-
- - - - - - -
+
+
+

+ +

+ +
+ +
+

+ +

+ +
+ " onclick="getUsers();" /> +
+
+
+ +
-
Index: lams_monitoring/web/emailnotifications/lessonNotifications.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/web/emailnotifications/lessonNotifications.jsp,v diff -u -r1.1.2.1 -r1.1.2.2 --- lams_monitoring/web/emailnotifications/lessonNotifications.jsp 31 Aug 2011 20:36:35 -0000 1.1.2.1 +++ lams_monitoring/web/emailnotifications/lessonNotifications.jsp 3 Sep 2011 23:01:16 -0000 1.1.2.2 @@ -14,78 +14,94 @@ <fmt:message key="${title}"/> + + + - - - + + +
-
+

?method=emailUsers" method="post" id="emailNotificationsForm" > -
+
${lesson.lessonName} home.do?method=learner&lessonID=${lesson.lessonId} - - - +

- " onclick=javascript:document.location='user.do?method=edit' /> + " />
@@ -174,8 +164,8 @@
-
- Fisheye: Tag 1.1.2.2 refers to a dead (removed) revision in file `lams_monitoring/web/emailnotifications/userList.jsp'. Fisheye: No comparison available. Pass `N' to diff?