Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java =================================================================== diff -u -ra40a77e307317e8038ed9e6b8699c18386286497 -r2689f873824ab9ff1d5aa515d17fb7587442f284 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java (.../MonitoringController.java) (revision a40a77e307317e8038ed9e6b8699c18386286497) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java (.../MonitoringController.java) (revision 2689f873824ab9ff1d5aa515d17fb7587442f284) @@ -1074,25 +1074,35 @@ return null; } - String searchPhrase = request.getParameter("searchPhrase"); - Integer pageNumber = WebUtil.readIntParam(request, "pageNumber", true); - if (pageNumber == null || pageNumber < 1) { - pageNumber = 1; - } - // are the learners sorted by the most completed first? - boolean isProgressSorted = WebUtil.readBooleanParam(request, "isProgressSorted", false); - - // either sort by name or how much a learner progressed into the lesson - List learners = isProgressSorted - ? monitoringService.getLearnersByMostProgress(lessonId, searchPhrase, 10, (pageNumber - 1) * 10) - : lessonService.getLessonLearners(lessonId, searchPhrase, 10, (pageNumber - 1) * 10, true); ObjectNode responseJSON = JsonNodeFactory.instance.objectNode(); - for (User learner : learners) { + Integer searchedLearnerId = WebUtil.readIntParam(request, "searchedLearnerID", true); + if (searchedLearnerId == null) { + Integer pageNumber = WebUtil.readIntParam(request, "pageNumber", true); + if (pageNumber == null || pageNumber < 1) { + pageNumber = 1; + } + // are the learners sorted by the most completed first? + boolean isProgressSorted = WebUtil.readBooleanParam(request, "isProgressSorted", false); + + // either sort by name or how much a learner progressed into the lesson + List learners = isProgressSorted + ? monitoringService.getLearnersByMostProgress(lessonId, null, 10, (pageNumber - 1) * 10) + : lessonService.getLessonLearners(lessonId, null, 10, (pageNumber - 1) * 10, true); + + for (int i = 0; i < 5; i++) { + for (User learner : learners) { + responseJSON.withArray("learners").add(WebUtil.userToJSON(learner)); + } + } + + // get all possible learners matching the given phrase, if any; used for max page number + responseJSON.put("learnerPossibleNumber", lessonService.getCountLessonLearners(lessonId, null) * 5); + } else { + // only one learner is searched + User learner = userManagementService.getUserById(searchedLearnerId); responseJSON.withArray("learners").add(WebUtil.userToJSON(learner)); + responseJSON.put("learnerPossibleNumber", 1); } - - // get all possible learners matching the given phrase, if any; used for max page number - responseJSON.put("learnerPossibleNumber", lessonService.getCountLessonLearners(lessonId, searchPhrase)); response.setContentType("application/json;charset=utf-8"); return responseJSON.toString(); } Index: lams_monitoring/web/includes/javascript/monitorLesson.js =================================================================== diff -u -r2b8a05c1e8e4099eda87248ef05181058c833797 -r2689f873824ab9ff1d5aa515d17fb7587442f284 --- lams_monitoring/web/includes/javascript/monitorLesson.js (.../monitorLesson.js) (revision 2b8a05c1e8e4099eda87248ef05181058c833797) +++ lams_monitoring/web/includes/javascript/monitorLesson.js (.../monitorLesson.js) (revision 2689f873824ab9ff1d5aa515d17fb7587442f284) @@ -9,9 +9,11 @@ sequenceCanvas = null, // which learner was selected in the search box sequenceSearchedLearner = null, +// which page of learners' progress is getting displayed + learnersTabPage = 1, + learnersTabSortedByProgress = false, // currently opened EventSources eventSources = [], - // double tap support tapTimeout = 500, lastTapTime = 0, @@ -638,6 +640,9 @@ case 'learners': { tabContent.load(LAMS_URL + 'monitoring/monitoring/displayLearnersTab.do', function(){ + $('#learnes-order-by-completion').change(function(){ + learnersPageShift(0); + }) updateLearnersTab(); }); searchStudentWidget.show(); @@ -2459,15 +2464,38 @@ */ function updateLearnersTab(){ let learnersAccordion = $('#learners-accordion').empty(), - itemTemplate = $('.learners-accordion-item-template').clone().removeClass('learners-accordion-item-template d-none'); + itemTemplate = $('.learners-accordion-item-template').clone().removeClass('learners-accordion-item-template d-none'), + pager = $('#learners-pager'); $.ajax({ 'url' : LAMS_URL + 'monitoring/monitoring/getLearnerProgressPage.do', 'data': { - lessonID: lessonId + lessonID: lessonId, + pageNumber: learnersTabPage, + isProgressSorted: learnersTabSortedByProgress, + searchedLearnerID: sequenceSearchedLearner }, 'dataType' : 'json', 'success' : function(response) { + // hide/show pager elements depending if they are needed + if (sequenceSearchedLearner) { + pager.addClass('d-none'); + } else { + let learnersCount = +response.learnerPossibleNumber; + if (learnersCount < 10) { + $('.pager-element', pager).addClass('d-none'); + } else { + $('.pager-element', pager).removeClass('d-none'); + $('#learners-previous-page', pager).toggleClass('d-none', learnersTabPage < 2); + let pageCount = Math.ceil(learnersCount / 10); + $('#learners-next-page', pager).toggleClass('d-none', learnersTabPage >= pageCount); + + $('#learnes-order-by-completion', pager).prop('checked', learnersTabSortedByProgress); + $('#learners-page', pager).text(learnersTabPage + '/' + pageCount); + } + pager.removeClass('d-none'); + } + $(response.learners).each(function(){ let learner = this, itemHeaderId = 'learners-accordion-heading-' + learner.id, @@ -2481,7 +2509,6 @@ .find('.accordion-button') .attr('data-bs-target', '#' + itemCollapseId) .attr('aria-controls', itemCollapseId) - .addClass(sequenceSearchedLearner == learner.id ? 'bg-primary' : '') .html('' + learner.firstName + ' ' + learner.lastName + '') .prepend(portraitSmall); $('.learners-accordion-name', item).text(learner.firstName + ' ' + learner.lastName); @@ -2586,12 +2613,12 @@ } /** - * Clears previous run search for phrase, in Learners tab. + * Handler for shift page numbers bar. */ -function learnersClearSearchPhrase(){ - $('#learnersSearchPhrase').val('').autocomplete("close"); - loadLearnerProgressPage(1, ''); - $('#learnersSearchPhraseClear').hide(); +function learnersPageShift(increment){ + learnersTabPage += +increment; + learnersTabSortedByProgress = $('#learnes-order-by-completion').prop('checked'); + updateLearnersTab(); } /** Index: lams_monitoring/web/monitor-learners-tab.jsp =================================================================== diff -u -rc177c5ddcbb7f4882a4c128b28a51c5a995995c7 -r2689f873824ab9ff1d5aa515d17fb7587442f284 --- lams_monitoring/web/monitor-learners-tab.jsp (.../monitor-learners-tab.jsp) (revision c177c5ddcbb7f4882a4c128b28a51c5a995995c7) +++ lams_monitoring/web/monitor-learners-tab.jsp (.../monitor-learners-tab.jsp) (revision 2689f873824ab9ff1d5aa515d17fb7587442f284) @@ -1,10 +1,35 @@ <%@ include file="/taglibs.jsp"%> -
+
+
+
+ +
+
+

+   +

+
+
+ +
+
+ +
+
+ +
+
-