@@ -344,14 +344,14 @@ function xmldb_cms_upgrade($oldversion) {
344
344
}
345
345
346
346
if ($ oldversion < 2023120101 ) {
347
- // Add adhoc task to update contextid in customfield records.
347
+ // Add adhoc task to update contextid in customfield records for 'cmsfield' type .
348
348
manager::queue_adhoc_task (new update_customfield_context ());
349
349
upgrade_mod_savepoint (true , 2023120101 , 'cms ' );
350
350
}
351
351
352
352
if ($ oldversion < 2023120102 ) {
353
353
$ dbman = $ DB ->get_manager ();
354
- // Conditionally launch add field valuetrust .
354
+ // Update valuetrust if exists for mod_cms (both 'cmsfield' and 'cmsuserlist') .
355
355
if ($ dbman ->field_exists ('customfield_data ' , 'valuetrust ' )) {
356
356
$ sql = "SELECT mcd.id mcdid
357
357
FROM {customfield_data} mcd
@@ -369,5 +369,49 @@ function xmldb_cms_upgrade($oldversion) {
369
369
upgrade_mod_savepoint (true , 2023120102 , 'cms ' );
370
370
}
371
371
372
+ if ($ oldversion < 2023120103 ) {
373
+ // Update contextid in customfield records for 'cmsuserlist' type.
374
+ // {customfield_data}.instanceid" is from one of id from userlistinstanceids which is JSON encoded in {cms}.customdata.
375
+ // "userlistinstanceids" is a unique id for the customfield_data.
376
+ // New ID is from userlistmaxinstanceid which is JSON encoded in the {cms_types}.customdata" and add 1 to use.
377
+ $ sql = "SELECT mc.id, mc.customdata, mcx.id contextid
378
+ FROM {cms} mc
379
+ JOIN {course_modules} mcm ON mc.id = mcm.instance AND mcm.module = (
380
+ SELECT id FROM {modules} WHERE name = 'cms'
381
+ )
382
+ JOIN {context} mcx ON mcx.instanceid = mcm.id AND mcx.contextlevel = " . CONTEXT_MODULE . "
383
+ WHERE mc.customdata LIKE '%userlistinstanceids%' " ;
384
+ $ cmsrecords = $ DB ->get_records_sql ($ sql );
385
+
386
+ // Load userlist from customfield_data and set to array.
387
+ $ userlist = [];
388
+ foreach ($ cmsrecords as $ cmsrecord ) {
389
+ $ customdata = json_decode ($ cmsrecord ->customdata );
390
+ foreach ($ customdata ->userlistinstanceids as $ instanceid ) {
391
+ $ userlist [$ instanceid ] = [
392
+ 'id ' => $ cmsrecord ->id ,
393
+ 'contextid ' => $ cmsrecord ->contextid ,
394
+ ];
395
+ }
396
+ }
397
+
398
+ // Check cmsuserlist records and set correct contextid if it's different one.
399
+ $ sql = "SELECT mcd.id, mcd.instanceid, mcd.contextid
400
+ FROM {customfield_data} mcd
401
+ JOIN {customfield_field} mcf ON mcf.id = mcd.fieldid
402
+ JOIN {customfield_category} mcc ON mcc.id = mcf.categoryid
403
+ WHERE mcc.component = 'mod_cms' AND mcc.area = 'cmsuserlist' " ;
404
+ $ cmsuserlistdata = $ DB ->get_records_sql ($ sql );
405
+ foreach ($ cmsuserlistdata as $ cmsuserlist ) {
406
+ if (!empty ($ userlist [$ cmsuserlist ->instanceid ])) {
407
+ if ($ userlist [$ cmsuserlist ->instanceid ]['contextid ' ] != $ cmsuserlist ->contextid ) {
408
+ $ DB ->set_field ('customfield_data ' , 'contextid ' , $ userlist [$ cmsuserlist ->instanceid ]['contextid ' ],
409
+ ['id ' => $ cmsuserlist ->id ]);
410
+ }
411
+ }
412
+ }
413
+ upgrade_mod_savepoint (true , 2023120103 , 'cms ' );
414
+ }
415
+
372
416
return true ;
373
417
}
0 commit comments