Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1441 ariadna 1
# Moodle Upgrade notes
2
 
3
This file contains important information for developers on changes to the Moodle codebase.
4
 
5
More detailed information on key changes can be found in the [Developer update notes](https://moodledev.io/docs/devupdate) for your version of Moodle.
6
 
7
The format of this change log follows the advice given at [Keep a CHANGELOG](https://keepachangelog.com).
8
 
9
## 5.0.2+
10
 
11
### core
12
 
13
#### Added
14
 
15
- The Behat `::execute()` method now accepts an array-style callable in addition to the string `classname::method` format.
16
 
17
  The following formats are now accepted:
18
 
19
  ```php
20
  // String format:
21
  $this->execute('behat_general::i_click_on', [...]);
22
 
23
  // Array format:
24
  $this->execute([behat_general::class,' i_click_on'], [...]);
25
  ```
26
 
27
  For more information see [MDL-86231](https://tracker.moodle.org/browse/MDL-86231)
28
- The `\externallib_advanced_testcase` has been replaced by `\core_external\tests\externallib_testcase` and is now autoloadable.
29
 
30
  For more information see [MDL-86283](https://tracker.moodle.org/browse/MDL-86283)
31
 
32
#### Changed
33
 
34
- The `\core\output\local\dropdown\dialog` class constructor now accepts a `$definition['autoclose']` parameter to define autoclose behaviour of the element
35
 
36
  For more information see [MDL-86015](https://tracker.moodle.org/browse/MDL-86015)
37
- The default PHPUnit configuration now enables the following properties, ensuring PHP warnings will cause test failures (restoring pre-PHPUnit version 10 behaviour):
38
 
39
  * `failOnDeprecation`
40
  * `failOnWarning`
41
 
42
  For more information see [MDL-86311](https://tracker.moodle.org/browse/MDL-86311)
43
 
44
### core_courseformat
45
 
46
#### Added
47
 
48
- Add a new modinfo::get_instance_of() to retrieve an instance of a cm via its name and instance id. Add a new modinfo::sort_cm_array() to sort an array of cms in their order of appearance in the course page. Replaces calls to get_course_and_cm_from_instance() and get_instances_of() whenever it was just used to retrieve a single instance of a cm.
49
 
50
  For more information see [MDL-86021](https://tracker.moodle.org/browse/MDL-86021)
51
 
52
### core_grades
53
 
54
#### Added
55
 
56
- - New grade_item::is_gradable function has been created to return whether the grade item is GRADE_TYPE_VALUE or GRADE_TYPE_SCALE.
57
 
58
  For more information see [MDL-86173](https://tracker.moodle.org/browse/MDL-86173)
59
 
60
### core_message
61
 
62
#### Added
63
 
64
- The `contexturl` property to `\core\message\message` instances can now contain `\core\url` values in addition to plain strings
65
 
66
  For more information see [MDL-83080](https://tracker.moodle.org/browse/MDL-83080)
67
 
68
### theme_boost
69
 
70
#### Added
71
 
72
- Tables affected by unwanted styling (e.g., borders) from the reset of Bootstrap _reboot.scss styles can now opt out and preserve the original behavior by adding the styleless .table-reboot class.
73
 
74
  For more information see [MDL-86548](https://tracker.moodle.org/browse/MDL-86548)
75
 
76
## 5.0.2
77
 
78
### core
79
 
80
#### Added
81
 
82
- Add a new method has_valid_group in \core\report_helper that will return true or false depending if the user has a valid group. This is mainly false in case the user is not in any group in SEPARATEGROUPS. Used in report_log and report_loglive
83
 
84
  For more information see [MDL-84464](https://tracker.moodle.org/browse/MDL-84464)
85
 
86
#### Changed
87
 
88
- The `\core\attribute\deprecated` attribute constructor `$replacement` parameter now defaults to null, and can be omitted
89
 
90
  For more information see [MDL-84531](https://tracker.moodle.org/browse/MDL-84531)
91
- Added a new `\core\deprecation::emit_deprecation()` method which should be used in places where a deprecation is known to occur. This method will throw debugging if no deprecation notice was found, for example:
92
  ```php
93
  public function deprecated_method(): void {
94
      \core\deprecation::emit_deprecation([self::class, __FUNCTION__]);
95
  }
96
  ```
97
 
98
  For more information see [MDL-85897](https://tracker.moodle.org/browse/MDL-85897)
99
 
100
### core_message
101
 
102
#### Added
103
 
104
- The web service `core_message_get_member_info` additionally returns `cancreatecontact` which is a boolean value for a user's permission to add a contact.
105
 
106
  For more information see [MDL-72123](https://tracker.moodle.org/browse/MDL-72123)
107
 
108
### core_question
109
 
110
#### Added
111
 
112
- The question backup API has been improved to only include questions that are actually used or owned by backed up activities.
113
  Any activities that use question references should be supported automatically. Activities that use *question set references* (for example, random quiz questions) need to add a call to `backup_question_set_reference_trait::annotate_set_reference_bank_entries()` alongside the call to `backup_question_set_reference_trait::add_question_set_references()` in their backup step. See `backup_quiz_activity_structure_step::define_structure()` for an example.
114
 
115
  For more information see [MDL-41924](https://tracker.moodle.org/browse/MDL-41924)
116
 
117
#### Changed
118
 
119
- `core_question_search_shared_banks` will now search all question banks, not just those outside the current course.
120
  This makes the service usable in cases outside of the current "Switch banks" UI, which require searching all banks on the site.
121
  It also makes the autocomplete in the "Switch banks" UI more consistent, as it was previously excluding some of the banks listed in the UI (Question banks in this course), but not others (Recently viewed question banks).
122
  This change has also adds a 'requiredcapabilties' parameter to the function, which accepts an list of abbreviated capabilities for  checking access against question banks before they are returned.
123
 
124
  For more information see [MDL-85069](https://tracker.moodle.org/browse/MDL-85069)
125
- `question_edit_contexts` now only considers the provided context when checking permissions, rather than all parent contexts as well. As questions now exist only at the activity module context level, permissions can be inherited or overridden as normal for each question bank. The previous pattern of checking for a permission in any parent context circumvented the override system, and no longer makes sense.
126
 
127
  For more information see [MDL-85754](https://tracker.moodle.org/browse/MDL-85754)
128
 
129
## 5.0.1
130
 
131
### core
132
 
133
#### Added
134
 
135
- - Added is_site_registered_in_hub method in lib/classes/hub/api.php to
136
    check if the site is registered or not.
137
  - Added get_secret method in lib/classes/hub/registration.php to get site's secret.
138
 
139
  For more information see [MDL-83448](https://tracker.moodle.org/browse/MDL-83448)
140
- Added a new optional param to adhoc_task_failed and scheduled_task_failed to allow skipping log finalisation when called from a separate task.
141
 
142
  For more information see [MDL-84442](https://tracker.moodle.org/browse/MDL-84442)
143
- There is a new `core/page_title` Javascript module for manipulating the current page title
144
 
145
  For more information see [MDL-84804](https://tracker.moodle.org/browse/MDL-84804)
146
 
147
### core_auth
148
 
149
#### Added
150
 
151
- A new method called `get_additional_upgrade_token_parameters` has been added to `oauth2_client` class. This will allow custom clients to override this one and add their extra parameters for upgrade token request.
152
 
153
  For more information see [MDL-80380](https://tracker.moodle.org/browse/MDL-80380)
154
 
155
### core_question
156
 
157
#### Fixed
158
 
159
- The unit test repeated\_restore\_test::test\_restore\_course\_with\_same\_stamp\_questions was passing incorrectly on 5.x for question types that use answers.
160
  Maintainers of third-party question types may want to re-run the test with the fix in place, or if they have copied parts of this test as the basis of a test in their own plugin, review the changes and see if they should be reflected in their own test.
161
 
162
  For more information see [MDL-85556](https://tracker.moodle.org/browse/MDL-85556)
163
 
164
### core_user
165
 
166
#### Added
167
 
168
- New method `\core_user::get_dummy_fullname(...)` for returning dummy user fullname comprised of configured name fields only
169
 
170
  For more information see [MDL-82132](https://tracker.moodle.org/browse/MDL-82132)
171
 
172
## 5.0
173
 
174
### core
175
 
176
#### Added
177
 
178
- The `core/sortable_list` Javascript module now emits native events, removing the jQuery dependency from calling code that wants to listen for the events. Backwards compatibility with existing code using jQuery is preserved
179
 
180
  For more information see [MDL-72293](https://tracker.moodle.org/browse/MDL-72293)
181
- `\core\output\activity_header` now uses the `is_title_allowed()` method when setting the title in the constructor.
182
 
183
  This method has been improved to give priority to the 'notitle' option in the theme config for the current page layout, over the top-level option in the theme.
184
 
185
  For example, the Boost theme sets `$THEME->activityheaderconfig['notitle'] = true;` by default, but in its `secure` pagelayout, it has `'notitle' = false`.
186
  This prevents display of the title in all layouts except `secure`.
187
 
188
  For more information see [MDL-75610](https://tracker.moodle.org/browse/MDL-75610)
189
- Behat now supports email content verification using Mailpit.
190
  You can check the contents of an email using the step `Then the email to "user@example.com" with subject containing "subject" should contain "content".`
191
  To use this feature:
192
  1. Ensure that Mailpit is running
193
  2. Define the following constants in your `config.php`:
194
      - `TEST_EMAILCATCHER_MAIL_SERVER` - The Mailpit server address (e.g. `0.0.0.0:1025`)
195
      - `TEST_EMAILCATCHER_API_SERVER` - The Mailpit API server (qe.g. `http://localhost:8025`)
196
 
197
  3. Ensure that the email catcher is set up using the step `Given an email catcher server is configured`.
198
 
199
  For more information see [MDL-75971](https://tracker.moodle.org/browse/MDL-75971)
200
- A new core\ip_utils::normalize_internet_address() method is created to sanitize an IP address, a range of IP addresses, a domain name or a wildcard domain matching pattern.
201
 
202
  Moodle previously allowed entries such as 192.168. or .moodle.org for certain variables (eg: $CFG->proxybypass). Since MDL-74289, these formats are no longer allowed. This method converts this informations into an authorized format. For example, 192.168. becomes 192.168.0.0/16 and .moodle.org becomes *.moodle.org.
203
 
204
  Also a new core\ip_utils::normalize_internet_address_list() method is created. Based on core\ip_utils::normalize_internet_address(), this method normalizes a string containing a series of Internet addresses.
205
 
206
  For more information see [MDL-79121](https://tracker.moodle.org/browse/MDL-79121)
207
- The stored progress API has been updated. The `\core\output\stored_progress_bar` class has
208
  now has a `store_pending()` method, which will create a record for the stored process, but
209
  without a start time or progress percentage.
210
  `\core\task\stored_progress_task_trait` has been updated with a new `initialise_stored_progress()` method,
211
  which will call `store_pending()` for the task's progress bar. This allows the progress bar to be displayed
212
  in a "pending" state, to show that a process has been queued but not started.
213
 
214
  For more information see [MDL-81714](https://tracker.moodle.org/browse/MDL-81714)
215
- A new `\core\output\task_indicator` component has been added to display a progress bar and message
216
  for a background task using `\core\task\stored_progress_task_trait`. See the "Task indicator"
217
  page in the component library for usage details.
218
 
219
  For more information see [MDL-81714](https://tracker.moodle.org/browse/MDL-81714)
220
- The deprecated implementation in course/view.php, which uses the extern_server_course function to handle routing between internal and external courses, can be improved by utilizing the Hook API. This enhancement is essential for a project involving multiple universities, as the Hook API provides a more generalized and flexible approach to route users to external courses from within other plugins.
221
 
222
  For more information see [MDL-83473](https://tracker.moodle.org/browse/MDL-83473)
223
- Add after_role_switched hook that is triggered when we switch role to a new role in a course.
224
 
225
  For more information see [MDL-83542](https://tracker.moodle.org/browse/MDL-83542)
226
- New generic collapsable section output added. Use core\output\local\collapsable_section or include the core/local/collapsable_section template to use it. See the full documentation in the component library.
227
 
228
  For more information see [MDL-83869](https://tracker.moodle.org/browse/MDL-83869)
229
- A new method get_instance_record has been added to cm_info object so core can get the activity table record without using the $DB object every time. Also, the method caches de result so getting more than once per execution is much faster.
230
 
231
  For more information see [MDL-83892](https://tracker.moodle.org/browse/MDL-83892)
232
- Now lib/templates/select_menu.mustache has a new integer headinglevel context value to specify the heading level to keep the header accessibility when used as a tertiary navigation.
233
 
234
  For more information see [MDL-84208](https://tracker.moodle.org/browse/MDL-84208)
235
- The public method `get_slashargument` has been added to the `url` class.
236
 
237
  For more information see [MDL-84351](https://tracker.moodle.org/browse/MDL-84351)
238
- The new PHP enum core\output\local\properties\iconsize can be used to limit the amount of icons sizes an output component can use. The enum has the same values available in the theme_boost scss.
239
 
240
  For more information see [MDL-84555](https://tracker.moodle.org/browse/MDL-84555)
241
- A new method, `core_text::trim_ctrl_chars()`, has been introduced to clean control characters from text. This ensures cleaner input handling and prevents issues caused by invisible or non-printable characters
242
 
243
  For more information see [MDL-84907](https://tracker.moodle.org/browse/MDL-84907)
244
 
245
#### Changed
246
 
247
- The {user_preferences}.value database field is now TEXT instead of CHAR. This means that any queries with a condition on this field in a WHERE or JOIN statement will need updating to use `$DB->sql_compare_text()`. See the `$newusers` query in `\core\task\send_new_users_password_task::execute` for an example.
248
 
249
  For more information see [MDL-46739](https://tracker.moodle.org/browse/MDL-46739)
250
- The `core_renderer::tag_list` function now has a new parameter named `displaylink`. When `displaylink` is set to `true`, the tag name will be displayed as a clickable hyperlink. Otherwise, it will be rendered as plain text.
251
 
252
  For more information see [MDL-75075](https://tracker.moodle.org/browse/MDL-75075)
253
- All uses of the following PHPUnit methods have been removed as these methods are
254
  deprecated upstream without direct replacement:
255
 
256
  - `withConsecutive`
257
  - `willReturnConsecutive`
258
  - `onConsecutive`
259
 
260
  Any plugin using these methods must update their uses.
261
 
262
  For more information see [MDL-81308](https://tracker.moodle.org/browse/MDL-81308)
263
- PHPSpreadSheet has been updated to version 4.0.0.
264
 
265
  All library usage should be via the Moodle wrapper and no change should be required.
266
 
267
  For more information see [MDL-81664](https://tracker.moodle.org/browse/MDL-81664)
268
- The Moodle subplugins.json format has been updated to accept a new `subplugintypes` object.
269
 
270
  This should have the same format as the current `plugintypes` format, except that the paths should be relative to the _plugin_ root instead of the Moodle document root.
271
 
272
  Both options can co-exist, but if both are present they must be kept in-sync.
273
 
274
  ```json
275
  {
276
      "subplugintypes": {
277
          "tiny": "plugins"
278
      },
279
      "plugintypes": {
280
          "tiny": "lib/editor/tiny/plugins"
281
      }
282
  }
283
  ```
284
 
285
  For more information see [MDL-83705](https://tracker.moodle.org/browse/MDL-83705)
286
- The behat/gherkin has been updated to 4.11.0 which introduces a breaking change where backslashes in feature files need to be escaped.
287
 
288
  For more information see [MDL-83848](https://tracker.moodle.org/browse/MDL-83848)
289
- The following test classes have been moved into autoloadable locations:
290
 
291
  | Old location | New classname |
292
  | --- | --- |
293
  | `\core\tests\route_testcase` | `\core\tests\router\route_testcase` |
294
  | `\core\router\mocking_route_loader` | `\core\tests\router\mocking_route_loader` |
295
 
296
  For more information see [MDL-83968](https://tracker.moodle.org/browse/MDL-83968)
297
- Analytics is now disabled by default on new installs.
298
 
299
  For more information see [MDL-84107](https://tracker.moodle.org/browse/MDL-84107)
300
 
301
#### Deprecated
302
 
303
- The methods `want_read_slave` and `perf_get_reads_slave` in `lib/dml/moodle_database.php` have been deprecated in favour of renamed versions that substitute `slave` for `replica`.
304
 
305
  For more information see [MDL-71257](https://tracker.moodle.org/browse/MDL-71257)
306
- The trait `moodle_read_slave_trait` has been deprecated in favour of a functionally identical version called `moodle_read_replica_trait`. The renamed trait substitutes the terminology of `slave` with `replica`, and `master` with `primary`.
307
 
308
  For more information see [MDL-71257](https://tracker.moodle.org/browse/MDL-71257)
309
- question_make_default_categories()
310
 
311
  No longer creates a default category in either CONTEXT_SYSTEM, CONTEXT_COURSE, or CONTEXT_COURSECAT.
312
  Superceded by question_get_default_category which can optionally create one if it does not exist.
313
 
314
  For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
315
- question_delete_course()
316
 
317
  No replacement. Course contexts no longer hold question categories.
318
 
319
  For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
320
- question_delete_course_category()
321
 
322
  Course category contexts no longer hold question categories.
323
 
324
  For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
325
- The 'core_renderer::sr_text()' function has been deprecated, use 'core_renderer::visually_hidden_text()' instead.
326
 
327
  For more information see [MDL-81825](https://tracker.moodle.org/browse/MDL-81825)
328
- The function imagecopybicubic() is now deprecated. The GD lib is a strict requirement, so use imagecopyresampled() instead.
329
 
330
  For more information see [MDL-84449](https://tracker.moodle.org/browse/MDL-84449)
331
 
332
#### Removed
333
 
334
- moodle_process_email() has been deprecated with the removal of the unused and non-functioning admin/process_email.php.
335
 
336
  For more information see [MDL-61232](https://tracker.moodle.org/browse/MDL-61232)
337
- The method `site_registration_form::add_select_with_email()` has been finally deprecated and will now throw an exception if called.
338
 
339
  For more information see [MDL-71472](https://tracker.moodle.org/browse/MDL-71472)
340
- Remove support deprecated boolean 'primary' parameter in \core\output\single_button. The 4th parameter is now a string and not a boolean (the use was to set it to true to have a primary button)
341
 
342
  For more information see [MDL-75875](https://tracker.moodle.org/browse/MDL-75875)
343
- Final removal of the following constants/methods from the `\core\encyption` class, removing support for OpenSSL fallback:
344
 
345
  - `METHOD_OPENSSL`
346
  - `OPENSSL_CIPHER`
347
  - `is_sodium_installed`
348
 
349
  For more information see [MDL-78869](https://tracker.moodle.org/browse/MDL-78869)
350
- Final deprecation of core_renderer\activity_information()
351
 
352
  For more information see [MDL-78926](https://tracker.moodle.org/browse/MDL-78926)
353
- Final removal of `share_activity()` in `core\moodlenet\activity_sender`, please use `share_resource()` instead.
354
 
355
  For more information see [MDL-79086](https://tracker.moodle.org/browse/MDL-79086)
356
- Final deprecation of methods `task_base::is_blocking` and `task_base::set_blocking`.
357
 
358
  For more information see [MDL-81509](https://tracker.moodle.org/browse/MDL-81509)
359
- - Remove php-enum library. - It was a dependency of zipstream, but is no longer required as this
360
    functionality has been replaced by native PHP functionality.
361
 
362
  For more information see [MDL-82825](https://tracker.moodle.org/browse/MDL-82825)
363
- Oracle support has been removed in LMS
364
 
365
  For more information see [MDL-83172](https://tracker.moodle.org/browse/MDL-83172)
366
- The Atto HTML editor has been removed from core, along with all standard
367
  subplugins.
368
 
369
  The editor is available for continued use in the Plugins Database.
370
 
371
  For more information see [MDL-83282](https://tracker.moodle.org/browse/MDL-83282)
372
- Support for `subplugins.php` files has been removed. All subplugin metadata must be created in a `subplugins.json` file.
373
 
374
  For more information see [MDL-83703](https://tracker.moodle.org/browse/MDL-83703)
375
- set_alignment(), set_constraint() and do_not_enhance() functions have been fully removed from action_menu class.
376
 
377
  For more information see [MDL-83765](https://tracker.moodle.org/browse/MDL-83765)
378
- The `core_output_load_fontawesome_icon_map` web service has been fully removed and replaced by `core_output_load_fontawesome_icon_system_map`
379
 
380
  For more information see [MDL-84036](https://tracker.moodle.org/browse/MDL-84036)
381
- Final deprecation and removal of \core\event\course_module_instances_list_viewed
382
 
383
  For more information see [MDL-84593](https://tracker.moodle.org/browse/MDL-84593)
384
 
385
#### Fixed
386
 
387
- url class now correctly supports multi level query parameter parsing and output.
388
 
389
  This was previously supported in some methods such as get_query_string, but not others. This has been fixed to be properly supported.
390
 
391
  For example https://example.moodle.net?test[2]=a&test[0]=b will be parsed as ['test' => [2 => 'a', 0 => 'b']]
392
 
393
  All parameter values that are not arrays are casted to strings.
394
 
395
  For more information see [MDL-77293](https://tracker.moodle.org/browse/MDL-77293)
396
 
397
### core_adminpresets
398
 
399
#### Removed
400
 
401
- Remove chat and survey from Adminpresets.
402
 
403
  For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
404
- Removed block_mnet_hosts from admin presets
405
 
406
  For more information see [MDL-84309](https://tracker.moodle.org/browse/MDL-84309)
407
 
408
### core_ai
409
 
410
#### Added
411
 
412
- - A new hook, `\core_ai\hook\after_ai_action_settings_form_hook`, has been introduced. It will allows AI provider plugins to add additional form elements for action settings configuration.
413
 
414
  For more information see [MDL-82980](https://tracker.moodle.org/browse/MDL-82980)
415
- - AI provider plugins that want to implement `pre-defined models` and display additional settings for models must now extend the `\core_ai\aimodel\base` class.
416
 
417
  For more information see [MDL-82980](https://tracker.moodle.org/browse/MDL-82980)
418
 
419
#### Changed
420
 
421
- - The `\core_ai\form\action_settings_form` class has been updated to automatically include action buttons such as Save and Cancel.
422
  - AI provider plugins should update their form classes by removing the `$this->add_action_buttons();` call, as it is no longer required.
423
 
424
  For more information see [MDL-82980](https://tracker.moodle.org/browse/MDL-82980)
425
 
426
#### Deprecated
427
 
428
- The ai_provider_management_table has been refactored to inherit from flexible_table instead of plugin_management_table. As a result the methods get_plugintype and get_action_url are now unused and have been deprecated in the class.
429
 
430
  For more information see [MDL-82922](https://tracker.moodle.org/browse/MDL-82922)
431
 
432
### core_analytics
433
 
434
#### Removed
435
 
436
- Remove chat and survey from core_analytics.
437
 
438
  For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
439
 
440
### core_auth
441
 
442
#### Removed
443
 
444
- Cas authentication is removed from core and added to the following git repository: https://github.com/moodlehq/moodle-auth_cas
445
 
446
  For more information see [MDL-78778](https://tracker.moodle.org/browse/MDL-78778)
447
- Removed auth_mnet plugin from core
448
 
449
  For more information see [MDL-84307](https://tracker.moodle.org/browse/MDL-84307)
450
 
451
### core_backup
452
 
453
#### Added
454
 
455
- Added several hooks to the restore process to
456
 
457
   1. Hook to allow extra settings to be defined for the course restore process.
458
   2. Hook to allow adding extra fields to the copy course form.
459
   3. Hook used by `copy_helper::process_formdata()` to expand the list of required fields.
460
   4. Hook used to allow interaction with the copy task, before the actual task execution takes place.
461
 
462
  Other changes include
463
   1. `base_task::add_setting()` is now public to allow hook callbacks to add settings.
464
   2. Settings are now added to the data sent to the course_restored event.
465
 
466
  For more information see [MDL-83479](https://tracker.moodle.org/browse/MDL-83479)
467
 
468
#### Removed
469
 
470
- Remove all MODE_HUB related code.
471
 
472
  For more information see [MDL-66873](https://tracker.moodle.org/browse/MDL-66873)
473
 
474
### core_badges
475
 
476
#### Added
477
 
478
- Added fields `courseid` and `coursefullname` to `badgeclass_exporter`, which is used in the return structure of external function `core_badges_get_badge`.
479
 
480
  For more information see [MDL-83026](https://tracker.moodle.org/browse/MDL-83026)
481
- Added field `coursefullname` to `user_badge_exporter`, which is used in the return structure of external functions `core_badges_get_user_badge_by_hash` and `core_badges_get_user_badges`.
482
 
483
  For more information see [MDL-83026](https://tracker.moodle.org/browse/MDL-83026)
484
- The class in badges/lib/bakerlib.php has been moved to core_badges\png_metadata_handler. If you've extended or directly used the old bakerlib.php, you'll need to update your code to use the new namespaced class.
485
 
486
  For more information see [MDL-83886](https://tracker.moodle.org/browse/MDL-83886)
487
 
488
#### Removed
489
 
490
- The following previously deprecated renderer methods have been removed:
491
 
492
  * `print_badge_table_actions`
493
  * `render_badge_management`
494
 
495
  For more information see [MDL-79162](https://tracker.moodle.org/browse/MDL-79162)
496
- The fields imageauthorname, imageauthoremail, and imageauthorurl have been removed from badges due to confusion and their absence from the official specification. These fields also do not appear in OBv3.0. Additionally, the image_author_json.php file has been removed as it is no longer needed.
497
 
498
  For more information see [MDL-83909](https://tracker.moodle.org/browse/MDL-83909)
499
 
500
### core_block
501
 
502
#### Removed
503
 
504
- Removed block_mnet_hosts plugin from core
505
 
506
  For more information see [MDL-84309](https://tracker.moodle.org/browse/MDL-84309)
507
 
508
### core_calendar
509
 
510
#### Deprecated
511
 
512
- Initial deprecation of calendar_sub_month. Use \core_calendar\type_factory::get_calendar_instance()->get_prev_month() instead.
513
 
514
  For more information see [MDL-79434](https://tracker.moodle.org/browse/MDL-79434)
515
- calendar_day_representation(), calendar_time_representation() and calendar_format_event_time() functions have been deprecated and can't be used anymore. Use humandate and humantimeperiod classes instead.
516
 
517
  For more information see [MDL-83873](https://tracker.moodle.org/browse/MDL-83873)
518
- calendar_get_courselink(), calendar_events_by_day() functions have been deprecated.
519
 
520
  For more information see [MDL-84617](https://tracker.moodle.org/browse/MDL-84617)
521
- Initial deprecation of calendar_add_month(). Use \core_calendar\type_factory::get_calendar_instance()->get_next_month() instead.
522
 
523
  For more information see [MDL-84657](https://tracker.moodle.org/browse/MDL-84657)
524
 
525
#### Removed
526
 
527
- Final removal of calendar functions:
528
    - calendar_top_controls()
529
    - calendar_get_link_previous()
530
    - calendar_get_link_next()
531
 
532
  For more information see [MDL-79434](https://tracker.moodle.org/browse/MDL-79434)
533
- prepare_for_view(), calendar_add_event_metadata() functions have been removed.
534
 
535
  For more information see [MDL-84617](https://tracker.moodle.org/browse/MDL-84617)
536
- core_calendar_renderer::event() method has been removed.
537
 
538
  For more information see [MDL-84617](https://tracker.moodle.org/browse/MDL-84617)
539
 
540
### core_completion
541
 
542
#### Added
543
 
544
- Add hook after_cm_completion_updated triggered when an activity completion is updated.
545
 
546
  For more information see [MDL-83542](https://tracker.moodle.org/browse/MDL-83542)
547
- The method `count_modules_completed` now delegate the logic to count the completed modules to the DBMS improving the performance of the method.
548
 
549
  For more information see [MDL-83917](https://tracker.moodle.org/browse/MDL-83917)
550
 
551
### core_course
552
 
553
#### Added
554
 
555
- Now the core_courseformat\local\content\cm\completion output is more reusable. All the HTML has been moved to its own mustache file, and the output class has a new set_smallbutton method to decide wether to rendered it as a small button (like in the course page) or as a normal one (for other types of pages).
556
 
557
  For more information see [MDL-83872](https://tracker.moodle.org/browse/MDL-83872)
558
- New core_course\output\activity_icon class to render activity icons with or without purpose color. This output will centralize the way Moodle renders activity icons
559
 
560
  For more information see [MDL-84555](https://tracker.moodle.org/browse/MDL-84555)
561
 
562
#### Deprecated
563
 
564
- The core_course_edit_module and core_course_edit_section external functions are now deprecated. Use core_courseformat_update_course instead
565
 
566
  For more information see [MDL-82342](https://tracker.moodle.org/browse/MDL-82342)
567
- The core_course_get_module external function is now deprecated. Use fragment API using component core_courseformat and fragment cmitem instead
568
 
569
  For more information see [MDL-82342](https://tracker.moodle.org/browse/MDL-82342)
570
- The course_format_ajax_support function is now deprecated. Use course_get_format($course)->supports_ajax() instead.
571
 
572
  For more information see [MDL-82351](https://tracker.moodle.org/browse/MDL-82351)
573
- course_get_cm_edit_actions is now deprecated. Formats should extend core_courseformat\output\local\content\cm\controlmenu instead.
574
 
575
  For more information see [MDL-83527](https://tracker.moodle.org/browse/MDL-83527)
576
 
577
#### Removed
578
 
579
- Final deprecation of edit_default_completion()
580
 
581
  For more information see [MDL-78711](https://tracker.moodle.org/browse/MDL-78711)
582
- Final removal of core_course\output\activity_information
583
 
584
  For more information see [MDL-78926](https://tracker.moodle.org/browse/MDL-78926)
585
- Final deprecation of core_course_renderer\render_activity_information()
586
 
587
  For more information see [MDL-78926](https://tracker.moodle.org/browse/MDL-78926)
588
 
589
### core_courseformat
590
 
591
#### Added
592
 
593
- A new core_courseformat\base::get_generic_section_name method is created to know how a specific format name the sections. This method is also used by plugins to know how to name the sections instead of using using a direct get_string on "sectionnamer" that may not exists.
594
 
595
  For more information see [MDL-82349](https://tracker.moodle.org/browse/MDL-82349)
596
- A new course/format/update.php url is added as a non-ajax alternative to the core_courseformat_course_update webservice
597
 
598
  For more information see [MDL-82767](https://tracker.moodle.org/browse/MDL-82767)
599
- Add core_courseformat\base::invalidate_all_session_caches to reset course editor cache for all users when course is changed. This method can be used as an alternative to core_courseformat\base::session_cache_reset for resetting the cache for the current user  in case the change in the course should be reflected for all users.
600
 
601
  For more information see [MDL-83185](https://tracker.moodle.org/browse/MDL-83185)
602
- Add after_course_content_updated hook triggered when a course content is updated (module modified, ...) through edition.
603
 
604
  For more information see [MDL-83542](https://tracker.moodle.org/browse/MDL-83542)
605
 
606
#### Changed
607
 
608
- From now on, deleting an activity without Ajax will be consistent with deleting an activity using Ajax. This ensures that all activity deletions will use the recycle bin and avoid code duplication. If your format uses the old non-Ajax method to bypass the recycle bin it won't work anymore as the non-Ajax deletions are now handled in course/format/update.php.
609
 
610
  For more information see [MDL-82767](https://tracker.moodle.org/browse/MDL-82767)
611
 
612
#### Deprecated
613
 
614
- The state actions section_move and all related functions are final deprecated and cannot be used anymore. Use the newer section_move_after from now on.
615
 
616
  For more information see [MDL-80116](https://tracker.moodle.org/browse/MDL-80116)
617
- The core_courseformat::base get_section_number and set_section_number are now final deprecated. Use get_sectionum and set_sectionnum instead.
618
 
619
  For more information see [MDL-80116](https://tracker.moodle.org/browse/MDL-80116)
620
- All course editing YUI modules are now deprecated. All course formats not using components must migrate before 6.0. Follow the devdocs guide https://moodledev.io/docs/5.0/apis/plugintypes/format/migration to know how to proceed.
621
 
622
  For more information see [MDL-82341](https://tracker.moodle.org/browse/MDL-82341)
623
- The core_courseformat\base::get_non_ajax_cm_action_url is now deprecated. Use get_update_url instead.
624
 
625
  For more information see [MDL-82767](https://tracker.moodle.org/browse/MDL-82767)
626
- Many get actions from course/view.php and course/mod.php are now deprecated. Use the new course/format/update.php instead to replace all direct edit urls  in your code. The affected actions are: indent, duplicate, hide, show, stealth, delete, groupmode and marker (highlight). The course/format/updates.php uses the same parameters as the core_courseformat_course_update webservice
627
 
628
  For more information see [MDL-82767](https://tracker.moodle.org/browse/MDL-82767)
629
- Deprecate the use of element ID selectors in favor of querySelector for Reactive component initialisation. We will use '#id' instead of 'id' for example.
630
 
631
  For more information see [MDL-83339](https://tracker.moodle.org/browse/MDL-83339)
632
- The core_courseformat_create_module web service has been deprecated. Please use core_courseformat_new_module as its replacement.
633
 
634
  For more information see [MDL-83469](https://tracker.moodle.org/browse/MDL-83469)
635
- The state mutation addModule, primarily used for creating mod_subsection instances, has been deprecated. Replace it with newModule. Additionally, all course formats using links with data-action="addModule" must be updated to use data-action="newModule" and include a data-sectionid attribute specifying the target section ID.
636
 
637
  For more information see [MDL-83469](https://tracker.moodle.org/browse/MDL-83469)
638
- Using arrays to define course menu items is deprecated. All course formats that extend the section or activity control menus (format_NAME\output\courseformat\content\section\controlmenu or format_NAME\output\courseformat\cm\section\controlmenu) should return standard action_menu_link objects instead.
639
 
640
  For more information see [MDL-83527](https://tracker.moodle.org/browse/MDL-83527)
641
- The externservercourse.php feature used to override the course view page has been deprecated in favor of using hooks. The following hooks are available to do  something similar: \core_course\hook\before_course_viewed.
642
 
643
  For more information see [MDL-83764](https://tracker.moodle.org/browse/MDL-83764)
644
 
645
#### Removed
646
 
647
- Protected function `core_courseformat\output\local\content\section\availability::availability_info()` has been fully removed. Use `core_courseformat\output\local\content\section\availability::get_availability_data()` instead.
648
 
649
  For more information see [MDL-78489](https://tracker.moodle.org/browse/MDL-78489)
650
- The old UI for moving activities and sections without javascript is not avaiable anymore from the actions dropdown. From now, on the only UI to move activities and sections is using the move action in the course editor. Format plugins can still use the old links to make the "move here" elements appear, but they will show deprecated messages. All the non-ajax moving will be removed in Moodle 6.0.
651
 
652
  For more information see [MDL-83562](https://tracker.moodle.org/browse/MDL-83562)
653
 
654
#### Fixed
655
 
656
- HTML IDs relating to section collapse/expand have been changed in the course format templates.
657
  - core_courseformat/local/content/section/header #collapssesection{{num}} has been changed to #collapsesectionid{{id}}
658
  - core_courseformat/local/content/section/content #coursecontentcollapse{{num}} had been changed to #coursecontentcollapseid{{id}}
659
 
660
  For more information see [MDL-82679](https://tracker.moodle.org/browse/MDL-82679)
661
 
662
### core_customfield
663
 
664
#### Added
665
 
666
- Added a new custom field exporter to export custom field data in `\core_customfield\external\field_data_exporter`
667
 
668
  For more information see [MDL-83552](https://tracker.moodle.org/browse/MDL-83552)
669
 
670
### core_enrol
671
 
672
#### Added
673
 
674
- New method enrol_plugin::get_instance_name_for_management_page() can be used to display additional details next to the instance name.
675
 
676
  For more information see [MDL-84139](https://tracker.moodle.org/browse/MDL-84139)
677
- Plugins implementing enrol_page_hook() method are encouraged to use the renderable \core_enrol\output\enrol_page to produce HTML for the enrolment page. Forms should be displayed in a modal dialogue. See enrol_self plugin as an example.
678
 
679
  For more information see [MDL-84142](https://tracker.moodle.org/browse/MDL-84142)
680
- It's now possible for themes to override the course enrolment index page by overriding the new course renderer `enrolment_options` method
681
 
682
  For more information see [MDL-84143](https://tracker.moodle.org/browse/MDL-84143)
683
 
684
#### Changed
685
 
686
- The `after_user_enrolled` hook now contains a `roleid` property to allow for listeners to determine which role was assigned during user enrolment (if any)
687
 
688
  The base enrolment `enrol_plugin::send_course_welcome_message_to_user` method also now accepts a `$roleid` parameter in order to correctly populate the `courserole` placeholder
689
 
690
  For more information see [MDL-83432](https://tracker.moodle.org/browse/MDL-83432)
691
 
692
#### Removed
693
 
694
- Final removal of base `enrol_plugin` class method `update_communication`
695
 
696
  For more information see [MDL-80491](https://tracker.moodle.org/browse/MDL-80491)
697
- Removed enrol_mnet plugin from core
698
 
699
  For more information see [MDL-84310](https://tracker.moodle.org/browse/MDL-84310)
700
 
701
### core_files
702
 
703
#### Added
704
 
705
- A new function `file_clear_draft_area()` has been added to delete the files in a draft area.
706
 
707
  For more information see [MDL-72050](https://tracker.moodle.org/browse/MDL-72050)
708
- Adds a new ad-hoc task `core_files\task\asynchronous_mimetype_upgrade_task` to upgrade the mimetype of files
709
  asynchronously during core upgrades. The upgradelib also comes with a new utility function
710
  `upgrade_create_async_mimetype_upgrade_task` for creating said ad-hoc task.
711
 
712
  For more information see [MDL-81437](https://tracker.moodle.org/browse/MDL-81437)
713
 
714
### core_form
715
 
716
#### Changed
717
 
718
- The `cohort` form element now accepts new `includes` option, which is passed to the corresponding external service to determine which cohorts to return (self, parents, all)
719
 
720
  For more information see [MDL-83641](https://tracker.moodle.org/browse/MDL-83641)
721
 
722
### core_grades
723
 
724
#### Added
725
 
726
- `grade_regrade_final_grades()` now has an additional `async` parameter, which allows full course
727
  regrades to be performed in the background. This avoids blocking the user for long periods and
728
  while making changes to a large course. The actual regrade is performed using the
729
  `\core_course\task\regrade_final_grades` adhoc task, which calls `grade_regrade_final_grades()`
730
  with `async: false`.
731
 
732
  For more information see [MDL-81714](https://tracker.moodle.org/browse/MDL-81714)
733
 
734
#### Changed
735
 
736
- The `grade_object::fetch_all_helper()` now accepts a new `$sort` parameter with a default value is `id ASC` to sort the grade instances
737
 
738
  For more information see [MDL-85115](https://tracker.moodle.org/browse/MDL-85115)
739
 
740
#### Deprecated
741
 
742
- Deprecate print_graded_users_selector() from Moodle 2 era
743
 
744
  For more information see [MDL-84673](https://tracker.moodle.org/browse/MDL-84673)
745
 
746
#### Removed
747
 
748
- Removed unused grade_edit_tree_column_select class
749
 
750
  For more information see [MDL-77668](https://tracker.moodle.org/browse/MDL-77668)
751
- The previously deprecated `grade_helper::get_lang_string` method has been removed
752
 
753
  For more information see [MDL-78780](https://tracker.moodle.org/browse/MDL-78780)
754
- Final deprecation of
755
    grade_structure::get_element_type_string(),
756
    grade_structure::get_element_header(),
757
    grade_structure::get_element_icon(),
758
    grade_structure::get_activity_link()
759
 
760
  For more information see [MDL-79907](https://tracker.moodle.org/browse/MDL-79907)
761
- The external function core_grades_get_enrolled_users_for_search_widget has been fully removed.
762
 
763
  For more information see [MDL-84036](https://tracker.moodle.org/browse/MDL-84036)
764
- The external function core_grades_get_groups_for_search_widget has been fully removed.
765
 
766
  For more information see [MDL-84036](https://tracker.moodle.org/browse/MDL-84036)
767
 
768
### core_mnet
769
 
770
#### Removed
771
 
772
- Remove deprecated mnet_peer::get_public_key()
773
 
774
  For more information see [MDL-78304](https://tracker.moodle.org/browse/MDL-78304)
775
 
776
### core_portfolio
777
 
778
#### Removed
779
 
780
- Removed portfolio_mahara plugin from core
781
 
782
  For more information see [MDL-84308](https://tracker.moodle.org/browse/MDL-84308)
783
 
784
### core_question
785
 
786
#### Added
787
 
788
- The `get_bulk_actions()` method on the base `plugin_features_base` class has been changed to allow a qbank view object to be passed through. This is nullable and therefore optional for qbank plugins which don't need to do so.
789
 
790
  For more information see [MDL-79281](https://tracker.moodle.org/browse/MDL-79281)
791
- Question bank Condition classes can now implement a function called "filter_invalid_values($filterconditions)" to remove anything from the filterconditions array which is invalid or should not be there.
792
 
793
  For more information see [MDL-83784](https://tracker.moodle.org/browse/MDL-83784)
794
 
795
#### Changed
796
 
797
- question_attempt_step's constructor now accepts the class constant TIMECREATED_ON_FIRST_RENDER as a value for the
798
  $timecreated parameter. Calling question_attempt::render for the first time will now set the first step's timecreated
799
  to the current time if it is set to this value. Note, null could not be used here as it is already used to indicate
800
  timecreated should be set to the current time.
801
 
802
  For more information see [MDL-68806](https://tracker.moodle.org/browse/MDL-68806)
803
- The definition of the abstract `core_question\local\bank\condition` class has changed to make it clearer which methods are required  in child classes.
804
  The `get_filter_class` method is no longer declared as abstract, and will return `null` by default to use the base  `core/datafilter/filtertype` class. If you have defined this method to return `null` in your own class, it will continue to work, but it is no longer necessary.
805
  `build_query_from_filter` and `get_condition_key` are now declared as abstract, since all filter condition classes must define these  (as well as existing abstract methods) to function. Again, exsiting child classes will continue to work if they did before, as they  already needed these methods.
806
 
807
  For more information see [MDL-83859](https://tracker.moodle.org/browse/MDL-83859)
808
 
809
#### Deprecated
810
 
811
- question_type::generate_test
812
 
813
  No replacement, not used anywhere in core.
814
 
815
  For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
816
- Deprecated method `mod_quiz\question\bank\qbank_helper::get_version_options` in favour of `core_question\local\bank\version_options::get_version_options` so that the method is in core rather than a module, and can safely be used from anywhere as required.
817
 
818
  For more information see [MDL-77713](https://tracker.moodle.org/browse/MDL-77713)
819
- Behat steps `behat_qbank_comment::i_should_see_on_the_column` and `behat_qbank_comment::i_click_on_the_row_containing` have been deprecated in favour of the new component named selectors, `qbank_comment > Comment count link` and `qbank_comment > Comment count text` which can be used with the standard `should exist` and `I click on` steps to replace the custom steps.
820
 
821
  For more information see [MDL-79122](https://tracker.moodle.org/browse/MDL-79122)
822
 
823
#### Removed
824
 
825
- Final deprecation of:
826
    - core_question\local\bank\action_column_base::class
827
    - core_question\local\bank\menu_action_column_base::class
828
    - core_question\local\bank\menuable_action::interface
829
    - core_question\local\bank\view::print_choose_category_message()
830
    - core_question\local\bank\view::display_advanced_search_form()
831
    - core_question\local\bank\view::display_showtext_checkbox()
832
    - core_question\local\bank\view::init_search_conditions()
833
    - core_question\local\bank\view::get_current_category()
834
    - core_question\local\bank\view::display_options_form()
835
    - core_question\local\bank\view::start_table()
836
    - core_question\local\bank\view::end_table()
837
    - core_question\statistics\questions\all_calculated_for_qubaid_condition::TIME_TO_CACHE
838
    - core_question\statistics\responses\analyser::TIME_TO_CACHE
839
    - core_question_bank_renderer::render_category_condition_advanced()
840
    - core_question_bank_renderer::render_hidden_condition_advanced()
841
    - core_question_bank_renderer::render_category_condition()
842
 
843
  For more information see [MDL-78090](https://tracker.moodle.org/browse/MDL-78090)
844
 
845
#### Fixed
846
 
847
- Duplication or multiple restores of questions has been modified to avoid errors where a question with the same stamp already exists in the target category.
848
  To achieve this all data for the question is hashed, excluding any ID fields.
849
 
850
  The question data from the backup is first reformatted to match the questiondata structure returned by calling `get_question_options()` (see  https://docs.moodle.org/dev/Question_data_structures#Representation_1:_%24questiondata). Common question elements will be handled automatically, but any elements that the qtype adds to the backup will need to be handled by overriding `restore_qtype_plugin::convert_backup_to_questiondata`. See `restore_qtype_match_plugin` as an example.
851
  If a qtype plugin calls any `$this->add_question_*()` methods in its `restore_qtype_*_plugin::define_question_plugin_structure()` method, the ID fields used in these records will be excluded automatically.
852
  If a qtype plugin defines its own tables with ID fields, it must define `restore_qtype_*_plugin::define_excluded_identity_hash_fields()` to return  an array of paths to these fields within the question data. This should be all that is required for the majority of plugins. See the PHPDoc of `restore_qtype_plugin::define_excluded_identity_hash_fields()` for a full explanation of how these paths should be defined, and  `restore_qtype_truefalse_plugin` for an example.
853
  If the data structure for a qtype returned by calling `get_question_options()` contains data other than ID fields that are not contained in the backup structure or vice-versa, it will need to override `restore_qtype_*_plugin::remove_excluded_question_data()`  to remove the inconsistent data. See `restore_qtype_multianswer_plugin` as  an example.
854
 
855
  For more information see [MDL-83541](https://tracker.moodle.org/browse/MDL-83541)
856
 
857
### core_reportbuilder
858
 
859
#### Added
860
 
861
- New `report` helper class `get_report_row_count` method for retrieving row count of custom or system report, without having to retrieve the report content
862
 
863
  For more information see [MDL-74488](https://tracker.moodle.org/browse/MDL-74488)
864
- New `get_deprecated_tables` method in base entity, to be overridden when an entity no longer uses a table (due to column/filter re-factoring, etc) in order to avoid breaking third-party reports
865
 
866
  For more information see [MDL-78118](https://tracker.moodle.org/browse/MDL-78118)
867
- The base report class, used by both `\core_reportbuilder\system_report` and `\core_reportbuilder\datasource`, contains new methods for enhancing report rendering
868
 
869
  * `set_report_action` allows for an action button to belong to your report, and be rendered alongside the filters button;
870
  * `set_report_info_container` allows for content to be rendered by your report, between the action buttons and the table content
871
 
872
  For more information see [MDL-82936](https://tracker.moodle.org/browse/MDL-82936)
873
- The base aggregation class has a new `column_groupby` method, to be implemented in aggregation types to determime whether report tables should group by the fields of the aggregated column
874
 
875
  For more information see [MDL-83361](https://tracker.moodle.org/browse/MDL-83361)
876
- There is a new `date` aggregation type, that can be applied in custom and system reports
877
 
878
  For more information see [MDL-83361](https://tracker.moodle.org/browse/MDL-83361)
879
- The `core_reportbuilder_testcase` class has been moved to new autoloaded `core_reportbuilder\tests\core_reportbuilder_testcase` location, affected tests no longer have to manually require `/reportbuilder/tests/helpers.php`
880
 
881
  For more information see [MDL-84000](https://tracker.moodle.org/browse/MDL-84000)
882
- Columns added to system reports can render help icons in table headers via `[set|get]_help_icon` column instance methods
883
 
884
  For more information see [MDL-84016](https://tracker.moodle.org/browse/MDL-84016)
885
- The `groupconcat[distinct]` aggregation types support optional `'separator'` value to specify the text to display between aggregated items
886
 
887
  For more information see [MDL-84537](https://tracker.moodle.org/browse/MDL-84537)
888
 
889
#### Changed
890
 
891
- The `get_active_conditions` method of the base report class has a new `$checkavailable` parameter to determine whether to check the returned conditions availability
892
 
893
  For more information see [MDL-82809](https://tracker.moodle.org/browse/MDL-82809)
894
- When the `select` filter contains upto two options only then the operator field is removed, switching to a simpler value selection field only (this may affect your Behat scenarios)
895
 
896
  For more information see [MDL-82913](https://tracker.moodle.org/browse/MDL-82913)
897
- Report table instances no longer populate the `countsql` and `countparams` class properties. Instead calling code can access `totalrows` to obtain the same value, or by calling the helper method `report::get_report_row_count`
898
 
899
  For more information see [MDL-83718](https://tracker.moodle.org/browse/MDL-83718)
900
- For columns implementing custom sorting via their `set_is_sortable` method, the specified sort fields must also be part of the columns initially selected fields
901
 
902
  For more information see [MDL-83718](https://tracker.moodle.org/browse/MDL-83718)
903
- The `select` filter type is now stricter in it's filtering, in that it will now discard values that aren't present in available filter options
904
 
905
  For more information see [MDL-84213](https://tracker.moodle.org/browse/MDL-84213)
906
- Aggregation types can access passed options set via the base class constructor in the `$this->options[]` class property. As such, their `format_value` method is no longer static and is always called from an instantiated class instance
907
 
908
  For more information see [MDL-84537](https://tracker.moodle.org/browse/MDL-84537)
909
- New `$options` argument added to the `column::set_aggregation` method for system reports, to set aggregation type-specific options
910
 
911
  Report entities can call new `column::set_aggregation_options` to achieve the same
912
 
913
  For more information see [MDL-84537](https://tracker.moodle.org/browse/MDL-84537)
914
 
915
#### Deprecated
916
 
917
- The `schedule` helper class `get_schedule_report_count` method is now deprecated, existing code should instead use `report::get_report_row_count`
918
 
919
  For more information see [MDL-74488](https://tracker.moodle.org/browse/MDL-74488)
920
- The `render_new_report_button` method of the `core_reportbuilder` renderer has been deprecated. Instead, refer to the report instance `set_report_action` method
921
 
922
  For more information see [MDL-82936](https://tracker.moodle.org/browse/MDL-82936)
923
- Use of the `course_completion` table is deprecated in the `completion` entity, please use `course_completions` instead
924
 
925
  For more information see [MDL-84135](https://tracker.moodle.org/browse/MDL-84135)
926
 
927
#### Removed
928
 
929
- The following deprecated report entity elements have been removed:
930
 
931
  - `comment:context`
932
  - `comment:contexturl`
933
  - `enrolment:method` (plus enrolment formatter `enrolment_name` method)
934
  - `enrolment:role`
935
  - `file:context`
936
  - `file:contexturl`
937
  - `instance:context` (tag)
938
  - `instance:contexturl` (tag)
939
 
940
  Use of the `context` table is also deprecated in the `file` and `instance` (tag) entities
941
 
942
  For more information see [MDL-78118](https://tracker.moodle.org/browse/MDL-78118)
943
- Various Oracle-specific support/workarounds in APIs and component report entities have been removed
944
 
945
  For more information see [MDL-80173](https://tracker.moodle.org/browse/MDL-80173)
946
- Final removal of support for `get_default_table_aliases` method. Entities must now implement `get_default_tables`, which is now abstract, to define the tables they use
947
 
948
  For more information see [MDL-80430](https://tracker.moodle.org/browse/MDL-80430)
949
 
950
### core_repository
951
 
952
#### Removed
953
 
954
- Final removal of base `repository` class method `get_file_size`
955
 
956
  For more information see [MDL-78706](https://tracker.moodle.org/browse/MDL-78706)
957
 
958
### core_sms
959
 
960
#### Added
961
 
962
- Introducing a new function \core_sms\gateway::truncate_message() to truncate SMS message content according to the length limit of the gateway.
963
 
964
  For more information see [MDL-84342](https://tracker.moodle.org/browse/MDL-84342)
965
 
966
### core_tag
967
 
968
#### Changed
969
 
970
- The `core_tag\taglist` class now includes a new property called `displaylink`, which has a default value of `true`. When `displaylink` is set to `true`, the tag name will be displayed as a clickable hyperlink. If `displaylink` is set to `false`, the tag name will be rendered as plain text instead.
971
 
972
  For more information see [MDL-75075](https://tracker.moodle.org/browse/MDL-75075)
973
 
974
### core_user
975
 
976
#### Removed
977
 
978
- Final removal of the following user preference helpers, please use the `core_user/repository` module instead:
979
 
980
  - `user_preference_allow_ajax_update`
981
  - `M.util.set_user_preference`
982
  - `lib/ajax/setuserpref.php`
983
 
984
  For more information see [MDL-79124](https://tracker.moodle.org/browse/MDL-79124)
985
 
986
### aiplacement_courseassist
987
 
988
#### Added
989
 
990
- The `aiplacement_courseassist` templates and CSS have been modified. These changes allow for multiple actions to be nested in a dropdown menu.
991
 
992
  For more information see [MDL-82942](https://tracker.moodle.org/browse/MDL-82942)
993
 
994
### block_site_main_menu
995
 
996
#### Removed
997
 
998
- 'Activity' selector in site_main_menu block has been deleted.
999
 
1000
  For more information see [MDL-83733](https://tracker.moodle.org/browse/MDL-83733)
1001
 
1002
### block_social_activities
1003
 
1004
#### Removed
1005
 
1006
- 'Activity' selector in social_activities block has been deleted.
1007
 
1008
  For more information see [MDL-83733](https://tracker.moodle.org/browse/MDL-83733)
1009
 
1010
### editor_tiny
1011
 
1012
#### Added
1013
 
1014
- New external function `editor_tiny_get_configuration`.
1015
  TinyMCE subplugins can provide configuration to the new external function by implementing the `plugin_with_configuration_for_external` interface and/or overriding the `is_enabled_for_external` method.
1016
 
1017
  For more information see [MDL-84353](https://tracker.moodle.org/browse/MDL-84353)
1018
 
1019
### enrol_guest
1020
 
1021
#### Deprecated
1022
 
1023
- Class enrol_guest_enrol_form is deprecated, use enrol_guest\form\enrol_form instead
1024
 
1025
  For more information see [MDL-84142](https://tracker.moodle.org/browse/MDL-84142)
1026
 
1027
### enrol_self
1028
 
1029
#### Deprecated
1030
 
1031
- Class enrol_self_enrol_form is deprecated, use enrol_self\form\enrol_form instead
1032
 
1033
  For more information see [MDL-84142](https://tracker.moodle.org/browse/MDL-84142)
1034
 
1035
#### Removed
1036
 
1037
- Final removal of `enrol_self_plugin::get_welcome_email_contact` method, please use `enrol_plugin::get_welcome_message_contact` instead
1038
 
1039
  For more information see [MDL-81185](https://tracker.moodle.org/browse/MDL-81185)
1040
 
1041
### format_topics
1042
 
1043
#### Deprecated
1044
 
1045
- In format topics, the section controlmenu class deprecates the get_course_url method. This may affect formats extending the topics format and adding extra items to the section menu. Use $this->format->get_update_url instead.
1046
 
1047
  For more information see [MDL-82767](https://tracker.moodle.org/browse/MDL-82767)
1048
- The get_highlight_control in the section controlmenu class is now deprecated. Use get_section_highlight_item instead
1049
 
1050
  For more information see [MDL-83527](https://tracker.moodle.org/browse/MDL-83527)
1051
 
1052
### gradereport
1053
 
1054
#### Removed
1055
 
1056
- The previously deprecated `grade_report::get_lang_string` method has been removed
1057
 
1058
  For more information see [MDL-78780](https://tracker.moodle.org/browse/MDL-78780)
1059
 
1060
### gradereport_grader
1061
 
1062
#### Deprecated
1063
 
1064
- The method `gradereport_grader::get_right_avg_row()` has been finally deprecated and will now throw an exception if called.
1065
 
1066
  For more information see [MDL-78890](https://tracker.moodle.org/browse/MDL-78890)
1067
 
1068
#### Removed
1069
 
1070
- The `behat_gradereport_grader::get_grade_item_id` step helper has been removed, please use the equivalent `behat_grades` method instead
1071
 
1072
  For more information see [MDL-77107](https://tracker.moodle.org/browse/MDL-77107)
1073
 
1074
### mlbackend_php
1075
 
1076
#### Removed
1077
 
1078
- The plugin `mlbackend_php` has been removed and replaced by `mlbackend_python` as the new default value for the Analytics setting `predictionsprocessor`. The plugin is available at https://github.com/moodlehq/moodle-mlbackend_php.
1079
 
1080
  For more information see [MDL-84107](https://tracker.moodle.org/browse/MDL-84107)
1081
 
1082
### mnetservice
1083
 
1084
#### Deprecated
1085
 
1086
- The plugintype mnetservice was deprecated. MNet has been deprecated for many years now and will be removed.
1087
 
1088
  For more information see [MDL-84311](https://tracker.moodle.org/browse/MDL-84311)
1089
 
1090
### mnetservice_enrol
1091
 
1092
#### Removed
1093
 
1094
- Removed mnetservice_enrol plugin from core
1095
 
1096
  For more information see [MDL-84311](https://tracker.moodle.org/browse/MDL-84311)
1097
 
1098
### mod
1099
 
1100
#### Removed
1101
 
1102
- Remove mod_survey for Moodle 5.0
1103
 
1104
  For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
1105
- Remove mod_chat from Moodle 5.0
1106
 
1107
  For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
1108
 
1109
### mod_assign
1110
 
1111
#### Added
1112
 
1113
- Assign sub-plugins have a new method `assign_plugin::settings_validation` which can be overridden to validate the data when the assignments form is saved.
1114
 
1115
  For more information see [MDL-83440](https://tracker.moodle.org/browse/MDL-83440)
1116
- There is a new method `submission_summary_for_messages()` for submission sub-plugins to summarise what has been submitted for inclusion in confirmation messages to students.
1117
 
1118
  For more information see [MDL-84387](https://tracker.moodle.org/browse/MDL-84387)
1119
- When the assignment activity sends notifications, it now sets more information in the $a object passed to the languages strings for the message subject and body. This is to give more flexibility to people using Language Customisation. The avaiable information is the same as the template context for the two templates in the next paragraph, but without the messagetext/html.
1120
  Also, the overall structure of these messages is now rendered using templates mod_assign/messages/notification_html and mod_assign/messages/notification_html, so they can be overridden by themes. As a result of this, the methods format_notification_message_text and format_notification_message_html (which should have been private to mod_assign and not used anywhere else) have been removed.
1121
 
1122
  For more information see [MDL-84733](https://tracker.moodle.org/browse/MDL-84733)
1123
 
1124
#### Deprecated
1125
 
1126
- The assign_course_index_summary is now deprecated. The assign index is now generated using the mod_assign\course\overview integration class.
1127
 
1128
  For more information see [MDL-83888](https://tracker.moodle.org/browse/MDL-83888)
1129
 
1130
#### Fixed
1131
 
1132
- The unit test for the privacy provider has been marked as final.
1133
 
1134
  A number of core tests had been incorrectly configured to extend this test
1135
  but should instead be extending `\mod_assign\tests\provider_testcase`.
1136
 
1137
  Any community plugins extending the `\mod_assign\privacy\provider_test` test
1138
  class should be updated to extend `\mod_assign\tests\provider_testcase` instead.
1139
 
1140
  For more information see [MDL-81520](https://tracker.moodle.org/browse/MDL-81520)
1141
 
1142
### mod_book
1143
 
1144
#### Deprecated
1145
 
1146
- The method book_get_nav_classes has been finally
1147
  deprecated and will now throw an exception if called.
1148
 
1149
  For more information see [MDL-81328](https://tracker.moodle.org/browse/MDL-81328)
1150
 
1151
### mod_choice
1152
 
1153
#### Changed
1154
 
1155
- The WebService `mod_choice_get_choice_results` has a new parameter `groupid` that allows specifying the group to get the results for. The default behaviour hasn't changed: if a choice has groups and the parameter isn't specified the WebService will return the results for the active group.
1156
 
1157
  For more information see [MDL-78449](https://tracker.moodle.org/browse/MDL-78449)
1158
- The function `choice_get_response_data` has a new parameter that allows specifying the group to get the results for. The default behaviour hasn't changed: if a choice has groups and the parameter isn't used, the function will return the results for the active group.
1159
 
1160
  For more information see [MDL-78449](https://tracker.moodle.org/browse/MDL-78449)
1161
 
1162
### mod_data
1163
 
1164
#### Deprecated
1165
 
1166
- The following unused capabilities have been deprecated:
1167
 
1168
  * `mod/data:comment`
1169
  * `mod/data:managecomments`
1170
 
1171
  For more information see [MDL-84267](https://tracker.moodle.org/browse/MDL-84267)
1172
 
1173
#### Removed
1174
 
1175
- Final deprecation and removal of the following classes:
1176
    - data_preset_importer
1177
    - data_preset_existing_importer
1178
    - data_preset_upload_importer
1179
    - data_import_preset_zip_form
1180
 
1181
  For more information see [MDL-75189](https://tracker.moodle.org/browse/MDL-75189)
1182
- - Final deprecation of \mod_data_renderer::import_setting_mappings(). Please use \mod_data_renderer::importing_preset() instead. - Final deprecation of data_print_template() function. Please use mod_data\manager::get_template and mod_data\template::parse_entries instead. - Final deprecation of data_preset_name(). Please use preset::get_name_from_plugin() instead. - Final deprecation of data_get_available_presets(). Please use manager::get_available_presets() instead. - Final deprecation of data_get_available_site_presets(). Please use manager::get_available_saved_presets() instead. - Final deprecation of data_delete_site_preset(). Please use preset::delete() instead. - Final deprecation of is_directory_a_preset(). Please use preset::is_directory_a_preset() instead. - Final deprecation of data_presets_save(). Please use preset::save() instead. - Final deprecation of data_presets_generate_xml(). Please use preset::generate_preset_xml() instead. - Final deprecation of data_presets_export(). Please use preset::export() instead. - Final deprecation of data_user_can_delete_preset(). Please use preset::can_manage() instead. - Final deprecation of data_view(). Please use mod_data\manager::set_module_viewed() instead.
1183
 
1184
  For more information see [MDL-75189](https://tracker.moodle.org/browse/MDL-75189)
1185
 
1186
### mod_feedback
1187
 
1188
#### Added
1189
 
1190
- Added new `mod_feedback_questions_reorder` external function
1191
 
1192
  For more information see [MDL-81745](https://tracker.moodle.org/browse/MDL-81745)
1193
 
1194
#### Deprecated
1195
 
1196
- The 'mode' parameter has been deprecated from 'edit_template_action_bar' and 'templates_table' contructors.
1197
 
1198
  For more information see [MDL-81744](https://tracker.moodle.org/browse/MDL-81744)
1199
 
1200
#### Removed
1201
 
1202
- The 'use_template' template has been removed as it is not needed anymore.
1203
 
1204
  For more information see [MDL-81744](https://tracker.moodle.org/browse/MDL-81744)
1205
 
1206
### mod_folder
1207
 
1208
#### Removed
1209
 
1210
- Method htmllize_tree() has been removed. Please use renderable_tree_elements instead
1211
 
1212
  For more information see [MDL-79214](https://tracker.moodle.org/browse/MDL-79214)
1213
 
1214
### mod_h5pactivity
1215
 
1216
#### Changed
1217
 
1218
- The external function get_user_attempts now returns the total number of attempts.
1219
 
1220
  For more information see [MDL-82775](https://tracker.moodle.org/browse/MDL-82775)
1221
 
1222
### mod_imscp
1223
 
1224
#### Removed
1225
 
1226
- Final removal of deprecated `imscp_libxml_disable_entity_loader` function
1227
 
1228
  For more information see [MDL-78635](https://tracker.moodle.org/browse/MDL-78635)
1229
 
1230
### mod_lesson
1231
 
1232
#### Removed
1233
 
1234
- Remove unused /mod/lesson/tabs.php
1235
 
1236
  For more information see [MDL-82937](https://tracker.moodle.org/browse/MDL-82937)
1237
 
1238
### mod_lti
1239
 
1240
#### Removed
1241
 
1242
- Final removal of deprecated `lti_libxml_disable_entity_loader` function
1243
 
1244
  For more information see [MDL-78635](https://tracker.moodle.org/browse/MDL-78635)
1245
 
1246
### mod_quiz
1247
 
1248
#### Added
1249
 
1250
- quiz_attempt now has 2 additional state values, NOT_STARTED and SUBMITTED. These represent attempts when an attempt has been
1251
 
1252
  For more information see [MDL-68806](https://tracker.moodle.org/browse/MDL-68806)
1253
- New quiz setting "precreateperiod" controls the period before timeopen during which attempts will be pre-created using the new
1254
  NOT_STARTED state. This setting is marked advanced and locked by default, so can only be set by administrators. This setting
1255
  is read by the \mod_quiz\task\precreate_attempts task to identify quizzes due for pre-creation.
1256
 
1257
  For more information see [MDL-68806](https://tracker.moodle.org/browse/MDL-68806)
1258
 
1259
#### Changed
1260
 
1261
- quiz_attempt_save_started now sets the IN_PROGRESS state, timestarted, and saves the attempt, while the new quiz_attempt_save_not_started function sets the NOT_STARTED state and saves the attempt.
1262
 
1263
  For more information see [MDL-68806](https://tracker.moodle.org/browse/MDL-68806)
1264
- quiz_attempt_save_started Now takes an additional $timenow parameter, to specify the timestart of the attempt. This was previously
1265
  set in quiz_create_attempt, but is now set in quiz_attempt_save_started and quiz_attempt_save_not_started.
1266
 
1267
  For more information see [MDL-68806](https://tracker.moodle.org/browse/MDL-68806)
1268
- The `quiz_question_tostring` method now includes a new boolean parameter, `displaytaglink`. This parameter specifies whether the tag name in the question bank should be displayed as a clickable hyperlink (`true`) or as plain text (`false`).
1269
 
1270
  For more information see [MDL-75075](https://tracker.moodle.org/browse/MDL-75075)
1271
- The `\mod_quiz\attempt_walkthrough_from_csv_test` unit test has been marked as final and should not be extended by other tests.
1272
 
1273
  All shared functionality has been moved to a new autoloadable test-case:
1274
  `\mod_quiz\tests\attempt_walkthrough_testcase`.
1275
 
1276
  To support this testcase the existing `$files` instance property should be replaced with a new static method, `::get_test_files`.
1277
  Both the existing instance property and the new static method can co-exist.
1278
 
1279
  For more information see [MDL-81521](https://tracker.moodle.org/browse/MDL-81521)
1280
 
1281
#### Deprecated
1282
 
1283
- quiz_attempt::process_finish is now deprecated, and its functionality is split between ::process_submit, which saves the
1284
  submission, sets the finish time and sets the SUBMITTED status, and ::process_grade_submission which performs automated
1285
  grading and sets the FINISHED status.
1286
 
1287
  For more information see [MDL-68806](https://tracker.moodle.org/browse/MDL-68806)
1288
- The webservice function `mod_quiz_get_user_attempts` is now deprecated in favour of `mod_quiz_get_user_quiz_attempts`.
1289
 
1290
  With the introduction of the new NOT_STARTED quiz attempt state, `mod_quiz_get_user_attempts` has been modified to not return NOT_STARTED attempts, allowing clients such as the mobile app to continue working without modifications.
1291
 
1292
  `mod_quiz_get_user_quiz_attempts` will return attempts in all states, as `mod_quiz_get_user_attempts` did before. Once clients are updated to handle NOT_STARTED attempts, they can migrate to use this function.
1293
 
1294
  A minor modification to `mod_quiz_start_attempt` has been made to allow it to transparently start an existing attempt that is in the NOT_STARTED state, rather than creating a new one.
1295
 
1296
  For more information see [MDL-68806](https://tracker.moodle.org/browse/MDL-68806)
1297
 
1298
#### Removed
1299
 
1300
- Final removal of quiz_delete_override() and quiz_delete_all_overrides()
1301
 
1302
  For more information see [MDL-80944](https://tracker.moodle.org/browse/MDL-80944)
1303
 
1304
### mod_wiki
1305
 
1306
#### Removed
1307
 
1308
- Final deprecation of mod_wiki_renderer\wiki_info()
1309
 
1310
  For more information see [MDL-78926](https://tracker.moodle.org/browse/MDL-78926)
1311
 
1312
### qbank
1313
 
1314
#### Removed
1315
 
1316
- Final deprecation of:
1317
    - qbank_managecategories\output\renderer::class
1318
    - qbank_statistics\helper::calculate_average_question_discriminative_efficiency()
1319
    - qbank_statistics\helper::calculate_average_question_discrimination_index()
1320
    - qbank_statistics\helper::get_all_places_where_questions_were_attempted()
1321
    - qbank_statistics\helper::calculate_average_question_stats_item()
1322
    - qbank_statistics\helper::calculate_average_question_facility()
1323
    - qbank_statistics\helper::load_statistics_for_place()
1324
    - qbank_statistics\helper::extract_item_value()
1325
    - template qbank_managecategories/category_condition_advanced
1326
    - template qbank_managecategories/category_condition
1327
    - template qbank_managecategories/listitem
1328
 
1329
  For more information see [MDL-78090](https://tracker.moodle.org/browse/MDL-78090)
1330
 
1331
### qbank_bulkmove
1332
 
1333
#### Deprecated
1334
 
1335
- qbank_bulkmove/helper::get_displaydata
1336
 
1337
  Superceded by a modal and webservice, see qbank_bulkmove/modal_question_bank_bulkmove and core_question_external\move_questions
1338
 
1339
  For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
1340
- qbank_bulkmove\output\renderer::render_bulk_move_form
1341
 
1342
  Superceded by qbank_bulkmove\output\bulk_move
1343
 
1344
  For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
1345
 
1346
### report_insights
1347
 
1348
#### Removed
1349
 
1350
- report_insights_set_notuseful_prediction() external function has been fully removed.
1351
 
1352
  For more information see [MDL-84036](https://tracker.moodle.org/browse/MDL-84036)
1353
- report_insights_set_fixed_prediction() external function has been fully removed.
1354
 
1355
  For more information see [MDL-84036](https://tracker.moodle.org/browse/MDL-84036)
1356
 
1357
### report_log
1358
 
1359
#### Removed
1360
 
1361
- Support for the $grouplist public member in the report_log_renderable class has been removed.
1362
 
1363
  For more information see [MDL-81155](https://tracker.moodle.org/browse/MDL-81155)
1364
 
1365
### theme_boost
1366
 
1367
#### Changed
1368
 
1369
- From now on, themes can customise the activity icon colours using simple CSS variables. The new variables are $activity-icon-administration-bg, $activity-icon-assessment-bg, $activity-icon-collaboration-bg, $activity-icon-communication-bg, $activity-icon-content-bg, $activity-icon-interactivecontent-bg. All previous `$activity-icon-*-filter` elements can be removed, as they are no longer in use.
1370
 
1371
  For more information see [MDL-83725](https://tracker.moodle.org/browse/MDL-83725)
1372
 
1373
#### Deprecated
1374
 
1375
- Added new bs4-compat SCSS file (initially deprecated) to help third-party plugins the migration process from BS4 to BS5
1376
 
1377
  For more information see [MDL-80519](https://tracker.moodle.org/browse/MDL-80519)
1378
- New `theme_boost/bs4-compat` JS module added (directly deprecated) to allow third-party-plugins to directly convert old Bootstrap 4 data attribute syntax to the new Bootstrap 5
1379
 
1380
  For more information see [MDL-84450](https://tracker.moodle.org/browse/MDL-84450)
1381
 
1382
#### Removed
1383
 
1384
- Remove SCSS deprecated in 4.4
1385
 
1386
  For more information see [MDL-80156](https://tracker.moodle.org/browse/MDL-80156)
1387
- Remove chat and survey styles. Important note: the styles have been moved to the plugins as CSS files (and not SCSS) so themes might now need to override the mod_chat and mod_survey styles specifically as css does not have any definition for primary, gray and other colors accessible in the original scss version.
1388
 
1389
  For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
1390
 
1391
### tool_admin_presets
1392
 
1393
#### Deprecated
1394
 
1395
- behat_admin_presets::following_in_the_should_download_between_and_bytes is deprecated. Use: the following element should download a file that:
1396
 
1397
  For more information see [MDL-83035](https://tracker.moodle.org/browse/MDL-83035)
1398
 
1399
### tool_behat
1400
 
1401
#### Added
1402
 
1403
- New Behat step `\behat_general::the_url_should_match()` has been added to allow checking the current URL. You can use it to check whether a user has been redirected to the expected location.
1404
  e.g. `And the url should match "/mod/forum/view\.php\?id=[0-9]+"`
1405
 
1406
  For more information see [MDL-83617](https://tracker.moodle.org/browse/MDL-83617)
1407
 
1408
### tool_brickfield
1409
 
1410
#### Deprecated
1411
 
1412
- tool_brickfield\local\areas\core_question\answerbase::find_system_areas
1413
 
1414
  No replacement. System context no longer a valid context to assign a question category
1415
 
1416
  For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
1417
- tool_brickfield\local\areas\core_question\base::find_system_areas
1418
 
1419
  No replacement. System context no longer a valid context to assign a question category
1420
 
1421
  For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
1422
 
1423
#### Removed
1424
 
1425
- Remove chat and survey support from tool_brickfield.
1426
 
1427
  For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
1428
 
1429
### tool_lp
1430
 
1431
#### Deprecated
1432
 
1433
- behat_tool_lp_data_generators::the_following_lp_exist is deprecated. Use the following "core_competency > [competency|framework|plan...]" exist:
1434
 
1435
  For more information see [MDL-82866](https://tracker.moodle.org/browse/MDL-82866)
1436
 
1437
### tool_mfa
1438
 
1439
#### Added
1440
 
1441
- The new factor management table uses `plugin_management_table`, so not only the functions that changed, but the file needs to be moved from `admin/tool/mfa/classes/local/admin_setting_managemfa.php` to `admin/tool/mfa/classes/table/admin_setting_managemfa.php`
1442
 
1443
  For more information see [MDL-83516](https://tracker.moodle.org/browse/MDL-83516)
1444
- Introduce the new language string `settings:shortdescription`, which is mandatory for each factor.
1445
 
1446
  For more information see [MDL-83516](https://tracker.moodle.org/browse/MDL-83516)
1447
 
1448
#### Deprecated
1449
 
1450
- The two language strings in the tool_mfa plugin, namely `inputrequired` and `setuprequired`, are deprecated.
1451
 
1452
  For more information see [MDL-83516](https://tracker.moodle.org/browse/MDL-83516)
1453
 
1454
#### Removed
1455
 
1456
- The previously deprecated `setup_factor` renderer method has been removed
1457
 
1458
  For more information see [MDL-80995](https://tracker.moodle.org/browse/MDL-80995)
1459
 
1460
### tool_mobile
1461
 
1462
#### Removed
1463
 
1464
- Remove chat and survey support from tool_mobile.
1465
 
1466
  For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
1467
 
1468
## 4.5
1469
 
1470
### core
1471
 
1472
#### Added
1473
 
1474
- A new method, `\core_user::get_name_placeholders()`, has been added to return an array of user name fields.
1475
 
1476
  For more information see [MDL-64148](https://tracker.moodle.org/browse/MDL-64148)
1477
- The following classes have been renamed and now support autoloading.
1478
  Existing classes are currently unaffected.
1479
 
1480
  | Old class name     | New class name     |
1481
  | ---                | ---                |
1482
  | `\core_component`  | `\core\component`  |
1483
 
1484
  For more information see [MDL-66903](https://tracker.moodle.org/browse/MDL-66903)
1485
- Added the ability for unit tests to autoload classes in the `\[component]\tests\`
1486
  namespace from the `[path/to/component]/tests/classes` directory.
1487
 
1488
  For more information see [MDL-66903](https://tracker.moodle.org/browse/MDL-66903)
1489
- Added a helper to load fixtures from a components `tests/fixtures/` folder:
1490
 
1491
  ```php
1492
  advanced_testcase::load_fixture(string $component, string $fixture): void;
1493
  ```
1494
 
1495
  For more information see [MDL-66903](https://tracker.moodle.org/browse/MDL-66903)
1496
- Redis session cache has been improved to make a single call where two were used before.
1497
 
1498
  For more information see [MDL-69684](https://tracker.moodle.org/browse/MDL-69684)
1499
- Added stored progress bars
1500
 
1501
  For more information see [MDL-70854](https://tracker.moodle.org/browse/MDL-70854)
1502
- Two new functions have been introduced in the `\moodle_database` class:
1503
  - `\moodle_database::get_counted_records_sql()`
1504
  - `\moodle_database::get_counted_recordset_sql()`
1505
 
1506
  These methods are compatible with all databases.
1507
 
1508
  They will check the current running database engine and apply the `COUNT` window function if it is supported,
1509
  otherwise, they will use the usual `COUNT` function.
1510
 
1511
  The `COUNT` window function optimization is applied to the following databases:
1512
  - PostgreSQL
1513
  - MariaDB
1514
  - Oracle
1515
 
1516
  Note: MySQL and SQL Server do not use this optimization due to insignificant performance differences before and
1517
  after the improvement.
1518
 
1519
  For more information see [MDL-78030](https://tracker.moodle.org/browse/MDL-78030)
1520
- The `after_config()` callback has been converted to a hook, `\core\hook\after_config`.
1521
 
1522
  For more information see [MDL-79011](https://tracker.moodle.org/browse/MDL-79011)
1523
- The `\core\output\select_menu` widget now supports rendering dividers between menu options. Empty elements (`null` or empty strings) within the array of options are considered and rendered as dividers in the dropdown menu.
1524
 
1525
  For more information see [MDL-80747](https://tracker.moodle.org/browse/MDL-80747)
1526
- The `\core\output\select_menu` widget now supports a new feature: inline labels. You can render the label inside the combobox widget by passing `true` to the `$inlinelabel` parameter when calling the `->set_label()` method.
1527
 
1528
  For more information see [MDL-80747](https://tracker.moodle.org/browse/MDL-80747)
1529
- A new hook called `\core\hook\output\after_http_headers` has been created. This hook allow plugins to modify the content after headers are sent.
1530
 
1531
  For more information see [MDL-80890](https://tracker.moodle.org/browse/MDL-80890)
1532
- The following classes have been renamed.
1533
  Existing classes are currently unaffected.
1534
 
1535
  | Old class name  | New class name  |
1536
  | ---             | ---             |
1537
  | `\core_user`    | `\core\user`    |
1538
 
1539
  For more information see [MDL-81031](https://tracker.moodle.org/browse/MDL-81031)
1540
- New DML constant `SQL_INT_MAX` to define the size of a large integer with cross database platform support.
1541
 
1542
  For more information see [MDL-81282](https://tracker.moodle.org/browse/MDL-81282)
1543
- Added a new `exception` L2 Namespace to APIs.
1544
 
1545
  For more information see [MDL-81903](https://tracker.moodle.org/browse/MDL-81903)
1546
- Added a mechanism to support autoloading of legacy class files.
1547
  This will help to reduce the number of `require_once` calls in the codebase, and move away from the use of monolithic libraries.
1548
 
1549
  For more information see [MDL-81919](https://tracker.moodle.org/browse/MDL-81919)
1550
- The following exceptions are now also available in the `\core\exception` namespace:
1551
 
1552
    - `\coding_exception`
1553
    - `\file_serving_exception`
1554
    - `\invalid_dataroot_permissions`
1555
    - `\invalid_parameter_exception`
1556
    - `\invalid_response_exception`
1557
    - `\invalid_state_exception`
1558
    - `\moodle_exception`
1559
    - `\require_login_exception`
1560
    - `\require_login_session_timeout_exception`
1561
    - `\required_capability_exception`
1562
    - `\webservice_parameter_exception`
1563
 
1564
  For more information see [MDL-81919](https://tracker.moodle.org/browse/MDL-81919)
1565
- The following classes are now also available in the `\core\` namespace and support autoloading:
1566
 
1567
  | Old class name       | New class name            |
1568
  | ---                  | ---                       |
1569
  | `\emoticon_manager`  | `\core\emoticon_manager`  |
1570
  | `\lang_string`       | `\core\lang_string`       |
1571
 
1572
  For more information see [MDL-81920](https://tracker.moodle.org/browse/MDL-81920)
1573
- The following classes have been renamed and now support autoloading.
1574
  Existing classes are currently unaffected.
1575
 
1576
  | Old class name               | New class name                                          |
1577
  | ---                          | ---                                                     |
1578
  | `\moodle_url`                | `\core\url`                                             |
1579
  | `\progress_trace`            | `\core\output\progress_trace`                           |
1580
  | `\combined_progress_trace`   | `\core\output\progress_trace\combined_progress_trace`   |
1581
  | `\error_log_progress_trace`  | `\core\output\progress_trace\error_log_progress_trace`  |
1582
  | `\html_list_progress_trace`  | `\core\output\progress_trace\html_list_progress_trace`  |
1583
  | `\html_progress_trace`       | `\core\output\progress_trace\html_progress_trace`       |
1584
  | `\null_progress_trace`       | `\core\output\progress_trace\null_progress_trace`       |
1585
  | `\progress_trace_buffer`     | `\core\output\progress_trace\progress_trace_buffer`     |
1586
  | `\text_progress_trace`       | `\core\output\progress_trace\text_progress_trace`       |
1587
 
1588
  For more information see [MDL-81960](https://tracker.moodle.org/browse/MDL-81960)
1589
- The following classes are now also available in the following new
1590
  locations. They will continue to work in their old locations:
1591
 
1592
  | Old classname                              | New classname                                                      |
1593
  | ---                                        | ---                                                                |
1594
  | `\action_link`                             | `\core\output\action_link`                                         |
1595
  | `\action_menu_filler`                      | `\core\output\action_menu\filler`                                  |
1596
  | `\action_menu_link_primary`                | `\core\output\action_menu\link_primary`                            |
1597
  | `\action_menu_link_secondary`              | `\core\output\action_menu\link_secondary`                          |
1598
  | `\action_menu_link`                        | `\core\output\action_menu\link`                                    |
1599
  | `\action_menu`                             | `\core\output\action_menu`                                         |
1600
  | `\block_contents`                          | `\core_block\output\block_contents`                                |
1601
  | `\block_move_target`                       | `\core_block\output\block_move_target`                             |
1602
  | `\component_action`                        | `\core\output\actions\component_action`                            |
1603
  | `\confirm_action`                          | `\core\output\actions\confirm_action`                              |
1604
  | `\context_header`                          | `\core\output\context_header`                                      |
1605
  | `\core\output\local\action_menu\subpanel`  | `\core\output\action_menu\subpanel`                                |
1606
  | `\core_renderer_ajax`                      | `\core\output\core_renderer_ajax`                                  |
1607
  | `\core_renderer_cli`                       | `\core\output\core_renderer_cli`                                   |
1608
  | `\core_renderer_maintenance`               | `\core\output\core_renderer_maintenance`                           |
1609
  | `\core_renderer`                           | `\core\output\core_renderer`                                       |
1610
  | `\custom_menu_item`                        | `\core\output\custom_menu_item`                                    |
1611
  | `\custom_menu`                             | `\core\output\custom_menu`                                         |
1612
  | `\file_picker`                             | `\core\output\file_picker`                                         |
1613
  | `\flexible_table`                          | `\core_table\flexible_table`                                       |
1614
  | `\fragment_requirements_manager`           | `\core\output\requirements\fragment_requirements_manager`          |
1615
  | `\help_icon`                               | `\core\output\help_icon`                                           |
1616
  | `\html_table_cell`                         | `\core_table\output\html_table_cell`                               |
1617
  | `\html_table_row`                          | `\core_table\output\html_table_row`                                |
1618
  | `\html_table`                              | `\core_table\output\html_table`                                    |
1619
  | `\html_writer`                             | `\core\output\html_writer`                                         |
1620
  | `\image_icon`                              | `\core\output\image_icon`                                          |
1621
  | `\initials_bar`                            | `\core\output\initials_bar`                                        |
1622
  | `\js_writer`                               | `\core\output\js_writer`                                           |
1623
  | `\page_requirements_manager`               | `\core\output\requirements\page_requirements_manager`              |
1624
  | `\paging_bar`                              | `\core\output\paging_bar`                                          |
1625
  | `\pix_emoticon`                            | `\core\output\pix_emoticon`                                        |
1626
  | `\pix_icon_font`                           | `\core\output\pix_icon_font`                                       |
1627
  | `\pix_icon_fontawesome`                    | `\core\output\pix_icon_fontawesome`                                |
1628
  | `\pix_icon`                                | `\core\output\pix_icon`                                            |
1629
  | `\plugin_renderer_base`                    | `\core\output\plugin_renderer_base`                                |
1630
  | `\popup_action`                            | `\core\output\actions\popup_action`                                |
1631
  | `\preferences_group`                       | `\core\output\preferences_group`                                   |
1632
  | `\preferences_groups`                      | `\core\output\preferences_groups`                                  |
1633
  | `\progress_bar`                            | `\core\output\progress_bar`                                        |
1634
  | `\renderable`                              | `\core\output\renderable`                                          |
1635
  | `\renderer_base`                           | `\core\output\renderer_base`                                       |
1636
  | `\renderer_factory_base`                   | `\core\output\renderer_factory\renderer_factory_base`              |
1637
  | `\renderer_factory`                        | `\core\output\renderer_factory\renderer_factory_interface`         |
1638
  | `\single_button`                           | `\core\output\single_button`                                       |
1639
  | `\single_select`                           | `\core\output\single_select`                                       |
1640
  | `\standard_renderer_factory`               | `\core\output\renderer_factory\standard_renderer_factory`          |
1641
  | `\table_dataformat_export_format`          | `\core_table\dataformat_export_format`                             |
1642
  | `\table_default_export_format_parent`      | `\core_table\base_export_format`                                   |
1643
  | `\table_sql`                               | `\core_table\sql_table`                                            |
1644
  | `\tabobject`                               | `\core\output\tabobject`                                           |
1645
  | `\tabtree`                                 | `\core\output\tabtree`                                             |
1646
  | `\templatable`                             | `\core\output\templatable`                                         |
1647
  | `\theme_config`                            | `\core\output\theme_config`                                        |
1648
  | `\theme_overridden_renderer_factory`       | `\core\output\renderer_factory\theme_overridden_renderer_factory`  |
1649
  | `\url_select`                              | `\core\output\url_select`                                          |
1650
  | `\user_picture`                            | `\core\output\user_picture`                                        |
1651
  | `\xhtml_container_stack`                   | `\core\output\xhtml_container_stack`                               |
1652
  | `\YUI_config`                              | `\core\output\requirements\yui`                                    |
1653
 
1654
  For more information see [MDL-82183](https://tracker.moodle.org/browse/MDL-82183)
1655
- A new method, `\core\output\::get_deprecated_icons()`, has been added to the `icon_system` class. All deprecated icons should be registered through this method.
1656
  Plugins can implement a callback to `pluginname_get_deprecated_icons()` to register their deprecated icons too.
1657
  When `$CFG->debugpageinfo` is enabled, a console message will display a list of the deprecated icons.
1658
 
1659
  For more information see [MDL-82212](https://tracker.moodle.org/browse/MDL-82212)
1660
- Two new optional parameters have been added to the `\core\output\notification` constructor:
1661
  - `null|string $title` - `null|string $icon`
1662
 
1663
  For more information see [MDL-82297](https://tracker.moodle.org/browse/MDL-82297)
1664
- A new method, `\url_select::set_disabled_option()`, has been added to enable or disable an option from its url (the key for the option).
1665
 
1666
  For more information see [MDL-82490](https://tracker.moodle.org/browse/MDL-82490)
1667
- A new static method, `\advanced_testcase::get_fixture_path()`, has been added to enable unit tests to fetch the path to a fixture.
1668
 
1669
  For more information see [MDL-82627](https://tracker.moodle.org/browse/MDL-82627)
1670
- A new static method, `\advanced_testcase::get_mocked_http_client()`, has been added to allow unit tests to mock the `\core\http_client` and update the DI container.
1671
 
1672
  For more information see [MDL-82627](https://tracker.moodle.org/browse/MDL-82627)
1673
- The Moodle autoloader should now be registered using `\core\component::register_autoloader` rather than manually doing so in any exceptional location which requires it.
1674
  Note: It is not normally necessary to include the autoloader manually, as it is registered automatically when the Moodle environment is bootstrapped.
1675
 
1676
  For more information see [MDL-82747](https://tracker.moodle.org/browse/MDL-82747)
1677
- A new JS module for interacting with the Routed REST API has been introduced.
1678
  For more information see the documentation in the `core/fetch` module.
1679
 
1680
  For more information see [MDL-82778](https://tracker.moodle.org/browse/MDL-82778)
1681
- The `\section_info` class now includes a new method `\section_info::get_sequence_cm_infos()` that retrieves all `\cm_info` instances associated with the course section.
1682
 
1683
  For more information see [MDL-82845](https://tracker.moodle.org/browse/MDL-82845)
1684
- When rendering a renderable located within a namespace, the namespace
1685
  will now be included in the renderer method name with double-underscores
1686
  separating the namespace parts.
1687
 
1688
  Note: Only those renderables within an `output` namespace will be
1689
  considered, for example `\core\output\action_menu\link` and only the
1690
  parts of the namespace after `output` will be included.
1691
 
1692
  The following are examples of the new behaviour:
1693
 
1694
  | Renderable name                          | Renderer method name                |
1695
  | ---                                      | ---                                 |
1696
  | `\core\output\action_menu\link`          | `render_action_menu__link`          |
1697
  | `\core\output\action_menu\link_primary`  | `render_action_menu__link_primary`  |
1698
  | `\core\output\action\menu\link`          | `render_action__menu__link`         |
1699
  | `\core\output\user_menu\link`            | `render_user_menu__link`            |
1700
 
1701
  For more information see [MDL-83164](https://tracker.moodle.org/browse/MDL-83164)
1702
 
1703
#### Changed
1704
 
1705
- The minimum Redis server version is now 2.6.12. The minimum PHP Redis extension version is now 2.2.4.
1706
 
1707
  For more information see [MDL-69684](https://tracker.moodle.org/browse/MDL-69684)
1708
- The class autoloader has been moved to an earlier point in the Moodle bootstrap.
1709
 
1710
  Autoloaded classes are now available to scripts using the `ABORT_AFTER_CONFIG` constant.
1711
 
1712
  For more information see [MDL-80275](https://tracker.moodle.org/browse/MDL-80275)
1713
- The `\core\dataformat::get_format_instance()` method is now public, and can be used to retrieve a writer instance for a given dataformat.
1714
 
1715
  For more information see [MDL-81781](https://tracker.moodle.org/browse/MDL-81781)
1716
- The `\get_home_page()` function can now return new constant `HOMEPAGE_URL`, applicable when a third-party hook has extended the default homepage options for the site.
1717
 
1718
  A new function, `\get_default_home_page_url()` has been added which will return the correct URL when this constant is returned.
1719
 
1720
  For more information see [MDL-82066](https://tracker.moodle.org/browse/MDL-82066)
1721
 
1722
#### Deprecated
1723
 
1724
- The following method has been deprecated and should no longer be used: `reset_password_and_mail`. Please consider using `setnew_password_and_mail` as a replacement.
1725
 
1726
  For more information see [MDL-64148](https://tracker.moodle.org/browse/MDL-64148)
1727
- - The following methods have been finally deprecated and removed:
1728
    - `\plagiarism_plugin::get_configs()`
1729
    - `\plagiarism_plugin::get_file_results()`
1730
    - `\plagiarism_plugin::update_status()`, please use `{plugin name}_before_standard_top_of_body_html` instead.
1731
  - Final deprecation and removal of `\plagiarism_get_file_results()`. Please use `\plagiarism_get_links()` instead.
1732
  - Final deprecation and removal of `\plagiarism_update_status()`. Please use `\{plugin name}_before_standard_top_of_body_html()` instead.
1733
 
1734
  For more information see [MDL-71326](https://tracker.moodle.org/browse/MDL-71326)
1735
- `\moodle_list` and `\list_item` were only used by `qbank_managecategories`, and these usages have been removed, so these classes, and the `lib/listlib.php` file have now been deprecated. This method was the only usage of the `QUESTION_PAGE_LENGTH` constant, which was defined in `question_category_object.php`, and so is also now deprecated.
1736
 
1737
  For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
1738
- The `$timeout` property of the `\navigation_cache` class has been deprecated.
1739
 
1740
  For more information see [MDL-79628](https://tracker.moodle.org/browse/MDL-79628)
1741
- The following classes are deprecated as they are handled by core_sms API and smsgateway_aws plugin:
1742
  - `\core\aws\admin_settings_aws_region`
1743
  - `\core\aws\aws_helper`
1744
  - `\core\aws\client_factory`
1745
 
1746
  For more information see [MDL-80962](https://tracker.moodle.org/browse/MDL-80962)
1747
- The following methods have been deprecated, existing usage should switch to use the secure `\core\encryption::encrypt()` and `\core\encryption::decrypt()` static methods:
1748
 
1749
  - `\rc4encrypt()`
1750
  - `\rc4decrypt()`
1751
  - `\endecrypt()`
1752
 
1753
  For more information see [MDL-81940](https://tracker.moodle.org/browse/MDL-81940)
1754
- The following method has been deprecated and should not be used any longer: `\print_grade_menu()`.
1755
 
1756
  For more information see [MDL-82157](https://tracker.moodle.org/browse/MDL-82157)
1757
- The following files and their contents have been deprecated:
1758
 
1759
  - `lib/soaplib.php`
1760
  - `lib/tokeniserlib.php`
1761
 
1762
  For more information see [MDL-82191](https://tracker.moodle.org/browse/MDL-82191)
1763
- The following functions have been initially deprecated:
1764
 
1765
  - `\get_core_subsystems()`
1766
  - `\get_plugin_types()`
1767
  - `\get_plugin_list()`
1768
  - `\get_plugin_list_with_class()`
1769
  - `\get_plugin_directory()`
1770
  - `\normalize_component()`
1771
  - `\get_component_directory()`
1772
  - `\get_context_instance()`
1773
 
1774
  Note: These methods have been deprecated for a long time, but previously did not emit any deprecation notice.
1775
 
1776
  For more information see [MDL-82287](https://tracker.moodle.org/browse/MDL-82287)
1777
- The following methods have been finally deprecated and will now throw an exception if called:
1778
 
1779
  - `\get_context_instance()`
1780
  - `\can_use_rotated_text()`
1781
  - `\get_system_context()`
1782
  - `\print_arrow()`
1783
 
1784
  For more information see [MDL-82287](https://tracker.moodle.org/browse/MDL-82287)
1785
- The `global_navigation::load_section_activities` method is now deprecated and replaced by `global_navigation::load_section_activities_navigation`.
1786
 
1787
  For more information see [MDL-82845](https://tracker.moodle.org/browse/MDL-82845)
1788
- The following renderer methods have been deprecated from the core
1789
  renderer:
1790
 
1791
  | method                               | replacement                           |
1792
  | ---                                  | ---                                   |
1793
  | `render_action_menu_link`            | `render_action_menu__link`            |
1794
  | `render_action_menu_link_primary`    | `render_action_menu__link_primary`    |
1795
  | `render_action_menu_link_secondary`  | `render_action_menu__link_secondary`  |
1796
  | `render_action_menu_filler`          | `render_action_menu__filler`          |
1797
 
1798
  For more information see [MDL-83164](https://tracker.moodle.org/browse/MDL-83164)
1799
 
1800
#### Removed
1801
 
1802
- The previously deprecated function `search_generate_text_SQL` has been removed and can no longer be used.
1803
 
1804
  For more information see [MDL-48940](https://tracker.moodle.org/browse/MDL-48940)
1805
- The previously deprecated function `\core_text::reset_caches()` has been removed and can no longer be used.
1806
 
1807
  For more information see [MDL-71748](https://tracker.moodle.org/browse/MDL-71748)
1808
- The following previously deprecated methods have been removed and can no longer be used:
1809
    - `\renderer_base::should_display_main_logo()`
1810
 
1811
  For more information see [MDL-73165](https://tracker.moodle.org/browse/MDL-73165)
1812
- Final deprecation of `\print_error()`. Please use the `\moodle_exception` class instead.
1813
 
1814
  For more information see [MDL-74484](https://tracker.moodle.org/browse/MDL-74484)
1815
- Final deprecation of `\core\task\manager::ensure_adhoc_task_qos()`.
1816
 
1817
  For more information see [MDL-74843](https://tracker.moodle.org/browse/MDL-74843)
1818
- Support for the deprecated block and activity namespaces `<component>\local\views\secondary`, which supported the overriding of secondary navigation, has now been entirely removed.
1819
 
1820
  For more information see [MDL-74939](https://tracker.moodle.org/browse/MDL-74939)
1821
- Remove deprecation layer for YUI JS Events. The deprecation layer was introduced with MDL-70990 and MDL-72291.
1822
 
1823
  For more information see [MDL-77167](https://tracker.moodle.org/browse/MDL-77167)
1824
 
1825
#### Fixed
1826
 
1827
- The `\navigation_cache` class now uses the Moodle Universal Cache (MUC) to store the navigation cache data instead of storing it in the global `$SESSION` variable.
1828
 
1829
  For more information see [MDL-79628](https://tracker.moodle.org/browse/MDL-79628)
1830
- All the `setUp()` and `tearDown()` methods of `PHPUnit` now are required to, always, call to their parent counterparts. This is a good practice to avoid future problems, especially when updating to PHPUnit >= 10.
1831
  This includes the following methods:
1832
    - `setUp()`
1833
    - `tearDown()`
1834
    - `setUpBeforeClass()`
1835
    - `tearDownAfterClass()`
1836
 
1837
  For more information see [MDL-81523](https://tracker.moodle.org/browse/MDL-81523)
1838
- Use server timezone when constructing `\DateTimeImmutable` for the system `\core\clock` implementation.
1839
 
1840
  For more information see [MDL-81894](https://tracker.moodle.org/browse/MDL-81894)
1841
 
1842
### core_availability
1843
 
1844
#### Removed
1845
 
1846
- The previously deprecated renderer `render_core_availability_multiple_messages` method has been removed.
1847
 
1848
  For more information see [MDL-82223](https://tracker.moodle.org/browse/MDL-82223)
1849
 
1850
### core_backup
1851
 
1852
#### Removed
1853
 
1854
- The `\core_backup\copy\copy` class has been deprecated and removed. Please use `\copy_helper` instead.
1855
 
1856
  For more information see [MDL-75022](https://tracker.moodle.org/browse/MDL-75022)
1857
- The following methods in the `\base_controller` class have been removed:
1858
 
1859
  | Method                          | Replacement                                                     |
1860
  | ---                             | ---                                                             |
1861
  | `\base_controller::set_copy()`  | Use a restore controller for storing copy information instead.  |
1862
  | `\base_controller::get_copy()`  | `\restore_controller::get_copy()`                               |
1863
 
1864
  For more information see [MDL-75025](https://tracker.moodle.org/browse/MDL-75025)
1865
 
1866
### core_badges
1867
 
1868
#### Added
1869
 
1870
- The following new webservices have been added:
1871
 
1872
   - `core_badges_enable_badges`
1873
 
1874
   - `core_badges_disable_badges`
1875
 
1876
  For more information see [MDL-82168](https://tracker.moodle.org/browse/MDL-82168)
1877
 
1878
#### Changed
1879
 
1880
- New fields have been added to the return structure of the `core_badges_get_user_badge_by_hash` and `core_badges_get_user_badges` external functions:
1881
    - `recipientid`: The ID of the user who received the badge.
1882
    - `recipientfullname`: The full name of the user who received the badge.
1883
 
1884
  For more information see [MDL-82742](https://tracker.moodle.org/browse/MDL-82742)
1885
 
1886
#### Deprecated
1887
 
1888
- The `badges/newbadge.php` page has been deprecated and merged with `badges/edit.php`. Please, use `badges/edit.php` instead.
1889
 
1890
  For more information see [MDL-43938](https://tracker.moodle.org/browse/MDL-43938)
1891
- The `OPEN_BADGES_V1` constant is deprecated and should not be used anymore.
1892
 
1893
  For more information see [MDL-70983](https://tracker.moodle.org/browse/MDL-70983)
1894
- The `course_badges` systemreport has been deprecated and merged with the badges systemreport. Please, use the badges systemreport instead.
1895
 
1896
  For more information see [MDL-82503](https://tracker.moodle.org/browse/MDL-82503)
1897
- The `$showmanage` parameter to the `\core_badges\output\standard_action_bar` constructor has been deprecated and should not be used anymore.
1898
 
1899
  For more information see [MDL-82503](https://tracker.moodle.org/browse/MDL-82503)
1900
- The `badges/view.php` page has been deprecated and merged with `badges/index.php`. Please, use `badges/index.php` instead.
1901
 
1902
  For more information see [MDL-82503](https://tracker.moodle.org/browse/MDL-82503)
1903
 
1904
#### Removed
1905
 
1906
- Final removal of `BADGE_BACKPACKAPIURL` and `BADGE_BACKPACKWEBURL` constants.
1907
 
1908
  For more information see [MDL-70983](https://tracker.moodle.org/browse/MDL-70983)
1909
 
1910
### core_cache
1911
 
1912
#### Added
1913
 
1914
- The following classes have been renamed and now support autoloading.
1915
 
1916
  Existing classes are currently unaffected.
1917
 
1918
  | Old class name                     | New class name                                     |
1919
  | ---                                | ---                                                |
1920
  | `\cache_definition`                | `\core_cache\definition`                           |
1921
  | `\cache_request`                   | `\core_cache\request_cache`                        |
1922
  | `\cache_session`                   | `\core_cache\session_cache`                        |
1923
  | `\cache_cached_object`             | `\core_cache\cached_object`                        |
1924
  | `\cache_config`                    | `\core_cache\config`                               |
1925
  | `\cache_config_writer`             | `\core_cache\config_writer`                        |
1926
  | `\cache_config_disabled`           | `\core_cache\disabled_config`                      |
1927
  | `\cache_disabled`                  | `\core_cache\disabled_cache`                       |
1928
  | `\config_writer`                   | `\core_cache\config_writer`                        |
1929
  | `\cache_data_source`               | `\core_cache\data_source_interface`                |
1930
  | `\cache_data_source_versionable`   | `\core_cache\versionable_data_source_interface`    |
1931
  | `\cache_exception`                 | `\core_cache\exception/cache_exception`            |
1932
  | `\cache_factory`                   | `\core_cache\factory`                              |
1933
  | `\cache_factory_disabled`          | `\core_cache\disabled_factory`                     |
1934
  | `\cache_helper`                    | `\core_cache\helper`                               |
1935
  | `\cache_is_key_aware`              | `\core_cache\key_aware_cache_interface`            |
1936
  | `\cache_is_lockable`               | `\core_cache\lockable_cache_interface`             |
1937
  | `\cache_is_searchable`             | `\core_cache\searchable_cache_interface`           |
1938
  | `\cache_is_configurable`           | `\core_cache\configurable_cache_interface`         |
1939
  | `\cache_loader`                    | `\core_cache\loader_interface`                     |
1940
  | `\cache_loader_with_locking`       | `\core_cache\loader_with_locking_interface`        |
1941
  | `\cache_lock_interface`            | `\core_cache\cache_lock_interface`                 |
1942
  | `\cache_store`                     | `\core_cache\store`                                |
1943
  | `\cache_store_interface`           | `\core_cache\store_interface`                      |
1944
  | `\cache_ttl_wrapper`               | `\core_cache\ttl_wrapper`                          |
1945
  | `\cacheable_object`                | `\core_cache\cacheable_object_interface`           |
1946
  | `\cacheable_object_array`          | `\core_cache\cacheable_object_array`               |
1947
  | `\cache_definition_mappings_form`  | `\core_cache\form/cache_definition_mappings_form`  |
1948
  | `\cache_definition_sharing_form`   | `\core_cache\form/cache_definition_sharing_form`   |
1949
  | `\cache_lock_form`                 | `\core_cache\form/cache_lock_form`                 |
1950
  | `\cache_mode_mappings_form`        | `\core_cache\form/cache_mode_mappings_form`        |
1951
 
1952
  For more information see [MDL-82158](https://tracker.moodle.org/browse/MDL-82158)
1953
 
1954
### core_communication
1955
 
1956
#### Changed
1957
 
1958
- The `\core_communication\helper::get_enrolled_users_for_course()` method now accepts an additional argument that can filter only active enrolments.
1959
 
1960
  For more information see [MDL-81951](https://tracker.moodle.org/browse/MDL-81951)
1961
 
1962
### core_completion
1963
 
1964
#### Added
1965
 
1966
- A new `FEATURE_COMPLETION` plugin support constant has been added. In the future, this constant will be used to indicate when a plugin does not allow completion and it is enabled by default.
1967
 
1968
  For more information see [MDL-83008](https://tracker.moodle.org/browse/MDL-83008)
1969
 
1970
#### Changed
1971
 
1972
- The `\core_completion\activity_custom_completion::get_overall_completion_state()` method can now also return `COMPLETION_COMPLETE_FAIL` and not only `COMPLETION_COMPLETE` and `COMPLETION_INCOMPLETE`.
1973
 
1974
  For more information see [MDL-81749](https://tracker.moodle.org/browse/MDL-81749)
1975
 
1976
### core_course
1977
 
1978
#### Added
1979
 
1980
- - New optional `sectionNum` parameter has been added to `activitychooser` AMD module initializer.
1981
  - New option `sectionnum` parameter has been added to `get_course_content_items()` external function.
1982
  - New optional `sectionnum` parameter has been added to `get_content_items_for_user_in_course()` function.
1983
 
1984
  For more information see [MDL-81675](https://tracker.moodle.org/browse/MDL-81675)
1985
- The `core_course_get_courses_by_field` web service now accepts a new parameter `sectionid` to be able to retrieve the course that has the indicated section.
1986
 
1987
  For more information see [MDL-81699](https://tracker.moodle.org/browse/MDL-81699)
1988
- Added new `activitychooserbutton` output class to display the activitychooser button. New `action_links` can be added to the button via hooks converting it into a dropdown.
1989
 
1990
  For more information see [MDL-81767](https://tracker.moodle.org/browse/MDL-81767)
1991
- New `\core_course\hook\before_activitychooserbutton_exported` hook added to allow third-party plugins to extend activity chooser button options.
1992
 
1993
  For more information see [MDL-81767](https://tracker.moodle.org/browse/MDL-81767)
1994
- The following methods have been updated to accept a section name in addition to the section number:
1995
  - `\behat_course::i_open_section_edit_menu()`
1996
  - `\behat_course::i_show_section()`
1997
  - `\behat_course::i_hide_section(),`
1998
  - `\behat_course::i_wait_until_section_is_available()`
1999
  - `\behat_course::show_section_link_exists()`
2000
  - `\behat_course::hide_section_link_exists()`
2001
  - `\behat_course::section_exists()`
2002
 
2003
  For more information see [MDL-82259](https://tracker.moodle.org/browse/MDL-82259)
2004
 
2005
#### Changed
2006
 
2007
- The reset course page has been improved. The words "Delete" and "Remove" have been removed from all the options to make it easier to focus on the data to be removed and avoid inconsistencies and duplicated information. Third party plugins implementing reset methods might need to:
2008
  - Add static element in the _reset_course_form_definition method before all the options with the Delete string:
2009
      `$mform->addElement('static', 'assigndelete', get_string('delete'));`
2010
  - Review all the strings used in the reset page to remove the "Delete" or "Remove" words from them.
2011
 
2012
  For more information see [MDL-81872](https://tracker.moodle.org/browse/MDL-81872)
2013
- The external function `core_course_get_contents` now returns the `component` and `itemid` of sections.
2014
 
2015
  For more information see [MDL-82385](https://tracker.moodle.org/browse/MDL-82385)
2016
 
2017
#### Deprecated
2018
 
2019
- The `data-sectionid` attribute in the activity chooser has been deprecated. Please update your code to use `data-sectionnum` instead.
2020
 
2021
  For more information see [MDL-81676](https://tracker.moodle.org/browse/MDL-81676)
2022
- The `$course` parameter in the constructor of the `\core_course\output\actionbar\group_selector` class has been deprecated and is no longer used.
2023
 
2024
  For more information see [MDL-82393](https://tracker.moodle.org/browse/MDL-82393)
2025
 
2026
#### Removed
2027
 
2028
- The previously deprecated `\print_course_request_buttons()` method has been removed and can no longer be used.
2029
 
2030
  For more information see [MDL-73976](https://tracker.moodle.org/browse/MDL-73976)
2031
- The `$course` class property in the `\core_course\output\actionbar\group_selector` class has been removed.
2032
 
2033
  For more information see [MDL-82393](https://tracker.moodle.org/browse/MDL-82393)
2034
 
2035
### core_courseformat
2036
 
2037
#### Added
2038
 
2039
- The constructor of `\core_courseformat\output\local\state\cm` has been updated to accept a new optional parameter, `$istrackeduser`.
2040
  If `istrackeduser` is pre-computed for the course module's course, it can be provided here to avoid an additional function call.
2041
 
2042
  For more information see [MDL-81610](https://tracker.moodle.org/browse/MDL-81610)
2043
- Added new `core_courseformat_create_module` webservice to create new module (with quickcreate feature) instances in the course.
2044
 
2045
  For more information see [MDL-81767](https://tracker.moodle.org/browse/MDL-81767)
2046
- A new `$disabled` parameter has been added to the following `html_writer` methods:
2047
 
2048
  - `\core\output\html_writer::select()`
2049
  - `\core\output\html_writer::select_optgroup()`
2050
  - `\core\output\html_writer::select_option()`
2051
 
2052
  For more information see [MDL-82146](https://tracker.moodle.org/browse/MDL-82146)
2053
- A new class, `\core_courseformat\output\local\content\basecontrolmenu`, has been created.
2054
  The following existing classes extend the new class:
2055
 
2056
   - `\core_courseformat\output\local\content\cm\controlmenu`
2057
   - `\core_courseformat\output\local\content\section\controlmenu`
2058
 
2059
  For more information see [MDL-82510](https://tracker.moodle.org/browse/MDL-82510)
2060
- Course sections now use an action menu to display possible actions that a user may take in each section. This action menu is rendered using the `\core_courseformat\output\local\content\cm\delegatedcontrolmenu` renderable class.
2061
 
2062
  For more information see [MDL-82510](https://tracker.moodle.org/browse/MDL-82510)
2063
 
2064
### core_customfield
2065
 
2066
#### Changed
2067
 
2068
- The field controller `\core_customfield\field_controller::get_formatted_name()` method now accepts an optional `$escape` parameter to define whether to escape the returned name.
2069
 
2070
  For more information see [MDL-82488](https://tracker.moodle.org/browse/MDL-82488)
2071
 
2072
### core_external
2073
 
2074
#### Changed
2075
 
2076
- The external function `core_webservice_external::get_site_info` now returns the default home page URL when needed.
2077
 
2078
  For more information see [MDL-82844](https://tracker.moodle.org/browse/MDL-82844)
2079
 
2080
### core_files
2081
 
2082
#### Added
2083
 
2084
- A new hook, `\core_files\hook\after_file_created`, has been created to allow the inspection of files after they have been saved in the filesystem.
2085
 
2086
  For more information see [MDL-75850](https://tracker.moodle.org/browse/MDL-75850)
2087
- A new hook, `\core_files\hook\before_file_created`, has been created to allow modification of a file immediately before it is stored in the file system.
2088
 
2089
  For more information see [MDL-83245](https://tracker.moodle.org/browse/MDL-83245)
2090
 
2091
### core_filters
2092
 
2093
#### Added
2094
 
2095
- Added support for autoloading of filters from `\filter_[filtername]\filter`. Existing classes should be renamed to use the new namespace.
2096
 
2097
  For more information see [MDL-82427](https://tracker.moodle.org/browse/MDL-82427)
2098
 
2099
#### Deprecated
2100
 
2101
- The `\core_filters\filter_manager::text_filtering_hash` method has been finally deprecated and removed.
2102
 
2103
  For more information see [MDL-82427](https://tracker.moodle.org/browse/MDL-82427)
2104
 
2105
### core_form
2106
 
2107
#### Added
2108
 
2109
- The `duration` form field type has been modified to validate that the supplied value is a positive value.
2110
  Previously it could be any numeric value, but every usage of this field in Moodle was expecting a positive value. When a negative value was provided and accepted, subtle bugs could occur.
2111
  Where a negative duration _is_ allowed, the `allownegative` attribute can be set to `true`.
2112
 
2113
  For more information see [MDL-82687](https://tracker.moodle.org/browse/MDL-82687)
2114
 
2115
### core_grades
2116
 
2117
#### Changed
2118
 
2119
- The grade `itemname` property contained in the return structure of the following external methods is now PARAM_RAW:
2120
    - `core_grades_get_gradeitems`
2121
    - `gradereport_user_get_grade_items`
2122
 
2123
  For more information see [MDL-80017](https://tracker.moodle.org/browse/MDL-80017)
2124
 
2125
#### Deprecated
2126
 
2127
- The behat step definition `\behat_grade::i_confirm_in_search_within_the_gradebook_widget_exists()` has been deprecated. Please use `\behat_general::i_confirm_in_search_combobox_exists()` instead.
2128
 
2129
  For more information see [MDL-80744](https://tracker.moodle.org/browse/MDL-80744)
2130
- The behat step definition `\behat_grade::i_confirm_in_search_within_the_gradebook_widget_does_not_exist()` has been deprecated. Please use `\behat_general::i_confirm_in_search_combobox_does_not_exist()` instead.
2131
 
2132
  For more information see [MDL-80744](https://tracker.moodle.org/browse/MDL-80744)
2133
- The behat step definition `\behat_grade::i_click_on_in_search_widget()` has been deprecated. Please use `\behat_general::i_click_on_in_search_combobox()` instead.
2134
 
2135
  For more information see [MDL-80744](https://tracker.moodle.org/browse/MDL-80744)
2136
- The `\core_grades_renderer::group_selector()` method has been deprecated. Please use `\core_course\output\actionbar\renderer` to render a `group_selector` renderable instead.
2137
 
2138
  For more information see [MDL-80745](https://tracker.moodle.org/browse/MDL-80745)
2139
 
2140
#### Removed
2141
 
2142
- The following previously deprecated Behat step helper methods have been removed and can no longer be used:
2143
   - `\behat_grade::select_in_gradebook_navigation_selector()`
2144
   - `\behat_grade::select_in_gradebook_tabs()`
2145
 
2146
  For more information see [MDL-74581](https://tracker.moodle.org/browse/MDL-74581)
2147
 
2148
### core_message
2149
 
2150
#### Changed
2151
 
2152
- The `\core_message\helper::togglecontact_link_params()` method now accepts a new optional `$isrequested` parameter to indicate the status of the contact request.
2153
 
2154
  For more information see [MDL-81428](https://tracker.moodle.org/browse/MDL-81428)
2155
 
2156
#### Deprecated
2157
 
2158
- The `core_message/remove_contact_button` template is deprecated and will be removed in a future release.
2159
 
2160
  For more information see [MDL-81428](https://tracker.moodle.org/browse/MDL-81428)
2161
 
2162
#### Removed
2163
 
2164
- Final deprecation of the `MESSAGE_DEFAULT_LOGGEDOFF`, and `MESSAGE_DEFAULT_LOGGEDIN` constants.
2165
 
2166
  For more information see [MDL-73284](https://tracker.moodle.org/browse/MDL-73284)
2167
 
2168
### core_question
2169
 
2170
#### Added
2171
 
2172
- A new utility function `\question_utils::format_question_fragment()` has been created so that question content can filter based on filters.
2173
 
2174
  For more information see [MDL-78662](https://tracker.moodle.org/browse/MDL-78662)
2175
 
2176
#### Changed
2177
 
2178
- `\core_question\local\bank\column_base::from_column_name()` method now accepts a `bool $ingoremissing` parameter, which can be used to ignore if the class does not exist, instead of throwing an exception.
2179
 
2180
  For more information see [MDL-81407](https://tracker.moodle.org/browse/MDL-81407)
2181
 
2182
### core_report
2183
 
2184
#### Added
2185
 
2186
- Report has been added to subsystem components list.
2187
 
2188
  For more information see [MDL-81771](https://tracker.moodle.org/browse/MDL-81771)
2189
- A new general output class, `\core_report\output\coursestructure`, has been created.
2190
 
2191
  For more information see [MDL-81771](https://tracker.moodle.org/browse/MDL-81771)
2192
 
2193
#### Changed
2194
 
2195
- The `\core\report_helper::print_report_selector()` method accepts a new `$additional`` argument for adding content to the tertiary navigation to align with the report selector.
2196
 
2197
  For more information see [MDL-78773](https://tracker.moodle.org/browse/MDL-78773)
2198
 
2199
#### Removed
2200
 
2201
- The previously deprecated `\core\report_helper::save_selected_report()` method has been removed and can no longer be used.
2202
 
2203
  For more information see [MDL-72353](https://tracker.moodle.org/browse/MDL-72353)
2204
 
2205
### core_reportbuilder
2206
 
2207
#### Added
2208
 
2209
- The return type of the `set_checkbox_toggleall` callback, defined by system reports, can now be null. Use if the checkbox should not be shown for the row.
2210
 
2211
  For more information see [MDL-52046](https://tracker.moodle.org/browse/MDL-52046)
2212
- System reports now support native entity column aggregation via each columns `set_aggregation()` method
2213
 
2214
  For more information see [MDL-76392](https://tracker.moodle.org/browse/MDL-76392)
2215
- The following external methods now return tags data relevant to each custom report:
2216
    - `core_reportbuilder_list_reports`
2217
    - `core_reportbuilder_retrieve_report`
2218
 
2219
  For more information see [MDL-81433](https://tracker.moodle.org/browse/MDL-81433)
2220
- Added a new database helper method `sql_replace_parameters` to help ensure uniqueness of parameters within a SQL expression.
2221
 
2222
  For more information see [MDL-81434](https://tracker.moodle.org/browse/MDL-81434)
2223
- A new static method, `\core_reportbuilder\local\helpers\format::format_time()`, has been added for use in column callbacks that represent a duration of time (for example "3 days 4 hours").
2224
 
2225
  For more information see [MDL-82466](https://tracker.moodle.org/browse/MDL-82466)
2226
- The following methods have been moved from `\core_reportbuilder\datasource` class to its parent class `\core_reportbuilder\base` to make them available for use in system reports:
2227
 
2228
    - `add_columns_from_entity()`
2229
    - `add_filters_from_entity()`
2230
    - `report_element_search()`
2231
 
2232
  For more information see [MDL-82529](https://tracker.moodle.org/browse/MDL-82529)
2233
 
2234
#### Changed
2235
 
2236
- In order to better support float values in filter forms, the following filter types now cast given SQL prior to comparison:
2237
 
2238
    - `duration`
2239
    - `filesize`
2240
    - `number`
2241
 
2242
  For more information see [MDL-81168](https://tracker.moodle.org/browse/MDL-81168)
2243
- The base datasource `\core_reportbuilder\datasource::add_all_from_entities()` method accepts a new optional `array $entitynames` parameter to specify which entities to add elements from.
2244
 
2245
  For more information see [MDL-81330](https://tracker.moodle.org/browse/MDL-81330)
2246
- All time-related code has been updated to the PSR-20 Clock interface, as such the following methods no longer accept a `$timenow` parameter (instead please use `\core\clock` dependency injection):
2247
  - `core_reportbuilder_generator::create_schedule`
2248
  - `core_reportbuilder\local\helpers\schedule::create_schedule()`
2249
  - `core_reportbuilder\local\helpers\schedule::calculate_next_send_time()`
2250
 
2251
  For more information see [MDL-82041](https://tracker.moodle.org/browse/MDL-82041)
2252
- The following classes have been moved to use the new exception API as a L2 namespace:
2253
 
2254
  | Old class                                           | New class                                                     |
2255
  | -----------                                         | -----------                                                   |
2256
  | `\core_reportbuilder\report_access_exception`       | `\core_reportbuilder\exception\report_access_exception`       |
2257
  | `\core_reportbuilder\source_invalid_exception`      | `\core_reportbuilder\exception\source_invalid_exception`      |
2258
  | `\core_reportbuilder\source_unavailable_exception`  | `\core_reportbuilder\exception\source_unavailable_exception`  |
2259
 
2260
  For more information see [MDL-82133](https://tracker.moodle.org/browse/MDL-82133)
2261
 
2262
#### Removed
2263
 
2264
- Support for the following entity classes, renamed since 4.1, have now been removed completely:
2265
 
2266
  - `\core_admin\local\entities\task_log`
2267
  - `\core_cohort\local\entities\cohort`
2268
  - `\core_cohort\local\entities\cohort_member`
2269
  - `\core_course\local\entities\course_category`
2270
  - `\report_configlog\local\entities\config_change`
2271
 
2272
  For more information see [MDL-74583](https://tracker.moodle.org/browse/MDL-74583)
2273
- The following previously deprecated local helper methods have been removed and can no longer be used:
2274
    - `\core_reportbuilder\local\helpers\audience::get_all_audiences_menu_types()`
2275
    - `\core_reportbuilder\local\helpers\report::get_available_columns()`
2276
 
2277
  For more information see [MDL-76690](https://tracker.moodle.org/browse/MDL-76690)
2278
 
2279
### core_role
2280
 
2281
#### Added
2282
 
2283
- All session management has been moved to the `\core\session\manager` class.
2284
  This removes the dependancy to use the `sessions` table.
2285
 
2286
  Session management plugins (like Redis) should now inherit
2287
  the base `\core\session\handler` class, which implements
2288
  `SessionHandlerInterface`, and override methods as required.
2289
 
2290
  The following methods in `\core\session\manager` have been deprecated:
2291
  | Old method name                  | New method name           |
2292
  | ---                              | ---                       |
2293
  | `kill_all_sessions`              | `destroy_all`             |
2294
  | `kill_session`                   | `destroy`                 |
2295
  | `kill_sessions_for_auth_plugin`  | `destroy_by_auth_plugin`  |
2296
  | `kill_user_sessions`             | `destroy_user_sessions`   |
2297
 
2298
  For more information see [MDL-66151](https://tracker.moodle.org/browse/MDL-66151)
2299
 
2300
### core_sms
2301
 
2302
#### Added
2303
 
2304
- A new `\core_sms` subsystem has been created.
2305
 
2306
  For more information see [MDL-81924](https://tracker.moodle.org/browse/MDL-81924)
2307
 
2308
### core_table
2309
 
2310
#### Added
2311
 
2312
- A new `$reponsive` property (defaulting to `true`) has been added to the `\core_table\flexible_table` class.
2313
  This property allows you to control whether the table is rendered as a responsive table.
2314
 
2315
  For more information see [MDL-80748](https://tracker.moodle.org/browse/MDL-80748)
2316
 
2317
#### Changed
2318
 
2319
- The `\core_table\dynamic` class declares a new method `::has_capability()` to allow classes implementing this interface to perform access checks on the dynamic table.
2320
  Note: This is a breaking change. All implementations of the `\core_table\dynamic` table interface _must_ implement the new `has_capability(): bool` method for continued functionality.
2321
 
2322
  For more information see [MDL-82567](https://tracker.moodle.org/browse/MDL-82567)
2323
 
2324
### core_user
2325
 
2326
#### Added
2327
 
2328
- New `\core_user\hook\extend_user_menu` hook added to allow third party plugins to extend the user menu navigation.
2329
 
2330
  For more information see [MDL-71823](https://tracker.moodle.org/browse/MDL-71823)
2331
- A new hook, `\core_user\hook\extend_default_homepage`, has been added to allow third-party plugins to extend the default homepage options for the site.
2332
 
2333
  For more information see [MDL-82066](https://tracker.moodle.org/browse/MDL-82066)
2334
 
2335
#### Changed
2336
 
2337
- The visibility of the following methods have been increased to public:
2338
  - `\core_user\form\private_files::check_access_for_dynamic_submission()`
2339
  - `\core_user\form\private_files::get_options()`
2340
 
2341
  For more information see [MDL-78293](https://tracker.moodle.org/browse/MDL-78293)
2342
- The user profile field `\profile_field_base::display_name()` method now accepts an optional `$escape` parameter to define whether to escape the returned name.
2343
 
2344
  For more information see [MDL-82494](https://tracker.moodle.org/browse/MDL-82494)
2345
 
2346
#### Deprecated
2347
 
2348
- The `\core_user\table\participants_search::get_total_participants_count()` is no longer used since the total count can be obtained from `\core_user\table\participants_search::get_participants()`.
2349
 
2350
  For more information see [MDL-78030](https://tracker.moodle.org/browse/MDL-78030)
2351
 
2352
### availability
2353
 
2354
#### Changed
2355
 
2356
- The base class `\core_availability\info::get_groups()` method now accepts a `$userid` parameter to specify which user you want to retrieve course groups (defaults to current user).
2357
 
2358
  For more information see [MDL-81850](https://tracker.moodle.org/browse/MDL-81850)
2359
 
2360
### customfield_number
2361
 
2362
#### Added
2363
 
2364
- A new hook, `\customfield_number\hook\add_custom_providers`, has been added which allows automatic calculation of number course custom field.
2365
 
2366
  For more information see [MDL-82715](https://tracker.moodle.org/browse/MDL-82715)
2367
- A new class, `\customfield_number\local\numberproviders\nofactivities`, has been added that allows to automatically calculate number of activities of a given type in a given course.
2368
 
2369
  For more information see [MDL-82715](https://tracker.moodle.org/browse/MDL-82715)
2370
- Added new webservice `customfield_number_recalculate_value`, has been added to recalculate a value of number course custom field.
2371
 
2372
  For more information see [MDL-82715](https://tracker.moodle.org/browse/MDL-82715)
2373
- A new task, `\customfield_number\task\cron`, cron task that recalculates automatically calculated number course custom fields.
2374
 
2375
  For more information see [MDL-82715](https://tracker.moodle.org/browse/MDL-82715)
2376
 
2377
### customfield_select
2378
 
2379
#### Changed
2380
 
2381
- The field controller `get_options` method now returns each option pre-formatted.
2382
 
2383
  For more information see [MDL-82481](https://tracker.moodle.org/browse/MDL-82481)
2384
 
2385
### editor_tiny
2386
 
2387
#### Changed
2388
 
2389
- The `helplinktext` language string is no longer required by editor plugins, instead the `pluginname` will be used in the help dialogue.
2390
 
2391
  For more information see [MDL-81572](https://tracker.moodle.org/browse/MDL-81572)
2392
 
2393
### factor_sms
2394
 
2395
#### Removed
2396
 
2397
- The following classes are removed as the SMS feature now takes advantage of `core_sms` API:
2398
  - `\factor_sms\event\sms_sent`
2399
  - `\factor_sms\local\smsgateway\aws_sns`
2400
  - `\factor_sms\local\smsgateway\gateway_interface`
2401
 
2402
  For more information see [MDL-80962](https://tracker.moodle.org/browse/MDL-80962)
2403
 
2404
### gradereport_grader
2405
 
2406
#### Deprecated
2407
 
2408
- The `gradereport_grader/group` ESM has been deprecated. Please use `core_course/actionbar/group` instead.
2409
 
2410
  For more information see [MDL-80745](https://tracker.moodle.org/browse/MDL-80745)
2411
 
2412
### gradereport_singleview
2413
 
2414
#### Deprecated
2415
 
2416
- The `gradereport_singleview/group` ESM has been deprecated. Please use `core_course/actionbar/group` instead.
2417
 
2418
  For more information see [MDL-80745](https://tracker.moodle.org/browse/MDL-80745)
2419
 
2420
### gradereport_user
2421
 
2422
#### Deprecated
2423
 
2424
- The `gradereport_user/group` ESM has been deprecated. Please use `core_course/actionbar/group` instead.
2425
 
2426
  For more information see [MDL-80745](https://tracker.moodle.org/browse/MDL-80745)
2427
 
2428
### mod
2429
 
2430
#### Added
2431
 
2432
- Added new `FEATURE_QUICKCREATE` for modules that can be quickly created in the course wihout filling a previous form.
2433
 
2434
  For more information see [MDL-81767](https://tracker.moodle.org/browse/MDL-81767)
2435
 
2436
### mod_assign
2437
 
2438
#### Added
2439
 
2440
- Added 2 new settings:
2441
    - `mod_assign/defaultgradetype`
2442
      - The value of this setting dictates which of the `GRADE_TYPE_X` constants is the default option when creating new instances of the assignment.
2443
      - The default value is `GRADE_TYPE_VALUE` (Point)
2444
    - `mod_assign/defaultgradescale`
2445
      - The value of this setting dictates which of the existing scales is the default option when creating new instances of the assignment.
2446
 
2447
  For more information see [MDL-54105](https://tracker.moodle.org/browse/MDL-54105)
2448
- A new web service called `mod_assign_remove_submission` has been created to remove the submission for a specific user ID and assignment activity ID.
2449
 
2450
  For more information see [MDL-74050](https://tracker.moodle.org/browse/MDL-74050)
2451
- A new default value for `attemptreopenmethod` has been set to "Automatically until pass".
2452
 
2453
  For more information see [MDL-80741](https://tracker.moodle.org/browse/MDL-80741)
2454
- A new method, `\assign_feedback_plugin::get_grading_batch_operation_details()`, has been added to the `assign_feedback_plugin` abstract class. Assignment feedback plugins can now override this method to define bulk action buttons that will appear in the sticky footer on the assignment grading page.
2455
 
2456
  For more information see [MDL-80750](https://tracker.moodle.org/browse/MDL-80750)
2457
 
2458
#### Deprecated
2459
 
2460
- The constant `ASSIGN_ATTEMPT_REOPEN_METHOD_NONE` has been deprecated, and a new default value for `attemptreopenmethod` has been set to "Automatically until pass".
2461
 
2462
  For more information see [MDL-80741](https://tracker.moodle.org/browse/MDL-80741)
2463
- The `\assign_feedback_plugin::get_grading_batch_operations()` method is now deprecated. Use `assign_feedback_plugin::get_grading_batch_operation_details` instead.
2464
 
2465
  For more information see [MDL-80750](https://tracker.moodle.org/browse/MDL-80750)
2466
- The `\assign_grading_table::plugingradingbatchoperations` property has been removed. You can use `\assign_feedback_plugin::get_grading_batch_operation_details()` instead.
2467
 
2468
  For more information see [MDL-80750](https://tracker.moodle.org/browse/MDL-80750)
2469
- The `$submissionpluginenabled` and `$submissioncount` parameters from the constructor of the `\mod_assign\output::grading_actionmenu` class have been deprecated.
2470
 
2471
  For more information see [MDL-80752](https://tracker.moodle.org/browse/MDL-80752)
2472
- The method `\assign::process_save_grading_options()` has been deprecated as it is no longer used.
2473
 
2474
  For more information see [MDL-82681](https://tracker.moodle.org/browse/MDL-82681)
2475
 
2476
#### Removed
2477
 
2478
- The default option "Never" for the `attemptreopenmethod` setting, which disallowed multiple attempts at the assignment, has been removed. This option was unnecessary because limiting attempts to 1 through the `maxattempts` setting achieves the same behavior.
2479
 
2480
  For more information see [MDL-80741](https://tracker.moodle.org/browse/MDL-80741)
2481
- The `\mod_assign_grading_options_form` class has been removed since it is no longer used.
2482
 
2483
  For more information see [MDL-82857](https://tracker.moodle.org/browse/MDL-82857)
2484
 
2485
### mod_bigbluebuttonbn
2486
 
2487
#### Added
2488
 
2489
- Added new `meeting_info` value to show presentation file on BBB activity page
2490
 
2491
  For more information see [MDL-82520](https://tracker.moodle.org/browse/MDL-82520)
2492
- The `broker::process_meeting_events()` method has been extended to call the `::process_action()` method implemented by plugins.
2493
 
2494
  For more information see [MDL-82872](https://tracker.moodle.org/browse/MDL-82872)
2495
 
2496
#### Removed
2497
 
2498
- Mobile support via plugin has been removed as it is now natively available in the Moodle App.
2499
 
2500
  For more information see [MDL-82447](https://tracker.moodle.org/browse/MDL-82447)
2501
 
2502
### mod_data
2503
 
2504
#### Added
2505
 
2506
- The `\data_add_record()` method accepts a new `$approved` parameter to set the corresponding state of the new record.
2507
 
2508
  For more information see [MDL-81274](https://tracker.moodle.org/browse/MDL-81274)
2509
 
2510
#### Deprecated
2511
 
2512
- The `\mod_data_renderer::render_fields_footer()` method has been deprecated as it's no longer used.
2513
 
2514
  For more information see [MDL-81321](https://tracker.moodle.org/browse/MDL-81321)
2515
 
2516
### mod_feedback
2517
 
2518
#### Deprecated
2519
 
2520
- The `\feedback_check_is_switchrole()` function has been deprecated as it didn't work.
2521
 
2522
  For more information see [MDL-72424](https://tracker.moodle.org/browse/MDL-72424)
2523
- The method `\mod_feedback\output\renderer::create_template_form()` has been deprecated. It is not used anymore.
2524
 
2525
  For more information see [MDL-81742](https://tracker.moodle.org/browse/MDL-81742)
2526
 
2527
### mod_quiz
2528
 
2529
#### Added
2530
 
2531
- The following methods of the `quiz_overview_report` class now take a new optional `$slots` parameter used to only regrade some slots in each attempt (default all):
2532
  - `\quiz_overview_report::regrade_attempts()`
2533
  - `\quiz_overview_report::regrade_batch_of_attempts()`
2534
 
2535
  For more information see [MDL-79546](https://tracker.moodle.org/browse/MDL-79546)
2536
 
2537
### qbank_managecategories
2538
 
2539
#### Changed
2540
 
2541
- The `\qbank_managecategories\question_category_object` class has been deprecated.
2542
  Methods previously part of this class have been moved to either
2543
 
2544
   - `\qbank_managecategories\question_categories`,
2545
    for the parts used within this plugin for display a list of categories; or
2546
 
2547
  `\core_question\category_manager`,
2548
    for the parts used for generate CRUD operations on question categories, including outside of this plugin.
2549
 
2550
  This change will allow `\qbank_managecategories\question_category_object` to be deprecated, and avoids other parts of the system wishing to manipulate question categories from having to violate cross-component communication rules.
2551
 
2552
  For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
2553
 
2554
#### Deprecated
2555
 
2556
- Category lists are now generated by templates. The following classes have been deprecated:
2557
  - `\qbank_managecategories\question_category_list`
2558
  - `\qbank_managecategories\question_category_list_item`
2559
 
2560
  For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
2561
- The following methods of `\qbank_managecategories\helper`have been deprecated and moved to
2562
  `\core_question\category_manager`:
2563
 
2564
  | Method                                               | Replacement                                                                  |
2565
  | ---                                                  | ---                                                                          |
2566
  | `question_is_only_child_of_top_category_in_context`  | `\core_question\category_manager::is_only_child_of_top_category_in_context`  |
2567
  | `question_is_top_category`                           | `\core_question\category_manager::is_top_category`                           |
2568
  | `question_can_delete_cat`                            | `\core_question\category_manager::can_delete_cat`                            |
2569
 
2570
  For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
2571
- `\qbank_managecategories\question_category_object` is now completely deprecated. Its methods have either been migrated to `\qbank_managecategories\question_categories`, `\core_question\category_manager`, or are no longer used at all.
2572
 
2573
  For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
2574
 
2575
### report_eventlist
2576
 
2577
#### Deprecated
2578
 
2579
- The following deprecated methods in `report_eventlist_list_generator` have been removed:
2580
  - `\report_eventlist_list_generator::get_core_events_list()`
2581
  - `\report_eventlist_list_generator::get_non_core_event_list()`
2582
 
2583
  For more information see [MDL-72786](https://tracker.moodle.org/browse/MDL-72786)
2584
 
2585
### report_log
2586
 
2587
#### Added
2588
 
2589
- The `\report_log_renderable::get_activities_list()` method return values now includes an array of disabled elements, in addition to the array of activities.
2590
 
2591
  For more information see [MDL-82146](https://tracker.moodle.org/browse/MDL-82146)
2592
 
2593
### repository_onedrive
2594
 
2595
#### Removed
2596
 
2597
- The following previously deprecated methods have been removed and can no longer be used:
2598
  - `\repository_onedrive::can_import_skydrive_files()`
2599
  - `\repository_onedrive::import_skydrive_files()`
2600
 
2601
  For more information see [MDL-72620](https://tracker.moodle.org/browse/MDL-72620)
2602
 
2603
### theme
2604
 
2605
#### Added
2606
 
2607
- Added a new `\renderer_base::get_page` getter method.
2608
 
2609
  For more information see [MDL-81597](https://tracker.moodle.org/browse/MDL-81597)
2610
- New `core/context_header` mustache template has been added. This template can be overridden by themes to modify the context header.
2611
 
2612
  For more information see [MDL-81597](https://tracker.moodle.org/browse/MDL-81597)
2613
 
2614
#### Deprecated
2615
 
2616
- The method `\core\output\core_renderer::render_context_header` has been deprecated please use `\core\output\core_renderer::render($contextheader)` instead
2617
 
2618
  For more information see [MDL-82160](https://tracker.moodle.org/browse/MDL-82160)
2619
 
2620
#### Removed
2621
 
2622
- Removed all references to `iconhelp`, `icon-pre`, `icon-post`, `iconlarge`, and `iconsort` CSS classes.
2623
 
2624
  For more information see [MDL-74251](https://tracker.moodle.org/browse/MDL-74251)
2625
 
2626
### theme_boost
2627
 
2628
#### Added
2629
 
2630
- Bridged `theme-color-level` using a new `shift-color` function to prepare for its deprecation in Boostrap 5.
2631
 
2632
  For more information see [MDL-81816](https://tracker.moodle.org/browse/MDL-81816)
2633
- Upon upgrading Font Awesome from version 4 to 6, the solid family was selected by default.
2634
 
2635
  Support for the `regular`, and `brands` families of icons has now been added, allowing icons defined with `\core\outut\icon_system::FONTAWESOME` to use them.
2636
 
2637
  Icons can select the FontAwesome family (`fa-regular`, `fa-brands`, `fa-solid`) by using the relevant class name when display the icon.
2638
 
2639
  For more information see [MDL-82210](https://tracker.moodle.org/browse/MDL-82210)
2640
 
2641
#### Changed
2642
 
2643
- The Bootstrap `.no-gutters` class is no longer used, use `.g-0`  instead.
2644
 
2645
  For more information see [MDL-81818](https://tracker.moodle.org/browse/MDL-81818)
2646
- The `.page-header-headings` CSS class now has a background colour applied to the maintenance and secure layouts.
2647
  You may need to override this class in your maintenance and secure layouts if both of the following are true:
2648
  - Your theme plugin inherits from `theme_boost` and uses this CSS class
2649
  - Your theme plugin applies a different styling for the page header for the maintenance and secure layouts.
2650
 
2651
  For more information see [MDL-83047](https://tracker.moodle.org/browse/MDL-83047)
2652
 
2653
### tool
2654
 
2655
#### Removed
2656
 
2657
- The Convert to InnoDB plugin (`tool_innodb`) has been completely removed.
2658
 
2659
  For more information see [MDL-78776](https://tracker.moodle.org/browse/MDL-78776)
2660
 
2661
### tool_behat
2662
 
2663
#### Added
2664
 
2665
- Behat tests are now checking for deprecated icons. This check can be disabled by using the `--no-icon-deprecations` option in the behat CLI.
2666
 
2667
  For more information see [MDL-82212](https://tracker.moodle.org/browse/MDL-82212)
2668
 
2669
### tool_oauth2
2670
 
2671
#### Added
2672
 
2673
- The `\core\oautuh2\client::get_additional_login_parameters()` method now supports adding the language code to the authentication request so that the OAuth2 login page matches the language in Moodle.
2674
 
2675
  For more information see [MDL-67554](https://tracker.moodle.org/browse/MDL-67554)