Index: lams_gradebook/web/gradebookMonitorContent5.jsp =================================================================== diff -u -r6582c67f62fe86aeb15f5b7e21b54a82952ec3d3 -r198c8a9ea2d927fdf19aa00b222831934f6af176 --- lams_gradebook/web/gradebookMonitorContent5.jsp (.../gradebookMonitorContent5.jsp) (revision 6582c67f62fe86aeb15f5b7e21b54a82952ec3d3) +++ lams_gradebook/web/gradebookMonitorContent5.jsp (.../gradebookMonitorContent5.jsp) (revision 198c8a9ea2d927fdf19aa00b222831934f6af176) @@ -660,27 +660,39 @@ resizeJqgrid(jQuery(".ui-jqgrid-btable:visible", this)); }) - function userNameFormatter (cellvalue, options, rowObject) { - return definePortraitPopover(rowObject[8].innerHTML, rowObject.id, cellvalue, cellvalue, true); - } - // Combine portraits with activityURL. Both are optional so it is mix and match. - function userNameFormatterActivity (cellvalue, options, rowObject) { - var portProcessed = definePortraitPopover(rowObject[9].innerHTML, rowObject.id, cellvalue, cellvalue, true); - if ( rowObject.children.length > 10 && rowObject[10].innerHTML.length > 0 ) { - var activityURL = rowObject[10].innerHTML; - if ( portProcessed.indexOf('"+cellvalue+""; - } - } - return portProcessed; - } - setTimeout(function(){ window.dispatchEvent(new Event('resize')); }, 300); + + $("#userView, #activityView").bind("jqGridAfterGridComplete", function () { + let grid = $(this), + expandedGridIds = grid.data('expandedGridIds'); + $(this).data('expandedGridIds', null); + if (expandedGridIds) { + $(expandedGridIds).each(function(index, id){ + grid.jqGrid('expandSubGridRow', id); + }); + } + }); }); + + function userNameFormatter (cellvalue, options, rowObject) { + return definePortraitPopover(rowObject[8].innerHTML, rowObject.id, cellvalue, cellvalue, true); + } + + // Combine portraits with activityURL. Both are optional so it is mix and match. + function userNameFormatterActivity (cellvalue, options, rowObject) { + var portProcessed = definePortraitPopover(rowObject[9].innerHTML, rowObject.id, cellvalue, cellvalue, true); + if ( rowObject.children.length > 10 && rowObject[10].innerHTML.length > 0 ) { + var activityURL = rowObject[10].innerHTML; + if ( portProcessed.indexOf('"+cellvalue+""; + } + } + return portProcessed; + } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java =================================================================== diff -u -rc1e3ca12a9ccb265363e2330dd91ce7bedbcfa35 -r198c8a9ea2d927fdf19aa00b222831934f6af176 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java (.../MonitoringConstants.java) (revision c1e3ca12a9ccb265363e2330dd91ce7bedbcfa35) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java (.../MonitoringConstants.java) (revision 198c8a9ea2d927fdf19aa00b222831934f6af176) @@ -68,4 +68,5 @@ // flux management public static final String CANVAS_REFRESH_FLUX_NAME = "canvas refresh"; + public static final String GRADEBOOK_REFRESH_FLUX_NAME = "gradebook refresh"; } \ No newline at end of file Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java =================================================================== diff -u -r20e62542c73330b5ccd425dc727597660abdd129 -r198c8a9ea2d927fdf19aa00b222831934f6af176 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java (.../MonitoringController.java) (revision 20e62542c73330b5ccd425dc727597660abdd129) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java (.../MonitoringController.java) (revision 198c8a9ea2d927fdf19aa00b222831934f6af176) @@ -164,6 +164,9 @@ FluxRegistry.initFluxMap(MonitoringConstants.CANVAS_REFRESH_FLUX_NAME, CommonConstants.LESSON_PROGRESSED_SINK_NAME, null, lessonId -> "doRefresh", FluxMap.STANDARD_THROTTLE, FluxMap.STANDARD_TIMEOUT); + FluxRegistry.initFluxMap(MonitoringConstants.GRADEBOOK_REFRESH_FLUX_NAME, + CommonConstants.LESSON_PROGRESSED_SINK_NAME, null, lessonId -> "doRefresh", FluxMap.STANDARD_THROTTLE, + FluxMap.STANDARD_TIMEOUT); } private Integer getUserId() { @@ -189,6 +192,13 @@ return FluxRegistry.get(MonitoringConstants.CANVAS_REFRESH_FLUX_NAME, lessonId); } + @RequestMapping(path = "/getGradebookUpdateFlux", method = RequestMethod.GET, produces = MediaType.TEXT_EVENT_STREAM_VALUE) + @ResponseBody + public Flux getGradebookUpdateFlux(@RequestParam long lessonId) + throws JsonProcessingException, IOException { + return FluxRegistry.get(MonitoringConstants.GRADEBOOK_REFRESH_FLUX_NAME, lessonId); + } + /** * Initializes a lesson for specific learning design with the given lesson title and lesson description. If * initialization is successful, this method will the ID of new lesson. Index: lams_monitoring/web/includes/javascript/monitorLesson5.js =================================================================== diff -u -rd30456574288df7fd628ad569ec5e74b23f971a3 -r198c8a9ea2d927fdf19aa00b222831934f6af176 --- lams_monitoring/web/includes/javascript/monitorLesson5.js (.../monitorLesson5.js) (revision d30456574288df7fd628ad569ec5e74b23f971a3) +++ lams_monitoring/web/includes/javascript/monitorLesson5.js (.../monitorLesson5.js) (revision 198c8a9ea2d927fdf19aa00b222831934f6af176) @@ -2551,6 +2551,8 @@ }); }); */ + + $('#grid').trigger( 'reloadGrid' ); $.extend(true, $.jgrid.guiStyles.bootstrap4, { pager : { pagerSelect : 'form-control-select' @@ -2559,6 +2561,25 @@ clearButton : 'btn btn-sm' } }); + + const gradebooksUpdateSource = new EventSource(LAMS_URL + 'monitoring/monitoring/getGradebookUpdateFlux.do?lessonId=' + lessonId); + gradebooksUpdateSource.onmessage = function (event) { + if ("doRefresh" == event.data && $('#gradebookDiv').length === 1){ + let expandedGridIds = []; + $("#userView tr:has(.sgexpanded)").each(function () { + let num = $(this).attr('id'); + expandedGridIds.push(num); + }); + $('#userView').data('expandedGridIds', expandedGridIds).trigger("reloadGrid"); + + expandedGridIds = []; + $("#activityView tr:has(.sgexpanded)").each(function () { + let num = $(this).attr('id'); + expandedGridIds.push(num); + }); + $('#activityView').data('expandedGridIds', expandedGridIds).trigger("reloadGrid"); + } + }; } /**