@@ -248,6 +248,160 @@ public function test_get_contexts_for_userid_grades_and_history() {
248
248
$ this ->assertArrayHasKey (context_user::instance ($ u2 ->id )->id , $ contexts );
249
249
}
250
250
251
+ /**
252
+ * Test that the appropriate user IDs are returned for a given context.
253
+ */
254
+ public function test_get_users_in_context_gradebook_edits () {
255
+ $ dg = $ this ->getDataGenerator ();
256
+
257
+ $ c1 = $ dg ->create_course ();
258
+ $ c2 = $ dg ->create_course ();
259
+
260
+ $ u1 = $ dg ->create_user ();
261
+ $ u2 = $ dg ->create_user ();
262
+ $ u3 = $ dg ->create_user ();
263
+ $ u4 = $ dg ->create_user ();
264
+ $ u5 = $ dg ->create_user ();
265
+ $ u6 = $ dg ->create_user ();
266
+ $ u7 = $ dg ->create_user ();
267
+ $ u8 = $ dg ->create_user ();
268
+ $ u9 = $ dg ->create_user ();
269
+ $ u10 = $ dg ->create_user ();
270
+ $ u11 = $ dg ->create_user ();
271
+
272
+ $ sysctx = context_system::instance ();
273
+ $ c1ctx = context_course::instance ($ c1 ->id );
274
+ $ c2ctx = context_course::instance ($ c2 ->id );
275
+
276
+ // Create some stuff.
277
+ $ gi1a = new grade_item ($ dg ->create_grade_item (['courseid ' => $ c1 ->id ]), false );
278
+ $ gi1b = new grade_item ($ dg ->create_grade_item (['courseid ' => $ c1 ->id ]), false );
279
+ $ gi2a = new grade_item ($ dg ->create_grade_item (['courseid ' => $ c2 ->id ]), false );
280
+ $ gc1a = new grade_category ($ dg ->create_grade_category (['courseid ' => $ c1 ->id ]), false );
281
+ $ gc1b = new grade_category ($ dg ->create_grade_category (['courseid ' => $ c1 ->id ]), false );
282
+ $ gc2a = new grade_category ($ dg ->create_grade_category (['courseid ' => $ c2 ->id ]), false );
283
+ $ go2 = new grade_outcome ($ dg ->create_grade_outcome (['courseid ' => $ c2 ->id , 'shortname ' => 'go2 ' ,
284
+ 'fullname ' => 'go2 ' ]), false );
285
+
286
+ $ go0 = new grade_outcome (['shortname ' => 'go0 ' , 'fullname ' => 'go0 ' , 'usermodified ' => $ u1 ->id ]);
287
+ $ go0 ->insert ();
288
+ $ go1 = new grade_outcome (['shortname ' => 'go1 ' , 'fullname ' => 'go1 ' , 'courseid ' => $ c1 ->id , 'usermodified ' => $ u11 ->id ]);
289
+ $ go1 ->insert ();
290
+
291
+ // Create scales.
292
+ $ s1 = new grade_scale (['name ' => 's1 ' , 'scale ' => 'a,b ' , 'userid ' => $ u7 ->id , 'courseid ' => 0 , 'description ' => '' ]);
293
+ $ s1 ->insert ();
294
+ $ s2 = new grade_scale (['name ' => 's2 ' , 'scale ' => 'a,b ' , 'userid ' => $ u8 ->id , 'courseid ' => $ c1 ->id , 'description ' => '' ]);
295
+ $ s2 ->insert ();
296
+
297
+ // User 2 creates history.
298
+ $ this ->setUser ($ u2 );
299
+ $ go0 ->shortname .= ' edited ' ;
300
+ $ go0 ->update ();
301
+ $ gc1a ->fullname .= ' edited ' ;
302
+ $ gc1a ->update ();
303
+
304
+ // User 3 creates history.
305
+ $ this ->setUser ($ u3 );
306
+ $ go1 ->shortname .= ' edited ' ;
307
+ $ go1 ->update ();
308
+ $ gc2a ->fullname .= ' a ' ;
309
+ $ gc2a ->update ();
310
+
311
+ // User 4 updates an outcome in course (creates history).
312
+ $ this ->setUser ($ u4 );
313
+ $ go2 ->shortname .= ' edited ' ;
314
+ $ go2 ->update ();
315
+
316
+ // User 5 updates an item.
317
+ $ this ->setUser ($ u5 );
318
+ $ gi1a ->itemname .= ' edited ' ;
319
+ $ gi1a ->update ();
320
+
321
+ // User 6 creates history.
322
+ $ this ->setUser ($ u6 );
323
+ $ gi2a ->delete ();
324
+
325
+ // User 9 creates history.
326
+ $ this ->setUser ($ u9 );
327
+ $ s1 ->name .= ' edited ' ;
328
+ $ s1 ->update ();
329
+
330
+ $ userlist = new \core_privacy \local \request \userlist ($ sysctx , 'core_grades ' );
331
+ provider::get_users_in_context ($ userlist );
332
+ $ systemcontextuserids = [$ u1 ->id , $ u2 ->id , $ u7 ->id , $ u9 ->id ];
333
+ $ this ->assertEquals ($ systemcontextuserids , $ userlist ->get_userids ());
334
+
335
+ $ userlist = new \core_privacy \local \request \userlist ($ c1ctx , 'core_grades ' );
336
+ provider::get_users_in_context ($ userlist );
337
+ $ course1userids = [$ u11 ->id , $ u3 ->id , $ u8 ->id , $ u5 ->id , $ u2 ->id ];
338
+ $ this ->assertEquals ($ course1userids , $ userlist ->get_userids ());
339
+
340
+ $ userlist = new \core_privacy \local \request \userlist ($ c2ctx , 'core_grades ' );
341
+ provider::get_users_in_context ($ userlist );
342
+ $ course2userids = [$ u4 ->id , $ u6 ->id , $ u3 ->id ];
343
+ $ this ->assertEquals ($ course2userids , $ userlist ->get_userids ());
344
+ }
345
+
346
+ /**
347
+ * Test that the appropriate user IDs are returned for a given context.
348
+ */
349
+ public function test_get_users_in_context_grades_and_history () {
350
+ $ dg = $ this ->getDataGenerator ();
351
+
352
+ $ c1 = $ dg ->create_course ();
353
+ $ c2 = $ dg ->create_course ();
354
+
355
+ $ u1 = $ dg ->create_user ();
356
+ $ u2 = $ dg ->create_user ();
357
+ $ u3 = $ dg ->create_user ();
358
+ $ u4 = $ dg ->create_user ();
359
+ $ u5 = $ dg ->create_user ();
360
+ $ u6 = $ dg ->create_user ();
361
+
362
+ $ c1ctx = context_course::instance ($ c1 ->id );
363
+ $ c2ctx = context_course::instance ($ c2 ->id );
364
+ $ u2ctx = context_user::instance ($ u2 ->id );
365
+
366
+ // Create some stuff.
367
+ $ gi1a = new grade_item ($ dg ->create_grade_item (['courseid ' => $ c1 ->id ]), false );
368
+ $ gi1b = new grade_item ($ dg ->create_grade_item (['courseid ' => $ c1 ->id ]), false );
369
+ $ gi2a = new grade_item ($ dg ->create_grade_item (['courseid ' => $ c2 ->id ]), false );
370
+ $ gi2b = new grade_item ($ dg ->create_grade_item (['courseid ' => $ c2 ->id ]), false );
371
+
372
+ // User 1 is graded in course 1.
373
+ $ gi1a ->update_final_grade ($ u1 ->id , 1 , 'test ' );
374
+
375
+ // User 2 is graded in course 2.
376
+ $ gi2a ->update_final_grade ($ u2 ->id , 10 , 'test ' );
377
+
378
+ // User 3 is set as modifier.
379
+ $ gi1a ->update_final_grade ($ u1 ->id , 1 , 'test ' , '' , FORMAT_MOODLE , $ u3 ->id );
380
+
381
+ // User 4 is set as modifier, and creates history..
382
+ $ this ->setUser ($ u4 );
383
+ $ gi1a ->update_final_grade ($ u2 ->id , 1 , 'test ' );
384
+
385
+ // User 5 creates history, user 6 is the known modifier, and we delete the item.
386
+ $ this ->setUser ($ u5 );
387
+ $ gi2b ->update_final_grade ($ u2 ->id , 1 , 'test ' , '' , FORMAT_PLAIN , $ u6 ->id );
388
+ $ gi2b ->delete ();
389
+
390
+ $ userlist = new \core_privacy \local \request \userlist ($ c1ctx , 'core_grades ' );
391
+ provider::get_users_in_context ($ userlist );
392
+ $ course1userids = [$ u1 ->id , $ u2 ->id , $ u3 ->id , $ u4 ->id ];
393
+ $ this ->assertEquals ($ course1userids , $ userlist ->get_userids ());
394
+
395
+ $ userlist = new \core_privacy \local \request \userlist ($ c2ctx , 'core_grades ' );
396
+ provider::get_users_in_context ($ userlist );
397
+ $ course2userids = [$ u5 ->id , $ u2 ->id ];
398
+ $ this ->assertEquals ($ course2userids , $ userlist ->get_userids ());
399
+
400
+ $ userlist = new \core_privacy \local \request \userlist ($ u2ctx , 'core_grades ' );
401
+ provider::get_users_in_context ($ userlist );
402
+ $ this ->assertEquals ([$ u2 ->id ], $ userlist ->get_userids ());
403
+ }
404
+
251
405
public function test_delete_data_for_all_users_in_context () {
252
406
global $ DB ;
253
407
$ dg = $ this ->getDataGenerator ();
@@ -368,6 +522,80 @@ public function test_delete_data_for_user() {
368
522
$ this ->assertTrue ($ DB ->record_exists ('grade_grades_history ' , ['userid ' => $ u2 ->id , 'itemid ' => $ gi2b ->id ]));
369
523
}
370
524
525
+ /**
526
+ * Test deleting multiple users for a context works.
527
+ */
528
+ public function test_delete_data_for_users () {
529
+ global $ DB ;
530
+ $ dg = $ this ->getDataGenerator ();
531
+
532
+ $ c1 = $ dg ->create_course ();
533
+ $ c2 = $ dg ->create_course ();
534
+ $ u1 = $ dg ->create_user ();
535
+ $ u2 = $ dg ->create_user ();
536
+ $ u3 = $ dg ->create_user ();
537
+ $ u4 = $ dg ->create_user ();
538
+ $ u1ctx = context_user::instance ($ u1 ->id );
539
+ $ u2ctx = context_user::instance ($ u2 ->id );
540
+ $ c1ctx = context_course::instance ($ c1 ->id );
541
+ $ c2ctx = context_course::instance ($ c2 ->id );
542
+
543
+ // Create some stuff.
544
+ $ gi1a = new grade_item ($ dg ->create_grade_item (['courseid ' => $ c1 ->id ]), false );
545
+ $ gi1b = new grade_item ($ dg ->create_grade_item (['courseid ' => $ c1 ->id ]), false );
546
+ $ gi2a = new grade_item ($ dg ->create_grade_item (['courseid ' => $ c2 ->id ]), false );
547
+ $ gi2b = new grade_item ($ dg ->create_grade_item (['courseid ' => $ c2 ->id ]), false );
548
+
549
+ $ gi1a ->update_final_grade ($ u1 ->id , 1 , 'test ' );
550
+ $ gi1a ->update_final_grade ($ u2 ->id , 1 , 'test ' );
551
+ $ gi1a ->update_final_grade ($ u3 ->id , 1 , 'test ' );
552
+ $ gi1b ->update_final_grade ($ u1 ->id , 1 , 'test ' );
553
+ $ gi1b ->update_final_grade ($ u4 ->id , 1 , 'test ' );
554
+ $ gi2a ->update_final_grade ($ u1 ->id , 1 , 'test ' );
555
+ $ gi2a ->update_final_grade ($ u2 ->id , 1 , 'test ' );
556
+ $ gi2a ->update_final_grade ($ u4 ->id , 1 , 'test ' );
557
+ $ gi2b ->update_final_grade ($ u1 ->id , 1 , 'test ' );
558
+ $ gi2b ->update_final_grade ($ u2 ->id , 1 , 'test ' );
559
+ $ gi2b ->update_final_grade ($ u3 ->id , 1 , 'test ' );
560
+ $ gi2b ->delete ();
561
+
562
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u1 ->id , 'itemid ' => $ gi1a ->id ]));
563
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u2 ->id , 'itemid ' => $ gi1a ->id ]));
564
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u3 ->id , 'itemid ' => $ gi1a ->id ]));
565
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u1 ->id , 'itemid ' => $ gi1b ->id ]));
566
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u4 ->id , 'itemid ' => $ gi1b ->id ]));
567
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u1 ->id , 'itemid ' => $ gi2a ->id ]));
568
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u2 ->id , 'itemid ' => $ gi2a ->id ]));
569
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u4 ->id , 'itemid ' => $ gi2a ->id ]));
570
+ $ this ->assertFalse ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u1 ->id , 'itemid ' => $ gi2b ->id ]));
571
+ $ this ->assertFalse ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u2 ->id , 'itemid ' => $ gi2b ->id ]));
572
+ $ this ->assertFalse ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u3 ->id , 'itemid ' => $ gi2b ->id ]));
573
+
574
+ $ userlist = new \core_privacy \local \request \approved_userlist ($ c1ctx , 'core_grades ' , [$ u1 ->id , $ u2 ->id ]);
575
+ provider::delete_data_for_users ($ userlist );
576
+
577
+ $ this ->assertFalse ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u1 ->id , 'itemid ' => $ gi1a ->id ]));
578
+ $ this ->assertFalse ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u2 ->id , 'itemid ' => $ gi1a ->id ]));
579
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u3 ->id , 'itemid ' => $ gi1a ->id ]));
580
+ $ this ->assertFalse ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u1 ->id , 'itemid ' => $ gi1b ->id ]));
581
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u4 ->id , 'itemid ' => $ gi1b ->id ]));
582
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u1 ->id , 'itemid ' => $ gi2a ->id ]));
583
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u2 ->id , 'itemid ' => $ gi2a ->id ]));
584
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u4 ->id , 'itemid ' => $ gi2a ->id ]));
585
+
586
+ $ userlist = new \core_privacy \local \request \approved_userlist ($ c2ctx , 'core_grades ' , [$ u2 ->id , $ u4 ->id ]);
587
+ provider::delete_data_for_users ($ userlist );
588
+
589
+ $ this ->assertFalse ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u1 ->id , 'itemid ' => $ gi1a ->id ]));
590
+ $ this ->assertFalse ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u2 ->id , 'itemid ' => $ gi1a ->id ]));
591
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u3 ->id , 'itemid ' => $ gi1a ->id ]));
592
+ $ this ->assertFalse ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u1 ->id , 'itemid ' => $ gi1b ->id ]));
593
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u4 ->id , 'itemid ' => $ gi1b ->id ]));
594
+ $ this ->assertTrue ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u1 ->id , 'itemid ' => $ gi2a ->id ]));
595
+ $ this ->assertFalse ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u2 ->id , 'itemid ' => $ gi2a ->id ]));
596
+ $ this ->assertFalse ($ DB ->record_exists ('grade_grades ' , ['userid ' => $ u4 ->id , 'itemid ' => $ gi2a ->id ]));
597
+ }
598
+
371
599
public function test_export_data_for_user_about_grades_and_history () {
372
600
global $ DB ;
373
601
$ dg = $ this ->getDataGenerator ();
0 commit comments