Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -ra7411c3e567e0a5fce58aff5703e7b0a956803a0 -r114eaf5eb3133a3914d1debacf3e80b8da99b7ce Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java =================================================================== diff -u -r6a93b1b03ef0e2e65d7376991ad3ccca9cd6aef4 -r114eaf5eb3133a3914d1debacf3e80b8da99b7ce --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java (.../LessonDAO.java) (revision 6a93b1b03ef0e2e65d7376991ad3ccca9cd6aef4) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java (.../LessonDAO.java) (revision 114eaf5eb3133a3914d1debacf3e80b8da99b7ce) @@ -67,10 +67,9 @@ + " where organisation.organisationId=? and lessonStateId <= 6"; private final static String LESSON_BY_SESSION_ID = "select lesson from Lesson lesson, ToolSession session where " + "session.lesson=lesson and session.toolSessionId=:toolSessionID"; - private final static String COUNT_LEARNERS_CLASS = "SELECT COUNT(*) FROM lams_lesson AS lesson " - + "JOIN lams_grouping AS grouping ON lesson.class_grouping_id = grouping.grouping_id " - + "JOIN lams_group AS gr USING (grouping_id) JOIN lams_user_group AS ug USING (group_id) " - + "WHERE lesson_id = :lessonId"; + private final static String COUNT_LEARNERS_CLASS = "SELECT COUNT(*) FROM Lesson AS lesson " + + "INNER JOIN lesson.lessonClass AS lessonClass INNER JOIN lessonClass.groups AS groups " + + "INNER JOIN groups.users AS users" + " WHERE lesson.id = :lessonId"; /** * Retrieves the Lesson. Used in instances where it cannot be lazy loaded so it forces an initialize. @@ -220,8 +219,7 @@ return (Integer) hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException { - Query query = session.createSQLQuery(LessonDAO.COUNT_LEARNERS_CLASS); - query.setLong("lessonId", lessonId); + Query query = session.createQuery(LessonDAO.COUNT_LEARNERS_CLASS).setLong("lessonId", lessonId); Object value = query.uniqueResult(); return ((Number) value).intValue(); } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java =================================================================== diff -u -ra7411c3e567e0a5fce58aff5703e7b0a956803a0 -r114eaf5eb3133a3914d1debacf3e80b8da99b7ce --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision a7411c3e567e0a5fce58aff5703e7b0a956803a0) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision 114eaf5eb3133a3914d1debacf3e80b8da99b7ce) @@ -1241,7 +1241,31 @@ response.getWriter().write(responseJSON.toString()); return null; + } + /** + * Gives suggestions when a Monitor searches for a Learner in Learners tab. + */ + public ActionForward autocompleteMonitoringLearners(ActionMapping mapping, ActionForm form, + HttpServletRequest request, HttpServletResponse response) throws Exception { + long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); + String searchPhrase = request.getParameter("term"); + + List learners = getMonitoringService().getLearnersFromProgress(lessonId, searchPhrase, false, 10, null); + JSONArray responseJSON = new JSONArray(); + for (User learner : learners) { + JSONObject learnerJSON = new JSONObject(); + String fullName = learner.getFirstName() + " " + learner.getLastName() + " "; + // it looks better with the braces + learnerJSON.put("label", fullName + "(" + learner.getLogin() + ")"); + // it requires no braces for proper search + learnerJSON.put("value", fullName + learner.getLogin()); + responseJSON.put(learnerJSON); + } + + response.setContentType("application/json;charset=utf-8"); + response.getWriter().print(responseJSON); + return null; } public ActionForward releaseGate(ActionMapping mapping, ActionForm form, HttpServletRequest request, Index: lams_monitoring/web/includes/javascript/monitorLesson.js =================================================================== diff -u -r9f419a19d1664fcd4a85c03c89e81d0137f60f5d -r114eaf5eb3133a3914d1debacf3e80b8da99b7ce --- lams_monitoring/web/includes/javascript/monitorLesson.js (.../monitorLesson.js) (revision 9f419a19d1664fcd4a85c03c89e81d0137f60f5d) +++ lams_monitoring/web/includes/javascript/monitorLesson.js (.../monitorLesson.js) (revision 114eaf5eb3133a3914d1debacf3e80b8da99b7ce) @@ -29,8 +29,6 @@ numberActiveLearners = 0, // page in Learners tab learnerProgressCurrentPageNumber = 1, -// search phrase in Learners tab - learnersSearchPhrase = null, //auto refresh all tabs every 30 seconds autoRefreshInterval = 30 * 1000, @@ -1507,6 +1505,28 @@ //********** LEARNERS TAB FUNCTIONS ********** /** + * Inits Learners tab widgets. + */ +function initLearnersTab() { + // search for users with the term the Monitor entered + $("#learnersSearchPhrase").autocomplete( { + 'source' : LAMS_URL + "monitoring/monitoring.do?method=autocompleteMonitoringLearners&lessonID=" + lessonId, + 'delay' : 700, + 'select' : function(event, ui){ + loadLearnerProgressPage(1, ui.item.value); + } + }) + // run the real search when the Monitor presses Enter + .keypress(function(e){ + if (e.which == 13) { + $(this).autocomplete("close"); + loadLearnerProgressPage(1); + } + }); +} + + +/** * Handler for shift page numbers bar. */ function learnersPageShift(increment){ @@ -1560,9 +1580,9 @@ * After page change, refresh values in the control bar. */ function updateLearnerProgressHeader(pageNumber) { - var controlRow = $('#tabLearnerControlTable tr'); - if (numberActiveLearners < 10 - && (!learnersSearchPhrase || learnersSearchPhrase == '')) { + var controlRow = $('#tabLearnerControlTable tr'), + learnersSearchPhrase = $('#learnersSearchPhrase').val(); + if (numberActiveLearners < 10 && (!learnersSearchPhrase || learnersSearchPhrase.trim() == '')) { // do not show the bar at all $('.learnersHeaderCell', controlRow).hide(); return; @@ -1594,7 +1614,7 @@ /** * Load the give page of learners' progress. */ -function loadLearnerProgressPage(pageNumber){ +function loadLearnerProgressPage(pageNumber, learnersSearchPhrase){ // prevent double refresh at the same time if (learnersRefreshInProgress) { return; @@ -1617,13 +1637,7 @@ } learnerProgressCellsTemplate += - /* + ' - + LABELS.TIME_CHART - + ''*/ - '' + '' + LABELS.EMAIL_BUTTON + ''; } @@ -1634,6 +1648,11 @@ var isProgressSorted = $('#orderByCompletionCheckbox:checked').length > 0; // either go to the given page or refresh the current one pageNumber = pageNumber || learnerProgressCurrentPageNumber; + // either get the phrase for the parameter or check what was entered in the box + learnersSearchPhrase = learnersSearchPhrase || $('#learnersSearchPhrase').val(); + if (learnersSearchPhrase && learnersSearchPhrase.trim() == ''){ + learnersSearchPhrase = null; + } $.ajax({ dataType : 'json', @@ -1695,40 +1714,15 @@ learnersRefreshInProgress = false; } - /** - * Run search for the phrase which user provided in text field. - */ -function learnersRunSearchPhrase(){ - var searchPhraseField = $('#learnersSearchPhrase'); - learnersSearchPhrase = searchPhraseField.val(); - if (learnersSearchPhrase && learnersSearchPhrase.trim() != '') { - var pageNumber = parseInt(learnersSearchPhrase); - // must be a positive integer - if (isNaN(pageNumber) || !isFinite(pageNumber) || pageNumber < 0){ - // if it was not a number, run a normal search - loadLearnerProgressPage(1); - } else { - // it was a number, reset the field and go to the given page - learnersSearchPhrase = null; - searchPhraseField.val(null); - loadLearnerProgressPage(pageNumber); - } - } else { - learnersSearchPhrase = null; - } -} - - -/** * Clears previous run search for phrase. */ function learnersClearSearchPhrase(){ - learnersSearchPhrase = null; - $('#learnersSearchPhrase').val(null); - loadLearnerProgressPage(1); + $('#learnersSearchPhrase').val('').autocomplete("close"); + loadLearnerProgressPage(1, ''); } + //********** COMMON FUNCTIONS ********** /** Index: lams_monitoring/web/monitor.jsp =================================================================== diff -u -rd3b4ae35d37206b31ca462b0a9411e45e28ce5ec -r114eaf5eb3133a3914d1debacf3e80b8da99b7ce --- lams_monitoring/web/monitor.jsp (.../monitor.jsp) (revision d3b4ae35d37206b31ca462b0a9411e45e28ce5ec) +++ lams_monitoring/web/monitor.jsp (.../monitor.jsp) (revision 114eaf5eb3133a3914d1debacf3e80b8da99b7ce) @@ -166,6 +166,7 @@ initTabs(); initLessonTab(); initSequenceTab(); + initLearnersTab(); refreshMonitor(); }); @@ -447,13 +448,7 @@
- - +