There are a few variables which are included in $cm if you get it using get_record from the course_modules table (& similar approaches), but are not included if you get it via get_fast_modinfo.
- Three completion settings (this causes problems if you try to call some completion-related functions using a $cm from get_fast_modinfo)
- $cm->section (section id; it does have section number) - this used to cause a problem in nav block but it was fixed a different way because not really necessary there, however there might be other areas of code where this would cause a problem if we called specific functions with a cm_info
- $cm->added (date added)
- $cm->score (value appears to be unused)
- $cm->module (module id)
- $cm->visibleold (previous value of visibility for individual item when section is hidden)
In order to allow third-party code (and potentially core code) to reliably use get_fast_modinfo to create $cm objects, I would like to add support for passing through these parameters.
In addition I would like to change the existing logic (it's in the same code) around rebuilding the course cache if user changes the $CFG->enableavailability. IMO it is better to do this when changing the admin setting. I added a new option to admin setting base class so that you can set if a particular admin setting affects modinfo and therefore requires this rebuild.
Note that these changes unfortunately slightly increase the size of modinfo. Most of these values default to 0/empty so will not take any space but section, module, added, and visibleold will usually be set, adding 4 data items to each modinfo entry.