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'){