Index: lams_gradebook/web/releaseLessonMarks.jsp =================================================================== diff -u -rc324f3f77b2534affdb642421d9d9f093640a4de -r0aa9f13e05d384ced6793a22c6a72057c071fc42 --- lams_gradebook/web/releaseLessonMarks.jsp (.../releaseLessonMarks.jsp) (revision c324f3f77b2534affdb642421d9d9f093640a4de) +++ lams_gradebook/web/releaseLessonMarks.jsp (.../releaseLessonMarks.jsp) (revision 0aa9f13e05d384ced6793a22c6a72057c071fc42) @@ -87,7 +87,7 @@ // release/hide marks function toggleMarksRelease() { - if (confirm(marksReleased ? "" : "")) { + if (confirm(marksReleased ? "" : "")) { releaseMarksAlertBox.hide(); $.ajax({ @@ -111,21 +111,33 @@ } function sendReleaseMarksEmails(){ - if (!confirm('')){ + releaseMarksAlertBox.hide(); + + let grid = $("#release-marks-learners-table"), + filteredData = grid.jqGrid('getGridParam', 'lastSelectedData'), + selectedLearners = grid.jqGrid('getGridParam','selarrrow'), + finalList = []; + filteredData.forEach(function(learner){ + if (selectedLearners.indexOf(learner.id) >= 0) { + finalList.push(this.id); + } + }); + + if (finalList.length == 0) { + releaseMarksAlertBox.removeClass('alert-success').addClass('alert-danger') + .text('').show(); return; } - let grid = $("#release-marks-learners-table"), - includedLearners = grid.data('included'), - excludedLearners = grid.data('excluded'); - releaseMarksAlertBox.hide(); + if (!confirm(''.replace('[COUNT_PLACEHOLDER]', finalList.length))){ + return; + } $.ajax({ 'url' : 'gradebook/gradebookMonitoring/sendReleaseMarksEmails.do', 'data' : { 'lessonID' : releaseMarksLessonID, - 'includedLearners' : includedLearners === null ? null : JSON.stringify(includedLearners), - 'excludedLearners' : excludedLearners === null ? null : JSON.stringify(excludedLearners) + 'includedLearners' : JSON.stringify(finalList) }, 'dataType' : 'text', 'cache' : false, @@ -187,88 +199,41 @@ highlightReleaseMarksLearnerRow(row.attr('id')); 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), - rows = grid.jqGrid('getGridParam','data'), - included = grid.data('included'), - // cell containing "(de)select all" button - selectAllCell = grid.closest('.ui-jqgrid-view').find('.jqgh_cbox > div'); + rows = $('[role="row"]:not(.jqgfirstrow)', grid), + mode = grid.data('mode'), + // cell containing "(de)select all" button + selectAllCell = grid.closest('.ui-jqgrid-view').find('.ui-jqgrid-labels .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) + .prop('checked', mode == 'all' || mode == 'start') .prependTo(selectAllCell) .change(function(){ - // start with deselecting everyone on current page + // start with deselecting grid.resetSelection(); + var ids = []; if ($(this).prop('checked')){ - // on select all change mode and select all on current page - grid.data('included', null); - grid.data('excluded', []); - rows.each(function(){ - grid.jqGrid('setSelection', this.id, false); + grid.data('mode', 'all'); + // on select all change mode and select all + grid.jqGrid('getGridParam', 'data').forEach(function(row) { + ids.push(row.id); + // also select on current page as it is too late for selarrrow to be picked up + grid.jqGrid("setSelection", row.id, false); }); } else { - // on deselect all just change mode - grid.data('excluded', null); - grid.data('included', []); + grid.data('mode', 'none'); } + grid.jqGrid("setGridParam", { selarrrow: ids }, true); }); - - 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); - } - }); + + // initial select all + if (mode == 'start') { + selectAllCheckbox.change(); } - + if (rows.length === 0) { // empty email preview on grid page change $('#release-marks-email-preview').slideUp(function(){ @@ -278,8 +243,12 @@ // highlight first row highlightReleaseMarksLearnerRow(rows[0].id); } - }}).data({'included' : null, - 'excluded' : []}); + }}).data({'mode' : 'start'}) + .jqGrid('filterToolbar', { + stringResult: true, + searchOnEnter: true, + defaultSearch: 'cn' + }); } function highlightReleaseMarksLearnerRow(userID) {