NOBUG: Add upgrade notes
[moodle.git] / UPGRADING.md
blob9afd4e91e6ac769285ed20980b9cfd3dc34f71d7
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 - `\core\output\activity_header` now uses the `is_title_allowed()` method when setting the title in the constructor.
20   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.
22   For example, the Boost theme sets `$THEME->activityheaderconfig['notitle'] = true;` by default, but in its `secure` pagelayout, it has `'notitle' = false`.
23   This prevents display of the title in all layouts except `secure`.
25   For more information see [MDL-75610](https://tracker.moodle.org/browse/MDL-75610)
26 - 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.
28   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.
30   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.
32   For more information see [MDL-79121](https://tracker.moodle.org/browse/MDL-79121)
33 - 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.
35   For more information see [MDL-83473](https://tracker.moodle.org/browse/MDL-83473)
37 #### Changed
39 - 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.
41   For more information see [MDL-46739](https://tracker.moodle.org/browse/MDL-46739)
42 - 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.
44   For more information see [MDL-75075](https://tracker.moodle.org/browse/MDL-75075)
45 - All uses of the following PHPUnit methods have been removed as these methods are
46   deprecated upstream without direct replacement:
48   - `withConsecutive`
49   - `willReturnConsecutive`
50   - `onConsecutive`
52   Any plugin using these methods must update their uses.
54   For more information see [MDL-81308](https://tracker.moodle.org/browse/MDL-81308)
55 - The Moodle subplugins.json format has been updated to accept a new `subplugintypes` object.
57   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.
59   Both options can co-exist, but if both are present they must be kept in-sync.
61   ```json
62   {
63       "subplugintypes": {
64           "tiny": "plugins"
65       },
66       "plugintypes": {
67           "tiny": "lib/editor/tiny/plugins"
68       }
69   }
70   ```
72   For more information see [MDL-83705](https://tracker.moodle.org/browse/MDL-83705)
73 - The following test classes have been moved into autoloadable locations:
75   | Old location | New classname |
76   | --- | --- |
77   | `\core\tests\route_testcase` | `\core\tests\router\route_testcase` |
78   | `\core\router\mocking_route_loader` | `\core\tests\router\mocking_route_loader` |
80   For more information see [MDL-83968](https://tracker.moodle.org/browse/MDL-83968)
82 #### Deprecated
84 - 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`.
86   For more information see [MDL-71257](https://tracker.moodle.org/browse/MDL-71257)
87 - 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`.
89   For more information see [MDL-71257](https://tracker.moodle.org/browse/MDL-71257)
90 - question_make_default_categories()
92   No longer creates a default category in either CONTEXT_SYSTEM, CONTEXT_COURSE, or CONTEXT_COURSECAT.
93   Superceded by question_get_default_category which can optionally create one if it does not exist.
95   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
96 - question_delete_course()
98   No replacement. Course contexts no longer hold question categories.
100   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
101 - question_delete_course_category()
103   Course category contexts no longer hold question categories.
105   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
106 - The 'core_renderer::sr_text()' function has been deprecated, use 'core_renderer::visually_hidden_text()' instead.
108   For more information see [MDL-81825](https://tracker.moodle.org/browse/MDL-81825)
110 #### Removed
112 - moodle_process_email() has been deprecated with the removal of the unused and non-functioning admin/process_email.php.
114   For more information see [MDL-61232](https://tracker.moodle.org/browse/MDL-61232)
115 - The method `site_registration_form::add_select_with_email()` has been finally deprecated and will now throw an exception if called.
117   For more information see [MDL-71472](https://tracker.moodle.org/browse/MDL-71472)
118 - Final deprecation of methods `task_base::is_blocking` and `task_base::set_blocking`.
120   For more information see [MDL-81509](https://tracker.moodle.org/browse/MDL-81509)
121 - Oracle support has been removed in LMS, with the exception of report builder which will be handled in a separate issue (MDL-80173).
123   For more information see [MDL-83172](https://tracker.moodle.org/browse/MDL-83172)
124 - Support for `subplugins.php` files has been removed. All subplugin metadata must be created in a `subplugins.json` file.
126   For more information see [MDL-83703](https://tracker.moodle.org/browse/MDL-83703)
127 - set_alignment(), set_constraint() and do_not_enhance() functions have been fully removed from action_menu class.
129   For more information see [MDL-83765](https://tracker.moodle.org/browse/MDL-83765)
131 ### core_adminpresets
133 #### Removed
135 - Remove chat and survey from Adminpresets.
137   For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
139 ### core_analytics
141 #### Removed
143 - Remove chat and survey from core_analytics.
145   For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
147 ### core_backup
149 #### Removed
151 - Remove all MODE_HUB related code.
153   For more information see [MDL-66873](https://tracker.moodle.org/browse/MDL-66873)
155 ### core_completion
157 #### Added
159 - The method `count_modules_completed` now delegate the logic to count the completed modules to the DBMS improving the performance of the method.
161   For more information see [MDL-83917](https://tracker.moodle.org/browse/MDL-83917)
163 ### core_course
165 #### Deprecated
167 - The core_course_edit_module and core_course_edit_section external functions are now deprecated. Use core_courseformat_update_course instead
169   For more information see [MDL-82342](https://tracker.moodle.org/browse/MDL-82342)
170 - The core_course_get_module external function is now deprecated. Use fragment API using component core_courseformat and fragment cmitem instead
172   For more information see [MDL-82342](https://tracker.moodle.org/browse/MDL-82342)
173 - The course_format_ajax_support function is now deprecated. Use course_get_format($course)->supports_ajax() instead.
175   For more information see [MDL-82351](https://tracker.moodle.org/browse/MDL-82351)
176 - course_get_cm_edit_actions is now deprecated. Formats should extend core_courseformat\output\local\content\cm\controlmenu instead.
178   For more information see [MDL-83527](https://tracker.moodle.org/browse/MDL-83527)
180 ### core_courseformat
182 #### Added
184 - 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.
186   For more information see [MDL-82349](https://tracker.moodle.org/browse/MDL-82349)
187 - 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.
189   For more information see [MDL-83185](https://tracker.moodle.org/browse/MDL-83185)
191 #### Deprecated
193 - 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.
195   For more information see [MDL-82341](https://tracker.moodle.org/browse/MDL-82341)
196 - 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.
198   For more information see [MDL-83527](https://tracker.moodle.org/browse/MDL-83527)
200 ### core_enrol
202 #### Changed
204 - 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)
206   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
208   For more information see [MDL-83432](https://tracker.moodle.org/browse/MDL-83432)
210 ### core_form
212 #### Changed
214 - 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)
216   For more information see [MDL-83641](https://tracker.moodle.org/browse/MDL-83641)
218 ### core_question
220 #### Changed
222 - The definition of the abstract `core_question\local\bank\condition` class has changed to make it clearer which methods are required  in child classes.
223   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.
224   `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.
226   For more information see [MDL-83859](https://tracker.moodle.org/browse/MDL-83859)
228 #### Deprecated
230 - question_type::generate_test
232   No replacement, not used anywhere in core.
234   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
235 - 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.
237   For more information see [MDL-77713](https://tracker.moodle.org/browse/MDL-77713)
238 - 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.
240   For more information see [MDL-79122](https://tracker.moodle.org/browse/MDL-79122)
242 ### core_reportbuilder
244 #### Added
246 - 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
248   For more information see [MDL-78118](https://tracker.moodle.org/browse/MDL-78118)
249 - 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
251   For more information see [MDL-83361](https://tracker.moodle.org/browse/MDL-83361)
252 - There is a new `date` aggregation type, that can be applied in custom and system reports
254   For more information see [MDL-83361](https://tracker.moodle.org/browse/MDL-83361)
255 - 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`
257   For more information see [MDL-84000](https://tracker.moodle.org/browse/MDL-84000)
259 #### Changed
261 - The `get_active_conditions` method of the base report class has a new `$checkavailable` parameter to determine whether to check the returned conditions availability
263   For more information see [MDL-82809](https://tracker.moodle.org/browse/MDL-82809)
264 - Report table instances no longer populate the `countsql` and `countparams` class properties. Instead calling code can access `totalrows` to obtain the same value, rather than manually counting via the prior properties
266   For more information see [MDL-83718](https://tracker.moodle.org/browse/MDL-83718)
268 #### Removed
270 - The following deprecated report entity elements have been removed:
272   - `comment:context`
273   - `comment:contexturl`
274   - `enrolment:method` (plus enrolment formatter `enrolment_name` method)
275   - 'enrolment:role`
276   - `file:context`
277   - `file:contexturl`
278   - `instance:context` (tag)
279   - `instance:contexturl` (tag)
281   Use of the `context` table is also deprecated in the `file` and `instance` (tag) entities
283   For more information see [MDL-78118](https://tracker.moodle.org/browse/MDL-78118)
284 - 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
286   For more information see [MDL-80430](https://tracker.moodle.org/browse/MDL-80430)
288 ### core_tag
290 #### Changed
292 - 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.
294   For more information see [MDL-75075](https://tracker.moodle.org/browse/MDL-75075)
296 ### block_site_main_menu
298 #### Removed
300 - 'Activity' selector in site_main_menu block has been deleted.
302   For more information see [MDL-83733](https://tracker.moodle.org/browse/MDL-83733)
304 ### block_social_activities
306 #### Removed
308 - 'Activity' selector in social_activities block has been deleted.
310   For more information see [MDL-83733](https://tracker.moodle.org/browse/MDL-83733)
312 ### format_topics
314 #### Deprecated
316 - The get_highlight_control in the section controlmenu class is now deprecated. Use get_section_highlight_item instead
318   For more information see [MDL-83527](https://tracker.moodle.org/browse/MDL-83527)
320 ### gradereport_grader
322 #### Deprecated
324 - The method `gradereport_grader::get_right_avg_row()` has been finally deprecated and will now throw an exception if called.
326   For more information see [MDL-78890](https://tracker.moodle.org/browse/MDL-78890)
328 ### mod
330 #### Removed
332 - Remove mod_survey for Moodle 5.0
334   For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
335 - Remove mod_chat from Moodle 5.0
337   For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
339 ### mod_assign
341 #### Fixed
343 - The unit test for the privacy provider has been marked as final.
345   A number of core tests had been incorrectly configured to extend this test
346   but should instead be extending `\mod_assign\tests\provider_testcase`.
348   Any community plugins extending the `\mod_assign\privacy\provider_test` test
349   class should be updated to extend `\mod_assign\tests\provider_testcase` instead.
351   For more information see [MDL-81520](https://tracker.moodle.org/browse/MDL-81520)
353 ### mod_feedback
355 #### Added
357 - Added new `mod_feedback_questions_reorder` external function
359   For more information see [MDL-81745](https://tracker.moodle.org/browse/MDL-81745)
361 #### Deprecated
363 - The 'mode' parameter has been deprecated from 'edit_template_action_bar' and 'templates_table' contructors.
365   For more information see [MDL-81744](https://tracker.moodle.org/browse/MDL-81744)
367 #### Removed
369 - The 'use_template' template has been removed as it is not needed anymore.
371   For more information see [MDL-81744](https://tracker.moodle.org/browse/MDL-81744)
373 ### mod_h5pactivity
375 #### Changed
377 - The external function get_user_attempts now returns the total number of attempts.
379   For more information see [MDL-82775](https://tracker.moodle.org/browse/MDL-82775)
381 ### mod_quiz
383 #### Changed
385 - 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`).
387   For more information see [MDL-75075](https://tracker.moodle.org/browse/MDL-75075)
388 - The `\mod_quiz\attempt_walkthrough_from_csv_test` unit test has been marked as final and should not be extended by other tests.
390   All shared functionality has been moved to a new autoloadable test-case:
391   `\mod_quiz\tests\attempt_walkthrough_testcase`.
393   To support this testcase the existing `$files` instance property should be replaced with a new static method, `::get_test_files`.
394   Both the existing instance property and the new static method can co-exist.
396   For more information see [MDL-81521](https://tracker.moodle.org/browse/MDL-81521)
398 ### qbank_bulkmove
400 #### Deprecated
402 - qbank_bulkmove/helper::get_displaydata
404   Superceded by a modal and webservice, see qbank_bulkmove/modal_question_bank_bulkmove and core_question_external\move_questions
406   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
407 - qbank_bulkmove\output\renderer::render_bulk_move_form
409   Superceded by qbank_bulkmove\output\bulk_move
411   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
413 ### theme_boost
415 #### Changed
417 - 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.
419   For more information see [MDL-83725](https://tracker.moodle.org/browse/MDL-83725)
421 #### Removed
423 - 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.
425   For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
427 ### tool_brickfield
429 #### Deprecated
431 - tool_brickfield\local\areas\core_question\answerbase::find_system_areas
433   No replacement. System context no longer a valid context to assign a question category
435   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
436 - tool_brickfield\local\areas\core_question\base::find_system_areas
438   No replacement. System context no longer a valid context to assign a question category
440   For more information see [MDL-71378](https://tracker.moodle.org/browse/MDL-71378)
442 #### Removed
444 - Remove chat and survey support from tool_brickfield.
446   For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
448 ### tool_lp
450 #### Deprecated
452 - behat_tool_lp_data_generators::the_following_lp_exist is deprecated. Use the following "core_competency > [competency|framework|plan...]" exist:
454   For more information see [MDL-82866](https://tracker.moodle.org/browse/MDL-82866)
456 ### tool_mfa
458 #### Added
460 - 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`
462   For more information see [MDL-83516](https://tracker.moodle.org/browse/MDL-83516)
463 - Introduce the new language string `settings:shortdescription`, which is mandatory for each factor.
465   For more information see [MDL-83516](https://tracker.moodle.org/browse/MDL-83516)
467 #### Deprecated
469 - The two language strings in the tool_mfa plugin, namely `inputrequired` and `setuprequired`, are deprecated.
471   For more information see [MDL-83516](https://tracker.moodle.org/browse/MDL-83516)
473 ### tool_mobile
475 #### Removed
477 - Remove chat and survey support from tool_mobile.
479   For more information see [MDL-82457](https://tracker.moodle.org/browse/MDL-82457)
481 ## 4.5
483 ### core
485 #### Added
487 - A new method, `\core_user::get_name_placeholders()`, has been added to return an array of user name fields.
489   For more information see [MDL-64148](https://tracker.moodle.org/browse/MDL-64148)
490 - The following classes have been renamed and now support autoloading.
491   Existing classes are currently unaffected.
493   | Old class name     | New class name     |
494   | ---                | ---                |
495   | `\core_component`  | `\core\component`  |
497   For more information see [MDL-66903](https://tracker.moodle.org/browse/MDL-66903)
498 - Added the ability for unit tests to autoload classes in the `\[component]\tests\`
499   namespace from the `[path/to/component]/tests/classes` directory.
501   For more information see [MDL-66903](https://tracker.moodle.org/browse/MDL-66903)
502 - Added a helper to load fixtures from a components `tests/fixtures/` folder:
504   ```php
505   advanced_testcase::load_fixture(string $component, string $fixture): void;
506   ```
508   For more information see [MDL-66903](https://tracker.moodle.org/browse/MDL-66903)
509 - Redis session cache has been improved to make a single call where two were used before.
511   For more information see [MDL-69684](https://tracker.moodle.org/browse/MDL-69684)
512 - Added stored progress bars
514   For more information see [MDL-70854](https://tracker.moodle.org/browse/MDL-70854)
515 - Two new functions have been introduced in the `\moodle_database` class:
516   - `\moodle_database::get_counted_records_sql()`
517   - `\moodle_database::get_counted_recordset_sql()`
519   These methods are compatible with all databases.
521   They will check the current running database engine and apply the `COUNT` window function if it is supported,
522   otherwise, they will use the usual `COUNT` function.
524   The `COUNT` window function optimization is applied to the following databases:
525   - PostgreSQL
526   - MariaDB
527   - Oracle
529   Note: MySQL and SQL Server do not use this optimization due to insignificant performance differences before and
530   after the improvement.
532   For more information see [MDL-78030](https://tracker.moodle.org/browse/MDL-78030)
533 - The `after_config()` callback has been converted to a hook, `\core\hook\after_config`.
535   For more information see [MDL-79011](https://tracker.moodle.org/browse/MDL-79011)
536 - 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.
538   For more information see [MDL-80747](https://tracker.moodle.org/browse/MDL-80747)
539 - 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.
541   For more information see [MDL-80747](https://tracker.moodle.org/browse/MDL-80747)
542 - 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.
544   For more information see [MDL-80890](https://tracker.moodle.org/browse/MDL-80890)
545 - The following classes have been renamed.
546   Existing classes are currently unaffected.
548   | Old class name  | New class name  |
549   | ---             | ---             |
550   | `\core_user`    | `\core\user`    |
552   For more information see [MDL-81031](https://tracker.moodle.org/browse/MDL-81031)
553 - New DML constant `SQL_INT_MAX` to define the size of a large integer with cross database platform support.
555   For more information see [MDL-81282](https://tracker.moodle.org/browse/MDL-81282)
556 - Added a new `exception` L2 Namespace to APIs.
558   For more information see [MDL-81903](https://tracker.moodle.org/browse/MDL-81903)
559 - Added a mechanism to support autoloading of legacy class files.
560   This will help to reduce the number of `require_once` calls in the codebase, and move away from the use of monolithic libraries.
562   For more information see [MDL-81919](https://tracker.moodle.org/browse/MDL-81919)
563 - The following exceptions are now also available in the `\core\exception` namespace:
565     - `\coding_exception`
566     - `\file_serving_exception`
567     - `\invalid_dataroot_permissions`
568     - `\invalid_parameter_exception`
569     - `\invalid_response_exception`
570     - `\invalid_state_exception`
571     - `\moodle_exception`
572     - `\require_login_exception`
573     - `\require_login_session_timeout_exception`
574     - `\required_capability_exception`
575     - `\webservice_parameter_exception`
577   For more information see [MDL-81919](https://tracker.moodle.org/browse/MDL-81919)
578 - The following classes are now also available in the `\core\` namespace and support autoloading:
580   | Old class name       | New class name            |
581   | ---                  | ---                       |
582   | `\emoticon_manager`  | `\core\emoticon_manager`  |
583   | `\lang_string`       | `\core\lang_string`       |
585   For more information see [MDL-81920](https://tracker.moodle.org/browse/MDL-81920)
586 - The following classes have been renamed and now support autoloading.
587   Existing classes are currently unaffected.
589   | Old class name               | New class name                                          |
590   | ---                          | ---                                                     |
591   | `\moodle_url`                | `\core\url`                                             |
592   | `\progress_trace`            | `\core\output\progress_trace`                           |
593   | `\combined_progress_trace`   | `\core\output\progress_trace\combined_progress_trace`   |
594   | `\error_log_progress_trace`  | `\core\output\progress_trace\error_log_progress_trace`  |
595   | `\html_list_progress_trace`  | `\core\output\progress_trace\html_list_progress_trace`  |
596   | `\html_progress_trace`       | `\core\output\progress_trace\html_progress_trace`       |
597   | `\null_progress_trace`       | `\core\output\progress_trace\null_progress_trace`       |
598   | `\progress_trace_buffer`     | `\core\output\progress_trace\progress_trace_buffer`     |
599   | `\text_progress_trace`       | `\core\output\progress_trace\text_progress_trace`       |
601   For more information see [MDL-81960](https://tracker.moodle.org/browse/MDL-81960)
602 - The following classes are now also available in the following new
603   locations. They will continue to work in their old locations:
605   | Old classname                              | New classname                                                      |
606   | ---                                        | ---                                                                |
607   | `\action_link`                             | `\core\output\action_link`                                         |
608   | `\action_menu_filler`                      | `\core\output\action_menu\filler`                                  |
609   | `\action_menu_link_primary`                | `\core\output\action_menu\link_primary`                            |
610   | `\action_menu_link_secondary`              | `\core\output\action_menu\link_secondary`                          |
611   | `\action_menu_link`                        | `\core\output\action_menu\link`                                    |
612   | `\action_menu`                             | `\core\output\action_menu`                                         |
613   | `\block_contents`                          | `\core_block\output\block_contents`                                |
614   | `\block_move_target`                       | `\core_block\output\block_move_target`                             |
615   | `\component_action`                        | `\core\output\actions\component_action`                            |
616   | `\confirm_action`                          | `\core\output\actions\confirm_action`                              |
617   | `\context_header`                          | `\core\output\context_header`                                      |
618   | `\core\output\local\action_menu\subpanel`  | `\core\output\action_menu\subpanel`                                |
619   | `\core_renderer_ajax`                      | `\core\output\core_renderer_ajax`                                  |
620   | `\core_renderer_cli`                       | `\core\output\core_renderer_cli`                                   |
621   | `\core_renderer_maintenance`               | `\core\output\core_renderer_maintenance`                           |
622   | `\core_renderer`                           | `\core\output\core_renderer`                                       |
623   | `\custom_menu_item`                        | `\core\output\custom_menu_item`                                    |
624   | `\custom_menu`                             | `\core\output\custom_menu`                                         |
625   | `\file_picker`                             | `\core\output\file_picker`                                         |
626   | `\flexible_table`                          | `\core_table\flexible_table`                                       |
627   | `\fragment_requirements_manager`           | `\core\output\requirements\fragment_requirements_manager`          |
628   | `\help_icon`                               | `\core\output\help_icon`                                           |
629   | `\html_table_cell`                         | `\core_table\output\html_table_cell`                               |
630   | `\html_table_row`                          | `\core_table\output\html_table_row`                                |
631   | `\html_table`                              | `\core_table\output\html_table`                                    |
632   | `\html_writer`                             | `\core\output\html_writer`                                         |
633   | `\image_icon`                              | `\core\output\image_icon`                                          |
634   | `\initials_bar`                            | `\core\output\initials_bar`                                        |
635   | `\js_writer`                               | `\core\output\js_writer`                                           |
636   | `\page_requirements_manager`               | `\core\output\requirements\page_requirements_manager`              |
637   | `\paging_bar`                              | `\core\output\paging_bar`                                          |
638   | `\pix_emoticon`                            | `\core\output\pix_emoticon`                                        |
639   | `\pix_icon_font`                           | `\core\output\pix_icon_font`                                       |
640   | `\pix_icon_fontawesome`                    | `\core\output\pix_icon_fontawesome`                                |
641   | `\pix_icon`                                | `\core\output\pix_icon`                                            |
642   | `\plugin_renderer_base`                    | `\core\output\plugin_renderer_base`                                |
643   | `\popup_action`                            | `\core\output\actions\popup_action`                                |
644   | `\preferences_group`                       | `\core\output\preferences_group`                                   |
645   | `\preferences_groups`                      | `\core\output\preferences_groups`                                  |
646   | `\progress_bar`                            | `\core\output\progress_bar`                                        |
647   | `\renderable`                              | `\core\output\renderable`                                          |
648   | `\renderer_base`                           | `\core\output\renderer_base`                                       |
649   | `\renderer_factory_base`                   | `\core\output\renderer_factory\renderer_factory_base`              |
650   | `\renderer_factory`                        | `\core\output\renderer_factory\renderer_factory_interface`         |
651   | `\single_button`                           | `\core\output\single_button`                                       |
652   | `\single_select`                           | `\core\output\single_select`                                       |
653   | `\standard_renderer_factory`               | `\core\output\renderer_factory\standard_renderer_factory`          |
654   | `\table_dataformat_export_format`          | `\core_table\dataformat_export_format`                             |
655   | `\table_default_export_format_parent`      | `\core_table\base_export_format`                                   |
656   | `\table_sql`                               | `\core_table\sql_table`                                            |
657   | `\tabobject`                               | `\core\output\tabobject`                                           |
658   | `\tabtree`                                 | `\core\output\tabtree`                                             |
659   | `\templatable`                             | `\core\output\templatable`                                         |
660   | `\theme_config`                            | `\core\output\theme_config`                                        |
661   | `\theme_overridden_renderer_factory`       | `\core\output\renderer_factory\theme_overridden_renderer_factory`  |
662   | `\url_select`                              | `\core\output\url_select`                                          |
663   | `\user_picture`                            | `\core\output\user_picture`                                        |
664   | `\xhtml_container_stack`                   | `\core\output\xhtml_container_stack`                               |
665   | `\YUI_config`                              | `\core\output\requirements\yui`                                    |
667   For more information see [MDL-82183](https://tracker.moodle.org/browse/MDL-82183)
668 - 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.
669   Plugins can implement a callback to `pluginname_get_deprecated_icons()` to register their deprecated icons too.
670   When `$CFG->debugpageinfo` is enabled, a console message will display a list of the deprecated icons.
672   For more information see [MDL-82212](https://tracker.moodle.org/browse/MDL-82212)
673 - Two new optional parameters have been added to the `\core\output\notification` constructor:
674   - `null|string $title` - `null|string $icon`
676   For more information see [MDL-82297](https://tracker.moodle.org/browse/MDL-82297)
677 - 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).
679   For more information see [MDL-82490](https://tracker.moodle.org/browse/MDL-82490)
680 - A new static method, `\advanced_testcase::get_fixture_path()`, has been added to enable unit tests to fetch the path to a fixture.
682   For more information see [MDL-82627](https://tracker.moodle.org/browse/MDL-82627)
683 - 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.
685   For more information see [MDL-82627](https://tracker.moodle.org/browse/MDL-82627)
686 - The Moodle autoloader should now be registered using `\core\component::register_autoloader` rather than manually doing so in any exceptional location which requires it.
687   Note: It is not normally necessary to include the autoloader manually, as it is registered automatically when the Moodle environment is bootstrapped.
689   For more information see [MDL-82747](https://tracker.moodle.org/browse/MDL-82747)
690 - A new JS module for interacting with the Routed REST API has been introduced.
691   For more information see the documentation in the `core/fetch` module.
693   For more information see [MDL-82778](https://tracker.moodle.org/browse/MDL-82778)
694 - 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.
696   For more information see [MDL-82845](https://tracker.moodle.org/browse/MDL-82845)
697 - When rendering a renderable located within a namespace, the namespace
698   will now be included in the renderer method name with double-underscores
699   separating the namespace parts.
701   Note: Only those renderables within an `output` namespace will be
702   considered, for example `\core\output\action_menu\link` and only the
703   parts of the namespace after `output` will be included.
705   The following are examples of the new behaviour:
707   | Renderable name                          | Renderer method name                |
708   | ---                                      | ---                                 |
709   | `\core\output\action_menu\link`          | `render_action_menu__link`          |
710   | `\core\output\action_menu\link_primary`  | `render_action_menu__link_primary`  |
711   | `\core\output\action\menu\link`          | `render_action__menu__link`         |
712   | `\core\output\user_menu\link`            | `render_user_menu__link`            |
714   For more information see [MDL-83164](https://tracker.moodle.org/browse/MDL-83164)
716 #### Changed
718 - The minimum Redis server version is now 2.6.12. The minimum PHP Redis extension version is now 2.2.4.
720   For more information see [MDL-69684](https://tracker.moodle.org/browse/MDL-69684)
721 - The class autoloader has been moved to an earlier point in the Moodle bootstrap.
723   Autoloaded classes are now available to scripts using the `ABORT_AFTER_CONFIG` constant.
725   For more information see [MDL-80275](https://tracker.moodle.org/browse/MDL-80275)
726 - The `\core\dataformat::get_format_instance()` method is now public, and can be used to retrieve a writer instance for a given dataformat.
728   For more information see [MDL-81781](https://tracker.moodle.org/browse/MDL-81781)
729 - 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.
731   A new function, `\get_default_home_page_url()` has been added which will return the correct URL when this constant is returned.
733   For more information see [MDL-82066](https://tracker.moodle.org/browse/MDL-82066)
735 #### Deprecated
737 - 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.
739   For more information see [MDL-64148](https://tracker.moodle.org/browse/MDL-64148)
740 - - The following methods have been finally deprecated and removed:
741     - `\plagiarism_plugin::get_configs()`
742     - `\plagiarism_plugin::get_file_results()`
743     - `\plagiarism_plugin::update_status()`, please use `{plugin name}_before_standard_top_of_body_html` instead.
744   - Final deprecation and removal of `\plagiarism_get_file_results()`. Please use `\plagiarism_get_links()` instead.
745   - Final deprecation and removal of `\plagiarism_update_status()`. Please use `\{plugin name}_before_standard_top_of_body_html()` instead.
747   For more information see [MDL-71326](https://tracker.moodle.org/browse/MDL-71326)
748 - `\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.
750   For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
751 - The `$timeout` property of the `\navigation_cache` class has been deprecated.
753   For more information see [MDL-79628](https://tracker.moodle.org/browse/MDL-79628)
754 - The following classes are deprecated as they are handled by core_sms API and smsgateway_aws plugin:
755   - `\core\aws\admin_settings_aws_region`
756   - `\core\aws\aws_helper`
757   - `\core\aws\client_factory`
759   For more information see [MDL-80962](https://tracker.moodle.org/browse/MDL-80962)
760 - The following methods have been deprecated, existing usage should switch to use the secure `\core\encryption::encrypt()` and `\core\encryption::decrypt()` static methods:
762   - `\rc4encrypt()`
763   - `\rc4decrypt()`
764   - `\endecrypt()`
766   For more information see [MDL-81940](https://tracker.moodle.org/browse/MDL-81940)
767 - The following method has been deprecated and should not be used any longer: `\print_grade_menu()`.
769   For more information see [MDL-82157](https://tracker.moodle.org/browse/MDL-82157)
770 - The following files and their contents have been deprecated:
772   - `lib/soaplib.php`
773   - `lib/tokeniserlib.php`
775   For more information see [MDL-82191](https://tracker.moodle.org/browse/MDL-82191)
776 - The following functions have been initially deprecated:
778   - `\get_core_subsystems()`
779   - `\get_plugin_types()`
780   - `\get_plugin_list()`
781   - `\get_plugin_list_with_class()`
782   - `\get_plugin_directory()`
783   - `\normalize_component()`
784   - `\get_component_directory()`
785   - `\get_context_instance()`
787   Note: These methods have been deprecated for a long time, but previously did not emit any deprecation notice.
789   For more information see [MDL-82287](https://tracker.moodle.org/browse/MDL-82287)
790 - The following methods have been finally deprecated and will now throw an exception if called:
792   - `\get_context_instance()`
793   - `\can_use_rotated_text()`
794   - `\get_system_context()`
795   - `\print_arrow()`
797   For more information see [MDL-82287](https://tracker.moodle.org/browse/MDL-82287)
798 - The `global_navigation::load_section_activities` method is now deprecated and replaced by `global_navigation::load_section_activities_navigation`.
800   For more information see [MDL-82845](https://tracker.moodle.org/browse/MDL-82845)
801 - The following renderer methods have been deprecated from the core
802   renderer:
804   | method                               | replacement                           |
805   | ---                                  | ---                                   |
806   | `render_action_menu_link`            | `render_action_menu__link`            |
807   | `render_action_menu_link_primary`    | `render_action_menu__link_primary`    |
808   | `render_action_menu_link_secondary`  | `render_action_menu__link_secondary`  |
809   | `render_action_menu_filler`          | `render_action_menu__filler`          |
811   For more information see [MDL-83164](https://tracker.moodle.org/browse/MDL-83164)
813 #### Removed
815 - The previously deprecated function `search_generate_text_SQL` has been removed and can no longer be used.
817   For more information see [MDL-48940](https://tracker.moodle.org/browse/MDL-48940)
818 - The previously deprecated function `\core_text::reset_caches()` has been removed and can no longer be used.
820   For more information see [MDL-71748](https://tracker.moodle.org/browse/MDL-71748)
821 - The following previously deprecated methods have been removed and can no longer be used:
822     - `\renderer_base::should_display_main_logo()`
824   For more information see [MDL-73165](https://tracker.moodle.org/browse/MDL-73165)
825 - Final deprecation of `\print_error()`. Please use the `\moodle_exception` class instead.
827   For more information see [MDL-74484](https://tracker.moodle.org/browse/MDL-74484)
828 - Final deprecation of `\core\task\manager::ensure_adhoc_task_qos()`.
830   For more information see [MDL-74843](https://tracker.moodle.org/browse/MDL-74843)
831 - Support for the deprecated block and activity namespaces `<component>\local\views\secondary`, which supported the overriding of secondary navigation, has now been entirely removed.
833   For more information see [MDL-74939](https://tracker.moodle.org/browse/MDL-74939)
834 - Remove deprecation layer for YUI JS Events. The deprecation layer was introduced with MDL-70990 and MDL-72291.
836   For more information see [MDL-77167](https://tracker.moodle.org/browse/MDL-77167)
838 #### Fixed
840 - 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.
842   For more information see [MDL-79628](https://tracker.moodle.org/browse/MDL-79628)
843 - 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.
844   This includes the following methods:
845     - `setUp()`
846     - `tearDown()`
847     - `setUpBeforeClass()`
848     - `tearDownAfterClass()`
850   For more information see [MDL-81523](https://tracker.moodle.org/browse/MDL-81523)
851 - Use server timezone when constructing `\DateTimeImmutable` for the system `\core\clock` implementation.
853   For more information see [MDL-81894](https://tracker.moodle.org/browse/MDL-81894)
855 ### core_availability
857 #### Removed
859 - The previously deprecated renderer `render_core_availability_multiple_messages` method has been removed.
861   For more information see [MDL-82223](https://tracker.moodle.org/browse/MDL-82223)
863 ### core_backup
865 #### Removed
867 - The `\core_backup\copy\copy` class has been deprecated and removed. Please use `\copy_helper` instead.
869   For more information see [MDL-75022](https://tracker.moodle.org/browse/MDL-75022)
870 - The following methods in the `\base_controller` class have been removed:
872   | Method                          | Replacement                                                     |
873   | ---                             | ---                                                             |
874   | `\base_controller::set_copy()`  | Use a restore controller for storing copy information instead.  |
875   | `\base_controller::get_copy()`  | `\restore_controller::get_copy()`                               |
877   For more information see [MDL-75025](https://tracker.moodle.org/browse/MDL-75025)
879 ### core_badges
881 #### Added
883 - The following new webservices have been added:
885    - `core_badges_enable_badges`
887    - `core_badges_disable_badges`
889   For more information see [MDL-82168](https://tracker.moodle.org/browse/MDL-82168)
891 #### Changed
893 - 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:
894     - `recipientid`: The ID of the user who received the badge.
895     - `recipientfullname`: The full name of the user who received the badge.
897   For more information see [MDL-82742](https://tracker.moodle.org/browse/MDL-82742)
899 #### Deprecated
901 - The `badges/newbadge.php` page has been deprecated and merged with `badges/edit.php`. Please, use `badges/edit.php` instead.
903   For more information see [MDL-43938](https://tracker.moodle.org/browse/MDL-43938)
904 - The `OPEN_BADGES_V1` constant is deprecated and should not be used anymore.
906   For more information see [MDL-70983](https://tracker.moodle.org/browse/MDL-70983)
907 - The `course_badges` systemreport has been deprecated and merged with the badges systemreport. Please, use the badges systemreport instead.
909   For more information see [MDL-82503](https://tracker.moodle.org/browse/MDL-82503)
910 - The `$showmanage` parameter to the `\core_badges\output\standard_action_bar` constructor has been deprecated and should not be used anymore.
912   For more information see [MDL-82503](https://tracker.moodle.org/browse/MDL-82503)
913 - The `badges/view.php` page has been deprecated and merged with `badges/index.php`. Please, use `badges/index.php` instead.
915   For more information see [MDL-82503](https://tracker.moodle.org/browse/MDL-82503)
917 #### Removed
919 - Final removal of `BADGE_BACKPACKAPIURL` and `BADGE_BACKPACKWEBURL` constants.
921   For more information see [MDL-70983](https://tracker.moodle.org/browse/MDL-70983)
923 ### core_cache
925 #### Added
927 - The following classes have been renamed and now support autoloading.
929   Existing classes are currently unaffected.
931   | Old class name                     | New class name                                     |
932   | ---                                | ---                                                |
933   | `\cache_definition`                | `\core_cache\definition`                           |
934   | `\cache_request`                   | `\core_cache\request_cache`                        |
935   | `\cache_session`                   | `\core_cache\session_cache`                        |
936   | `\cache_cached_object`             | `\core_cache\cached_object`                        |
937   | `\cache_config`                    | `\core_cache\config`                               |
938   | `\cache_config_writer`             | `\core_cache\config_writer`                        |
939   | `\cache_config_disabled`           | `\core_cache\disabled_config`                      |
940   | `\cache_disabled`                  | `\core_cache\disabled_cache`                       |
941   | `\config_writer`                   | `\core_cache\config_writer`                        |
942   | `\cache_data_source`               | `\core_cache\data_source_interface`                |
943   | `\cache_data_source_versionable`   | `\core_cache\versionable_data_source_interface`    |
944   | `\cache_exception`                 | `\core_cache\exception/cache_exception`            |
945   | `\cache_factory`                   | `\core_cache\factory`                              |
946   | `\cache_factory_disabled`          | `\core_cache\disabled_factory`                     |
947   | `\cache_helper`                    | `\core_cache\helper`                               |
948   | `\cache_is_key_aware`              | `\core_cache\key_aware_cache_interface`            |
949   | `\cache_is_lockable`               | `\core_cache\lockable_cache_interface`             |
950   | `\cache_is_searchable`             | `\core_cache\searchable_cache_interface`           |
951   | `\cache_is_configurable`           | `\core_cache\configurable_cache_interface`         |
952   | `\cache_loader`                    | `\core_cache\loader_interface`                     |
953   | `\cache_loader_with_locking`       | `\core_cache\loader_with_locking_interface`        |
954   | `\cache_lock_interface`            | `\core_cache\cache_lock_interface`                 |
955   | `\cache_store`                     | `\core_cache\store`                                |
956   | `\cache_store_interface`           | `\core_cache\store_interface`                      |
957   | `\cache_ttl_wrapper`               | `\core_cache\ttl_wrapper`                          |
958   | `\cacheable_object`                | `\core_cache\cacheable_object_interface`           |
959   | `\cacheable_object_array`          | `\core_cache\cacheable_object_array`               |
960   | `\cache_definition_mappings_form`  | `\core_cache\form/cache_definition_mappings_form`  |
961   | `\cache_definition_sharing_form`   | `\core_cache\form/cache_definition_sharing_form`   |
962   | `\cache_lock_form`                 | `\core_cache\form/cache_lock_form`                 |
963   | `\cache_mode_mappings_form`        | `\core_cache\form/cache_mode_mappings_form`        |
965   For more information see [MDL-82158](https://tracker.moodle.org/browse/MDL-82158)
967 ### core_communication
969 #### Changed
971 - The `\core_communication\helper::get_enrolled_users_for_course()` method now accepts an additional argument that can filter only active enrolments.
973   For more information see [MDL-81951](https://tracker.moodle.org/browse/MDL-81951)
975 ### core_completion
977 #### Added
979 - 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.
981   For more information see [MDL-83008](https://tracker.moodle.org/browse/MDL-83008)
983 #### Changed
985 - 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`.
987   For more information see [MDL-81749](https://tracker.moodle.org/browse/MDL-81749)
989 ### core_course
991 #### Added
993 - - New optional `sectionNum` parameter has been added to `activitychooser` AMD module initializer.
994   - New option `sectionnum` parameter has been added to `get_course_content_items()` external function.
995   - New optional `sectionnum` parameter has been added to `get_content_items_for_user_in_course()` function.
997   For more information see [MDL-81675](https://tracker.moodle.org/browse/MDL-81675)
998 - 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.
1000   For more information see [MDL-81699](https://tracker.moodle.org/browse/MDL-81699)
1001 - 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.
1003   For more information see [MDL-81767](https://tracker.moodle.org/browse/MDL-81767)
1004 - New `\core_course\hook\before_activitychooserbutton_exported` hook added to allow third-party plugins to extend activity chooser button options.
1006   For more information see [MDL-81767](https://tracker.moodle.org/browse/MDL-81767)
1007 - The following methods have been updated to accept a section name in addition to the section number:
1008   - `\behat_course::i_open_section_edit_menu()`
1009   - `\behat_course::i_show_section()`
1010   - `\behat_course::i_hide_section(),`
1011   - `\behat_course::i_wait_until_section_is_available()`
1012   - `\behat_course::show_section_link_exists()`
1013   - `\behat_course::hide_section_link_exists()`
1014   - `\behat_course::section_exists()`
1016   For more information see [MDL-82259](https://tracker.moodle.org/browse/MDL-82259)
1018 #### Changed
1020 - 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:
1021   - Add static element in the _reset_course_form_definition method before all the options with the Delete string:
1022       `$mform->addElement('static', 'assigndelete', get_string('delete'));`
1023   - Review all the strings used in the reset page to remove the "Delete" or "Remove" words from them.
1025   For more information see [MDL-81872](https://tracker.moodle.org/browse/MDL-81872)
1026 - The external function `core_course_get_contents` now returns the `component` and `itemid` of sections.
1028   For more information see [MDL-82385](https://tracker.moodle.org/browse/MDL-82385)
1030 #### Deprecated
1032 - The `data-sectionid` attribute in the activity chooser has been deprecated. Please update your code to use `data-sectionnum` instead.
1034   For more information see [MDL-81676](https://tracker.moodle.org/browse/MDL-81676)
1035 - The `$course` parameter in the constructor of the `\core_course\output\actionbar\group_selector` class has been deprecated and is no longer used.
1037   For more information see [MDL-82393](https://tracker.moodle.org/browse/MDL-82393)
1039 #### Removed
1041 - The previously deprecated `\print_course_request_buttons()` method has been removed and can no longer be used.
1043   For more information see [MDL-73976](https://tracker.moodle.org/browse/MDL-73976)
1044 - The `$course` class property in the `\core_course\output\actionbar\group_selector` class has been removed.
1046   For more information see [MDL-82393](https://tracker.moodle.org/browse/MDL-82393)
1048 ### core_courseformat
1050 #### Added
1052 - The constructor of `\core_courseformat\output\local\state\cm` has been updated to accept a new optional parameter, `$istrackeduser`.
1053   If `istrackeduser` is pre-computed for the course module's course, it can be provided here to avoid an additional function call.
1055   For more information see [MDL-81610](https://tracker.moodle.org/browse/MDL-81610)
1056 - Added new `core_courseformat_create_module` webservice to create new module (with quickcreate feature) instances in the course.
1058   For more information see [MDL-81767](https://tracker.moodle.org/browse/MDL-81767)
1059 - A new `$disabled` parameter has been added to the following `html_writer` methods:
1061   - `\core\output\html_writer::select()`
1062   - `\core\output\html_writer::select_optgroup()`
1063   - `\core\output\html_writer::select_option()`
1065   For more information see [MDL-82146](https://tracker.moodle.org/browse/MDL-82146)
1066 - A new class, `\core_courseformat\output\local\content\basecontrolmenu`, has been created.
1067   The following existing classes extend the new class:
1069    - `\core_courseformat\output\local\content\cm\controlmenu`
1070    - `\core_courseformat\output\local\content\section\controlmenu`
1072   For more information see [MDL-82510](https://tracker.moodle.org/browse/MDL-82510)
1073 - 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.
1075   For more information see [MDL-82510](https://tracker.moodle.org/browse/MDL-82510)
1077 ### core_customfield
1079 #### Changed
1081 - 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.
1083   For more information see [MDL-82488](https://tracker.moodle.org/browse/MDL-82488)
1085 ### core_external
1087 #### Changed
1089 - The external function `core_webservice_external::get_site_info` now returns the default home page URL when needed.
1091   For more information see [MDL-82844](https://tracker.moodle.org/browse/MDL-82844)
1093 ### core_files
1095 #### Added
1097 - 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.
1099   For more information see [MDL-75850](https://tracker.moodle.org/browse/MDL-75850)
1100 - 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.
1102   For more information see [MDL-83245](https://tracker.moodle.org/browse/MDL-83245)
1104 ### core_filters
1106 #### Added
1108 - Added support for autoloading of filters from `\filter_[filtername]\filter`. Existing classes should be renamed to use the new namespace.
1110   For more information see [MDL-82427](https://tracker.moodle.org/browse/MDL-82427)
1112 #### Deprecated
1114 - The `\core_filters\filter_manager::text_filtering_hash` method has been finally deprecated and removed.
1116   For more information see [MDL-82427](https://tracker.moodle.org/browse/MDL-82427)
1118 ### core_form
1120 #### Added
1122 - The `duration` form field type has been modified to validate that the supplied value is a positive value.
1123   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.
1124   Where a negative duration _is_ allowed, the `allownegative` attribute can be set to `true`.
1126   For more information see [MDL-82687](https://tracker.moodle.org/browse/MDL-82687)
1128 ### core_grades
1130 #### Changed
1132 - The grade `itemname` property contained in the return structure of the following external methods is now PARAM_RAW:
1133     - `core_grades_get_gradeitems`
1134     - `gradereport_user_get_grade_items`
1136   For more information see [MDL-80017](https://tracker.moodle.org/browse/MDL-80017)
1138 #### Deprecated
1140 - 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.
1142   For more information see [MDL-80744](https://tracker.moodle.org/browse/MDL-80744)
1143 - 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.
1145   For more information see [MDL-80744](https://tracker.moodle.org/browse/MDL-80744)
1146 - 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.
1148   For more information see [MDL-80744](https://tracker.moodle.org/browse/MDL-80744)
1149 - The `\core_grades_renderer::group_selector()` method has been deprecated. Please use `\core_course\output\actionbar\renderer` to render a `group_selector` renderable instead.
1151   For more information see [MDL-80745](https://tracker.moodle.org/browse/MDL-80745)
1153 #### Removed
1155 - The following previously deprecated Behat step helper methods have been removed and can no longer be used:
1156    - `\behat_grade::select_in_gradebook_navigation_selector()`
1157    - `\behat_grade::select_in_gradebook_tabs()`
1159   For more information see [MDL-74581](https://tracker.moodle.org/browse/MDL-74581)
1161 ### core_message
1163 #### Changed
1165 - The `\core_message\helper::togglecontact_link_params()` method now accepts a new optional `$isrequested` parameter to indicate the status of the contact request.
1167   For more information see [MDL-81428](https://tracker.moodle.org/browse/MDL-81428)
1169 #### Deprecated
1171 - The `core_message/remove_contact_button` template is deprecated and will be removed in a future release.
1173   For more information see [MDL-81428](https://tracker.moodle.org/browse/MDL-81428)
1175 #### Removed
1177 - Final deprecation of the `MESSAGE_DEFAULT_LOGGEDOFF`, and `MESSAGE_DEFAULT_LOGGEDIN` constants.
1179   For more information see [MDL-73284](https://tracker.moodle.org/browse/MDL-73284)
1181 ### core_question
1183 #### Added
1185 - A new utility function `\question_utils::format_question_fragment()` has been created so that question content can filter based on filters.
1187   For more information see [MDL-78662](https://tracker.moodle.org/browse/MDL-78662)
1189 #### Changed
1191 - `\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.
1193   For more information see [MDL-81407](https://tracker.moodle.org/browse/MDL-81407)
1195 ### core_report
1197 #### Added
1199 - Report has been added to subsystem components list.
1201   For more information see [MDL-81771](https://tracker.moodle.org/browse/MDL-81771)
1202 - A new general output class, `\core_report\output\coursestructure`, has been created.
1204   For more information see [MDL-81771](https://tracker.moodle.org/browse/MDL-81771)
1206 #### Changed
1208 - 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.
1210   For more information see [MDL-78773](https://tracker.moodle.org/browse/MDL-78773)
1212 #### Removed
1214 - The previously deprecated `\core\report_helper::save_selected_report()` method has been removed and can no longer be used.
1216   For more information see [MDL-72353](https://tracker.moodle.org/browse/MDL-72353)
1218 ### core_reportbuilder
1220 #### Added
1222 - 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.
1224   For more information see [MDL-52046](https://tracker.moodle.org/browse/MDL-52046)
1225 - System reports now support native entity column aggregation via each columns `set_aggregation()` method
1227   For more information see [MDL-76392](https://tracker.moodle.org/browse/MDL-76392)
1228 - The following external methods now return tags data relevant to each custom report:
1229     - `core_reportbuilder_list_reports`
1230     - `core_reportbuilder_retrieve_report`
1232   For more information see [MDL-81433](https://tracker.moodle.org/browse/MDL-81433)
1233 - Added a new database helper method `sql_replace_parameters` to help ensure uniqueness of parameters within a SQL expression.
1235   For more information see [MDL-81434](https://tracker.moodle.org/browse/MDL-81434)
1236 - 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").
1238   For more information see [MDL-82466](https://tracker.moodle.org/browse/MDL-82466)
1239 - 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:
1241     - `add_columns_from_entity()`
1242     - `add_filters_from_entity()`
1243     - `report_element_search()`
1245   For more information see [MDL-82529](https://tracker.moodle.org/browse/MDL-82529)
1247 #### Changed
1249 - In order to better support float values in filter forms, the following filter types now cast given SQL prior to comparison:
1251     - `duration`
1252     - `filesize`
1253     - `number`
1255   For more information see [MDL-81168](https://tracker.moodle.org/browse/MDL-81168)
1256 - 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.
1258   For more information see [MDL-81330](https://tracker.moodle.org/browse/MDL-81330)
1259 - 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):
1260   - `core_reportbuilder_generator::create_schedule`
1261   - `core_reportbuilder\local\helpers\schedule::create_schedule()`
1262   - `core_reportbuilder\local\helpers\schedule::calculate_next_send_time()`
1264   For more information see [MDL-82041](https://tracker.moodle.org/browse/MDL-82041)
1265 - The following classes have been moved to use the new exception API as a L2 namespace:
1267   | Old class                                           | New class                                                     |
1268   | -----------                                         | -----------                                                   |
1269   | `\core_reportbuilder\report_access_exception`       | `\core_reportbuilder\exception\report_access_exception`       |
1270   | `\core_reportbuilder\source_invalid_exception`      | `\core_reportbuilder\exception\source_invalid_exception`      |
1271   | `\core_reportbuilder\source_unavailable_exception`  | `\core_reportbuilder\exception\source_unavailable_exception`  |
1273   For more information see [MDL-82133](https://tracker.moodle.org/browse/MDL-82133)
1275 #### Removed
1277 - Support for the following entity classes, renamed since 4.1, have now been removed completely:
1279   - `\core_admin\local\entities\task_log`
1280   - `\core_cohort\local\entities\cohort`
1281   - `\core_cohort\local\entities\cohort_member`
1282   - `\core_course\local\entities\course_category`
1283   - `\report_configlog\local\entities\config_change`
1285   For more information see [MDL-74583](https://tracker.moodle.org/browse/MDL-74583)
1286 - The following previously deprecated local helper methods have been removed and can no longer be used:
1287     - `\core_reportbuilder\local\helpers\audience::get_all_audiences_menu_types()`
1288     - `\core_reportbuilder\local\helpers\report::get_available_columns()`
1290   For more information see [MDL-76690](https://tracker.moodle.org/browse/MDL-76690)
1292 ### core_role
1294 #### Added
1296 - All session management has been moved to the `\core\session\manager` class.
1297   This removes the dependancy to use the `sessions` table.
1299   Session management plugins (like Redis) should now inherit
1300   the base `\core\session\handler` class, which implements
1301   `SessionHandlerInterface`, and override methods as required.
1303   The following methods in `\core\session\manager` have been deprecated:
1304   | Old method name                  | New method name           |
1305   | ---                              | ---                       |
1306   | `kill_all_sessions`              | `destroy_all`             |
1307   | `kill_session`                   | `destroy`                 |
1308   | `kill_sessions_for_auth_plugin`  | `destroy_by_auth_plugin`  |
1309   | `kill_user_sessions`             | `destroy_user_sessions`   |
1311   For more information see [MDL-66151](https://tracker.moodle.org/browse/MDL-66151)
1313 ### core_sms
1315 #### Added
1317 - A new `\core_sms` subsystem has been created.
1319   For more information see [MDL-81924](https://tracker.moodle.org/browse/MDL-81924)
1321 ### core_table
1323 #### Added
1325 - A new `$reponsive` property (defaulting to `true`) has been added to the `\core_table\flexible_table` class.
1326   This property allows you to control whether the table is rendered as a responsive table.
1328   For more information see [MDL-80748](https://tracker.moodle.org/browse/MDL-80748)
1330 #### Changed
1332 - 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.
1333   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.
1335   For more information see [MDL-82567](https://tracker.moodle.org/browse/MDL-82567)
1337 ### core_user
1339 #### Added
1341 - New `\core_user\hook\extend_user_menu` hook added to allow third party plugins to extend the user menu navigation.
1343   For more information see [MDL-71823](https://tracker.moodle.org/browse/MDL-71823)
1344 - 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.
1346   For more information see [MDL-82066](https://tracker.moodle.org/browse/MDL-82066)
1348 #### Changed
1350 - The visibility of the following methods have been increased to public:
1351   - `\core_user\form\private_files::check_access_for_dynamic_submission()`
1352   - `\core_user\form\private_files::get_options()`
1354   For more information see [MDL-78293](https://tracker.moodle.org/browse/MDL-78293)
1355 - The user profile field `\profile_field_base::display_name()` method now accepts an optional `$escape` parameter to define whether to escape the returned name.
1357   For more information see [MDL-82494](https://tracker.moodle.org/browse/MDL-82494)
1359 #### Deprecated
1361 - 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()`.
1363   For more information see [MDL-78030](https://tracker.moodle.org/browse/MDL-78030)
1365 ### availability
1367 #### Changed
1369 - 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).
1371   For more information see [MDL-81850](https://tracker.moodle.org/browse/MDL-81850)
1373 ### customfield_number
1375 #### Added
1377 - A new hook, `\customfield_number\hook\add_custom_providers`, has been added which allows automatic calculation of number course custom field.
1379   For more information see [MDL-82715](https://tracker.moodle.org/browse/MDL-82715)
1380 - 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.
1382   For more information see [MDL-82715](https://tracker.moodle.org/browse/MDL-82715)
1383 - Added new webservice `customfield_number_recalculate_value`, has been added to recalculate a value of number course custom field.
1385   For more information see [MDL-82715](https://tracker.moodle.org/browse/MDL-82715)
1386 - A new task, `\customfield_number\task\cron`, cron task that recalculates automatically calculated number course custom fields.
1388   For more information see [MDL-82715](https://tracker.moodle.org/browse/MDL-82715)
1390 ### customfield_select
1392 #### Changed
1394 - The field controller `get_options` method now returns each option pre-formatted.
1396   For more information see [MDL-82481](https://tracker.moodle.org/browse/MDL-82481)
1398 ### editor_tiny
1400 #### Changed
1402 - The `helplinktext` language string is no longer required by editor plugins, instead the `pluginname` will be used in the help dialogue.
1404   For more information see [MDL-81572](https://tracker.moodle.org/browse/MDL-81572)
1406 ### factor_sms
1408 #### Removed
1410 - The following classes are removed as the SMS feature now takes advantage of `core_sms` API:
1411   - `\factor_sms\event\sms_sent`
1412   - `\factor_sms\local\smsgateway\aws_sns`
1413   - `\factor_sms\local\smsgateway\gateway_interface`
1415   For more information see [MDL-80962](https://tracker.moodle.org/browse/MDL-80962)
1417 ### gradereport_grader
1419 #### Deprecated
1421 - The `gradereport_grader/group` ESM has been deprecated. Please use `core_course/actionbar/group` instead.
1423   For more information see [MDL-80745](https://tracker.moodle.org/browse/MDL-80745)
1425 ### gradereport_singleview
1427 #### Deprecated
1429 - The `gradereport_singleview/group` ESM has been deprecated. Please use `core_course/actionbar/group` instead.
1431   For more information see [MDL-80745](https://tracker.moodle.org/browse/MDL-80745)
1433 ### gradereport_user
1435 #### Deprecated
1437 - The `gradereport_user/group` ESM has been deprecated. Please use `core_course/actionbar/group` instead.
1439   For more information see [MDL-80745](https://tracker.moodle.org/browse/MDL-80745)
1441 ### mod
1443 #### Added
1445 - Added new `FEATURE_QUICKCREATE` for modules that can be quickly created in the course wihout filling a previous form.
1447   For more information see [MDL-81767](https://tracker.moodle.org/browse/MDL-81767)
1449 ### mod_assign
1451 #### Added
1453 - Added 2 new settings:
1454     - `mod_assign/defaultgradetype`
1455       - The value of this setting dictates which of the `GRADE_TYPE_X` constants is the default option when creating new instances of the assignment.
1456       - The default value is `GRADE_TYPE_VALUE` (Point)
1457     - `mod_assign/defaultgradescale`
1458       - The value of this setting dictates which of the existing scales is the default option when creating new instances of the assignment.
1460   For more information see [MDL-54105](https://tracker.moodle.org/browse/MDL-54105)
1461 - 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.
1463   For more information see [MDL-74050](https://tracker.moodle.org/browse/MDL-74050)
1464 - A new default value for `attemptreopenmethod` has been set to "Automatically until pass".
1466   For more information see [MDL-80741](https://tracker.moodle.org/browse/MDL-80741)
1467 - 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.
1469   For more information see [MDL-80750](https://tracker.moodle.org/browse/MDL-80750)
1471 #### Deprecated
1473 - The constant `ASSIGN_ATTEMPT_REOPEN_METHOD_NONE` has been deprecated, and a new default value for `attemptreopenmethod` has been set to "Automatically until pass".
1475   For more information see [MDL-80741](https://tracker.moodle.org/browse/MDL-80741)
1476 - The `\assign_feedback_plugin::get_grading_batch_operations()` method is now deprecated. Use `assign_feedback_plugin::get_grading_batch_operation_details` instead.
1478   For more information see [MDL-80750](https://tracker.moodle.org/browse/MDL-80750)
1479 - The `\assign_grading_table::plugingradingbatchoperations` property has been removed. You can use `\assign_feedback_plugin::get_grading_batch_operation_details()` instead.
1481   For more information see [MDL-80750](https://tracker.moodle.org/browse/MDL-80750)
1482 - The `$submissionpluginenabled` and `$submissioncount` parameters from the constructor of the `\mod_assign\output::grading_actionmenu` class have been deprecated.
1484   For more information see [MDL-80752](https://tracker.moodle.org/browse/MDL-80752)
1485 - The method `\assign::process_save_grading_options()` has been deprecated as it is no longer used.
1487   For more information see [MDL-82681](https://tracker.moodle.org/browse/MDL-82681)
1489 #### Removed
1491 - 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.
1493   For more information see [MDL-80741](https://tracker.moodle.org/browse/MDL-80741)
1494 - The `\mod_assign_grading_options_form` class has been removed since it is no longer used.
1496   For more information see [MDL-82857](https://tracker.moodle.org/browse/MDL-82857)
1498 ### mod_bigbluebuttonbn
1500 #### Added
1502 - Added new `meeting_info` value to show presentation file on BBB activity page
1504   For more information see [MDL-82520](https://tracker.moodle.org/browse/MDL-82520)
1505 - The `broker::process_meeting_events()` method has been extended to call the `::process_action()` method implemented by plugins.
1507   For more information see [MDL-82872](https://tracker.moodle.org/browse/MDL-82872)
1509 #### Removed
1511 - Mobile support via plugin has been removed as it is now natively available in the Moodle App.
1513   For more information see [MDL-82447](https://tracker.moodle.org/browse/MDL-82447)
1515 ### mod_data
1517 #### Added
1519 - The `\data_add_record()` method accepts a new `$approved` parameter to set the corresponding state of the new record.
1521   For more information see [MDL-81274](https://tracker.moodle.org/browse/MDL-81274)
1523 #### Deprecated
1525 - The `\mod_data_renderer::render_fields_footer()` method has been deprecated as it's no longer used.
1527   For more information see [MDL-81321](https://tracker.moodle.org/browse/MDL-81321)
1529 ### mod_feedback
1531 #### Deprecated
1533 - The `\feedback_check_is_switchrole()` function has been deprecated as it didn't work.
1535   For more information see [MDL-72424](https://tracker.moodle.org/browse/MDL-72424)
1536 - The method `\mod_feedback\output\renderer::create_template_form()` has been deprecated. It is not used anymore.
1538   For more information see [MDL-81742](https://tracker.moodle.org/browse/MDL-81742)
1540 ### mod_quiz
1542 #### Added
1544 - 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):
1545   - `\quiz_overview_report::regrade_attempts()`
1546   - `\quiz_overview_report::regrade_batch_of_attempts()`
1548   For more information see [MDL-79546](https://tracker.moodle.org/browse/MDL-79546)
1550 ### qbank_managecategories
1552 #### Changed
1554 - The `\qbank_managecategories\question_category_object` class has been deprecated.
1555   Methods previously part of this class have been moved to either
1557    - `\qbank_managecategories\question_categories`,
1558     for the parts used within this plugin for display a list of categories; or
1560   `\core_question\category_manager`,
1561     for the parts used for generate CRUD operations on question categories, including outside of this plugin.
1563   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.
1565   For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
1567 #### Deprecated
1569 - Category lists are now generated by templates. The following classes have been deprecated:
1570   - `\qbank_managecategories\question_category_list`
1571   - `\qbank_managecategories\question_category_list_item`
1573   For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
1574 - The following methods of `\qbank_managecategories\helper`have been deprecated and moved to
1575   `\core_question\category_manager`:
1577   | Method                                               | Replacement                                                                  |
1578   | ---                                                  | ---                                                                          |
1579   | `question_is_only_child_of_top_category_in_context`  | `\core_question\category_manager::is_only_child_of_top_category_in_context`  |
1580   | `question_is_top_category`                           | `\core_question\category_manager::is_top_category`                           |
1581   | `question_can_delete_cat`                            | `\core_question\category_manager::can_delete_cat`                            |
1583   For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
1584 - `\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.
1586   For more information see [MDL-72397](https://tracker.moodle.org/browse/MDL-72397)
1588 ### report_eventlist
1590 #### Deprecated
1592 - The following deprecated methods in `report_eventlist_list_generator` have been removed:
1593   - `\report_eventlist_list_generator::get_core_events_list()`
1594   - `\report_eventlist_list_generator::get_non_core_event_list()`
1596   For more information see [MDL-72786](https://tracker.moodle.org/browse/MDL-72786)
1598 ### report_log
1600 #### Added
1602 - The `\report_log_renderable::get_activities_list()` method return values now includes an array of disabled elements, in addition to the array of activities.
1604   For more information see [MDL-82146](https://tracker.moodle.org/browse/MDL-82146)
1606 ### repository_onedrive
1608 #### Removed
1610 - The following previously deprecated methods have been removed and can no longer be used:
1611   - `\repository_onedrive::can_import_skydrive_files()`
1612   - `\repository_onedrive::import_skydrive_files()`
1614   For more information see [MDL-72620](https://tracker.moodle.org/browse/MDL-72620)
1616 ### theme
1618 #### Added
1620 - Added a new `\renderer_base::get_page` getter method.
1622   For more information see [MDL-81597](https://tracker.moodle.org/browse/MDL-81597)
1623 - New `core/context_header` mustache template has been added. This template can be overridden by themes to modify the context header.
1625   For more information see [MDL-81597](https://tracker.moodle.org/browse/MDL-81597)
1627 #### Deprecated
1629 - The method `\core\output\core_renderer::render_context_header` has been deprecated please use `\core\output\core_renderer::render($contextheader)` instead
1631   For more information see [MDL-82160](https://tracker.moodle.org/browse/MDL-82160)
1633 #### Removed
1635 - Removed all references to `iconhelp`, `icon-pre`, `icon-post`, `iconlarge`, and `iconsort` CSS classes.
1637   For more information see [MDL-74251](https://tracker.moodle.org/browse/MDL-74251)
1639 ### theme_boost
1641 #### Added
1643 - Bridged `theme-color-level` using a new `shift-color` function to prepare for its deprecation in Boostrap 5.
1645   For more information see [MDL-81816](https://tracker.moodle.org/browse/MDL-81816)
1646 - Upon upgrading Font Awesome from version 4 to 6, the solid family was selected by default.
1648   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.
1650   Icons can select the FontAwesome family (`fa-regular`, `fa-brands`, `fa-solid`) by using the relevant class name when display the icon.
1652   For more information see [MDL-82210](https://tracker.moodle.org/browse/MDL-82210)
1654 #### Changed
1656 - The Bootstrap `.no-gutters` class is no longer used, use `.g-0`  instead.
1658   For more information see [MDL-81818](https://tracker.moodle.org/browse/MDL-81818)
1659 - The `.page-header-headings` CSS class now has a background colour applied to the maintenance and secure layouts.
1660   You may need to override this class in your maintenance and secure layouts if both of the following are true:
1661   - Your theme plugin inherits from `theme_boost` and uses this CSS class
1662   - Your theme plugin applies a different styling for the page header for the maintenance and secure layouts.
1664   For more information see [MDL-83047](https://tracker.moodle.org/browse/MDL-83047)
1666 ### tool
1668 #### Removed
1670 - The Convert to InnoDB plugin (`tool_innodb`) has been completely removed.
1672   For more information see [MDL-78776](https://tracker.moodle.org/browse/MDL-78776)
1674 ### tool_behat
1676 #### Added
1678 - Behat tests are now checking for deprecated icons. This check can be disabled by using the `--no-icon-deprecations` option in the behat CLI.
1680   For more information see [MDL-82212](https://tracker.moodle.org/browse/MDL-82212)
1682 ### tool_oauth2
1684 #### Added
1686 - 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.
1688   For more information see [MDL-67554](https://tracker.moodle.org/browse/MDL-67554)