Index: lams_gradebook/web/releaseLessonMarks.jsp =================================================================== diff -u -r67eb08b1f83112e23be227fbf6923a46d0dc95ba -ra8e04b385dbb553c581bd705426a86ab92e85f9a --- lams_gradebook/web/releaseLessonMarks.jsp (.../releaseLessonMarks.jsp) (revision 67eb08b1f83112e23be227fbf6923a46d0dc95ba) +++ lams_gradebook/web/releaseLessonMarks.jsp (.../releaseLessonMarks.jsp) (revision a8e04b385dbb553c581bd705426a86ab92e85f9a) @@ -47,7 +47,7 @@ {name:'name',index:'name', sortable: false, sorttype: 'text'} ], rowList:[10,20,30,40,50,100], - rowNum:10, + rowNum:1, pager: true, sortname: 'name', multiselect: true, @@ -79,8 +79,94 @@ }); } return false; - } - }); + }, + onSelectRow : function(id, status, event) { + var grid = $(this), + included = grid.data('included'), + excluded = grid.data('excluded'), + selectAllChecked = grid.closest('.ui-jqgrid-view').find('.jqgh_cbox .cbox').prop('checked'); + if (selectAllChecked) { + var index = excluded.indexOf(+id); + // if row is deselected, add it to excluded array + if (index < 0) { + if (!status) { + excluded.push(+id); + } + } else if (status) { + excluded.splice(index, 1); + } + } else { + var index = included.indexOf(+id); + // if row is selected, add it to included array + if (index < 0) { + if (status) { + included.push(+id); + } + } else if (!status) { + included.splice(index, 1); + } + } + }, + gridComplete : function(){ + let grid = $(this), + included = grid.data('included'), + // cell containing "(de)select all" button + selectAllCell = grid.closest('.ui-jqgrid-view').find('.jqgh_cbox > div'); + // remove the default button provided by jqGrid + $('.cbox', selectAllCell).remove(); + // create own button which follows own rules + var selectAllCheckbox = $('') + .prop('checked', included === null) + .prependTo(selectAllCell) + .change(function(){ + // start with deselecting everyone on current page + grid.resetSelection(); + if ($(this).prop('checked')){ + // on select all change mode and select all on current page + grid.data('included', null); + grid.data('excluded', []); + $('[role="row"]', grid).each(function(){ + grid.jqGrid('setSelection', +$(this).attr('id'), false); + }); + } else { + // on deselect all just change mode + grid.data('excluded', null); + grid.data('included', []); + } + }); + + grid.resetSelection(); + if (selectAllCheckbox.prop('checked')) { + var excluded = grid.data('excluded'); + // go through each loaded row + $('[role="row"]', grid).each(function(){ + var id = +$(this).attr('id'), + selected = $(this).hasClass('success'); + // if row is not selected and is not excluded, select it + if (!selected && (!excluded || !excluded.includes(id))) { + // select without triggering onSelectRow + grid.jqGrid('setSelection', id, false); + } + }); + } else { + // go through each loaded row + $('[role="row"]', grid).each(function(){ + var id = +$(this).attr('id'), + selected = $(this).hasClass('success'); + // if row is not selected and is included, select it + if (!selected && included.includes(id)) { + // select without triggering onSelectRow + grid.jqGrid('setSelection', id, false); + } + }); + } + + // empty email preview on grid page change + $('#release-marks-email-preview').slideUp(function(){ + $('#release-marks-email-preview-content', this).empty(); + }); + }}).data({'included' : null, + 'excluded' : []}); }); function toggleMarksRelease() { @@ -116,10 +202,16 @@ } function sendReleaseMarksEmails(){ + let grid = $("#release-marks-learner-list"), + includedLearners = grid.data('included'), + excludedLearners = grid.data('excluded'); + $.ajax({ 'url' : 'gradebook/gradebookMonitoring/sendReleaseMarksEmails.do', 'data' : { - 'lessonID' : releaseMarksLessonID + 'lessonID' : releaseMarksLessonID, + 'includedLearners' : includedLearners === null ? null : JSON.stringify(includedLearners), + 'excludedLearners' : excludedLearners === null ? null : JSON.stringify(excludedLearners) }, 'dataType' : 'text', 'cache' : false,