From fc741e030efa7aa571b135680907841744ecbcb8 Mon Sep 17 00:00:00 2001 From: Mathew May Date: Thu, 14 Nov 2019 11:49:25 +0800 Subject: [PATCH] MDL-67144 mod_forum: If no users exist do not show the grading interface --- lang/en/grades.php | 1 + .../amd/build/local/grades/grader.min.js | Bin 9862 -> 10128 bytes .../amd/build/local/grades/grader.min.js.map | Bin 29231 -> 29860 bytes mod/forum/amd/src/local/grades/grader.js | 16 ++++++++++++++-- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lang/en/grades.php b/lang/en/grades.php index c60964c0f40..649b684145f 100644 --- a/lang/en/grades.php +++ b/lang/en/grades.php @@ -563,6 +563,7 @@ $string['noselecteditems'] = 'no items were selected.'; $string['notteachererror'] = 'You must be a teacher to use this feature.'; $string['notenrolled'] = 'You are currently not enrolled in any courses.'; $string['nousersloaded'] = 'No users loaded'; +$string['nouserstograde'] = 'No users to grade'; $string['numberofgrades'] = 'Number of grades'; $string['onascaleof'] = 'on a scale of {$a->grademin} to {$a->grademax}'; $string['operations'] = 'Operations'; diff --git a/mod/forum/amd/build/local/grades/grader.min.js b/mod/forum/amd/build/local/grades/grader.min.js index d6a8f8431393ca25a217ff85c42be74d465c8822..45c4a7df71d92a6a4244babc6c13c799afe28264 100644 GIT binary patch delta 1818 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 Hy21Vf4BY|& diff --git a/mod/forum/amd/build/local/grades/grader.min.js.map b/mod/forum/amd/build/local/grades/grader.min.js.map index 49c47b3fce2ea1da59e65d5f36e8670928425f3f..2b554b94141f16429328e187a556109e8805f9ed 100644 GIT binary patch delta 1625 zcmZ8hOKclO7}n;HM$i%=XhTXtQ|Dnj84`P)mqCDLX8j_5#LbIX5wKp5?RD&3dv_ft zK~X9WATDqiapM9)rASC1<-!#X1##lU0giCtzzqo@A;dppXro&4&j0=I|NCe6i(j=* ze$&4Ee)QQkcN#%6ghOVnR&)cqZd+zxyAEiAvRb?zo52hQqKx#SMr-auSwkfGwxIsyS zu1i3+B_KP}cZp(?kYx&TljdP>5}<8JV$+>nd_6~6fEb`xz|x{Q+)0rby_HOh z#~!^Yz6)K^*2IsYkd_yJg+A9x;?7j!>`>;+_vMqQK8puRu7Dy=%UGvmKx-`q@Q7N_ z#WAhMb}a6GMD`b?(MN7IOkgm8mFq z(lJWdBFv+K_;V(r#RQt2cq*QS6_A1~kOD3Yxr0=j>Y_9o(w2ocJB^{cbwbvaOZ-A_ z>I!6)B9OGNlOQ9$nOz-^DT0y=7$hr(C&t3lSA3=8G6@SrGQ2#gXCZAi3-jg3EvdKF z?!fv^IDO4AHelY4QAtRS92l-l1}X7N*q*XeAd^+)-IC8l3f6uM8M3%<;62hy3peu2 zjkYQ&w?q20qky_FWS$<1yOFlm5m%$DD{+}ZQJLD(>2TBxN#{VD+43lmLZnP&5jYeN zEGKS9=NDTtX?_nFEL4DRMv78~+kGg3yxy=-O0WxYYqT$ZioQM4WTHCv#$-eBHcZx4 zMT)=#E5yXlbE_jqIiWrGgb2?cjQ3RWq^j++g!pKFD(WlU@LlaF3rnc^sUKCf#h0^x+Fi!HpVdEzeCuQ!zQ{rDwlF9R<)DJ0JSz}H424}CmNQQdPpC~UbN zUvw^fRnGs>--?~>I|zP@i)fc4hw~Z=nzoO+5Muir1upWq@3s#)@_EWIF-(>ZS!!U8+5fO!zx4>igXD7i8%(ge=$b z1EtE_AiRjofoTV*!2^j)^=;`KiM}xG6jDWQ%6Ms97=AIM=*^)~j`Gm>kqahi?r`5X z8~pkIs=NwiHUkeDkAxjp^%b}c&#dt<9&+}&LVh@kAJmYE;EN1d_CwtBTyH;g!Fnot z6}|1N&C`8n7zF$l-NAj zrEbpF7)^AAi6-6XUocS<7ybfWn2@+PE<9&2=v~bH&g+|VzL|OX!+7(}c>AFd_Zwd| z7IUS1#l|O1as1Nsv0-c#Uo@XIQuX)EzuS-GZurC4b*vlL+%3i!-goyHVSMg>ZNxCq z>o?YMx7W3kDatva0J6e_g%~4?mZfPiA|bu#S7caOk%7#@Xo&DaMnnjMh%r=%!&j|NQ)DLGEM7*OhoAij6uajx&vT=s)8~}p1iWc^s^O*^Vr$v zX||QkOe>h|yV_cd5G?8Fs+z9i)4tI_Nv(6jhO!)vmUVPPg_ljTfSUugVp4lB%Qz!u z0H7Sf%;_$-_AE2r6CgT8c&M~Y1wOBJrs;G8UxS=?dqIlaA zXx-F$1r><|7eYmR=IL!&)xI2)s1knmoNwQb5^Xd}W5y2VEHDX2&w9hIEj2}B*OaA? zbBm^%CNA9e7Uq2+!Vu8eS_#`+kz$)_qhd28(lBCLEM9^|{ySkzj1!KCTjaKND|~pc zDGS=DYBHZJe5GeRuN`#2VF2NC(S<4;zLh{u;d7PNN-?k*2gqk|t4!addnE zql$aJoz^wIZBTdYs8I|GciV>c9USJWj!d?)R@M&{{b@4Bt!rJ diff --git a/mod/forum/amd/src/local/grades/grader.js b/mod/forum/amd/src/local/grades/grader.js index 44acca8626f..f2c4aa984d4 100644 --- a/mod/forum/amd/src/local/grades/grader.js +++ b/mod/forum/amd/src/local/grades/grader.js @@ -27,6 +27,7 @@ import getUserPicker from './local/grader/user_picker'; import {createLayout as createFullScreenWindow} from 'mod_forum/local/layout/fullscreen'; import getGradingPanelFunctions from './local/grader/gradingpanel'; import {add as addToast} from 'core/toast'; +import {addNotification} from 'core/notification'; import {get_string as getString} from 'core/str'; import {failedUpdate} from 'core_grades/grades/grader/gradingpanel/normalise'; import {addIconToContainerWithPromise} from 'core/loadingicon'; @@ -342,10 +343,21 @@ export const launch = async(getListOfUsers, getContentForUser, getGradeForUser, // We need all of these functions to be executed in series, if one step runs before another the interface // will not work. + + // We need this promise to resolve separately so that we can avoid loading the whole interface if there are no users. + const userList = await getListOfUsers(); + if (!userList.length) { + addNotification({ + message: await getString('nouserstograde', 'core_grades'), + type: "error", + }); + return; + } + + // Now that we have confirmed there are at least some users let's boot up the grader interface. const [ graderLayout, {html, js}, - userList, ] = await Promise.all([ createFullScreenWindow({ fullscreen: false, @@ -359,8 +371,8 @@ export const launch = async(getListOfUsers, getContentForUser, getGradeForUser, drawer: {show: true}, defaultsendnotifications: sendStudentNotifications, }), - getListOfUsers(), ]); + const graderContainer = graderLayout.getContainer(); const saveGradeFunction = getSaveUserGradeFunction(graderContainer, setGradeForUser); -- 2.17.1