weekly release 5.0dev
[moodle.git] / UPGRADING.md
blob799ff49d13f0d8c05e11beff106cd9714068a8b1
1 # Moodle Upgrade notes
3 This file contains important information for developers on changes to the Moodle codebase.
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.
7 The format of this change log follows the advice given at [Keep a CHANGELOG](https://keepachangelog.com).
9 ## 5.0dev
11 ### core
13 #### Added
15 - 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
17   For more information see [MDL-72293](https://tracker.moodle.org/browse/MDL-72293)
18 - 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.
20   For more information see [MDL-83473](https://tracker.moodle.org/browse/MDL-83473)
22 #### Changed
24 - 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.
26   For more information see [MDL-46739](https://tracker.moodle.org/browse/MDL-46739)
27 - All uses of the following PHPUnit methods have been removed as these methods are
28   deprecated upstream without direct replacement:
30   - `withConsecutive`
31   - `willReturnConsecutive`
32   - `onConsecutive`
34   Any plugin using these methods must update their uses.
36   For more information see [MDL-81308](https://tracker.moodle.org/browse/MDL-81308)
38 #### Deprecated
40 - 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`.
42   For more information see [MDL-71257](https://tracker.moodle.org/browse/MDL-71257)
43 - 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`.
45   For more information see [MDL-71257](https://tracker.moodle.org/browse/MDL-71257)
46 - question_make_default_categories()
48   No longer creates a default category in either CONTEXT_SYSTEM, CONTEXT_COURSE, or CONTEXT_COURSECAT.
49   Superceded by question_get_default_category which can optionally create one if it does not exist.
51   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
52 - question_delete_course()
54   No replacement. Course contexts no longer hold question categories.
56   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
57 - question_delete_course_category()
59   Course category contexts no longer hold question categories.
61   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
63 #### Removed
65 - moodle_process_email() has been deprecated with the removal of the unused and non-functioning admin/process_email.php.
67   For more information see [MDL-61232](https://tracker.moodle.org/browse/MDL-61232)
68 - Final deprecation of methods `task_base::is_blocking` and `task_base::set_blocking`.
70   For more information see [MDL-81509](https://tracker.moodle.org/browse/MDL-81509)
72 ### core_backup
74 #### Removed
76 - Remove all MODE_HUB related code.
78   For more information see [MDL-66873](https://tracker.moodle.org/browse/MDL-66873)
80 ### core_course
82 #### Deprecated
84 - The course_format_ajax_support function is now deprecated. Use course_get_format($course)->supports_ajax() instead.
86   For more information see [MDL-82351](https://tracker.moodle.org/browse/MDL-82351)
88 ### core_courseformat
90 #### Added
92 - 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.
94   For more information see [MDL-82349](https://tracker.moodle.org/browse/MDL-82349)
95 - 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.
97   For more information see [MDL-83185](https://tracker.moodle.org/browse/MDL-83185)
99 ### core_enrol
101 #### Changed
103 - 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)
105   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
107   For more information see [MDL-83432](https://tracker.moodle.org/browse/MDL-83432)
109 ### core_question
111 #### Deprecated
113 - question_type::generate_test
115   No replacement, not used anywhere in core.
117   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
119 ### core_reportbuilder
121 #### Added
123 - 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
125   For more information see [MDL-78118](https://tracker.moodle.org/browse/MDL-78118)
127 #### Changed
129 - The `get_active_conditions` method of the base report class has a new `$checkavailable` parameter to determine whether to check the returned conditions availability
131   For more information see [MDL-82809](https://tracker.moodle.org/browse/MDL-82809)
133 #### Removed
135 - The following deprecated report entity elements have been removed:
137   - `comment:context`
138   - `comment:contexturl`
139   - `enrolment:method` (plus enrolment formatter `enrolment_name` method)
140   - 'enrolment:role`
141   - `file:context`
142   - `file:contexturl`
143   - `instance:context` (tag)
144   - `instance:contexturl` (tag)
146   Use of the `context` table is also deprecated in the `file` and `instance` (tag) entities
148   For more information see [MDL-78118](https://tracker.moodle.org/browse/MDL-78118)
149 - 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
151   For more information see [MDL-80430](https://tracker.moodle.org/browse/MDL-80430)
153 ### gradereport_grader
155 #### Deprecated
157 - The method `gradereport_grader::get_right_avg_row()` has been finally deprecated and will now throw an exception if called.
159   For more information see [MDL-78890](https://tracker.moodle.org/browse/MDL-78890)
161 ### mod_feedback
163 #### Added
165 - Added new `mod_feedback_questions_reorder` external function
167   For more information see [MDL-81745](https://tracker.moodle.org/browse/MDL-81745)
169 #### Deprecated
171 - The 'mode' parameter has been deprecated from 'edit_template_action_bar' and 'templates_table' contructors.
173   For more information see [MDL-81744](https://tracker.moodle.org/browse/MDL-81744)
175 #### Removed
177 - The 'use_template' template has been removed as it is not needed anymore.
179   For more information see [MDL-81744](https://tracker.moodle.org/browse/MDL-81744)
181 ### mod_h5pactivity
183 #### Changed
185 - The external function get_user_attempts now returns the total number of attempts.
187   For more information see [MDL-82775](https://tracker.moodle.org/browse/MDL-82775)
189 ### mod_quiz
191 #### Changed
193 - The `\mod_quiz\attempt_walkthrough_from_csv_test` unit test has been marked as final and should not be extended by other tests.
195   All shared functionality has been moved to a new autoloadable test-case:
196   `\mod_quiz\tests\attempt_walkthrough_testcase`.
198   To support this testcase the existing `$files` instance property should be replaced with a new static method, `::get_test_files`.
199   Both the existing instance property and the new static method can co-exist.
201   For more information see [MDL-81521](https://tracker.moodle.org/browse/MDL-81521)
203 ### qbank_bulkmove
205 #### Deprecated
207 - qbank_bulkmove/helper::get_displaydata
209   Superceded by a modal and webservice, see qbank_bulkmove/modal_question_bank_bulkmove and core_question_external\move_questions
211   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
212 - qbank_bulkmove\output\renderer::render_bulk_move_form
214   Superceded by qbank_bulkmove\output\bulk_move
216   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
218 ### tool_brickfield
220 #### Deprecated
222 - tool_brickfield\local\areas\core_question\answerbase::find_system_areas
224   No replacement. System context no longer a valid context to assign a question category
226   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
227 - tool_brickfield\local\areas\core_question\base::find_system_areas
229   No replacement. System context no longer a valid context to assign a question category
231   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
233 ## 4.5
235 ### core
237 #### Added
239 - A new method, `\core_user::get_name_placeholders()`, has been added to return an array of user name fields.
241   For more information see [MDL-64148](https://tracker.moodle.org/browse/MDL-64148)
242 - The following classes have been renamed and now support autoloading.
243   Existing classes are currently unaffected.
245   | Old class name     | New class name     |
246   | ---                | ---                |
247   | `\core_component`  | `\core\component`  |
249   For more information see [MDL-66903](https://tracker.moodle.org/browse/MDL-66903)
250 - Added the ability for unit tests to autoload classes in the `\[component]\tests\`
251   namespace from the `[path/to/component]/tests/classes` directory.
253   For more information see [MDL-66903](https://tracker.moodle.org/browse/MDL-66903)
254 - Added a helper to load fixtures from a components `tests/fixtures/` folder:
256   ```php
257   advanced_testcase::load_fixture(string $component, string $fixture): void;
258   ```
260   For more information see [MDL-66903](https://tracker.moodle.org/browse/MDL-66903)
261 - Redis session cache has been improved to make a single call where two were used before.
263   For more information see [MDL-69684](https://tracker.moodle.org/browse/MDL-69684)
264 - Added stored progress bars
266   For more information see [MDL-70854](https://tracker.moodle.org/browse/MDL-70854)
267 - Two new functions have been introduced in the `\moodle_database` class:
268   - `\moodle_database::get_counted_records_sql()`
269   - `\moodle_database::get_counted_recordset_sql()`
271   These methods are compatible with all databases.
273   They will check the current running database engine and apply the `COUNT` window function if it is supported,
274   otherwise, they will use the usual `COUNT` function.
276   The `COUNT` window function optimization is applied to the following databases:
277   - PostgreSQL
278   - MariaDB
279   - Oracle
281   Note: MySQL and SQL Server do not use this optimization due to insignificant performance differences before and
282   after the improvement.
284   For more information see [MDL-78030](https://tracker.moodle.org/browse/MDL-78030)
285 - The `after_config()` callback has been converted to a hook, `\core\hook\after_config`.
287   For more information see [MDL-79011](https://tracker.moodle.org/browse/MDL-79011)
288 - 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.
290   For more information see [MDL-80747](https://tracker.moodle.org/browse/MDL-80747)
291 - 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.
293   For more information see [MDL-80747](https://tracker.moodle.org/browse/MDL-80747)
294 - 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.
296   For more information see [MDL-80890](https://tracker.moodle.org/browse/MDL-80890)
297 - The following classes have been renamed.
298   Existing classes are currently unaffected.
300   | Old class name  | New class name  |
301   | ---             | ---             |
302   | `\core_user`    | `\core\user`    |
304   For more information see [MDL-81031](https://tracker.moodle.org/browse/MDL-81031)
305 - New DML constant `SQL_INT_MAX` to define the size of a large integer with cross database platform support.
307   For more information see [MDL-81282](https://tracker.moodle.org/browse/MDL-81282)
308 - Added a new `exception` L2 Namespace to APIs.
310   For more information see [MDL-81903](https://tracker.moodle.org/browse/MDL-81903)
311 - Added a mechanism to support autoloading of legacy class files.
312   This will help to reduce the number of `require_once` calls in the codebase, and move away from the use of monolithic libraries.
314   For more information see [MDL-81919](https://tracker.moodle.org/browse/MDL-81919)
315 - The following exceptions are now also available in the `\core\exception` namespace:
317     - `\coding_exception`
318     - `\file_serving_exception`
319     - `\invalid_dataroot_permissions`
320     - `\invalid_parameter_exception`
321     - `\invalid_response_exception`
322     - `\invalid_state_exception`
323     - `\moodle_exception`
324     - `\require_login_exception`
325     - `\require_login_session_timeout_exception`
326     - `\required_capability_exception`
327     - `\webservice_parameter_exception`
329   For more information see [MDL-81919](https://tracker.moodle.org/browse/MDL-81919)
330 - The following classes are now also available in the `\core\` namespace and support autoloading:
332   | Old class name       | New class name            |
333   | ---                  | ---                       |
334   | `\emoticon_manager`  | `\core\emoticon_manager`  |
335   | `\lang_string`       | `\core\lang_string`       |
337   For more information see [MDL-81920](https://tracker.moodle.org/browse/MDL-81920)
338 - The following classes have been renamed and now support autoloading.
339   Existing classes are currently unaffected.
341   | Old class name               | New class name                                          |
342   | ---                          | ---                                                     |
343   | `\moodle_url`                | `\core\url`                                             |
344   | `\progress_trace`            | `\core\output\progress_trace`                           |
345   | `\combined_progress_trace`   | `\core\output\progress_trace\combined_progress_trace`   |
346   | `\error_log_progress_trace`  | `\core\output\progress_trace\error_log_progress_trace`  |
347   | `\html_list_progress_trace`  | `\core\output\progress_trace\html_list_progress_trace`  |
348   | `\html_progress_trace`       | `\core\output\progress_trace\html_progress_trace`       |
349   | `\null_progress_trace`       | `\core\output\progress_trace\null_progress_trace`       |
350   | `\progress_trace_buffer`     | `\core\output\progress_trace\progress_trace_buffer`     |
351   | `\text_progress_trace`       | `\core\output\progress_trace\text_progress_trace`       |
353   For more information see [MDL-81960](https://tracker.moodle.org/browse/MDL-81960)
354 - The following classes are now also available in the following new
355   locations. They will continue to work in their old locations:
357   | Old classname                              | New classname                                                      |
358   | ---                                        | ---                                                                |
359   | `\action_link`                             | `\core\output\action_link`                                         |
360   | `\action_menu_filler`                      | `\core\output\action_menu\filler`                                  |
361   | `\action_menu_link_primary`                | `\core\output\action_menu\link_primary`                            |
362   | `\action_menu_link_secondary`              | `\core\output\action_menu\link_secondary`                          |
363   | `\action_menu_link`                        | `\core\output\action_menu\link`                                    |
364   | `\action_menu`                             | `\core\output\action_menu`                                         |
365   | `\block_contents`                          | `\core_block\output\block_contents`                                |
366   | `\block_move_target`                       | `\core_block\output\block_move_target`                             |
367   | `\component_action`                        | `\core\output\actions\component_action`                            |
368   | `\confirm_action`                          | `\core\output\actions\confirm_action`                              |
369   | `\context_header`                          | `\core\output\context_header`                                      |
370   | `\core\output\local\action_menu\subpanel`  | `\core\output\action_menu\subpanel`                                |
371   | `\core_renderer_ajax`                      | `\core\output\core_renderer_ajax`                                  |
372   | `\core_renderer_cli`                       | `\core\output\core_renderer_cli`                                   |
373   | `\core_renderer_maintenance`               | `\core\output\core_renderer_maintenance`                           |
374   | `\core_renderer`                           | `\core\output\core_renderer`                                       |
375   | `\custom_menu_item`                        | `\core\output\custom_menu_item`                                    |
376   | `\custom_menu`                             | `\core\output\custom_menu`                                         |
377   | `\file_picker`                             | `\core\output\file_picker`                                         |
378   | `\flexible_table`                          | `\core_table\flexible_table`                                       |
379   | `\fragment_requirements_manager`           | `\core\output\requirements\fragment_requirements_manager`          |
380   | `\help_icon`                               | `\core\output\help_icon`                                           |
381   | `\html_table_cell`                         | `\core_table\output\html_table_cell`                               |
382   | `\html_table_row`                          | `\core_table\output\html_table_row`                                |
383   | `\html_table`                              | `\core_table\output\html_table`                                    |
384   | `\html_writer`                             | `\core\output\html_writer`                                         |
385   | `\image_icon`                              | `\core\output\image_icon`                                          |
386   | `\initials_bar`                            | `\core\output\initials_bar`                                        |
387   | `\js_writer`                               | `\core\output\js_writer`                                           |
388   | `\page_requirements_manager`               | `\core\output\requirements\page_requirements_manager`              |
389   | `\paging_bar`                              | `\core\output\paging_bar`                                          |
390   | `\pix_emoticon`                            | `\core\output\pix_emoticon`                                        |
391   | `\pix_icon_font`                           | `\core\output\pix_icon_font`                                       |
392   | `\pix_icon_fontawesome`                    | `\core\output\pix_icon_fontawesome`                                |
393   | `\pix_icon`                                | `\core\output\pix_icon`                                            |
394   | `\plugin_renderer_base`                    | `\core\output\plugin_renderer_base`                                |
395   | `\popup_action`                            | `\core\output\actions\popup_action`                                |
396   | `\preferences_group`                       | `\core\output\preferences_group`                                   |
397   | `\preferences_groups`                      | `\core\output\preferences_groups`                                  |
398   | `\progress_bar`                            | `\core\output\progress_bar`                                        |
399   | `\renderable`                              | `\core\output\renderable`                                          |
400   | `\renderer_base`                           | `\core\output\renderer_base`                                       |
401   | `\renderer_factory_base`                   | `\core\output\renderer_factory\renderer_factory_base`              |
402   | `\renderer_factory`                        | `\core\output\renderer_factory\renderer_factory_interface`         |
403   | `\single_button`                           | `\core\output\single_button`                                       |
404   | `\single_select`                           | `\core\output\single_select`                                       |
405   | `\standard_renderer_factory`               | `\core\output\renderer_factory\standard_renderer_factory`          |
406   | `\table_dataformat_export_format`          | `\core_table\dataformat_export_format`                             |
407   | `\table_default_export_format_parent`      | `\core_table\base_export_format`                                   |
408   | `\table_sql`                               | `\core_table\sql_table`                                            |
409   | `\tabobject`                               | `\core\output\tabobject`                                           |
410   | `\tabtree`                                 | `\core\output\tabtree`                                             |
411   | `\templatable`                             | `\core\output\templatable`                                         |
412   | `\theme_config`                            | `\core\output\theme_config`                                        |
413   | `\theme_overridden_renderer_factory`       | `\core\output\renderer_factory\theme_overridden_renderer_factory`  |
414   | `\url_select`                              | `\core\output\url_select`                                          |
415   | `\user_picture`                            | `\core\output\user_picture`                                        |
416   | `\xhtml_container_stack`                   | `\core\output\xhtml_container_stack`                               |
417   | `\YUI_config`                              | `\core\output\requirements\yui`                                    |
419   For more information see [MDL-82183](https://tracker.moodle.org/browse/MDL-82183)
420 - 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.
421   Plugins can implement a callback to `pluginname_get_deprecated_icons()` to register their deprecated icons too.
422   When `$CFG->debugpageinfo` is enabled, a console message will display a list of the deprecated icons.
424   For more information see [MDL-82212](https://tracker.moodle.org/browse/MDL-82212)
425 - Two new optional parameters have been added to the `\core\output\notification` constructor:
426   - `null|string $title` - `null|string $icon`
428   For more information see [MDL-82297](https://tracker.moodle.org/browse/MDL-82297)
429 - 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).
431   For more information see [MDL-82490](https://tracker.moodle.org/browse/MDL-82490)
432 - A new static method, `\advanced_testcase::get_fixture_path()`, has been added to enable unit tests to fetch the path to a fixture.
434   For more information see [MDL-82627](https://tracker.moodle.org/browse/MDL-82627)
435 - 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.
437   For more information see [MDL-82627](https://tracker.moodle.org/browse/MDL-82627)
438 - The Moodle autoloader should now be registered using `\core\component::register_autoloader` rather than manually doing so in any exceptional location which requires it.
439   Note: It is not normally necessary to include the autoloader manually, as it is registered automatically when the Moodle environment is bootstrapped.
441   For more information see [MDL-82747](https://tracker.moodle.org/browse/MDL-82747)
442 - A new JS module for interacting with the Routed REST API has been introduced.
443   For more information see the documentation in the `core/fetch` module.
445   For more information see [MDL-82778](https://tracker.moodle.org/browse/MDL-82778)
446 - 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.
448   For more information see [MDL-82845](https://tracker.moodle.org/browse/MDL-82845)
449 - When rendering a renderable located within a namespace, the namespace
450   will now be included in the renderer method name with double-underscores
451   separating the namespace parts.
453   Note: Only those renderables within an `output` namespace will be
454   considered, for example `\core\output\action_menu\link` and only the
455   parts of the namespace after `output` will be included.
457   The following are examples of the new behaviour:
459   | Renderable name                          | Renderer method name                |
460   | ---                                      | ---                                 |
461   | `\core\output\action_menu\link`          | `render_action_menu__link`          |
462   | `\core\output\action_menu\link_primary`  | `render_action_menu__link_primary`  |
463   | `\core\output\action\menu\link`          | `render_action__menu__link`         |
464   | `\core\output\user_menu\link`            | `render_user_menu__link`            |
466   For more information see [MDL-83164](https://tracker.moodle.org/browse/MDL-83164)
468 #### Changed
470 - The minimum Redis server version is now 2.6.12. The minimum PHP Redis extension version is now 2.2.4.
472   For more information see [MDL-69684](https://tracker.moodle.org/browse/MDL-69684)
473 - The class autoloader has been moved to an earlier point in the Moodle bootstrap.
475   Autoloaded classes are now available to scripts using the `ABORT_AFTER_CONFIG` constant.
477   For more information see [MDL-80275](https://tracker.moodle.org/browse/MDL-80275)
478 - The `\core\dataformat::get_format_instance()` method is now public, and can be used to retrieve a writer instance for a given dataformat.
480   For more information see [MDL-81781](https://tracker.moodle.org/browse/MDL-81781)
481 - 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.
483   A new function, `\get_default_home_page_url()` has been added which will return the correct URL when this constant is returned.
485   For more information see [MDL-82066](https://tracker.moodle.org/browse/MDL-82066)
487 #### Deprecated
489 - 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.
491   For more information see [MDL-64148](https://tracker.moodle.org/browse/MDL-64148)
492 - - The following methods have been finally deprecated and removed:
493     - `\plagiarism_plugin::get_configs()`
494     - `\plagiarism_plugin::get_file_results()`
495     - `\plagiarism_plugin::update_status()`, please use `{plugin name}_before_standard_top_of_body_html` instead.
496   - Final deprecation and removal of `\plagiarism_get_file_results()`. Please use `\plagiarism_get_links()` instead.
497   - Final deprecation and removal of `\plagiarism_update_status()`. Please use `\{plugin name}_before_standard_top_of_body_html()` instead.
499   For more information see [MDL-71326](https://tracker.moodle.org/browse/MDL-71326)
500 - `\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.
502   For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
503 - The `$timeout` property of the `\navigation_cache` class has been deprecated.
505   For more information see [MDL-79628](https://tracker.moodle.org/browse/MDL-79628)
506 - The following classes are deprecated as they are handled by core_sms API and smsgateway_aws plugin:
507   - `\core\aws\admin_settings_aws_region`
508   - `\core\aws\aws_helper`
509   - `\core\aws\client_factory`
511   For more information see [MDL-80962](https://tracker.moodle.org/browse/MDL-80962)
512 - The following methods have been deprecated, existing usage should switch to use the secure `\core\encryption::encrypt()` and `\core\encryption::decrypt()` static methods:
514   - `\rc4encrypt()`
515   - `\rc4decrypt()`
516   - `\endecrypt()`
518   For more information see [MDL-81940](https://tracker.moodle.org/browse/MDL-81940)
519 - The following method has been deprecated and should not be used any longer: `\print_grade_menu()`.
521   For more information see [MDL-82157](https://tracker.moodle.org/browse/MDL-82157)
522 - The following files and their contents have been deprecated:
524   - `lib/soaplib.php`
525   - `lib/tokeniserlib.php`
527   For more information see [MDL-82191](https://tracker.moodle.org/browse/MDL-82191)
528 - The following functions have been initially deprecated:
530   - `\get_core_subsystems()`
531   - `\get_plugin_types()`
532   - `\get_plugin_list()`
533   - `\get_plugin_list_with_class()`
534   - `\get_plugin_directory()`
535   - `\normalize_component()`
536   - `\get_component_directory()`
537   - `\get_context_instance()`
539   Note: These methods have been deprecated for a long time, but previously did not emit any deprecation notice.
541   For more information see [MDL-82287](https://tracker.moodle.org/browse/MDL-82287)
542 - The following methods have been finally deprecated and will now throw an exception if called:
544   - `\get_context_instance()`
545   - `\can_use_rotated_text()`
546   - `\get_system_context()`
547   - `\print_arrow()`
549   For more information see [MDL-82287](https://tracker.moodle.org/browse/MDL-82287)
550 - The `global_navigation::load_section_activities` method is now deprecated and replaced by `global_navigation::load_section_activities_navigation`.
552   For more information see [MDL-82845](https://tracker.moodle.org/browse/MDL-82845)
553 - The following renderer methods have been deprecated from the core
554   renderer:
556   | method                               | replacement                           |
557   | ---                                  | ---                                   |
558   | `render_action_menu_link`            | `render_action_menu__link`            |
559   | `render_action_menu_link_primary`    | `render_action_menu__link_primary`    |
560   | `render_action_menu_link_secondary`  | `render_action_menu__link_secondary`  |
561   | `render_action_menu_filler`          | `render_action_menu__filler`          |
563   For more information see [MDL-83164](https://tracker.moodle.org/browse/MDL-83164)
565 #### Removed
567 - The previously deprecated function `search_generate_text_SQL` has been removed and can no longer be used.
569   For more information see [MDL-48940](https://tracker.moodle.org/browse/MDL-48940)
570 - The previously deprecated function `\core_text::reset_caches()` has been removed and can no longer be used.
572   For more information see [MDL-71748](https://tracker.moodle.org/browse/MDL-71748)
573 - The following previously deprecated methods have been removed and can no longer be used:
574     - `\renderer_base::should_display_main_logo()`
576   For more information see [MDL-73165](https://tracker.moodle.org/browse/MDL-73165)
577 - Final deprecation of `\print_error()`. Please use the `\moodle_exception` class instead.
579   For more information see [MDL-74484](https://tracker.moodle.org/browse/MDL-74484)
580 - Final deprecation of `\core\task\manager::ensure_adhoc_task_qos()`.
582   For more information see [MDL-74843](https://tracker.moodle.org/browse/MDL-74843)
583 - Support for the deprecated block and activity namespaces `<component>\local\views\secondary`, which supported the overriding of secondary navigation, has now been entirely removed.
585   For more information see [MDL-74939](https://tracker.moodle.org/browse/MDL-74939)
586 - Remove deprecation layer for YUI JS Events. The deprecation layer was introduced with MDL-70990 and MDL-72291.
588   For more information see [MDL-77167](https://tracker.moodle.org/browse/MDL-77167)
590 #### Fixed
592 - 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.
594   For more information see [MDL-79628](https://tracker.moodle.org/browse/MDL-79628)
595 - 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.
596   This includes the following methods:
597     - `setUp()`
598     - `tearDown()`
599     - `setUpBeforeClass()`
600     - `tearDownAfterClass()`
602   For more information see [MDL-81523](https://tracker.moodle.org/browse/MDL-81523)
603 - Use server timezone when constructing `\DateTimeImmutable` for the system `\core\clock` implementation.
605   For more information see [MDL-81894](https://tracker.moodle.org/browse/MDL-81894)
607 ### core_availability
609 #### Removed
611 - The previously deprecated renderer `render_core_availability_multiple_messages` method has been removed.
613   For more information see [MDL-82223](https://tracker.moodle.org/browse/MDL-82223)
615 ### core_backup
617 #### Removed
619 - The `\core_backup\copy\copy` class has been deprecated and removed. Please use `\copy_helper` instead.
621   For more information see [MDL-75022](https://tracker.moodle.org/browse/MDL-75022)
622 - The following methods in the `\base_controller` class have been removed:
624   | Method                          | Replacement                                                     |
625   | ---                             | ---                                                             |
626   | `\base_controller::set_copy()`  | Use a restore controller for storing copy information instead.  |
627   | `\base_controller::get_copy()`  | `\restore_controller::get_copy()`                               |
629   For more information see [MDL-75025](https://tracker.moodle.org/browse/MDL-75025)
631 ### core_badges
633 #### Added
635 - The following new webservices have been added:
637    - `core_badges_enable_badges`
639    - `core_badges_disable_badges`
641   For more information see [MDL-82168](https://tracker.moodle.org/browse/MDL-82168)
643 #### Changed
645 - 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:
646     - `recipientid`: The ID of the user who received the badge.
647     - `recipientfullname`: The full name of the user who received the badge.
649   For more information see [MDL-82742](https://tracker.moodle.org/browse/MDL-82742)
651 #### Deprecated
653 - The `badges/newbadge.php` page has been deprecated and merged with `badges/edit.php`. Please, use `badges/edit.php` instead.
655   For more information see [MDL-43938](https://tracker.moodle.org/browse/MDL-43938)
656 - The `OPEN_BADGES_V1` constant is deprecated and should not be used anymore.
658   For more information see [MDL-70983](https://tracker.moodle.org/browse/MDL-70983)
659 - The `course_badges` systemreport has been deprecated and merged with the badges systemreport. Please, use the badges systemreport instead.
661   For more information see [MDL-82503](https://tracker.moodle.org/browse/MDL-82503)
662 - The `$showmanage` parameter to the `\core_badges\output\standard_action_bar` constructor has been deprecated and should not be used anymore.
664   For more information see [MDL-82503](https://tracker.moodle.org/browse/MDL-82503)
665 - The `badges/view.php` page has been deprecated and merged with `badges/index.php`. Please, use `badges/index.php` instead.
667   For more information see [MDL-82503](https://tracker.moodle.org/browse/MDL-82503)
669 #### Removed
671 - Final removal of `BADGE_BACKPACKAPIURL` and `BADGE_BACKPACKWEBURL` constants.
673   For more information see [MDL-70983](https://tracker.moodle.org/browse/MDL-70983)
675 ### core_cache
677 #### Added
679 - The following classes have been renamed and now support autoloading.
681   Existing classes are currently unaffected.
683   | Old class name                     | New class name                                     |
684   | ---                                | ---                                                |
685   | `\cache_definition`                | `\core_cache\definition`                           |
686   | `\cache_request`                   | `\core_cache\request_cache`                        |
687   | `\cache_session`                   | `\core_cache\session_cache`                        |
688   | `\cache_cached_object`             | `\core_cache\cached_object`                        |
689   | `\cache_config`                    | `\core_cache\config`                               |
690   | `\cache_config_writer`             | `\core_cache\config_writer`                        |
691   | `\cache_config_disabled`           | `\core_cache\disabled_config`                      |
692   | `\cache_disabled`                  | `\core_cache\disabled_cache`                       |
693   | `\config_writer`                   | `\core_cache\config_writer`                        |
694   | `\cache_data_source`               | `\core_cache\data_source_interface`                |
695   | `\cache_data_source_versionable`   | `\core_cache\versionable_data_source_interface`    |
696   | `\cache_exception`                 | `\core_cache\exception/cache_exception`            |
697   | `\cache_factory`                   | `\core_cache\factory`                              |
698   | `\cache_factory_disabled`          | `\core_cache\disabled_factory`                     |
699   | `\cache_helper`                    | `\core_cache\helper`                               |
700   | `\cache_is_key_aware`              | `\core_cache\key_aware_cache_interface`            |
701   | `\cache_is_lockable`               | `\core_cache\lockable_cache_interface`             |
702   | `\cache_is_searchable`             | `\core_cache\searchable_cache_interface`           |
703   | `\cache_is_configurable`           | `\core_cache\configurable_cache_interface`         |
704   | `\cache_loader`                    | `\core_cache\loader_interface`                     |
705   | `\cache_loader_with_locking`       | `\core_cache\loader_with_locking_interface`        |
706   | `\cache_lock_interface`            | `\core_cache\cache_lock_interface`                 |
707   | `\cache_store`                     | `\core_cache\store`                                |
708   | `\cache_store_interface`           | `\core_cache\store_interface`                      |
709   | `\cache_ttl_wrapper`               | `\core_cache\ttl_wrapper`                          |
710   | `\cacheable_object`                | `\core_cache\cacheable_object_interface`           |
711   | `\cacheable_object_array`          | `\core_cache\cacheable_object_array`               |
712   | `\cache_definition_mappings_form`  | `\core_cache\form/cache_definition_mappings_form`  |
713   | `\cache_definition_sharing_form`   | `\core_cache\form/cache_definition_sharing_form`   |
714   | `\cache_lock_form`                 | `\core_cache\form/cache_lock_form`                 |
715   | `\cache_mode_mappings_form`        | `\core_cache\form/cache_mode_mappings_form`        |
717   For more information see [MDL-82158](https://tracker.moodle.org/browse/MDL-82158)
719 ### core_communication
721 #### Changed
723 - The `\core_communication\helper::get_enrolled_users_for_course()` method now accepts an additional argument that can filter only active enrolments.
725   For more information see [MDL-81951](https://tracker.moodle.org/browse/MDL-81951)
727 ### core_completion
729 #### Added
731 - 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.
733   For more information see [MDL-83008](https://tracker.moodle.org/browse/MDL-83008)
735 #### Changed
737 - 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`.
739   For more information see [MDL-81749](https://tracker.moodle.org/browse/MDL-81749)
741 ### core_course
743 #### Added
745 - - New optional `sectionNum` parameter has been added to `activitychooser` AMD module initializer.
746   - New option `sectionnum` parameter has been added to `get_course_content_items()` external function.
747   - New optional `sectionnum` parameter has been added to `get_content_items_for_user_in_course()` function.
749   For more information see [MDL-81675](https://tracker.moodle.org/browse/MDL-81675)
750 - 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.
752   For more information see [MDL-81699](https://tracker.moodle.org/browse/MDL-81699)
753 - 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.
755   For more information see [MDL-81767](https://tracker.moodle.org/browse/MDL-81767)
756 - New `\core_course\hook\before_activitychooserbutton_exported` hook added to allow third-party plugins to extend activity chooser button options.
758   For more information see [MDL-81767](https://tracker.moodle.org/browse/MDL-81767)
759 - The following methods have been updated to accept a section name in addition to the section number:
760   - `\behat_course::i_open_section_edit_menu()`
761   - `\behat_course::i_show_section()`
762   - `\behat_course::i_hide_section(),`
763   - `\behat_course::i_wait_until_section_is_available()`
764   - `\behat_course::show_section_link_exists()`
765   - `\behat_course::hide_section_link_exists()`
766   - `\behat_course::section_exists()`
768   For more information see [MDL-82259](https://tracker.moodle.org/browse/MDL-82259)
770 #### Changed
772 - 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:
773   - Add static element in the _reset_course_form_definition method before all the options with the Delete string:
774       `$mform->addElement('static', 'assigndelete', get_string('delete'));`
775   - Review all the strings used in the reset page to remove the "Delete" or "Remove" words from them.
777   For more information see [MDL-81872](https://tracker.moodle.org/browse/MDL-81872)
778 - The external function `core_course_get_contents` now returns the `component` and `itemid` of sections.
780   For more information see [MDL-82385](https://tracker.moodle.org/browse/MDL-82385)
782 #### Deprecated
784 - The `data-sectionid` attribute in the activity chooser has been deprecated. Please update your code to use `data-sectionnum` instead.
786   For more information see [MDL-81676](https://tracker.moodle.org/browse/MDL-81676)
787 - The `$course` parameter in the constructor of the `\core_course\output\actionbar\group_selector` class has been deprecated and is no longer used.
789   For more information see [MDL-82393](https://tracker.moodle.org/browse/MDL-82393)
791 #### Removed
793 - The previously deprecated `\print_course_request_buttons()` method has been removed and can no longer be used.
795   For more information see [MDL-73976](https://tracker.moodle.org/browse/MDL-73976)
796 - The `$course` class property in the `\core_course\output\actionbar\group_selector` class has been removed.
798   For more information see [MDL-82393](https://tracker.moodle.org/browse/MDL-82393)
800 ### core_courseformat
802 #### Added
804 - The constructor of `\core_courseformat\output\local\state\cm` has been updated to accept a new optional parameter, `$istrackeduser`.
805   If `istrackeduser` is pre-computed for the course module's course, it can be provided here to avoid an additional function call.
807   For more information see [MDL-81610](https://tracker.moodle.org/browse/MDL-81610)
808 - Added new `core_courseformat_create_module` webservice to create new module (with quickcreate feature) instances in the course.
810   For more information see [MDL-81767](https://tracker.moodle.org/browse/MDL-81767)
811 - A new `$disabled` parameter has been added to the following `html_writer` methods:
813   - `\core\output\html_writer::select()`
814   - `\core\output\html_writer::select_optgroup()`
815   - `\core\output\html_writer::select_option()`
817   For more information see [MDL-82146](https://tracker.moodle.org/browse/MDL-82146)
818 - A new class, `\core_courseformat\output\local\content\basecontrolmenu`, has been created.
819   The following existing classes extend the new class:
821    - `\core_courseformat\output\local\content\cm\controlmenu`
822    - `\core_courseformat\output\local\content\section\controlmenu`
824   For more information see [MDL-82510](https://tracker.moodle.org/browse/MDL-82510)
825 - 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.
827   For more information see [MDL-82510](https://tracker.moodle.org/browse/MDL-82510)
829 ### core_customfield
831 #### Changed
833 - 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.
835   For more information see [MDL-82488](https://tracker.moodle.org/browse/MDL-82488)
837 ### core_external
839 #### Changed
841 - The external function `core_webservice_external::get_site_info` now returns the default home page URL when needed.
843   For more information see [MDL-82844](https://tracker.moodle.org/browse/MDL-82844)
845 ### core_files
847 #### Added
849 - 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.
851   For more information see [MDL-75850](https://tracker.moodle.org/browse/MDL-75850)
852 - 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.
854   For more information see [MDL-83245](https://tracker.moodle.org/browse/MDL-83245)
856 ### core_filters
858 #### Added
860 - Added support for autoloading of filters from `\filter_[filtername]\filter`. Existing classes should be renamed to use the new namespace.
862   For more information see [MDL-82427](https://tracker.moodle.org/browse/MDL-82427)
864 #### Deprecated
866 - The `\core_filters\filter_manager::text_filtering_hash` method has been finally deprecated and removed.
868   For more information see [MDL-82427](https://tracker.moodle.org/browse/MDL-82427)
870 ### core_form
872 #### Added
874 - The `duration` form field type has been modified to validate that the supplied value is a positive value.
875   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.
876   Where a negative duration _is_ allowed, the `allownegative` attribute can be set to `true`.
878   For more information see [MDL-82687](https://tracker.moodle.org/browse/MDL-82687)
880 ### core_grades
882 #### Changed
884 - The grade `itemname` property contained in the return structure of the following external methods is now PARAM_RAW:
885     - `core_grades_get_gradeitems`
886     - `gradereport_user_get_grade_items`
888   For more information see [MDL-80017](https://tracker.moodle.org/browse/MDL-80017)
890 #### Deprecated
892 - 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.
894   For more information see [MDL-80744](https://tracker.moodle.org/browse/MDL-80744)
895 - 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.
897   For more information see [MDL-80744](https://tracker.moodle.org/browse/MDL-80744)
898 - 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.
900   For more information see [MDL-80744](https://tracker.moodle.org/browse/MDL-80744)
901 - The `\core_grades_renderer::group_selector()` method has been deprecated. Please use `\core_course\output\actionbar\renderer` to render a `group_selector` renderable instead.
903   For more information see [MDL-80745](https://tracker.moodle.org/browse/MDL-80745)
905 #### Removed
907 - The following previously deprecated Behat step helper methods have been removed and can no longer be used:
908    - `\behat_grade::select_in_gradebook_navigation_selector()`
909    - `\behat_grade::select_in_gradebook_tabs()`
911   For more information see [MDL-74581](https://tracker.moodle.org/browse/MDL-74581)
913 ### core_message
915 #### Changed
917 - The `\core_message\helper::togglecontact_link_params()` method now accepts a new optional `$isrequested` parameter to indicate the status of the contact request.
919   For more information see [MDL-81428](https://tracker.moodle.org/browse/MDL-81428)
921 #### Deprecated
923 - The `core_message/remove_contact_button` template is deprecated and will be removed in a future release.
925   For more information see [MDL-81428](https://tracker.moodle.org/browse/MDL-81428)
927 #### Removed
929 - Final deprecation of the `MESSAGE_DEFAULT_LOGGEDOFF`, and `MESSAGE_DEFAULT_LOGGEDIN` constants.
931   For more information see [MDL-73284](https://tracker.moodle.org/browse/MDL-73284)
933 ### core_question
935 #### Added
937 - A new utility function `\question_utils::format_question_fragment()` has been created so that question content can filter based on filters.
939   For more information see [MDL-78662](https://tracker.moodle.org/browse/MDL-78662)
941 #### Changed
943 - `\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.
945   For more information see [MDL-81407](https://tracker.moodle.org/browse/MDL-81407)
947 ### core_report
949 #### Added
951 - Report has been added to subsystem components list.
953   For more information see [MDL-81771](https://tracker.moodle.org/browse/MDL-81771)
954 - A new general output class, `\core_report\output\coursestructure`, has been created.
956   For more information see [MDL-81771](https://tracker.moodle.org/browse/MDL-81771)
958 #### Changed
960 - 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.
962   For more information see [MDL-78773](https://tracker.moodle.org/browse/MDL-78773)
964 #### Removed
966 - The previously deprecated `\core\report_helper::save_selected_report()` method has been removed and can no longer be used.
968   For more information see [MDL-72353](https://tracker.moodle.org/browse/MDL-72353)
970 ### core_reportbuilder
972 #### Added
974 - 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.
976   For more information see [MDL-52046](https://tracker.moodle.org/browse/MDL-52046)
977 - System reports now support native entity column aggregation via each columns `set_aggregation()` method
979   For more information see [MDL-76392](https://tracker.moodle.org/browse/MDL-76392)
980 - The following external methods now return tags data relevant to each custom report:
981     - `core_reportbuilder_list_reports`
982     - `core_reportbuilder_retrieve_report`
984   For more information see [MDL-81433](https://tracker.moodle.org/browse/MDL-81433)
985 - Added a new database helper method `sql_replace_parameters` to help ensure uniqueness of parameters within a SQL expression.
987   For more information see [MDL-81434](https://tracker.moodle.org/browse/MDL-81434)
988 - 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").
990   For more information see [MDL-82466](https://tracker.moodle.org/browse/MDL-82466)
991 - 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:
993     - `add_columns_from_entity()`
994     - `add_filters_from_entity()`
995     - `report_element_search()`
997   For more information see [MDL-82529](https://tracker.moodle.org/browse/MDL-82529)
999 #### Changed
1001 - In order to better support float values in filter forms, the following filter types now cast given SQL prior to comparison:
1003     - `duration`
1004     - `filesize`
1005     - `number`
1007   For more information see [MDL-81168](https://tracker.moodle.org/browse/MDL-81168)
1008 - 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.
1010   For more information see [MDL-81330](https://tracker.moodle.org/browse/MDL-81330)
1011 - 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):
1012   - `core_reportbuilder_generator::create_schedule`
1013   - `core_reportbuilder\local\helpers\schedule::create_schedule()`
1014   - `core_reportbuilder\local\helpers\schedule::calculate_next_send_time()`
1016   For more information see [MDL-82041](https://tracker.moodle.org/browse/MDL-82041)
1017 - The following classes have been moved to use the new exception API as a L2 namespace:
1019   | Old class                                           | New class                                                     |
1020   | -----------                                         | -----------                                                   |
1021   | `\core_reportbuilder\report_access_exception`       | `\core_reportbuilder\exception\report_access_exception`       |
1022   | `\core_reportbuilder\source_invalid_exception`      | `\core_reportbuilder\exception\source_invalid_exception`      |
1023   | `\core_reportbuilder\source_unavailable_exception`  | `\core_reportbuilder\exception\source_unavailable_exception`  |
1025   For more information see [MDL-82133](https://tracker.moodle.org/browse/MDL-82133)
1027 #### Removed
1029 - Support for the following entity classes, renamed since 4.1, have now been removed completely:
1031   - `\core_admin\local\entities\task_log`
1032   - `\core_cohort\local\entities\cohort`
1033   - `\core_cohort\local\entities\cohort_member`
1034   - `\core_course\local\entities\course_category`
1035   - `\report_configlog\local\entities\config_change`
1037   For more information see [MDL-74583](https://tracker.moodle.org/browse/MDL-74583)
1038 - The following previously deprecated local helper methods have been removed and can no longer be used:
1039     - `\core_reportbuilder\local\helpers\audience::get_all_audiences_menu_types()`
1040     - `\core_reportbuilder\local\helpers\report::get_available_columns()`
1042   For more information see [MDL-76690](https://tracker.moodle.org/browse/MDL-76690)
1044 ### core_role
1046 #### Added
1048 - All session management has been moved to the `\core\session\manager` class.
1049   This removes the dependancy to use the `sessions` table.
1051   Session management plugins (like Redis) should now inherit
1052   the base `\core\session\handler` class, which implements
1053   `SessionHandlerInterface`, and override methods as required.
1055   The following methods in `\core\session\manager` have been deprecated:
1056   | Old method name                  | New method name           |
1057   | ---                              | ---                       |
1058   | `kill_all_sessions`              | `destroy_all`             |
1059   | `kill_session`                   | `destroy`                 |
1060   | `kill_sessions_for_auth_plugin`  | `destroy_by_auth_plugin`  |
1061   | `kill_user_sessions`             | `destroy_user_sessions`   |
1063   For more information see [MDL-66151](https://tracker.moodle.org/browse/MDL-66151)
1065 ### core_sms
1067 #### Added
1069 - A new `\core_sms` subsystem has been created.
1071   For more information see [MDL-81924](https://tracker.moodle.org/browse/MDL-81924)
1073 ### core_table
1075 #### Added
1077 - A new `$reponsive` property (defaulting to `true`) has been added to the `\core_table\flexible_table` class.
1078   This property allows you to control whether the table is rendered as a responsive table.
1080   For more information see [MDL-80748](https://tracker.moodle.org/browse/MDL-80748)
1082 #### Changed
1084 - 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.
1085   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.
1087   For more information see [MDL-82567](https://tracker.moodle.org/browse/MDL-82567)
1089 ### core_user
1091 #### Added
1093 - New `\core_user\hook\extend_user_menu` hook added to allow third party plugins to extend the user menu navigation.
1095   For more information see [MDL-71823](https://tracker.moodle.org/browse/MDL-71823)
1096 - 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.
1098   For more information see [MDL-82066](https://tracker.moodle.org/browse/MDL-82066)
1100 #### Changed
1102 - The visibility of the following methods have been increased to public:
1103   - `\core_user\form\private_files::check_access_for_dynamic_submission()`
1104   - `\core_user\form\private_files::get_options()`
1106   For more information see [MDL-78293](https://tracker.moodle.org/browse/MDL-78293)
1107 - The user profile field `\profile_field_base::display_name()` method now accepts an optional `$escape` parameter to define whether to escape the returned name.
1109   For more information see [MDL-82494](https://tracker.moodle.org/browse/MDL-82494)
1111 #### Deprecated
1113 - 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()`.
1115   For more information see [MDL-78030](https://tracker.moodle.org/browse/MDL-78030)
1117 ### availability
1119 #### Changed
1121 - 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).
1123   For more information see [MDL-81850](https://tracker.moodle.org/browse/MDL-81850)
1125 ### customfield_number
1127 #### Added
1129 - A new hook, `\customfield_number\hook\add_custom_providers`, has been added which allows automatic calculation of number course custom field.
1131   For more information see [MDL-82715](https://tracker.moodle.org/browse/MDL-82715)
1132 - 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.
1134   For more information see [MDL-82715](https://tracker.moodle.org/browse/MDL-82715)
1135 - Added new webservice `customfield_number_recalculate_value`, has been added to recalculate a value of number course custom field.
1137   For more information see [MDL-82715](https://tracker.moodle.org/browse/MDL-82715)
1138 - A new task, `\customfield_number\task\cron`, cron task that recalculates automatically calculated number course custom fields.
1140   For more information see [MDL-82715](https://tracker.moodle.org/browse/MDL-82715)
1142 ### customfield_select
1144 #### Changed
1146 - The field controller `get_options` method now returns each option pre-formatted.
1148   For more information see [MDL-82481](https://tracker.moodle.org/browse/MDL-82481)
1150 ### editor_tiny
1152 #### Changed
1154 - The `helplinktext` language string is no longer required by editor plugins, instead the `pluginname` will be used in the help dialogue.
1156   For more information see [MDL-81572](https://tracker.moodle.org/browse/MDL-81572)
1158 ### factor_sms
1160 #### Removed
1162 - The following classes are removed as the SMS feature now takes advantage of `core_sms` API:
1163   - `\factor_sms\event\sms_sent`
1164   - `\factor_sms\local\smsgateway\aws_sns`
1165   - `\factor_sms\local\smsgateway\gateway_interface`
1167   For more information see [MDL-80962](https://tracker.moodle.org/browse/MDL-80962)
1169 ### gradereport_grader
1171 #### Deprecated
1173 - The `gradereport_grader/group` ESM has been deprecated. Please use `core_course/actionbar/group` instead.
1175   For more information see [MDL-80745](https://tracker.moodle.org/browse/MDL-80745)
1177 ### gradereport_singleview
1179 #### Deprecated
1181 - The `gradereport_singleview/group` ESM has been deprecated. Please use `core_course/actionbar/group` instead.
1183   For more information see [MDL-80745](https://tracker.moodle.org/browse/MDL-80745)
1185 ### gradereport_user
1187 #### Deprecated
1189 - The `gradereport_user/group` ESM has been deprecated. Please use `core_course/actionbar/group` instead.
1191   For more information see [MDL-80745](https://tracker.moodle.org/browse/MDL-80745)
1193 ### mod
1195 #### Added
1197 - Added new `FEATURE_QUICKCREATE` for modules that can be quickly created in the course wihout filling a previous form.
1199   For more information see [MDL-81767](https://tracker.moodle.org/browse/MDL-81767)
1201 ### mod_assign
1203 #### Added
1205 - Added 2 new settings:
1206     - `mod_assign/defaultgradetype`
1207       - The value of this setting dictates which of the `GRADE_TYPE_X` constants is the default option when creating new instances of the assignment.
1208       - The default value is `GRADE_TYPE_VALUE` (Point)
1209     - `mod_assign/defaultgradescale`
1210       - The value of this setting dictates which of the existing scales is the default option when creating new instances of the assignment.
1212   For more information see [MDL-54105](https://tracker.moodle.org/browse/MDL-54105)
1213 - 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.
1215   For more information see [MDL-74050](https://tracker.moodle.org/browse/MDL-74050)
1216 - A new default value for `attemptreopenmethod` has been set to "Automatically until pass".
1218   For more information see [MDL-80741](https://tracker.moodle.org/browse/MDL-80741)
1219 - 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.
1221   For more information see [MDL-80750](https://tracker.moodle.org/browse/MDL-80750)
1223 #### Deprecated
1225 - The constant `ASSIGN_ATTEMPT_REOPEN_METHOD_NONE` has been deprecated, and a new default value for `attemptreopenmethod` has been set to "Automatically until pass".
1227   For more information see [MDL-80741](https://tracker.moodle.org/browse/MDL-80741)
1228 - The `\assign_feedback_plugin::get_grading_batch_operations()` method is now deprecated. Use `assign_feedback_plugin::get_grading_batch_operation_details` instead.
1230   For more information see [MDL-80750](https://tracker.moodle.org/browse/MDL-80750)
1231 - The `\assign_grading_table::plugingradingbatchoperations` property has been removed. You can use `\assign_feedback_plugin::get_grading_batch_operation_details()` instead.
1233   For more information see [MDL-80750](https://tracker.moodle.org/browse/MDL-80750)
1234 - The `$submissionpluginenabled` and `$submissioncount` parameters from the constructor of the `\mod_assign\output::grading_actionmenu` class have been deprecated.
1236   For more information see [MDL-80752](https://tracker.moodle.org/browse/MDL-80752)
1237 - The method `\assign::process_save_grading_options()` has been deprecated as it is no longer used.
1239   For more information see [MDL-82681](https://tracker.moodle.org/browse/MDL-82681)
1241 #### Removed
1243 - 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.
1245   For more information see [MDL-80741](https://tracker.moodle.org/browse/MDL-80741)
1246 - The `\mod_assign_grading_options_form` class has been removed since it is no longer used.
1248   For more information see [MDL-82857](https://tracker.moodle.org/browse/MDL-82857)
1250 ### mod_bigbluebuttonbn
1252 #### Added
1254 - Added new `meeting_info` value to show presentation file on BBB activity page
1256   For more information see [MDL-82520](https://tracker.moodle.org/browse/MDL-82520)
1257 - The `broker::process_meeting_events()` method has been extended to call the `::process_action()` method implemented by plugins.
1259   For more information see [MDL-82872](https://tracker.moodle.org/browse/MDL-82872)
1261 #### Removed
1263 - Mobile support via plugin has been removed as it is now natively available in the Moodle App.
1265   For more information see [MDL-82447](https://tracker.moodle.org/browse/MDL-82447)
1267 ### mod_data
1269 #### Added
1271 - The `\data_add_record()` method accepts a new `$approved` parameter to set the corresponding state of the new record.
1273   For more information see [MDL-81274](https://tracker.moodle.org/browse/MDL-81274)
1275 #### Deprecated
1277 - The `\mod_data_renderer::render_fields_footer()` method has been deprecated as it's no longer used.
1279   For more information see [MDL-81321](https://tracker.moodle.org/browse/MDL-81321)
1281 ### mod_feedback
1283 #### Deprecated
1285 - The `\feedback_check_is_switchrole()` function has been deprecated as it didn't work.
1287   For more information see [MDL-72424](https://tracker.moodle.org/browse/MDL-72424)
1288 - The method `\mod_feedback\output\renderer::create_template_form()` has been deprecated. It is not used anymore.
1290   For more information see [MDL-81742](https://tracker.moodle.org/browse/MDL-81742)
1292 ### mod_quiz
1294 #### Added
1296 - 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):
1297   - `\quiz_overview_report::regrade_attempts()`
1298   - `\quiz_overview_report::regrade_batch_of_attempts()`
1300   For more information see [MDL-79546](https://tracker.moodle.org/browse/MDL-79546)
1302 ### qbank_managecategories
1304 #### Changed
1306 - The `\qbank_managecategories\question_category_object` class has been deprecated.
1307   Methods previously part of this class have been moved to either
1309    - `\qbank_managecategories\question_categories`,
1310     for the parts used within this plugin for display a list of categories; or
1312   `\core_question\category_manager`,
1313     for the parts used for generate CRUD operations on question categories, including outside of this plugin.
1315   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.
1317   For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
1319 #### Deprecated
1321 - Category lists are now generated by templates. The following classes have been deprecated:
1322   - `\qbank_managecategories\question_category_list`
1323   - `\qbank_managecategories\question_category_list_item`
1325   For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
1326 - The following methods of `\qbank_managecategories\helper`have been deprecated and moved to
1327   `\core_question\category_manager`:
1329   | Method                                               | Replacement                                                                  |
1330   | ---                                                  | ---                                                                          |
1331   | `question_is_only_child_of_top_category_in_context`  | `\core_question\category_manager::is_only_child_of_top_category_in_context`  |
1332   | `question_is_top_category`                           | `\core_question\category_manager::is_top_category`                           |
1333   | `question_can_delete_cat`                            | `\core_question\category_manager::can_delete_cat`                            |
1335   For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
1336 - `\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.
1338   For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
1340 ### report_eventlist
1342 #### Deprecated
1344 - The following deprecated methods in `report_eventlist_list_generator` have been removed:
1345   - `\report_eventlist_list_generator::get_core_events_list()`
1346   - `\report_eventlist_list_generator::get_non_core_event_list()`
1348   For more information see [MDL-72786](https://tracker.moodle.org/browse/MDL-72786)
1350 ### report_log
1352 #### Added
1354 - The `\report_log_renderable::get_activities_list()` method return values now includes an array of disabled elements, in addition to the array of activities.
1356   For more information see [MDL-82146](https://tracker.moodle.org/browse/MDL-82146)
1358 ### repository_onedrive
1360 #### Removed
1362 - The following previously deprecated methods have been removed and can no longer be used:
1363   - `\repository_onedrive::can_import_skydrive_files()`
1364   - `\repository_onedrive::import_skydrive_files()`
1366   For more information see [MDL-72620](https://tracker.moodle.org/browse/MDL-72620)
1368 ### theme
1370 #### Added
1372 - Added a new `\renderer_base::get_page` getter method.
1374   For more information see [MDL-81597](https://tracker.moodle.org/browse/MDL-81597)
1375 - New `core/context_header` mustache template has been added. This template can be overridden by themes to modify the context header.
1377   For more information see [MDL-81597](https://tracker.moodle.org/browse/MDL-81597)
1379 #### Deprecated
1381 - The method `\core\output\core_renderer::render_context_header` has been deprecated please use `\core\output\core_renderer::render($contextheader)` instead
1383   For more information see [MDL-82160](https://tracker.moodle.org/browse/MDL-82160)
1385 #### Removed
1387 - Removed all references to `iconhelp`, `icon-pre`, `icon-post`, `iconlarge`, and `iconsort` CSS classes.
1389   For more information see [MDL-74251](https://tracker.moodle.org/browse/MDL-74251)
1391 ### theme_boost
1393 #### Added
1395 - Bridged `theme-color-level` using a new `shift-color` function to prepare for its deprecation in Boostrap 5.
1397   For more information see [MDL-81816](https://tracker.moodle.org/browse/MDL-81816)
1398 - Upon upgrading Font Awesome from version 4 to 6, the solid family was selected by default.
1400   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.
1402   Icons can select the FontAwesome family (`fa-regular`, `fa-brands`, `fa-solid`) by using the relevant class name when display the icon.
1404   For more information see [MDL-82210](https://tracker.moodle.org/browse/MDL-82210)
1406 #### Changed
1408 - The Bootstrap `.no-gutters` class is no longer used, use `.g-0`  instead.
1410   For more information see [MDL-81818](https://tracker.moodle.org/browse/MDL-81818)
1411 - The `.page-header-headings` CSS class now has a background colour applied to the maintenance and secure layouts.
1412   You may need to override this class in your maintenance and secure layouts if both of the following are true:
1413   - Your theme plugin inherits from `theme_boost` and uses this CSS class
1414   - Your theme plugin applies a different styling for the page header for the maintenance and secure layouts.
1416   For more information see [MDL-83047](https://tracker.moodle.org/browse/MDL-83047)
1418 ### tool
1420 #### Removed
1422 - The Convert to InnoDB plugin (`tool_innodb`) has been completely removed.
1424   For more information see [MDL-78776](https://tracker.moodle.org/browse/MDL-78776)
1426 ### tool_behat
1428 #### Added
1430 - Behat tests are now checking for deprecated icons. This check can be disabled by using the `--no-icon-deprecations` option in the behat CLI.
1432   For more information see [MDL-82212](https://tracker.moodle.org/browse/MDL-82212)
1434 ### tool_oauth2
1436 #### Added
1438 - 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.
1440   For more information see [MDL-67554](https://tracker.moodle.org/browse/MDL-67554)