Index: lams_gradebook/web/gradebookMonitorContent5.jsp =================================================================== diff -u -r198c8a9ea2d927fdf19aa00b222831934f6af176 -rde360a85cbc26405ab4fa0de23a5e42ac4ffd0e4 --- lams_gradebook/web/gradebookMonitorContent5.jsp (.../gradebookMonitorContent5.jsp) (revision 198c8a9ea2d927fdf19aa00b222831934f6af176) +++ lams_gradebook/web/gradebookMonitorContent5.jsp (.../gradebookMonitorContent5.jsp) (revision de360a85cbc26405ab4fa0de23a5e42ac4ffd0e4) @@ -673,6 +673,12 @@ }); } }); + + $("#userView").bind("jqGridAfterGridComplete", function () { + if (sequenceSearchedLearner) { + $('tr[id="' + sequenceSearchedLearner + '"]', this).addClass('table-success'); + } + }); }); Index: lams_monitoring/web/css/components-monitoring.css =================================================================== diff -u -r1837cd06ffdcf89f041b90ce3582951ff326ae4f -rde360a85cbc26405ab4fa0de23a5e42ac4ffd0e4 --- lams_monitoring/web/css/components-monitoring.css (.../components-monitoring.css) (revision 1837cd06ffdcf89f041b90ce3582951ff326ae4f) +++ lams_monitoring/web/css/components-monitoring.css (.../components-monitoring.css) (revision de360a85cbc26405ab4fa0de23a5e42ac4ffd0e4) @@ -15,7 +15,7 @@ .monitoring-page-wrapper { position: relative; - min-height: 500px; + min-height: 650px; } .monitoring-page-wrapper ul, .monitoring-page-wrapper ol { @@ -1238,4 +1238,4 @@ #learners-accordion .vertical-timeline:before { bottom: 90px; -} +} \ No newline at end of file Index: lams_monitoring/web/includes/javascript/monitorLesson5.js =================================================================== diff -u -r1837cd06ffdcf89f041b90ce3582951ff326ae4f -rde360a85cbc26405ab4fa0de23a5e42ac4ffd0e4 --- lams_monitoring/web/includes/javascript/monitorLesson5.js (.../monitorLesson5.js) (revision 1837cd06ffdcf89f041b90ce3582951ff326ae4f) +++ lams_monitoring/web/includes/javascript/monitorLesson5.js (.../monitorLesson5.js) (revision de360a85cbc26405ab4fa0de23a5e42ac4ffd0e4) @@ -13,12 +13,6 @@ // for synchronisation purposes sequenceRefreshInProgress = false, -//auto refresh all tabs every 30 seconds - autoRefreshInterval = 99990 * 1000, - autoRefreshIntervalObject = null, -// when user is doing something, do not auto refresh - autoRefreshBlocked = false, - // double tap support tapTimeout = 500, lastTapTime = 0, @@ -37,6 +31,7 @@ initSequenceTab(); initGradebookTab(); loadTab('sequence'); + updateLessonTab(); }); function loadTab(tabName, button) { @@ -198,11 +193,7 @@ 'width' : 950, 'title' : LABELS.LESSON_EDIT_CLASS, 'resizable' : true, - 'open' : function(){ - autoRefreshBlocked = true; - }, 'close' : function(){ - autoRefreshBlocked = false; refreshMonitor(); } }, false); @@ -247,13 +238,7 @@ 'height' : 500, 'width' : 510, 'title' : LABELS.PROGRESS_EMAIL_TITLE, - 'resizable' : false, - 'open' : function(){ - autoRefreshBlocked = true; - }, - 'close' : function(){ - autoRefreshBlocked = false; - } + 'resizable' : false }, false); $('.modal-body', emailProgressDialog).empty().append($('#emailProgressDialogContents').show()); //initialize datetimepicker @@ -407,7 +392,7 @@ // user chose to finish the lesson, close monitoring and refresh the lesson list closeMonitorLessonDialog(true); } else { - refreshMonitor('lesson'); + refreshMonitor(); } if ( state == 4 ) { lessonEndDate = newLessonEndDate; @@ -700,7 +685,7 @@ }, success : function() { lessonStartDate = date; - refreshMonitor('lesson'); + refreshMonitor(); } }); } else { @@ -724,7 +709,7 @@ cache : false, type : 'POST', success : function() { - refreshMonitor('lesson'); + refreshMonitor(); } }); } @@ -760,7 +745,7 @@ //calculate width and height based on the dimensions of the window to which dialog is added var dialogWindow = isTopLevelWindow ? $(window) : $(window.parent); - var dialog = showDialog("dialogEmail", { + showDialog("dialogEmail", { 'autoOpen' : true, 'height' : Math.max(380, Math.min(700, dialogWindow.height() - 30)), 'width' : Math.max(380, Math.min(700, dialogWindow.width() - 60)), @@ -770,15 +755,13 @@ //dialog needs to be added to a top level window to avoid boundary limitations of the interim iframe "isCreateInParentWindow" : !isTopLevelWindow, 'open' : function(){ - autoRefreshBlocked = true; var dialog = $(this); // load contents after opening the dialog $('iframe', dialog).attr('src', LAMS_URL + 'emailUser/composeMail.do?lessonID=' + lessonId + '&userID=' + userId); }, 'close' : function(){ - autoRefreshBlocked = false; $(this).remove(); } }, false, true); @@ -1186,12 +1169,8 @@ 'height' : 450, 'resizable' : true, 'open' : function(){ - autoRefreshBlocked = true; // until operator selects an user, buttons remain disabled $('button.learnerGroupDialogSelectableButton').blur().prop('disabled', true); - }, - 'close' : function(){ - autoRefreshBlocked = false; } }, false); @@ -1269,7 +1248,7 @@ $(this).val(ui.item.rawLabel); // mark the learner's ID and make him highlighted after the refresh sequenceSearchedLearner = ui.item.value; - updateSequenceTab(); + refreshMonitor(); return false; } }); @@ -1281,13 +1260,7 @@ 'resizable' : true, 'height' : 300, 'width' : 400, - 'title' : LABELS.FORCE_COMPLETE_BUTTON, - 'open' : function(){ - autoRefreshBlocked = true; - }, - 'close' : function(){ - autoRefreshBlocked = false; - } + 'title' : LABELS.FORCE_COMPLETE_BUTTON }, false); // only need to do this once as then it updates the msg field directly. $('.modal-body', '#forceBackwardsDialog').empty().append($('#forceBackwardsDialogContents').show()); @@ -1365,7 +1338,6 @@ 'open' : function(){ $('iframe', this).attr('src', LAMS_URL + 'editLessonIntro/edit.do?lessonID='+lessonId); $('iframe', this).css('height', '360px'); - autoRefreshBlocked = true; }, 'close' : function(){ closeIntroductionDialog() @@ -1374,7 +1346,6 @@ } function closeIntroductionDialog() { - autoRefreshBlocked = false; $('#introductionDialog').remove(); } @@ -1611,8 +1582,6 @@ * Forces given learners to move to activity indicated on SVG by coordinated (drag-drop) */ function forceComplete(currentActivityId, learners, x, y) { - autoRefreshBlocked = true; - var foundActivities = [], targetActivity = null, // if "true", then we are moving all learners from the given activity @@ -1710,7 +1679,6 @@ 'currentActivityId' : currentActivityId, 'activityId': targetActivityId}); $('#forceBackwardsDialog').modal('show'); - // so autoRefreshBlocked = false is not set return; } else { // move the learner forward @@ -1723,8 +1691,6 @@ if (executeForceComplete) { forceCompleteExecute(moveAll ? null : learners, moveAll ? currentActivityId : null, targetActivityId, false); } - - autoRefreshBlocked = false; } @@ -1762,7 +1728,7 @@ alert(response); // progress changed, show it to monitor - refreshMonitor('sequence'); + refreshMonitor(); } }); } @@ -1965,9 +1931,6 @@ 'helper' : function(){ return learnerIcon.clone(); }, - 'start' : function(){ - autoRefreshBlocked = true; - }, 'stop' : function(event, ui) { var learners = [{ 'id' : learner.id, @@ -2061,9 +2024,6 @@ // copy of the icon for dragging return icon.clone(); }, - 'start' : function(){ - autoRefreshBlocked = true; - }, 'stop' : function(event, ui) { var learners = [{ 'id' : learner.id, @@ -2164,7 +2124,7 @@ $('#sequenceSearchedLearnerHighlighter').hide(); sequenceSearchedLearner = null; if (refresh) { - updateSequenceTab(); + refreshMonitor(); } } @@ -2410,12 +2370,16 @@ itemCollapseId = 'learners-accordion-collapse-' + learner.id, item = itemTemplate.clone().data('user-id', learner.id).attr('id', 'learners-accordion-item-' + learner.id).appendTo(learnersAccordion), portraitSmall = $(definePortrait(learner.portraitId, learner.id, STYLE_SMALL, true, LAMS_URL)).addClass('me-2'), - portraitLarge = learner.portraitId ? $(definePortrait(learner.portraitId, learner.id, STYLE_LARGE, false, LAMS_URL)) : null + portraitLarge = learner.portraitId ? $(definePortrait(learner.portraitId, learner.id, STYLE_LARGE, false, LAMS_URL)) : null; + $('.accordion-header', item).attr('id', itemHeaderId) - .find('.accordion-button').attr('data-bs-target', '#' + itemCollapseId).attr('aria-controls', itemCollapseId) - .html('' + learner.firstName + ' ' + learner.lastName + '') - .prepend(portraitSmall); + .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); $('.learners-accordion-login', item).html('' + learner.login); $('.learners-accordion-email', item).html('' + learner.email); @@ -2718,37 +2682,19 @@ + ",top=" + top + ",left=" + left); } -function isAutoRefreshBlocked(){ - return autoRefreshBlocked || $('#learnerGroupDialog').hasClass('in'); -} - /** * Updates all changeable elements of monitoring screen. */ -function refreshMonitor(tabName, isAuto){ - if (autoRefreshIntervalObject && !isAuto) { - clearInterval(autoRefreshIntervalObject); - autoRefreshIntervalObject = null; +function refreshMonitor(){ + let tabName = 'sequence'; + if ($('#learners-accordion').length === 1) { + tabName = 'learners'; + } else if ($('#gradebookDiv').length === 1){ + tabName = 'gradebook'; } - - if (!autoRefreshIntervalObject) { - autoRefreshIntervalObject = setInterval(function(){ - if (!isAutoRefreshBlocked()) { - refreshMonitor(null, true); - } - }, autoRefreshInterval); - } - - // update Lesson tab widgets (state, number of learners etc.) - updateLessonTab(); - if (!tabName) { - updateLessonTab(); - // update learner progress in Sequence tab + + if (tabName == 'sequence'){ updateSequenceTab(); - // update learner progress in Learners tab - // loadLearnerProgressPage(); - } else if (tabName == 'sequence'){ - updateSequenceTab(); } else if (tabName == 'learners'){ updateLearnersTab(); } else if (tabName == 'gradebook'){