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.39.2.5 -r1.39.2.6 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java 31 Oct 2015 13:01:28 -0000 1.39.2.5 +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java 3 Nov 2015 19:50:54 -0000 1.39.2.6 @@ -65,10 +65,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. @@ -169,8 +168,7 @@ @Override public Integer getCountLearnerByLesson(final long lessonId) { - Query query = getSession().createSQLQuery(LessonDAO.COUNT_LEARNERS_CLASS); - query.setLong("lessonId", lessonId); + Query query = getSession().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 =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java,v diff -u -r1.118.2.21 -r1.118.2.22 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java 2 Nov 2015 16:07:34 -0000 1.118.2.21 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java 3 Nov 2015 19:50:52 -0000 1.118.2.22 @@ -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; } /** Index: lams_monitoring/web/monitor.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/web/monitor.jsp,v diff -u -r1.27.2.12 -r1.27.2.13 --- lams_monitoring/web/monitor.jsp 8 Jul 2015 14:36:56 -0000 1.27.2.12 +++ lams_monitoring/web/monitor.jsp 3 Nov 2015 19:50:52 -0000 1.27.2.13 @@ -166,6 +166,7 @@ initTabs(); initLessonTab(); initSequenceTab(); + initLearnersTab(); refreshMonitor(); }); @@ -447,13 +448,7 @@
- - + ' - + LABELS.TIME_CHART - + ''*/ '' + LABELS.EMAIL_BUTTON + ''; @@ -1629,6 +1643,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', @@ -1692,36 +1711,11 @@ /** - * 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 **********