- foreach ($modules as $fname) {
- $fname($courses,$htmlarray);
+ // Split courses list into batches with no more than MAX_MODINFO_CACHE_SIZE courses in one batch.
+ // Otherwise we exceed the cache limit in get_fast_modinfo() and rebuild it too often.
+ if (defined('MAX_MODINFO_CACHE_SIZE') && MAX_MODINFO_CACHE_SIZE > 0 && count($courses) > MAX_MODINFO_CACHE_SIZE) {
+ $batches = array_chunk($courses, MAX_MODINFO_CACHE_SIZE, true);
+ } else {
+ $batches = array($courses);
+ }
+ foreach ($batches as $courses) {
+ foreach ($modules as $fname) {
+ $fname($courses, $htmlarray);
+ }