This file contains important information for developers on changes to the Moodle codebase.
More detailed information on key changes can be found in the Developer update notes for your version of Moodle.
The format of this change log follows the advice given at Keep a CHANGELOG.
-
Appending an exclamation mark to template names ignores theme overrides
For more information see MDL-77894
-
The
upgrade_ensure_not_running()function has been deprecated and replaced with:\core\setup::warn_if_upgrade_is_running();\core\setup::ensure_upgrade_is_not_running(); and\core\setup::is_upgrade_running().
For more information see MDL-87107
-
The CLI script used to terminate user sessions (kill_all_sessions.php) has been improved to make it safer and more flexible. A new '--run' parameter has been introduced. Without '--run', the script performs a dry run making no changes. The script now supports targeted session termination using '--for-users' parameter.
For more information see MDL-87173
-
The
core/drag_handletemplate has been modified to use a native HTML button for a more accessible experience and a consistent look with other buttons on the page.For more information see MDL-86846
-
The Hook Manager now uses localcache instead of caching via MUC.
For more information see MDL-87107
-
restore_qtype_plugin::unset_excluded_fieldsnow returns the modified questiondata structure, in order to support structures that contain arrays. If your qtype plugin overridesrestore_qtype_plugin::remove_excluded_question_datawithout calling the parent method, you may need to modify your overridden method to use the returned value.For more information see MDL-85975
-
When responding to pcntl signals, call existing signal handlers.
For more information see MDL-87079
-
The create_issued_badge generator now returns the issued badge object.
For more information see MDL-85621
-
The class core_badges_assertion has been deprecated and replaced by \core_badges\achievement_credential. The method badges_get_default_issuer() has also been deprecated because it is no longer needed. The file badges/endorsement.php has been removed because it stopped being used when MDL-84323 was integrated.
For more information see MDL-85621
-
The
completion_info::clear_criteriamethod takes an optional$removetypecriteriato determine whether to remove course type criteria from other courses that refer to the current courseFor more information see MDL-86332
-
The following methods have been deprecated and should no longer be used: -
course_delete_module-course_module_flag_for_async_deletionPlease consider using the equivalent methods, delete and delete_async, incore_courseformat\local\cmactionsinstead.For more information see MDL-86856
-
Deprecates set_coursemodule_groupmode in favor of core_courseformat\cmactions::set_groupmode
For more information see MDL-86857
-
Add delete method to the core_courseformat\cmactions
For more information see MDL-86856
-
Add set_groupmode method to the core_courseformat\cmactions (course format actions)
For more information see MDL-86857
-
In Moodle 4.2, the legacy Gradebook base widget from 4.1 has been removed and replaced with a simpler class-based system due to a breaking change and excessive complexity in the old pattern. The files
core/grades/basewidget.jsand templates ingrade/templates/searchwidget/have been deleted, with minimal expected third-party impact.For more information see MDL-78325
-
groups_print_activity_menu()andgroups_get_activity_group()now include an additional$participationonlyparameter, which is true by default. This can be set false when we want the user to be able to select a non-participation group within an activity, for example if a teacher wants to filter assignment submissions by non-participation groups. It should never be used when the menu is displayed to students, as this may allow them to participate using non-participation groups. Non-participation groups are labeled as such.For more information see MDL-81514
-
The base entity class now implements a default
initialisemethod, that will automatically call each of the following methods to load entity report data:get_available_columns()get_available_filters()get_available_conditions()
This change allows for a lot of boilerplate to be removed from report entity classes
For more information see MDL-86678
-
The method
feedback_init_feedback_session()has been deprecated, along with all other direct access to$SESSIONfrom the moduleFor more information see MDL-86607
-
The Behat selector
column move handlefor theqbank_columnsortorderplugin has been removed. When interacting with the column's move handle, please use the move handle's accessible name and type. For example: -And I drag "Move Created by" "button" and I drop it in "Move T" "button"For more information see MDL-86855
-
The WS tool_mobile_get_public_config now returns whether MFA and reCAPTCHA are enabled for login/recover password.
For more information see MDL-87003
-
The following classes have been renamed and now support autoloading. Existing classes are currently unaffected.
Old class name New class name \breadcrumb_navigation_node\core\navigation\breadcrumb_navigation_node\flat_navigation_node\core\navigation\flat_navigation_node\flat_navigation\core\navigation\flat_navigation_node\global_navigation_for_ajax\core\navigation\global_navigation_for_ajax\global_navigation\core\navigation\global_navigation\navbar\core\navigation\navbar\navigation_cache\core\navigation\navigation_cache\navigation_json\core\navigation\navigation_json\navigation_node_collection\core\navigation\navigation_node_collection\navigation_node\core\navigation\navigation_node\settings_navigation_for_ajax\core\navigation\settings_navigation_for_ajax\settings_navigation\core\navigation\settings_navigationFor more information see MDL-82159
-
- Added is_site_registered_in_hub method in lib/classes/hub/api.php to check if the site is registered or not.
- Added get_secret method in lib/classes/hub/registration.php to get site's secret.
For more information see MDL-83448
-
Added a new optional param to adhoc_task_failed and scheduled_task_failed to allow skipping log finalisation when called from a separate task.
For more information see MDL-84442
-
Add a new method has_valid_group in \core\report_helper that will return true or false depending if the user has a valid group. This is mainly false in case the user is not in any group in SEPARATEGROUPS. Used in report_log and report_loglive
For more information see MDL-84464
-
There is a new
core/page_titleJavascript module for manipulating the current page titleFor more information see MDL-84804
-
Added support for configurable
aspectRatioin charts rendered using Chart.js. This enables developers to control chart sizing more precisely via thechart_baseAPI and the frontend renderer.For more information see MDL-85158
-
Output classes can now implement the core\output\externable interface. This allows these classes to define methods for exporting their data in a format suitable for use in web services.
For more information see MDL-85509
-
The following functions have been replaced with class methods.
Old function name New method name \ajax_capture_output()\core\ajax::capture_output()\ajax_check_captured_output()\core\ajax::check_captured_output()It is no longer necessary to include lib/ajax/ajaxlib.phpin any code.For more information see MDL-86168
-
The Behat
::execute()method now accepts an array-style callable in addition to the stringclassname::methodformat.The following formats are now accepted:
// String format: $this->execute('behat_general::i_click_on', [...]); // Array format: $this->execute([behat_general::class,' i_click_on'], [...]);
For more information see MDL-86231
-
The following classes have been moved into namespaces and now support autoloading:
Old class name New class name \core_xml_parser\core\xml_parser\xml_format_exception\core\exception\xml_format_exceptionFor more information see MDL-86256
-
The
\externallib_advanced_testcasehas been replaced by\core_external\tests\externallib_testcaseand is now autoloadable.For more information see MDL-86283
-
Changes were implemented to make
checkbox-togglealloutput component more inclusive:- Replace the references to
mastercheckboxes withtoggler. - Replace the references to
slavecheckboxes withtarget.
For more information see MDL-79756
- Replace the references to
-
The
\core\attribute\deprecatedattribute constructor$replacementparameter now defaults to null, and can be omittedFor more information see MDL-84531
-
The
core_plugin_manager::plugintype_name[_plural]methods now require language strings for plugin types always be defined viatype_<type>andtype_<type>_plurallanguage stringsFor more information see MDL-84948
-
Added a new
\core\deprecation::emit_deprecation()method which should be used in places where a deprecation is known to occur. This method will throw debugging if no deprecation notice was found, for example:public function deprecated_method(): void { \core\deprecation::emit_deprecation([self::class, __FUNCTION__]); }
For more information see MDL-85897
-
The
\core\output\local\dropdown\dialogclass constructor now accepts a$definition['autoclose']parameter to define autoclose behaviour of the elementFor more information see MDL-86015
-
The default PHPUnit configuration now enables the following properties, ensuring PHP warnings will cause test failures (restoring pre-PHPUnit version 10 behaviour):
failOnDeprecationfailOnWarning
For more information see MDL-86311
-
The following function has been deprecated and should no longer be used:
file_encode_url. Please consider using thecore\urlfactory methods instead.For more information see MDL-31071
-
The following
core/checkbox-togglealltemplates have been deprecated:core/checkbox-toggleall-master-button- This is replaced withcore/checkbox-toggleall-toggler-buttoncore/checkbox-toggleall-master- This is replaced withcore/checkbox-toggleall-togglercore/checkbox-toggleall-slave- This is replaced withcore/checkbox-toggleall-target
The following items in the
core/checkbox-toggleallJS module have been deprecated:-
Method:
updateSlavesFromMasterState()- This is replaced withupdateTargetsFromTogglerState().
-
Usage of the following selectors:
data-toggle=master- This is replaced withdata-toggle=toggler.data-toggle=slave- This is replaced withdata-toggle=target.
The usage of these selectors will continue to be supported until they are removed by final deprecation. In the meantime, a deprecation warning in the JavaScript console will be shown if usage of these selectors is detected.
For more information see MDL-79756
-
The following global constants have been deprecated in favour of class constants:
Old constant New constant NAVIGATION_CACHE_NAME\core\navigation\navigation_node::CACHE_NAMENAVIGATION_SITE_ADMIN_CACHE_NAME\core\navigation\navigation_node::SITE_ADMIN_CACHE_NAMEFor more information see MDL-82159
-
The
user_preference_allow_ajax_update()has been removed. It was deprecated without replacement in Moodle 4.3.For more information see MDL-86168
-
The
xmlize()method fromlib/xmlize.phphas been deprecated, please instead use the\core\xml_parserclassFor more information see MDL-86256
-
In toggle.mustache
dataattributesparameter is deprecated. UseextraattributesinsteadFor more information see MDL-86990
-
Final deprecation of device related theme methods. The following two methods have been removed from the core_useragent class:
- core_useragent::get_device_type_theme
- core_useragent::get_device_type_cfg_var_name
For more information see MDL-78375
-
Final deprecation of removing the legacy theme settings. The following method has been removed:
- core_useragent::get_device_type_list() The following classes have been removed:
- core_adminpresets\local\setting\adminpresets_admin_setting_devicedetectregex
- admin_setting_devicedetectregex
For more information see MDL-79052
-
Removed
core\hook\manager::is_deprecated_plugin_callback()in favor ofcore\hook\manager::get_hooks_deprecating_plugin_callback().For more information see MDL-80327
-
- Added
searchmatchtypeproperty toadmin_settingsto track search match type. - Plugins that extend either
admin_settingsoradmin_externalpageare encouraged to specify a search match type from the available types inadmin_search.
For more information see MDL-85518
- Added
-
Error message handler for AI subsystem.
-
Object creation Use
core_ai\error\factory::create($errorcode, $reason, $errorsource)to generate the appropriate error object. -
Extensibility Add new error types by extending
core_ai\error\baseand registering them in the factory. Please seecore_ai\error\ratelimitas an example.
For more information see MDL-83147
-
-
- Added
get_enabled_actions_in_course_modulemethod in public/ai/classes/manager.php to get enabled AI actions in course module. - Addedis_ai_tools_enabled_in_coursemethod in public/ai/classes/manager.php to check if AI tools is enabled in course. - Addedis_action_enabled_in_contextmethod in public/ai/classes/manager.php to check if an action is enabled in a particular context. - Addedget_ai_fields_from_course_modulemethod in public/ai/classes/manager.php to get the AI related fields from the course module. - Addedis_html_editor_placement_availablemethod in public/ai/placement/editor/classes/utils.php to check if editor placement is enabled. - Addedget_actions_availablemethod in public/ai/placement/editor/classes/utils.php to get available actions for editor placement.
For more information see MDL-85738
- Added
-
The method
has_model_settingsinsidecore_ai\aimodel\baseis now determined by values returned from a new method calledget_model_settings.For more information see MDL-84779
-
A new method called
get_additional_upgrade_token_parametershas been added tooauth2_clientclass. This will allow custom clients to override this one and add their extra parameters for upgrade token request.For more information see MDL-80380
-
The class core_badges_observer in badges/classes/observer.php has been moved to core_badges\event\observer in badges/classes/event/observer.php. A compatibility layer has been added to maintain backward compatibility, but direct use of the old class name is now deprecated. If you've extended or directly used the old class, you should update your code to use the new namespaced class.
For more information see MDL-83904
-
A number of new static methods have been added to
core_badges\backpack_apito support the new Canvas Credentials backpack provider. These methods allow you to retrieve lists of providers and regions, check if Canvas Credentials fields should be displayed, and get a region URL or API URL based on a given region ID. The new methods includeget_providers,get_regions,display_canvas_credentials_fields,get_region_url,get_region_api_url,get_regionid_from_url, andis_canvas_credentials_region.For more information see MDL-86174
-
Final removal of core_badges_renderer::render_badge_collection() and core_badges_renderer::render_badge_recipients()
For more information see MDL-80455
-
Subcontext visibility is now turned on by default when adding blocks. This change makes it much easier to manage blocks, for example, in courses that lack a view page.
For more information see MDL-85433
-
Removed block_section_links from Moodle 5.1.
For more information see MDL-80556
-
The following classes have been renamed and now support autoloading. Existing classes are currently unaffected.
| Old class name | New class name | | --- | --- | | `\comment` | `\core_comment\manager` | | `\comment_exception` | `\core_comment\comment_exception` |For more information see MDL-86254
-
The
public/comment/locallib.phpfile and thecomment_managerclass have been deprecated. All related functionality should now be accessed via the\core_comment\managerclass.For more information see MDL-86254
-
The
public/comment/lib.phpfile is now empty and will be removed in Moodle 6.0. Please, do not include in your code anymore.For more information see MDL-86254
-
The following classes have been renamed and now support autoloading. Existing classes are currently unaffected.
Old class name New class name \course_request\core_course\course_requestFor more information see MDL-82322
-
Activities can now specify an additional purpose in their PLUGINNAME_supports function by using the new FEATURE_MOD_OTHERPURPOSE feature.
For more information see MDL-85598
-
Added new
gradableproperty tocore_course\local\entity\content_itemFor more information see MDL-86036
-
-
The following classes have been renamed and now support autoloading. Existing classes are currently unaffected.
Old class name New class name \cm_info`\course\cm_info \cached_cm_info\course\cached_cm_info\section_info\course\section_info\course_modinfo\course\modinfo
For more information see MDL-86155
-
-
Removed fictitious
__empty()magic method.The
empty()method does not make use of any__empty()method. It is not a defined magic method.For more information see MDL-86155
-
The 'Show description' checkbox is now present in all course formats. Activity descriptions can be displayed via the Additional activities block (formerly the Main menu block), regardless of whether the course format's has_view_page() function returns false.
For more information see MDL-85433
-
The core_course_get_course_content_items is now deprecated. Use core_courseformat_get_section_content_items instead.
For more information see MDL-80295
-
The course_section_add_cm_control course renderer method is deprecated. Use section_add_cm_controls instead.
For more information see MDL-80295
-
Passing the section number (integer) to the core_course\output\activitychooserbutton is deprecated. You must use a core_course\section_info instead.
For more information see MDL-80295
-
The getModulesData and activityModules methods from core_course/local/activitychooser/repository are deprecated. Use getSectionModulesData and sectionActivityModules instead
For more information see MDL-80295
-
The duplicatesection param in course/view.php is deprecated. Use course/format/update.php with action section_duplicate instead.
For more information see MDL-84216
-
The changenumsections.php script is deprecated. Please use course/format/update.php instead.
For more information see MDL-85284
-
The
\course\cm_info::$extraand\course\cm_info::$scoreproperties will now emit appropriate debugging.These have been deprecated for a long time, but did not emit any debugging.
For more information see MDL-86155
-
The
MAX_MODINFO_CACHE_SIZEconstant has been deprecated and replaced with a class constant.For more information see MDL-86155
-
The course renderer method course_activitychooser is now deprecated. Its logic is not part of the new section_renderer::add_cm_controls method.
For more information see MDL-86337
-
The activitychoosertabmode setting has been removed. Consider implementing your own setting in your theme if needed.
For more information see MDL-85533
-
From now on, the activity chooser will use core_courseformat_get_section_content_items to get the available modules for a specific section
For more information see MDL-80295
-
Added new core_courseformat\output\local\overview\overviewdialog output class to create dialog elements in the course overview page. Overview dialog will display a combination of title, description and a list of items (label: value).
For more information see MDL-83896
-
A new interface,
main_activity_interface, is now available. Course format plugins should implement it if they intend to display only a single activity in the course page.For more information see MDL-85433
-
The core_courseformat\local\overview\overviewfactory now includes a new method, activity_has_overview_integration, which determines if a module supports overview integration.
For more information see MDL-85509
-
New needs_filtering_by_groups() and get_groups_for_filtering() had been created in activityoverviewbase class for a better management of groups filtering in Activities overview page by activities. needs_filtering_by_groups() returns whether the user needs to filter by groups in the current module, and get_groups_for_filtering() returns which is the filter the user should use with groups API.
For more information see MDL-85852
-
A new has_error() function has been created in activityoverviewbase class to raise when a user is trying to check information about a module set as SEPARATE_GROUPS but the user is not in any group.
For more information see MDL-85852
-
New optional $nogroupserror parameter has been added to activityname class constructor. A set_nogroupserror() setter to change the value after the constructor has been also added.
For more information see MDL-85852
-
Added new
core_courseformat\output\local\overview\overviewactionoutput class to create action buttons that now include a badge right next to the button text. It essentially extends the existing action_link class to add a badge, making important actions stand out more on the course overview. Plus, this new structure also makes these badged action links easier to export this information for web services.For more information see MDL-85981
-
Add a new modinfo::get_instance_of() to retrieve an instance of a cm via its name and instance id. Add a new modinfo::sort_cm_array() to sort an array of cms in their order of appearance in the course page. Replaces calls to get_course_and_cm_from_instance() and get_instances_of() whenever it was just used to retrieve a single instance of a cm.
For more information see MDL-86021
-
The
core_course\output\activitychooserbuttonhas been moved tocore_courseformat\output\local\activitychooserbutton. From now on, format plugins can provide alternative outputs for this element. Also, all the javascript and templates related to the activity chooser are now located inside the core_courseformat subsystem.For more information see MDL-86337
-
All activity chooser related code has been moved to the
core_courseformatsubsystem. This includes all templates, javascript, and the main output class. If your theme overrides any of these, you will need to update your code accordingly.For more information see MDL-86337
-
The param $maxsections of get_num_sections_data in addsection output is not used anymore. If your format overrides this method, you should add a default value 0 to be consistent with the new implementation.
For more information see MDL-84291
-
The maxsections setting is now considered deprecated and will be removed in Moodle 6.0. Consider implementing your own setting in your format plugin if needed.
For more information see MDL-84291
-
The format base method get_max_sections has been deprecated, as the maxsections setting is also deprecated and no longer in use.
For more information see MDL-84291
-
The course format "numsections" option to increment and decrement the number of sections of the course one by one is now deprecated and will be removed in Moodle 6.0.
For more information see MDL-85284
-
Added parameters 'component', 'area' and 'itemid' to the
api::get_instance_fields_data()andapi::get_instances_fields_data()methods. Added a new field 'shared' to the customfield_category DB table. Added 'component', 'area' and 'itemid' fields to the customfield_data DB table. Modified the customfield_data DB table unique index to include the new fields.For more information see MDL-86065
-
New 'is_gradable()' function has been created to return whether the item has any gradeitem that is GRADE_TYPE_VALUE or GRADE_TYPE_SCALE.
For more information see MDL-85837
-
- New grade_item::is_gradable function has been created to return whether the grade item is GRADE_TYPE_VALUE or GRADE_TYPE_SCALE.
For more information see MDL-86173
-
The previously deprecate methods have been removed:
- grade_structure::get_grade_analysis_icon
- grade_structure::get_reset_icon
- grade_structure::get_edit_icon
- grade_structure::get_hiding_icon
- grade_structure::get_locking_icon
- grade_structure::get_calculation_icon
For more information see MDL-77307
-
The web service
core_message_get_member_infoadditionally returnscancreatecontactwhich is a boolean value for a user's permission to add a contact.For more information see MDL-72123
-
The
contexturlproperty to\core\message\messageinstances can now contain\core\urlvalues in addition to plain stringsFor more information see MDL-83080
-
The question backup API has been improved to only include questions that are actually used or owned by backed up activities. Any activities that use question references should be supported automatically. Activities that use question set references (for example, random quiz questions) need to add a call to
backup_question_set_reference_trait::annotate_set_reference_bank_entries()alongside the call tobackup_question_set_reference_trait::add_question_set_references()in their backup step. Seebackup_quiz_activity_structure_step::define_structure()for an example.For more information see MDL-41924
-
core_question_search_shared_bankswill now search all question banks, not just those outside the current course. This makes the service usable in cases outside of the current "Switch banks" UI, which require searching all banks on the site. It also makes the autocomplete in the "Switch banks" UI more consistent, as it was previously excluding some of the banks listed in the UI (Question banks in this course), but not others (Recently viewed question banks). This change has also adds a 'requiredcapabilties' parameter to the function, which accepts an list of abbreviated capabilities for checking access against question banks before they are returned.For more information see MDL-85069
-
question_edit_contextsnow only considers the provided context when checking permissions, rather than all parent contexts as well. As questions now exist only at the activity module context level, permissions can be inherited or overridden as normal for each question bank. The previous pattern of checking for a permission in any parent context circumvented the override system, and no longer makes sense.For more information see MDL-85754
-
Intial deprecation of core_question_bank_renderer::render_question_pagination() and the associated template file. Rendering the question pagination is now done via ajax based pagination.
For more information see MDL-78091
-
Final deprecation of:
- core_question\local\bank\random_question_loader::get_next_question_id()
- core_question\local\bank\random_question_loader::get_category_key()
- core_question\local\bank\random_question_loader::ensure_questions_for_category_loaded()
- core_question\local\bank\random_question_loader::get_question_ids()
- core_question\local\bank\random_question_loader::is_question_available()
- core_question\local\bank\random_question_loader::get_questions()
- core_question\local\bank\random_question_loader::count_questions()
- core_question\local\bank\view::display_top_pagnation()
- core_question\local\bank\view::display_bottom_pagination()
- question_finder::get_questions_from_categories_with_usage_counts()
- question_finder::get_questions_from_categories_and_tags_with_usage_counts()
For more information see MDL-78091
-
The unit test repeated_restore_test::test_restore_course_with_same_stamp_questions was passing incorrectly on 5.x for question types that use answers. Maintainers of third-party question types may want to re-run the test with the fix in place, or if they have copied parts of this test as the basis of a test in their own plugin, review the changes and see if they should be reflected in their own test.
For more information see MDL-85556
-
The
count[distinct]aggregation types support optional'callback'value to customise the formatted output when applied to columnsFor more information see MDL-82464
-
The
report_actionclass now accepts apix_iconto include inside the rendered action elementFor more information see MDL-85216
-
Report schedule types are now extendable by third-party plugins by extending the
core_reportbuilder\local\schedules\baseclass in your component namespace:<component>\reportbuilder\schedule\<type>For more information see MDL-86066
-
The report column class has a new
get_effective_type()method to determine the returned column type, taking into account applied aggregation methodFor more information see MDL-86151
-
The following methods from the
schedulehelper class have been deprecated, in favour of usage of the new schedule type system:create_scheduleget_report_empty_optionssend_schedule_message
For more information see MDL-86066
-
New method
\core_user::get_dummy_fullname(...)for returning dummy user fullname comprised of configured name fields onlyFor more information see MDL-82132
-
The "Main menu" block has been renamed to "Additional activities." Its title is now customizable, and it can be used in course formats without a dedicated view page (for instance, Single activity). On the Home page, this block has also been renamed; administrators will need to manually revert the name if they wish to retain "Main menu" after upgrading.
For more information see MDL-85392
-
The social course format is now disabled by default for all new and upgraded installations. Existing courses using this format will continue to function, but administrators must re-enable it to create new social courses.
For more information see MDL-85660
-
Now the custom sections format won't ask for initial sections on the creation form. Instead it will use the system number of sections settings directly.
For more information see MDL-84291
-
The weekly sections format now has a system setting called Maximum initial number of weeks that replaced the old "Max sections" when creating a new course
For more information see MDL-84291
-
The previously deprecated methods have been removed:
- grade_report_grader::get_left_icons_row
- grade_report_grader::get_right_icons_row
- grade_report_grader::get_icons
For more information see MDL-77307
-
The
grade/report/singleview/js/singleview.jsfile has been removed. And thegrade/report/singleview/amd/src/singleview.jsfile has been added. The new file is converted from YUI to native JS.For more information see MDL-84071
-
Within mod_assign, time() calls have been changed to use the core clock class; this means Behat and PHPunit tests that mock the time will now work as expected in mod_assign.
For more information see MDL-85679
-
Add activity_dates class to BigblueButton module.
For more information see MDL-83889
-
Add a new parameter to the mod_bigbluebuttonbn\recording::get_recordings_for_instance so to ignore instance group settings and return all recordings. This is an optional argement and no change is expected from existing calls.
For more information see MDL-86192
-
The \mod_book\event\course_module_instance_list_viewed event is now deprecated. Use \core\event\course_resources_list_viewed instead.
For more information see MDL-84632
-
Add manager class to the mod_choice activity. For now this is only for the purpose of implementing the activity overview page but can be improved to be used elsewhere.
For more information see MDL-83890
-
Add new generator for choice responses
For more information see MDL-83890
-
Database entries generator could create 'approved' entries.
For more information see MDL-83891
-
New get_approval_requested(), get_all_entries(), filter_entries_by_user(), filter_entries_by_approval() and get_comments() functions have been added to mod_data manager class.
For more information see MDL-83891
-
Two new methods,
feedback_get_completedsandfeedback_get_completeds_count, have been added to the feedback API. These methods allow you to retrieve completed items based on multiple groups.For more information see MDL-85850
-
The \mod_folder\event\course_module_instance_list_viewed event is now deprecated. Use \core\event\course_resources_list_viewed instead.
For more information see MDL-84632
-
The function forum_tp_get_untracked_forums() has been deprecated because it is no longer used.
For more information see MDL-83893
-
Added mod_glossary_get_comments(): a method for retrieving comments linked to a glossary.
For more information see MDL-85840
-
count_attempts() and count_users_attempts() in manager class accept a new parameter to filter by groups.
For more information see MDL-85853
-
The \mod_imscp\event\course_module_instance_list_viewed event is now deprecated. Use \core\event\course_resources_list_viewed instead.
For more information see MDL-84632
-
The dndmedia setting has been removed. From now on dropping a media file into a course will always ask the user if they want to create a label.
For more information see MDL-83081
-
Added new 'count_all_submissions', 'count_submitted_participants' and 'count_all_participants' functions needed by the overview page.
For more information see MDL-83896
-
The \mod_page\event\course_module_instance_list_viewed event is now deprecated. Use \core\event\course_resources_list_viewed instead.
For more information see MDL-84632
-
The bulk_action_base class has gotten a get_bulk_action_classes function to let bulk actions specify additional classes to add to the bulk action menu entry. If none is defined in the child, '' is returned.
For more information see MDL-84548
-
Add helper methods in the mod/quiz/lib.php to count the number of attempts (quiz_num_attempts), the number of users who attempted a quiz (quiz_num_users_who_attempted) and users who can attempt (quiz_num_users_who_can_attempt)
For more information see MDL-83898
-
Add a groupidlist option to quiz_num_attempt_summary, quiz_num_attempts and quiz_num_users_who_can_attempt to filter those number by groups (the new argument is a list of ids for groups)
For more information see MDL-86223
-
Additional parameter for quiz_num_attempts so we only count users with specified capabilities
For more information see MDL-86520
-
Final deprecations for the quiz. The following functions have been removed:
- quiz_has_question_use
- quiz_update_sumgrades
- quiz_update_all_attempt_sumgrades
- quiz_update_all_final_grades
- quiz_set_grade
- quiz_save_best_grade
- quiz_calculate_best_grade
- quiz_calculate_best_attempt
For more information see MDL-76612
-
Initial deprecation add_random_form and associates. The just removed mod_quiz\form\add_random_form was the only place in core where the mod_quiz/add_random_form javascript was called, so we can deprecate this now. This also enables us to deprecate the mod_quiz/random_question_form_preview javascript and the mod_quiz/random_question_form_preview_question_list template as they are direct dependends.
For more information see MDL-78091
-
Final deprecations for the quiz. The following files have been removed:
- mod/quiz/accessmanager_form.php
- mod/quiz/accessmanager.php
- mod/quiz/accessrule/accessrulebase.php
- mod/quiz/attemptlib.php
- mod/quiz/cronlib.php
- mod/quiz/override_form.php
- mod/quiz/renderer.php
- mod/quiz/report/attemptsreport_form.php
- mod/quiz/report/attemptsreport_options.php
- mod/quiz/report/attemptsreport_table.php
- mod/quiz/report/attemptsreport.php
- mod/quiz/report/default.php
For more information see MDL-76612
-
Final deprecations for the quiz. The following methods have been removed:
- mod_quiz\output\renderer::no_questions_message
- mod_quiz\output\renderer::render_mod_quiz_links_to_other_attempts
- mod_quiz\output\renderer::render_quiz_nav_question_button
- mod_quiz\output\renderer::render_quiz_nav_section_heading
- mod_quiz\structure::get_slot_tags_for_slot_id
- mod_quiz\structure::is_display_number_customised
For more information see MDL-76612
-
Final deprecations for the quiz. The following classes have been removed:
- mod_quiz_overdue_attempt_updater
- moodle_quiz_exception
For more information see MDL-76612
-
The const quiz_statistics\calculator::TIME_TO_CACHE has been removed.
For more information see MDL-76612
-
Final deprecation of:
- mod_quiz\form\add_random_form::class
- mod_quiz\local\structure\slot_random::set_tags()
- mod_quiz\local\structure\slot_random::set_tags_by_id()
- const quiz_statistics\calculator::TIME_TO_CACHE
- quiz_add_random_questions()
For more information see MDL-78091
-
Removed the deprecated class callbacks
quiz_structure_modifiedandquiz_attempt_deletedfrom mod_quiz, use thestructure_modifiedandattempt_state_changedhooks instead. These callbacks were deprecated in Moodle 4.4 and were outputting deprecation warnings since then.For more information see MDL-80327
-
The \mod_resource\event\course_module_instance_list_viewed event is now deprecated. Use \core\event\course_resources_list_viewed instead.
For more information see MDL-84632
-
Create a manager class to regroup common functionalities for course overview page
For more information see MDL-83899
-
Add a new generator for scorm attempts to simulate user's attempt.
For more information see MDL-83899
-
Add group id list to \mod_scorm\manager::count_users_who_attempted and \mod_scorm\manager::count_participants so we can filter by groups. Empty array means no filtering.
For more information see MDL-86216
-
The method
\mod_scorm\report::generate_master_checkbox()has been deprecated and should no longer be used. SCORM report plugins calling this method should use\mod_scorm\report::generate_toggler_checkbox()instead.For more information see MDL-79756
-
The \mod_url\event\course_module_instance_list_viewed event is now deprecated. Use \core\event\course_resources_list_viewed instead.
For more information see MDL-84632
-
Create a manager class to regroup common functionalities and a wiki_mode enum related to the two different modes
For more information see MDL-83900
-
The function
workshop::count_submissionshas been deprecated and should no longer be used, useworkshop::count_all_submissionsinstead.For more information see MDL-84809
-
The function
workshop::count_assessmentshas been deprecated and should no longer be used, useworkshop::count_all_assessmentsinstead.For more information see MDL-84809
-
Restrict override of margin-bottom for fitem_id_answer_* and fitem_id_fraction_* divs to own edit form. Question type plugins currently benefitting from the unlimited style override will need to change their styles.css accordingly. An example can be found in calculatedmulti's style sheet.
For more information see MDL-85240
-
Add download widget for report to download multiple formats.
For more information see MDL-83838
-
Added a new optional parameter $activegroup to render_groups_select()
For more information see MDL-82381
-
report_progress\output\renderer::render_download_buttonsNo replacement. We no longer need to render the download custom button links.For more information see MDL-83838
-
These icons are no longer in use and have been deprecated:
- core:e/insert_col_after
- core:e/insert_col_before
- core:e/split_cells
- core:e/text_color
- core:t/locktime
- tool_policy/level
For more information see MDL-85436
-
Theme can now inherit from their grand-parent and parents. So if a child theme inherit from a parent theme that declares a new layout, the child theme can use it without redeclaring it. Also inheritance for layout uses the expected grandparent > parent > child with precedence to the child theme.
For more information see MDL-79319
-
Tables affected by unwanted styling (e.g., borders) from the reset of Bootstrap _reboot.scss styles can now opt out and preserve the original behavior by adding the styleless .table-reboot class.
For more information see MDL-86548
-
The
core:e/text_highlightandcore:e/text_highlight_pickericons are deprecated and will be removed in Moodle 6.0. The UX team recommended this change to reduce visual clutter and improve readability. The icons were removed because they didn't indicate status changes, were repetitive across all notifications, and took up space that could be used for more content.For more information see MDL-85146
-
The
tiny_premium_get_api_keyweb service now returns an additional fieldusecloudto indicate whether the cloud version or self-hosted version of Tiny Premium plugins should be used.For more information see MDL-85727
-
The
core/sortable_listJavascript 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 preservedFor more information see MDL-72293
-
\core\output\activity_headernow uses theis_title_allowed()method when setting the title in the constructor.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.
For example, the Boost theme sets
$THEME->activityheaderconfig['notitle'] = true;by default, but in itssecurepagelayout, it has'notitle' = false. This prevents display of the title in all layouts exceptsecure.For more information see MDL-75610
-
Behat now supports email content verification using Mailpit. You can check the contents of an email using the step
Then the email to "user@example.com" with subject containing "subject" should contain "content".To use this feature:-
Ensure that Mailpit is running
-
Define the following constants in your
config.php:TEST_EMAILCATCHER_MAIL_SERVER- The Mailpit server address (e.g.0.0.0.0:1025)TEST_EMAILCATCHER_API_SERVER- The Mailpit API server (qe.g.http://localhost:8025)
-
Ensure that the email catcher is set up using the step
Given an email catcher server is configured.
For more information see MDL-75971
-
-
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.
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.
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.
For more information see MDL-79121
-
The stored progress API has been updated. The
\core\output\stored_progress_barclass has now has astore_pending()method, which will create a record for the stored process, but without a start time or progress percentage.\core\task\stored_progress_task_traithas been updated with a newinitialise_stored_progress()method, which will callstore_pending()for the task's progress bar. This allows the progress bar to be displayed in a "pending" state, to show that a process has been queued but not started.For more information see MDL-81714
-
A new
\core\output\task_indicatorcomponent has been added to display a progress bar and message for a background task using\core\task\stored_progress_task_trait. See the "Task indicator" page in the component library for usage details.For more information see MDL-81714
-
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.
For more information see MDL-83473
-
Add after_role_switched hook that is triggered when we switch role to a new role in a course.
For more information see MDL-83542
-
New generic collapsable section output added. Use core\output\local\collapsable_section or include the core/local/collapsable_section template to use it. See the full documentation in the component library.
For more information see MDL-83869
-
A new method get_instance_record has been added to cm_info object so core can get the activity table record without using the $DB object every time. Also, the method caches de result so getting more than once per execution is much faster.
For more information see MDL-83892
-
Now lib/templates/select_menu.mustache has a new integer headinglevel context value to specify the heading level to keep the header accessibility when used as a tertiary navigation.
For more information see MDL-84208
-
The public method
get_slashargumenthas been added to theurlclass.For more information see MDL-84351
-
The new PHP enum core\output\local\properties\iconsize can be used to limit the amount of icons sizes an output component can use. The enum has the same values available in the theme_boost scss.
For more information see MDL-84555
-
A new method,
core_text::trim_ctrl_chars(), has been introduced to clean control characters from text. This ensures cleaner input handling and prevents issues caused by invisible or non-printable charactersFor more information see MDL-84907
-
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$newusersquery in\core\task\send_new_users_password_task::executefor an example.For more information see MDL-46739
-
The
core_renderer::tag_listfunction now has a new parameter nameddisplaylink. Whendisplaylinkis set totrue, the tag name will be displayed as a clickable hyperlink. Otherwise, it will be rendered as plain text.For more information see MDL-75075
-
All uses of the following PHPUnit methods have been removed as these methods are deprecated upstream without direct replacement:
withConsecutivewillReturnConsecutiveonConsecutive
Any plugin using these methods must update their uses.
For more information see MDL-81308
-
PHPSpreadSheet has been updated to version 4.0.0.
All library usage should be via the Moodle wrapper and no change should be required.
For more information see MDL-81664
-
The Moodle subplugins.json format has been updated to accept a new
subplugintypesobject.This should have the same format as the current
plugintypesformat, except that the paths should be relative to the plugin root instead of the Moodle document root.Both options can co-exist, but if both are present they must be kept in-sync.
{ "subplugintypes": { "tiny": "plugins" }, "plugintypes": { "tiny": "lib/editor/tiny/plugins" } }For more information see MDL-83705
-
The behat/gherkin has been updated to 4.11.0 which introduces a breaking change where backslashes in feature files need to be escaped.
For more information see MDL-83848
-
The following test classes have been moved into autoloadable locations:
Old location New classname \core\tests\route_testcase\core\tests\router\route_testcase\core\router\mocking_route_loader\core\tests\router\mocking_route_loaderFor more information see MDL-83968
-
Analytics is now disabled by default on new installs.
For more information see MDL-84107
-
The methods
want_read_slaveandperf_get_reads_slaveinlib/dml/moodle_database.phphave been deprecated in favour of renamed versions that substituteslaveforreplica.For more information see MDL-71257
-
The trait
moodle_read_slave_traithas been deprecated in favour of a functionally identical version calledmoodle_read_replica_trait. The renamed trait substitutes the terminology ofslavewithreplica, andmasterwithprimary.For more information see MDL-71257
-
question_make_default_categories()
No longer creates a default category in either CONTEXT_SYSTEM, CONTEXT_COURSE, or CONTEXT_COURSECAT. Superceded by question_get_default_category which can optionally create one if it does not exist.
For more information see MDL-71378
-
question_delete_course()
No replacement. Course contexts no longer hold question categories.
For more information see MDL-71378
-
question_delete_course_category()
Course category contexts no longer hold question categories.
For more information see MDL-71378
-
The 'core_renderer::sr_text()' function has been deprecated, use 'core_renderer::visually_hidden_text()' instead.
For more information see MDL-81825
-
The function imagecopybicubic() is now deprecated. The GD lib is a strict requirement, so use imagecopyresampled() instead.
For more information see MDL-84449
-
moodle_process_email() has been deprecated with the removal of the unused and non-functioning admin/process_email.php.
For more information see MDL-61232
-
The method
site_registration_form::add_select_with_email()has been finally deprecated and will now throw an exception if called.For more information see MDL-71472
-
Remove support deprecated boolean 'primary' parameter in \core\output\single_button. The 4th parameter is now a string and not a boolean (the use was to set it to true to have a primary button)
For more information see MDL-75875
-
Final removal of the following constants/methods from the
\core\encyptionclass, removing support for OpenSSL fallback:METHOD_OPENSSLOPENSSL_CIPHERis_sodium_installed
For more information see MDL-78869
-
Final deprecation of core_renderer\activity_information()
For more information see MDL-78926
-
Final removal of
share_activity()incore\moodlenet\activity_sender, please useshare_resource()instead.For more information see MDL-79086
-
Final deprecation of methods
task_base::is_blockingandtask_base::set_blocking.For more information see MDL-81509
-
- Remove php-enum library. - It was a dependency of zipstream, but is no longer required as this functionality has been replaced by native PHP functionality.
For more information see MDL-82825
-
Oracle support has been removed in LMS
For more information see MDL-83172
-
The Atto HTML editor has been removed from core, along with all standard subplugins.
The editor is available for continued use in the Plugins Database.
For more information see MDL-83282
-
Support for
subplugins.phpfiles has been removed. All subplugin metadata must be created in asubplugins.jsonfile.For more information see MDL-83703
-
set_alignment(), set_constraint() and do_not_enhance() functions have been fully removed from action_menu class.
For more information see MDL-83765
-
The
core_output_load_fontawesome_icon_mapweb service has been fully removed and replaced bycore_output_load_fontawesome_icon_system_mapFor more information see MDL-84036
-
Final deprecation and removal of \core\event\course_module_instances_list_viewed
For more information see MDL-84593
-
url class now correctly supports multi level query parameter parsing and output.
This was previously supported in some methods such as get_query_string, but not others. This has been fixed to be properly supported.
For example https://example.moodle.net?test[2]=a&test[0]=b will be parsed as ['test' => [2 => 'a', 0 => 'b']]
All parameter values that are not arrays are casted to strings.
For more information see MDL-77293
-
Remove chat and survey from Adminpresets.
For more information see MDL-82457
-
Removed block_mnet_hosts from admin presets
For more information see MDL-84309
-
- A new hook,
\core_ai\hook\after_ai_action_settings_form_hook, has been introduced. It will allows AI provider plugins to add additional form elements for action settings configuration.
For more information see MDL-82980
- A new hook,
-
- AI provider plugins that want to implement
pre-defined modelsand display additional settings for models must now extend the\core_ai\aimodel\baseclass.
For more information see MDL-82980
- AI provider plugins that want to implement
-
- The
\core_ai\form\action_settings_formclass has been updated to automatically include action buttons such as Save and Cancel. - AI provider plugins should update their form classes by removing the
$this->add_action_buttons();call, as it is no longer required.
For more information see MDL-82980
- The
-
The ai_provider_management_table has been refactored to inherit from flexible_table instead of plugin_management_table. As a result the methods get_plugintype and get_action_url are now unused and have been deprecated in the class.
For more information see MDL-82922
-
Remove chat and survey from core_analytics.
For more information see MDL-82457
-
Cas authentication is removed from core and added to the following git repository: https://github.com/moodlehq/moodle-auth_cas
For more information see MDL-78778
-
Removed auth_mnet plugin from core
For more information see MDL-84307
-
Added several hooks to the restore process to
- Hook to allow extra settings to be defined for the course restore process.
- Hook to allow adding extra fields to the copy course form.
- Hook used by
copy_helper::process_formdata()to expand the list of required fields. - Hook used to allow interaction with the copy task, before the actual task execution takes place.
Other changes include
base_task::add_setting()is now public to allow hook callbacks to add settings.- Settings are now added to the data sent to the course_restored event.
For more information see MDL-83479
-
Remove all MODE_HUB related code.
For more information see MDL-66873
-
Added fields
courseidandcoursefullnametobadgeclass_exporter, which is used in the return structure of external functioncore_badges_get_badge.For more information see MDL-83026
-
Added field
coursefullnametouser_badge_exporter, which is used in the return structure of external functionscore_badges_get_user_badge_by_hashandcore_badges_get_user_badges.For more information see MDL-83026
-
The class in badges/lib/bakerlib.php has been moved to core_badges\png_metadata_handler. If you've extended or directly used the old bakerlib.php, you'll need to update your code to use the new namespaced class.
For more information see MDL-83886
-
The following previously deprecated renderer methods have been removed:
print_badge_table_actionsrender_badge_management
For more information see MDL-79162
-
The fields imageauthorname, imageauthoremail, and imageauthorurl have been removed from badges due to confusion and their absence from the official specification. These fields also do not appear in OBv3.0. Additionally, the image_author_json.php file has been removed as it is no longer needed.
For more information see MDL-83909
-
Removed block_mnet_hosts plugin from core
For more information see MDL-84309
-
Initial deprecation of calendar_sub_month. Use \core_calendar\type_factory::get_calendar_instance()->get_prev_month() instead.
For more information see MDL-79434
-
calendar_day_representation(), calendar_time_representation() and calendar_format_event_time() functions have been deprecated and can't be used anymore. Use humandate and humantimeperiod classes instead.
For more information see MDL-83873
-
calendar_get_courselink(), calendar_events_by_day() functions have been deprecated.
For more information see MDL-84617
-
Initial deprecation of calendar_add_month(). Use \core_calendar\type_factory::get_calendar_instance()->get_next_month() instead.
For more information see MDL-84657
-
Final removal of calendar functions:
- calendar_top_controls()
- calendar_get_link_previous()
- calendar_get_link_next()
For more information see MDL-79434
-
prepare_for_view(), calendar_add_event_metadata() functions have been removed.
For more information see MDL-84617
-
core_calendar_renderer::event() method has been removed.
For more information see MDL-84617
-
Add hook after_cm_completion_updated triggered when an activity completion is updated.
For more information see MDL-83542
-
The method
count_modules_completednow delegate the logic to count the completed modules to the DBMS improving the performance of the method.For more information see MDL-83917
-
Now the core_courseformat\local\content\cm\completion output is more reusable. All the HTML has been moved to its own mustache file, and the output class has a new set_smallbutton method to decide wether to rendered it as a small button (like in the course page) or as a normal one (for other types of pages).
For more information see MDL-83872
-
New core_course\output\activity_icon class to render activity icons with or without purpose color. This output will centralize the way Moodle renders activity icons
For more information see MDL-84555
-
The core_course_edit_module and core_course_edit_section external functions are now deprecated. Use core_courseformat_update_course instead
For more information see MDL-82342
-
The core_course_get_module external function is now deprecated. Use fragment API using component core_courseformat and fragment cmitem instead
For more information see MDL-82342
-
The course_format_ajax_support function is now deprecated. Use course_get_format($course)->supports_ajax() instead.
For more information see MDL-82351
-
course_get_cm_edit_actions is now deprecated. Formats should extend core_courseformat\output\local\content\cm\controlmenu instead.
For more information see MDL-83527
-
Final deprecation of edit_default_completion()
For more information see MDL-78711
-
Final removal of core_course\output\activity_information
For more information see MDL-78926
-
Final deprecation of core_course_renderer\render_activity_information()
For more information see MDL-78926
-
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.
For more information see MDL-82349
-
A new course/format/update.php url is added as a non-ajax alternative to the core_courseformat_course_update webservice
For more information see MDL-82767
-
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.
For more information see MDL-83185
-
Add after_course_content_updated hook triggered when a course content is updated (module modified, ...) through edition.
For more information see MDL-83542
-
From now on, deleting an activity without Ajax will be consistent with deleting an activity using Ajax. This ensures that all activity deletions will use the recycle bin and avoid code duplication. If your format uses the old non-Ajax method to bypass the recycle bin it won't work anymore as the non-Ajax deletions are now handled in course/format/update.php.
For more information see MDL-82767
-
The state actions section_move and all related functions are final deprecated and cannot be used anymore. Use the newer section_move_after from now on.
For more information see MDL-80116
-
The core_courseformat::base get_section_number and set_section_number are now final deprecated. Use get_sectionum and set_sectionnum instead.
For more information see MDL-80116
-
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.
For more information see MDL-82341
-
The core_courseformat\base::get_non_ajax_cm_action_url is now deprecated. Use get_update_url instead.
For more information see MDL-82767
-
Many get actions from course/view.php and course/mod.php are now deprecated. Use the new course/format/update.php instead to replace all direct edit urls in your code. The affected actions are: indent, duplicate, hide, show, stealth, delete, groupmode and marker (highlight). The course/format/updates.php uses the same parameters as the core_courseformat_course_update webservice
For more information see MDL-82767
-
Deprecate the use of element ID selectors in favor of querySelector for Reactive component initialisation. We will use '#id' instead of 'id' for example.
For more information see MDL-83339
-
The core_courseformat_create_module web service has been deprecated. Please use core_courseformat_new_module as its replacement.
For more information see MDL-83469
-
The state mutation addModule, primarily used for creating mod_subsection instances, has been deprecated. Replace it with newModule. Additionally, all course formats using links with data-action="addModule" must be updated to use data-action="newModule" and include a data-sectionid attribute specifying the target section ID.
For more information see MDL-83469
-
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.
For more information see MDL-83527
-
The externservercourse.php feature used to override the course view page has been deprecated in favor of using hooks. The following hooks are available to do something similar: \core_course\hook\before_course_viewed.
For more information see MDL-83764
-
Protected function
core_courseformat\output\local\content\section\availability::availability_info()has been fully removed. Usecore_courseformat\output\local\content\section\availability::get_availability_data()instead.For more information see MDL-78489
-
The old UI for moving activities and sections without javascript is not avaiable anymore from the actions dropdown. From now, on the only UI to move activities and sections is using the move action in the course editor. Format plugins can still use the old links to make the "move here" elements appear, but they will show deprecated messages. All the non-ajax moving will be removed in Moodle 6.0.
For more information see MDL-83562
-
HTML IDs relating to section collapse/expand have been changed in the course format templates.
- core_courseformat/local/content/section/header #collapssesection{{num}} has been changed to #collapsesectionid{{id}}
- core_courseformat/local/content/section/content #coursecontentcollapse{{num}} had been changed to #coursecontentcollapseid{{id}}
For more information see MDL-82679
-
Added a new custom field exporter to export custom field data in
\core_customfield\external\field_data_exporterFor more information see MDL-83552
-
New method enrol_plugin::get_instance_name_for_management_page() can be used to display additional details next to the instance name.
For more information see MDL-84139
-
Plugins implementing enrol_page_hook() method are encouraged to use the renderable \core_enrol\output\enrol_page to produce HTML for the enrolment page. Forms should be displayed in a modal dialogue. See enrol_self plugin as an example.
For more information see MDL-84142
-
It's now possible for themes to override the course enrolment index page by overriding the new course renderer
enrolment_optionsmethodFor more information see MDL-84143
-
The
after_user_enrolledhook now contains aroleidproperty to allow for listeners to determine which role was assigned during user enrolment (if any)The base enrolment
enrol_plugin::send_course_welcome_message_to_usermethod also now accepts a$roleidparameter in order to correctly populate thecourseroleplaceholderFor more information see MDL-83432
-
Final removal of base
enrol_pluginclass methodupdate_communicationFor more information see MDL-80491
-
Removed enrol_mnet plugin from core
For more information see MDL-84310
-
A new function
file_clear_draft_area()has been added to delete the files in a draft area.For more information see MDL-72050
-
Adds a new ad-hoc task
core_files\task\asynchronous_mimetype_upgrade_taskto upgrade the mimetype of files asynchronously during core upgrades. The upgradelib also comes with a new utility functionupgrade_create_async_mimetype_upgrade_taskfor creating said ad-hoc task.For more information see MDL-81437
-
The
cohortform element now accepts newincludesoption, which is passed to the corresponding external service to determine which cohorts to return (self, parents, all)For more information see MDL-83641
-
grade_regrade_final_grades()now has an additionalasyncparameter, which allows full course regrades to be performed in the background. This avoids blocking the user for long periods and while making changes to a large course. The actual regrade is performed using the\core_course\task\regrade_final_gradesadhoc task, which callsgrade_regrade_final_grades()withasync: false.For more information see MDL-81714
-
The
grade_object::fetch_all_helper()now accepts a new$sortparameter with a default value isid ASCto sort the grade instancesFor more information see MDL-85115
-
Deprecate print_graded_users_selector() from Moodle 2 era
For more information see MDL-84673
-
Removed unused grade_edit_tree_column_select class
For more information see MDL-77668
-
The previously deprecated
grade_helper::get_lang_stringmethod has been removedFor more information see MDL-78780
-
Final deprecation of grade_structure::get_element_type_string(), grade_structure::get_element_header(), grade_structure::get_element_icon(), grade_structure::get_activity_link()
For more information see MDL-79907
-
The external function core_grades_get_enrolled_users_for_search_widget has been fully removed.
For more information see MDL-84036
-
The external function core_grades_get_groups_for_search_widget has been fully removed.
For more information see MDL-84036
-
Remove deprecated mnet_peer::get_public_key()
For more information see MDL-78304
-
Removed portfolio_mahara plugin from core
For more information see MDL-84308
-
The
get_bulk_actions()method on the baseplugin_features_baseclass has been changed to allow a qbank view object to be passed through. This is nullable and therefore optional for qbank plugins which don't need to do so.For more information see MDL-79281
-
Question bank Condition classes can now implement a function called "filter_invalid_values($filterconditions)" to remove anything from the filterconditions array which is invalid or should not be there.
For more information see MDL-83784
-
question_attempt_step's constructor now accepts the class constant TIMECREATED_ON_FIRST_RENDER as a value for the $timecreated parameter. Calling question_attempt::render for the first time will now set the first step's timecreated to the current time if it is set to this value. Note, null could not be used here as it is already used to indicate timecreated should be set to the current time.
For more information see MDL-68806
-
The definition of the abstract
core_question\local\bank\conditionclass has changed to make it clearer which methods are required in child classes. Theget_filter_classmethod is no longer declared as abstract, and will returnnullby default to use the basecore/datafilter/filtertypeclass. If you have defined this method to returnnullin your own class, it will continue to work, but it is no longer necessary.build_query_from_filterandget_condition_keyare 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.For more information see MDL-83859
-
question_type::generate_test
No replacement, not used anywhere in core.
For more information see MDL-71378
-
Deprecated method
mod_quiz\question\bank\qbank_helper::get_version_optionsin favour ofcore_question\local\bank\version_options::get_version_optionsso that the method is in core rather than a module, and can safely be used from anywhere as required.For more information see MDL-77713
-
Behat steps
behat_qbank_comment::i_should_see_on_the_columnandbehat_qbank_comment::i_click_on_the_row_containinghave been deprecated in favour of the new component named selectors,qbank_comment > Comment count linkandqbank_comment > Comment count textwhich can be used with the standardshould existandI click onsteps to replace the custom steps.For more information see MDL-79122
-
Final deprecation of:
- core_question\local\bank\action_column_base::class
- core_question\local\bank\menu_action_column_base::class
- core_question\local\bank\menuable_action::interface
- core_question\local\bank\view::print_choose_category_message()
- core_question\local\bank\view::display_advanced_search_form()
- core_question\local\bank\view::display_showtext_checkbox()
- core_question\local\bank\view::init_search_conditions()
- core_question\local\bank\view::get_current_category()
- core_question\local\bank\view::display_options_form()
- core_question\local\bank\view::start_table()
- core_question\local\bank\view::end_table()
- core_question\statistics\questions\all_calculated_for_qubaid_condition::TIME_TO_CACHE
- core_question\statistics\responses\analyser::TIME_TO_CACHE
- core_question_bank_renderer::render_category_condition_advanced()
- core_question_bank_renderer::render_hidden_condition_advanced()
- core_question_bank_renderer::render_category_condition()
For more information see MDL-78090
-
Duplication or multiple restores of questions has been modified to avoid errors where a question with the same stamp already exists in the target category. To achieve this all data for the question is hashed, excluding any ID fields.
The question data from the backup is first reformatted to match the questiondata structure returned by calling
get_question_options()(see https://docs.moodle.org/dev/Question_data_structures#Representation_1:_%24questiondata). Common question elements will be handled automatically, but any elements that the qtype adds to the backup will need to be handled by overridingrestore_qtype_plugin::convert_backup_to_questiondata. Seerestore_qtype_match_pluginas an example. If a qtype plugin calls any$this->add_question_*()methods in itsrestore_qtype_*_plugin::define_question_plugin_structure()method, the ID fields used in these records will be excluded automatically. If a qtype plugin defines its own tables with ID fields, it must definerestore_qtype_*_plugin::define_excluded_identity_hash_fields()to return an array of paths to these fields within the question data. This should be all that is required for the majority of plugins. See the PHPDoc ofrestore_qtype_plugin::define_excluded_identity_hash_fields()for a full explanation of how these paths should be defined, andrestore_qtype_truefalse_pluginfor an example. If the data structure for a qtype returned by callingget_question_options()contains data other than ID fields that are not contained in the backup structure or vice-versa, it will need to overriderestore_qtype_*_plugin::remove_excluded_question_data()to remove the inconsistent data. Seerestore_qtype_multianswer_pluginas an example.For more information see MDL-83541
-
New
reporthelper classget_report_row_countmethod for retrieving row count of custom or system report, without having to retrieve the report contentFor more information see MDL-74488
-
New
get_deprecated_tablesmethod 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 reportsFor more information see MDL-78118
-
The base report class, used by both
\core_reportbuilder\system_reportand\core_reportbuilder\datasource, contains new methods for enhancing report renderingset_report_actionallows for an action button to belong to your report, and be rendered alongside the filters button;set_report_info_containerallows for content to be rendered by your report, between the action buttons and the table content
For more information see MDL-82936
-
The base aggregation class has a new
column_groupbymethod, to be implemented in aggregation types to determime whether report tables should group by the fields of the aggregated columnFor more information see MDL-83361
-
There is a new
dateaggregation type, that can be applied in custom and system reportsFor more information see MDL-83361
-
The
core_reportbuilder_testcaseclass has been moved to new autoloadedcore_reportbuilder\tests\core_reportbuilder_testcaselocation, affected tests no longer have to manually require/reportbuilder/tests/helpers.phpFor more information see MDL-84000
-
Columns added to system reports can render help icons in table headers via
[set|get]_help_iconcolumn instance methodsFor more information see MDL-84016
-
The
groupconcat[distinct]aggregation types support optional'separator'value to specify the text to display between aggregated itemsFor more information see MDL-84537
-
The
get_active_conditionsmethod of the base report class has a new$checkavailableparameter to determine whether to check the returned conditions availabilityFor more information see MDL-82809
-
When the
selectfilter contains upto two options only then the operator field is removed, switching to a simpler value selection field only (this may affect your Behat scenarios)For more information see MDL-82913
-
Report table instances no longer populate the
countsqlandcountparamsclass properties. Instead calling code can accesstotalrowsto obtain the same value, or by calling the helper methodreport::get_report_row_countFor more information see MDL-83718
-
For columns implementing custom sorting via their
set_is_sortablemethod, the specified sort fields must also be part of the columns initially selected fieldsFor more information see MDL-83718
-
The
selectfilter type is now stricter in it's filtering, in that it will now discard values that aren't present in available filter optionsFor more information see MDL-84213
-
Aggregation types can access passed options set via the base class constructor in the
$this->options[]class property. As such, theirformat_valuemethod is no longer static and is always called from an instantiated class instanceFor more information see MDL-84537
-
New
$optionsargument added to thecolumn::set_aggregationmethod for system reports, to set aggregation type-specific optionsReport entities can call new
column::set_aggregation_optionsto achieve the sameFor more information see MDL-84537
-
The
schedulehelper classget_schedule_report_countmethod is now deprecated, existing code should instead usereport::get_report_row_countFor more information see MDL-74488
-
The
render_new_report_buttonmethod of thecore_reportbuilderrenderer has been deprecated. Instead, refer to the report instanceset_report_actionmethodFor more information see MDL-82936
-
Use of the
course_completiontable is deprecated in thecompletionentity, please usecourse_completionsinsteadFor more information see MDL-84135
-
The following deprecated report entity elements have been removed:
comment:contextcomment:contexturlenrolment:method(plus enrolment formatterenrolment_namemethod)enrolment:rolefile:contextfile:contexturlinstance:context(tag)instance:contexturl(tag)
Use of the
contexttable is also deprecated in thefileandinstance(tag) entitiesFor more information see MDL-78118
-
Various Oracle-specific support/workarounds in APIs and component report entities have been removed
For more information see MDL-80173
-
Final removal of support for
get_default_table_aliasesmethod. Entities must now implementget_default_tables, which is now abstract, to define the tables they useFor more information see MDL-80430
-
Final removal of base
repositoryclass methodget_file_sizeFor more information see MDL-78706
-
Introducing a new function \core_sms\gateway::truncate_message() to truncate SMS message content according to the length limit of the gateway.
For more information see MDL-84342
-
The
core_tag\taglistclass now includes a new property calleddisplaylink, which has a default value oftrue. Whendisplaylinkis set totrue, the tag name will be displayed as a clickable hyperlink. Ifdisplaylinkis set tofalse, the tag name will be rendered as plain text instead.For more information see MDL-75075
-
Final removal of the following user preference helpers, please use the
core_user/repositorymodule instead:user_preference_allow_ajax_updateM.util.set_user_preferencelib/ajax/setuserpref.php
For more information see MDL-79124
-
The
aiplacement_courseassisttemplates and CSS have been modified. These changes allow for multiple actions to be nested in a dropdown menu.For more information see MDL-82942
-
'Activity' selector in site_main_menu block has been deleted.
For more information see MDL-83733
-
'Activity' selector in social_activities block has been deleted.
For more information see MDL-83733
-
New external function
editor_tiny_get_configuration. TinyMCE subplugins can provide configuration to the new external function by implementing theplugin_with_configuration_for_externalinterface and/or overriding theis_enabled_for_externalmethod.For more information see MDL-84353
-
Class enrol_guest_enrol_form is deprecated, use enrol_guest\form\enrol_form instead
For more information see MDL-84142
-
Class enrol_self_enrol_form is deprecated, use enrol_self\form\enrol_form instead
For more information see MDL-84142
-
Final removal of
enrol_self_plugin::get_welcome_email_contactmethod, please useenrol_plugin::get_welcome_message_contactinsteadFor more information see MDL-81185
-
In format topics, the section controlmenu class deprecates the get_course_url method. This may affect formats extending the topics format and adding extra items to the section menu. Use $this->format->get_update_url instead.
For more information see MDL-82767
-
The get_highlight_control in the section controlmenu class is now deprecated. Use get_section_highlight_item instead
For more information see MDL-83527
-
The previously deprecated
grade_report::get_lang_stringmethod has been removedFor more information see MDL-78780
-
The method
gradereport_grader::get_right_avg_row()has been finally deprecated and will now throw an exception if called.For more information see MDL-78890
-
The
behat_gradereport_grader::get_grade_item_idstep helper has been removed, please use the equivalentbehat_gradesmethod insteadFor more information see MDL-77107
-
The plugin
mlbackend_phphas been removed and replaced bymlbackend_pythonas the new default value for the Analytics settingpredictionsprocessor. The plugin is available at https://github.com/moodlehq/moodle-mlbackend_php.For more information see MDL-84107
-
The plugintype mnetservice was deprecated. MNet has been deprecated for many years now and will be removed.
For more information see MDL-84311
-
Removed mnetservice_enrol plugin from core
For more information see MDL-84311
-
Remove mod_survey for Moodle 5.0
For more information see MDL-82457
-
Remove mod_chat from Moodle 5.0
For more information see MDL-82457
-
Assign sub-plugins have a new method
assign_plugin::settings_validationwhich can be overridden to validate the data when the assignments form is saved.For more information see MDL-83440
-
There is a new method
submission_summary_for_messages()for submission sub-plugins to summarise what has been submitted for inclusion in confirmation messages to students.For more information see MDL-84387
-
When the assignment activity sends notifications, it now sets more information in the $a object passed to the languages strings for the message subject and body. This is to give more flexibility to people using Language Customisation. The avaiable information is the same as the template context for the two templates in the next paragraph, but without the messagetext/html. Also, the overall structure of these messages is now rendered using templates mod_assign/messages/notification_html and mod_assign/messages/notification_html, so they can be overridden by themes. As a result of this, the methods format_notification_message_text and format_notification_message_html (which should have been private to mod_assign and not used anywhere else) have been removed.
For more information see MDL-84733
-
The assign_course_index_summary is now deprecated. The assign index is now generated using the mod_assign\course\overview integration class.
For more information see MDL-83888
-
The unit test for the privacy provider has been marked as final.
A number of core tests had been incorrectly configured to extend this test but should instead be extending
\mod_assign\tests\provider_testcase.Any community plugins extending the
\mod_assign\privacy\provider_testtest class should be updated to extend\mod_assign\tests\provider_testcaseinstead.For more information see MDL-81520
-
The method book_get_nav_classes has been finally deprecated and will now throw an exception if called.
For more information see MDL-81328
-
The WebService
mod_choice_get_choice_resultshas a new parametergroupidthat allows specifying the group to get the results for. The default behaviour hasn't changed: if a choice has groups and the parameter isn't specified the WebService will return the results for the active group.For more information see MDL-78449
-
The function
choice_get_response_datahas a new parameter that allows specifying the group to get the results for. The default behaviour hasn't changed: if a choice has groups and the parameter isn't used, the function will return the results for the active group.For more information see MDL-78449
-
The following unused capabilities have been deprecated:
mod/data:commentmod/data:managecomments
For more information see MDL-84267
-
Final deprecation and removal of the following classes:
- data_preset_importer
- data_preset_existing_importer
- data_preset_upload_importer
- data_import_preset_zip_form
For more information see MDL-75189
-
- Final deprecation of \mod_data_renderer::import_setting_mappings(). Please use \mod_data_renderer::importing_preset() instead. - Final deprecation of data_print_template() function. Please use mod_data\manager::get_template and mod_data\template::parse_entries instead. - Final deprecation of data_preset_name(). Please use preset::get_name_from_plugin() instead. - Final deprecation of data_get_available_presets(). Please use manager::get_available_presets() instead. - Final deprecation of data_get_available_site_presets(). Please use manager::get_available_saved_presets() instead. - Final deprecation of data_delete_site_preset(). Please use preset::delete() instead. - Final deprecation of is_directory_a_preset(). Please use preset::is_directory_a_preset() instead. - Final deprecation of data_presets_save(). Please use preset::save() instead. - Final deprecation of data_presets_generate_xml(). Please use preset::generate_preset_xml() instead. - Final deprecation of data_presets_export(). Please use preset::export() instead. - Final deprecation of data_user_can_delete_preset(). Please use preset::can_manage() instead. - Final deprecation of data_view(). Please use mod_data\manager::set_module_viewed() instead.
For more information see MDL-75189
-
Added new
mod_feedback_questions_reorderexternal functionFor more information see MDL-81745
-
The 'mode' parameter has been deprecated from 'edit_template_action_bar' and 'templates_table' contructors.
For more information see MDL-81744
-
The 'use_template' template has been removed as it is not needed anymore.
For more information see MDL-81744
-
Method htmllize_tree() has been removed. Please use renderable_tree_elements instead
For more information see MDL-79214
-
The external function get_user_attempts now returns the total number of attempts.
For more information see MDL-82775
-
Final removal of deprecated
imscp_libxml_disable_entity_loaderfunctionFor more information see MDL-78635
-
Remove unused /mod/lesson/tabs.php
For more information see MDL-82937
-
Final removal of deprecated
lti_libxml_disable_entity_loaderfunctionFor more information see MDL-78635
-
quiz_attempt now has 2 additional state values, NOT_STARTED and SUBMITTED. These represent attempts when an attempt has been
For more information see MDL-68806
-
New quiz setting "precreateperiod" controls the period before timeopen during which attempts will be pre-created using the new NOT_STARTED state. This setting is marked advanced and locked by default, so can only be set by administrators. This setting is read by the \mod_quiz\task\precreate_attempts task to identify quizzes due for pre-creation.
For more information see MDL-68806
-
quiz_attempt_save_started now sets the IN_PROGRESS state, timestarted, and saves the attempt, while the new quiz_attempt_save_not_started function sets the NOT_STARTED state and saves the attempt.
For more information see MDL-68806
-
quiz_attempt_save_started Now takes an additional $timenow parameter, to specify the timestart of the attempt. This was previously set in quiz_create_attempt, but is now set in quiz_attempt_save_started and quiz_attempt_save_not_started.
For more information see MDL-68806
-
The
quiz_question_tostringmethod 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).For more information see MDL-75075
-
The
\mod_quiz\attempt_walkthrough_from_csv_testunit test has been marked as final and should not be extended by other tests.All shared functionality has been moved to a new autoloadable test-case:
\mod_quiz\tests\attempt_walkthrough_testcase.To support this testcase the existing
$filesinstance property should be replaced with a new static method,::get_test_files. Both the existing instance property and the new static method can co-exist.For more information see MDL-81521
-
quiz_attempt::process_finish is now deprecated, and its functionality is split between ::process_submit, which saves the submission, sets the finish time and sets the SUBMITTED status, and ::process_grade_submission which performs automated grading and sets the FINISHED status.
For more information see MDL-68806
-
The webservice function
mod_quiz_get_user_attemptsis now deprecated in favour ofmod_quiz_get_user_quiz_attempts.With the introduction of the new NOT_STARTED quiz attempt state,
mod_quiz_get_user_attemptshas been modified to not return NOT_STARTED attempts, allowing clients such as the mobile app to continue working without modifications.mod_quiz_get_user_quiz_attemptswill return attempts in all states, asmod_quiz_get_user_attemptsdid before. Once clients are updated to handle NOT_STARTED attempts, they can migrate to use this function.A minor modification to
mod_quiz_start_attempthas been made to allow it to transparently start an existing attempt that is in the NOT_STARTED state, rather than creating a new one.For more information see MDL-68806
-
Final removal of quiz_delete_override() and quiz_delete_all_overrides()
For more information see MDL-80944
-
Final deprecation of mod_wiki_renderer\wiki_info()
For more information see MDL-78926
-
Final deprecation of:
- qbank_managecategories\output\renderer::class
- qbank_statistics\helper::calculate_average_question_discriminative_efficiency()
- qbank_statistics\helper::calculate_average_question_discrimination_index()
- qbank_statistics\helper::get_all_places_where_questions_were_attempted()
- qbank_statistics\helper::calculate_average_question_stats_item()
- qbank_statistics\helper::calculate_average_question_facility()
- qbank_statistics\helper::load_statistics_for_place()
- qbank_statistics\helper::extract_item_value()
- template qbank_managecategories/category_condition_advanced
- template qbank_managecategories/category_condition
- template qbank_managecategories/listitem
For more information see MDL-78090
-
qbank_bulkmove/helper::get_displaydata
Superceded by a modal and webservice, see qbank_bulkmove/modal_question_bank_bulkmove and core_question_external\move_questions
For more information see MDL-71378
-
qbank_bulkmove\output\renderer::render_bulk_move_form
Superceded by qbank_bulkmove\output\bulk_move
For more information see MDL-71378
-
report_insights_set_notuseful_prediction() external function has been fully removed.
For more information see MDL-84036
-
report_insights_set_fixed_prediction() external function has been fully removed.
For more information see MDL-84036
-
Support for the $grouplist public member in the report_log_renderable class has been removed.
For more information see MDL-81155
-
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-*-filterelements can be removed, as they are no longer in use.For more information see MDL-83725
-
Added new bs4-compat SCSS file (initially deprecated) to help third-party plugins the migration process from BS4 to BS5
For more information see MDL-80519
-
New
theme_boost/bs4-compatJS module added (directly deprecated) to allow third-party-plugins to directly convert old Bootstrap 4 data attribute syntax to the new Bootstrap 5For more information see MDL-84450
-
Remove SCSS deprecated in 4.4
For more information see MDL-80156
-
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.
For more information see MDL-82457
-
behat_admin_presets::following_in_the_should_download_between_and_bytes is deprecated. Use: the following element should download a file that:
For more information see MDL-83035
-
New Behat step
\behat_general::the_url_should_match()has been added to allow checking the current URL. You can use it to check whether a user has been redirected to the expected location. e.g.And the url should match "/mod/forum/view\.php\?id=[0-9]+"For more information see MDL-83617
-
tool_brickfield\local\areas\core_question\answerbase::find_system_areas
No replacement. System context no longer a valid context to assign a question category
For more information see MDL-71378
-
tool_brickfield\local\areas\core_question\base::find_system_areas
No replacement. System context no longer a valid context to assign a question category
For more information see MDL-71378
-
Remove chat and survey support from tool_brickfield.
For more information see MDL-82457
-
behat_tool_lp_data_generators::the_following_lp_exist is deprecated. Use the following "core_competency > [competency|framework|plan...]" exist:
For more information see MDL-82866
-
The new factor management table uses
plugin_management_table, so not only the functions that changed, but the file needs to be moved fromadmin/tool/mfa/classes/local/admin_setting_managemfa.phptoadmin/tool/mfa/classes/table/admin_setting_managemfa.phpFor more information see MDL-83516
-
Introduce the new language string
settings:shortdescription, which is mandatory for each factor.For more information see MDL-83516
-
The two language strings in the tool_mfa plugin, namely
inputrequiredandsetuprequired, are deprecated.For more information see MDL-83516
-
The previously deprecated
setup_factorrenderer method has been removedFor more information see MDL-80995
-
Remove chat and survey support from tool_mobile.
For more information see MDL-82457
-
A new method,
\core_user::get_name_placeholders(), has been added to return an array of user name fields.For more information see MDL-64148
-
The following classes have been renamed and now support autoloading. Existing classes are currently unaffected.
Old class name New class name \core_component\core\componentFor more information see MDL-66903
-
Added the ability for unit tests to autoload classes in the
\[component]\tests\namespace from the[path/to/component]/tests/classesdirectory.For more information see MDL-66903
-
Added a helper to load fixtures from a components
tests/fixtures/folder:advanced_testcase::load_fixture(string $component, string $fixture): void;
For more information see MDL-66903
-
Redis session cache has been improved to make a single call where two were used before.
For more information see MDL-69684
-
Added stored progress bars
For more information see MDL-70854
-
Two new functions have been introduced in the
\moodle_databaseclass:\moodle_database::get_counted_records_sql()\moodle_database::get_counted_recordset_sql()
These methods are compatible with all databases.
They will check the current running database engine and apply the
COUNTwindow function if it is supported, otherwise, they will use the usualCOUNTfunction.The
COUNTwindow function optimization is applied to the following databases:- PostgreSQL
- MariaDB
- Oracle
Note: MySQL and SQL Server do not use this optimization due to insignificant performance differences before and after the improvement.
For more information see MDL-78030
-
The
after_config()callback has been converted to a hook,\core\hook\after_config.For more information see MDL-79011
-
The
\core\output\select_menuwidget now supports rendering dividers between menu options. Empty elements (nullor empty strings) within the array of options are considered and rendered as dividers in the dropdown menu.For more information see MDL-80747
-
The
\core\output\select_menuwidget now supports a new feature: inline labels. You can render the label inside the combobox widget by passingtrueto the$inlinelabelparameter when calling the->set_label()method.For more information see MDL-80747
-
A new hook called
\core\hook\output\after_http_headershas been created. This hook allow plugins to modify the content after headers are sent.For more information see MDL-80890
-
The following classes have been renamed. Existing classes are currently unaffected.
Old class name New class name \core_user\core\userFor more information see MDL-81031
-
New DML constant
SQL_INT_MAXto define the size of a large integer with cross database platform support.For more information see MDL-81282
-
Added a new
exceptionL2 Namespace to APIs.For more information see MDL-81903
-
Added a mechanism to support autoloading of legacy class files. This will help to reduce the number of
require_oncecalls in the codebase, and move away from the use of monolithic libraries.For more information see MDL-81919
-
The following exceptions are now also available in the
\core\exceptionnamespace:\coding_exception\file_serving_exception\invalid_dataroot_permissions\invalid_parameter_exception\invalid_response_exception\invalid_state_exception\moodle_exception\require_login_exception\require_login_session_timeout_exception\required_capability_exception\webservice_parameter_exception
For more information see MDL-81919
-
The following classes are now also available in the
\core\namespace and support autoloading:Old class name New class name \emoticon_manager\core\emoticon_manager\lang_string\core\lang_stringFor more information see MDL-81920
-
The following classes have been renamed and now support autoloading. Existing classes are currently unaffected.
Old class name New class name \moodle_url\core\url\progress_trace\core\output\progress_trace\combined_progress_trace\core\output\progress_trace\combined_progress_trace\error_log_progress_trace\core\output\progress_trace\error_log_progress_trace\html_list_progress_trace\core\output\progress_trace\html_list_progress_trace\html_progress_trace\core\output\progress_trace\html_progress_trace\null_progress_trace\core\output\progress_trace\null_progress_trace\progress_trace_buffer\core\output\progress_trace\progress_trace_buffer\text_progress_trace\core\output\progress_trace\text_progress_traceFor more information see MDL-81960
-
The following classes are now also available in the following new locations. They will continue to work in their old locations:
Old classname New classname \action_link\core\output\action_link\action_menu_filler\core\output\action_menu\filler\action_menu_link_primary\core\output\action_menu\link_primary\action_menu_link_secondary\core\output\action_menu\link_secondary\action_menu_link\core\output\action_menu\link\action_menu\core\output\action_menu\block_contents\core_block\output\block_contents\block_move_target\core_block\output\block_move_target\component_action\core\output\actions\component_action\confirm_action\core\output\actions\confirm_action\context_header\core\output\context_header\core\output\local\action_menu\subpanel\core\output\action_menu\subpanel\core_renderer_ajax\core\output\core_renderer_ajax\core_renderer_cli\core\output\core_renderer_cli\core_renderer_maintenance\core\output\core_renderer_maintenance\core_renderer\core\output\core_renderer\custom_menu_item\core\output\custom_menu_item\custom_menu\core\output\custom_menu\file_picker\core\output\file_picker\flexible_table\core_table\flexible_table\fragment_requirements_manager\core\output\requirements\fragment_requirements_manager\help_icon\core\output\help_icon\html_table_cell\core_table\output\html_table_cell\html_table_row\core_table\output\html_table_row\html_table\core_table\output\html_table\html_writer\core\output\html_writer\image_icon\core\output\image_icon\initials_bar\core\output\initials_bar\js_writer\core\output\js_writer\page_requirements_manager\core\output\requirements\page_requirements_manager\paging_bar\core\output\paging_bar\pix_emoticon\core\output\pix_emoticon\pix_icon_font\core\output\pix_icon_font\pix_icon_fontawesome\core\output\pix_icon_fontawesome\pix_icon\core\output\pix_icon\plugin_renderer_base\core\output\plugin_renderer_base\popup_action\core\output\actions\popup_action\preferences_group\core\output\preferences_group\preferences_groups\core\output\preferences_groups\progress_bar\core\output\progress_bar\renderable\core\output\renderable\renderer_base\core\output\renderer_base\renderer_factory_base\core\output\renderer_factory\renderer_factory_base\renderer_factory\core\output\renderer_factory\renderer_factory_interface\single_button\core\output\single_button\single_select\core\output\single_select\standard_renderer_factory\core\output\renderer_factory\standard_renderer_factory\table_dataformat_export_format\core_table\dataformat_export_format\table_default_export_format_parent\core_table\base_export_format\table_sql\core_table\sql_table\tabobject\core\output\tabobject\tabtree\core\output\tabtree\templatable\core\output\templatable\theme_config\core\output\theme_config\theme_overridden_renderer_factory\core\output\renderer_factory\theme_overridden_renderer_factory\url_select\core\output\url_select\user_picture\core\output\user_picture\xhtml_container_stack\core\output\xhtml_container_stack\YUI_config\core\output\requirements\yuiFor more information see MDL-82183
-
A new method,
\core\output\::get_deprecated_icons(), has been added to theicon_systemclass. All deprecated icons should be registered through this method. Plugins can implement a callback topluginname_get_deprecated_icons()to register their deprecated icons too. When$CFG->debugpageinfois enabled, a console message will display a list of the deprecated icons.For more information see MDL-82212
-
Two new optional parameters have been added to the
\core\output\notificationconstructor:null|string $title-null|string $icon
For more information see MDL-82297
-
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).For more information see MDL-82490
-
A new static method,
\advanced_testcase::get_fixture_path(), has been added to enable unit tests to fetch the path to a fixture.For more information see MDL-82627
-
A new static method,
\advanced_testcase::get_mocked_http_client(), has been added to allow unit tests to mock the\core\http_clientand update the DI container.For more information see MDL-82627
-
The Moodle autoloader should now be registered using
\core\component::register_autoloaderrather than manually doing so in any exceptional location which requires it. Note: It is not normally necessary to include the autoloader manually, as it is registered automatically when the Moodle environment is bootstrapped.For more information see MDL-82747
-
A new JS module for interacting with the Routed REST API has been introduced. For more information see the documentation in the
core/fetchmodule.For more information see MDL-82778
-
The
\section_infoclass now includes a new method\section_info::get_sequence_cm_infos()that retrieves all\cm_infoinstances associated with the course section.For more information see MDL-82845
-
When rendering a renderable located within a namespace, the namespace will now be included in the renderer method name with double-underscores separating the namespace parts.
Note: Only those renderables within an
outputnamespace will be considered, for example\core\output\action_menu\linkand only the parts of the namespace afteroutputwill be included.The following are examples of the new behaviour:
Renderable name Renderer method name \core\output\action_menu\linkrender_action_menu__link\core\output\action_menu\link_primaryrender_action_menu__link_primary\core\output\action\menu\linkrender_action__menu__link\core\output\user_menu\linkrender_user_menu__linkFor more information see MDL-83164
-
The minimum Redis server version is now 2.6.12. The minimum PHP Redis extension version is now 2.2.4.
For more information see MDL-69684
-
The class autoloader has been moved to an earlier point in the Moodle bootstrap.
Autoloaded classes are now available to scripts using the
ABORT_AFTER_CONFIGconstant.For more information see MDL-80275
-
The
\core\dataformat::get_format_instance()method is now public, and can be used to retrieve a writer instance for a given dataformat.For more information see MDL-81781
-
The
\get_home_page()function can now return new constantHOMEPAGE_URL, applicable when a third-party hook has extended the default homepage options for the site.A new function,
\get_default_home_page_url()has been added which will return the correct URL when this constant is returned.For more information see MDL-82066
-
The following method has been deprecated and should no longer be used:
reset_password_and_mail. Please consider usingsetnew_password_and_mailas a replacement.For more information see MDL-64148
-
- The following methods have been finally deprecated and removed:
\plagiarism_plugin::get_configs()\plagiarism_plugin::get_file_results()\plagiarism_plugin::update_status(), please use{plugin name}_before_standard_top_of_body_htmlinstead.
- Final deprecation and removal of
\plagiarism_get_file_results(). Please use\plagiarism_get_links()instead. - Final deprecation and removal of
\plagiarism_update_status(). Please use\{plugin name}_before_standard_top_of_body_html()instead.
For more information see MDL-71326
- The following methods have been finally deprecated and removed:
-
\moodle_listand\list_itemwere only used byqbank_managecategories, and these usages have been removed, so these classes, and thelib/listlib.phpfile have now been deprecated. This method was the only usage of theQUESTION_PAGE_LENGTHconstant, which was defined inquestion_category_object.php, and so is also now deprecated.For more information see MDL-72397
-
The
$timeoutproperty of the\navigation_cacheclass has been deprecated.For more information see MDL-79628
-
The following classes are deprecated as they are handled by core_sms API and smsgateway_aws plugin:
\core\aws\admin_settings_aws_region\core\aws\aws_helper\core\aws\client_factory
For more information see MDL-80962
-
The following methods have been deprecated, existing usage should switch to use the secure
\core\encryption::encrypt()and\core\encryption::decrypt()static methods:\rc4encrypt()\rc4decrypt()\endecrypt()
For more information see MDL-81940
-
The following method has been deprecated and should not be used any longer:
\print_grade_menu().For more information see MDL-82157
-
The following files and their contents have been deprecated:
lib/soaplib.phplib/tokeniserlib.php
For more information see MDL-82191
-
The following functions have been initially deprecated:
\get_core_subsystems()\get_plugin_types()\get_plugin_list()\get_plugin_list_with_class()\get_plugin_directory()\normalize_component()\get_component_directory()\get_context_instance()
Note: These methods have been deprecated for a long time, but previously did not emit any deprecation notice.
For more information see MDL-82287
-
The following methods have been finally deprecated and will now throw an exception if called:
\get_context_instance()\can_use_rotated_text()\get_system_context()\print_arrow()
For more information see MDL-82287
-
The
global_navigation::load_section_activitiesmethod is now deprecated and replaced byglobal_navigation::load_section_activities_navigation.For more information see MDL-82845
-
The following renderer methods have been deprecated from the core renderer:
method replacement render_action_menu_linkrender_action_menu__linkrender_action_menu_link_primaryrender_action_menu__link_primaryrender_action_menu_link_secondaryrender_action_menu__link_secondaryrender_action_menu_fillerrender_action_menu__fillerFor more information see MDL-83164
-
The previously deprecated function
search_generate_text_SQLhas been removed and can no longer be used.For more information see MDL-48940
-
The previously deprecated function
\core_text::reset_caches()has been removed and can no longer be used.For more information see MDL-71748
-
The following previously deprecated methods have been removed and can no longer be used:
\renderer_base::should_display_main_logo()
For more information see MDL-73165
-
Final deprecation of
\print_error(). Please use the\moodle_exceptionclass instead.For more information see MDL-74484
-
Final deprecation of
\core\task\manager::ensure_adhoc_task_qos().For more information see MDL-74843
-
Support for the deprecated block and activity namespaces
<component>\local\views\secondary, which supported the overriding of secondary navigation, has now been entirely removed.For more information see MDL-74939
-
Remove deprecation layer for YUI JS Events. The deprecation layer was introduced with MDL-70990 and MDL-72291.
For more information see MDL-77167
-
The
\navigation_cacheclass now uses the Moodle Universal Cache (MUC) to store the navigation cache data instead of storing it in the global$SESSIONvariable.For more information see MDL-79628
-
All the
setUp()andtearDown()methods ofPHPUnitnow are required to, always, call to their parent counterparts. This is a good practice to avoid future problems, especially when updating to PHPUnit >= 10. This includes the following methods:setUp()tearDown()setUpBeforeClass()tearDownAfterClass()
For more information see MDL-81523
-
Use server timezone when constructing
\DateTimeImmutablefor the system\core\clockimplementation.For more information see MDL-81894
-
The previously deprecated renderer
render_core_availability_multiple_messagesmethod has been removed.For more information see MDL-82223
-
The
\core_backup\copy\copyclass has been deprecated and removed. Please use\copy_helperinstead.For more information see MDL-75022
-
The following methods in the
\base_controllerclass have been removed:Method Replacement \base_controller::set_copy()Use a restore controller for storing copy information instead. \base_controller::get_copy()\restore_controller::get_copy()For more information see MDL-75025
-
The following new webservices have been added:
-
core_badges_enable_badges -
core_badges_disable_badges
For more information see MDL-82168
-
-
New fields have been added to the return structure of the
core_badges_get_user_badge_by_hashandcore_badges_get_user_badgesexternal functions:recipientid: The ID of the user who received the badge.recipientfullname: The full name of the user who received the badge.
For more information see MDL-82742
-
The
badges/newbadge.phppage has been deprecated and merged withbadges/edit.php. Please, usebadges/edit.phpinstead.For more information see MDL-43938
-
The
OPEN_BADGES_V1constant is deprecated and should not be used anymore.For more information see MDL-70983
-
The
course_badgessystemreport has been deprecated and merged with the badges systemreport. Please, use the badges systemreport instead.For more information see MDL-82503
-
The
$showmanageparameter to the\core_badges\output\standard_action_barconstructor has been deprecated and should not be used anymore.For more information see MDL-82503
-
The
badges/view.phppage has been deprecated and merged withbadges/index.php. Please, usebadges/index.phpinstead.For more information see MDL-82503
-
Final removal of
BADGE_BACKPACKAPIURLandBADGE_BACKPACKWEBURLconstants.For more information see MDL-70983
-
The following classes have been renamed and now support autoloading.
Existing classes are currently unaffected.
Old class name New class name \cache_definition\core_cache\definition\cache_request\core_cache\request_cache\cache_session\core_cache\session_cache\cache_cached_object\core_cache\cached_object\cache_config\core_cache\config\cache_config_writer\core_cache\config_writer\cache_config_disabled\core_cache\disabled_config\cache_disabled\core_cache\disabled_cache\config_writer\core_cache\config_writer\cache_data_source\core_cache\data_source_interface\cache_data_source_versionable\core_cache\versionable_data_source_interface\cache_exception\core_cache\exception/cache_exception\cache_factory\core_cache\factory\cache_factory_disabled\core_cache\disabled_factory\cache_helper\core_cache\helper\cache_is_key_aware\core_cache\key_aware_cache_interface\cache_is_lockable\core_cache\lockable_cache_interface\cache_is_searchable\core_cache\searchable_cache_interface\cache_is_configurable\core_cache\configurable_cache_interface\cache_loader\core_cache\loader_interface\cache_loader_with_locking\core_cache\loader_with_locking_interface\cache_lock_interface\core_cache\cache_lock_interface\cache_store\core_cache\store\cache_store_interface\core_cache\store_interface\cache_ttl_wrapper\core_cache\ttl_wrapper\cacheable_object\core_cache\cacheable_object_interface\cacheable_object_array\core_cache\cacheable_object_array\cache_definition_mappings_form\core_cache\form/cache_definition_mappings_form\cache_definition_sharing_form\core_cache\form/cache_definition_sharing_form\cache_lock_form\core_cache\form/cache_lock_form\cache_mode_mappings_form\core_cache\form/cache_mode_mappings_formFor more information see MDL-82158
-
The
\core_communication\helper::get_enrolled_users_for_course()method now accepts an additional argument that can filter only active enrolments.For more information see MDL-81951
-
A new
FEATURE_COMPLETIONplugin 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.For more information see MDL-83008
-
The
\core_completion\activity_custom_completion::get_overall_completion_state()method can now also returnCOMPLETION_COMPLETE_FAILand not onlyCOMPLETION_COMPLETEandCOMPLETION_INCOMPLETE.For more information see MDL-81749
-
- New optional
sectionNumparameter has been added toactivitychooserAMD module initializer. - New option
sectionnumparameter has been added toget_course_content_items()external function. - New optional
sectionnumparameter has been added toget_content_items_for_user_in_course()function.
For more information see MDL-81675
- New optional
-
The
core_course_get_courses_by_fieldweb service now accepts a new parametersectionidto be able to retrieve the course that has the indicated section.For more information see MDL-81699
-
Added new
activitychooserbuttonoutput class to display the activitychooser button. Newaction_linkscan be added to the button via hooks converting it into a dropdown.For more information see MDL-81767
-
New
\core_course\hook\before_activitychooserbutton_exportedhook added to allow third-party plugins to extend activity chooser button options.For more information see MDL-81767
-
The following methods have been updated to accept a section name in addition to the section number:
\behat_course::i_open_section_edit_menu()\behat_course::i_show_section()\behat_course::i_hide_section(),\behat_course::i_wait_until_section_is_available()\behat_course::show_section_link_exists()\behat_course::hide_section_link_exists()\behat_course::section_exists()
For more information see MDL-82259
-
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:
- Add static element in the _reset_course_form_definition method before all the options with the Delete string:
$mform->addElement('static', 'assigndelete', get_string('delete')); - Review all the strings used in the reset page to remove the "Delete" or "Remove" words from them.
For more information see MDL-81872
- Add static element in the _reset_course_form_definition method before all the options with the Delete string:
-
The external function
core_course_get_contentsnow returns thecomponentanditemidof sections.For more information see MDL-82385
-
The
data-sectionidattribute in the activity chooser has been deprecated. Please update your code to usedata-sectionnuminstead.For more information see MDL-81676
-
The
$courseparameter in the constructor of the\core_course\output\actionbar\group_selectorclass has been deprecated and is no longer used.For more information see MDL-82393
-
The previously deprecated
\print_course_request_buttons()method has been removed and can no longer be used.For more information see MDL-73976
-
The
$courseclass property in the\core_course\output\actionbar\group_selectorclass has been removed.For more information see MDL-82393
-
The constructor of
\core_courseformat\output\local\state\cmhas been updated to accept a new optional parameter,$istrackeduser. Ifistrackeduseris pre-computed for the course module's course, it can be provided here to avoid an additional function call.For more information see MDL-81610
-
Added new
core_courseformat_create_modulewebservice to create new module (with quickcreate feature) instances in the course.For more information see MDL-81767
-
A new
$disabledparameter has been added to the followinghtml_writermethods:\core\output\html_writer::select()\core\output\html_writer::select_optgroup()\core\output\html_writer::select_option()
For more information see MDL-82146
-
A new class,
\core_courseformat\output\local\content\basecontrolmenu, has been created. The following existing classes extend the new class:\core_courseformat\output\local\content\cm\controlmenu\core_courseformat\output\local\content\section\controlmenu
For more information see MDL-82510
-
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\delegatedcontrolmenurenderable class.For more information see MDL-82510
-
The field controller
\core_customfield\field_controller::get_formatted_name()method now accepts an optional$escapeparameter to define whether to escape the returned name.For more information see MDL-82488
-
The external function
core_webservice_external::get_site_infonow returns the default home page URL when needed.For more information see MDL-82844
-
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.For more information see MDL-75850
-
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.For more information see MDL-83245
-
Added support for autoloading of filters from
\filter_[filtername]\filter. Existing classes should be renamed to use the new namespace.For more information see MDL-82427
-
The
\core_filters\filter_manager::text_filtering_hashmethod has been finally deprecated and removed.For more information see MDL-82427
-
The
durationform field type has been modified to validate that the supplied value is a positive value. 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. Where a negative duration is allowed, theallownegativeattribute can be set totrue.For more information see MDL-82687
-
The grade
itemnameproperty contained in the return structure of the following external methods is now PARAM_RAW:core_grades_get_gradeitemsgradereport_user_get_grade_items
For more information see MDL-80017
-
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.For more information see MDL-80744
-
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.For more information see MDL-80744
-
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.For more information see MDL-80744
-
The
\core_grades_renderer::group_selector()method has been deprecated. Please use\core_course\output\actionbar\rendererto render agroup_selectorrenderable instead.For more information see MDL-80745
-
The following previously deprecated Behat step helper methods have been removed and can no longer be used:
\behat_grade::select_in_gradebook_navigation_selector()\behat_grade::select_in_gradebook_tabs()
For more information see MDL-74581
-
The
\core_message\helper::togglecontact_link_params()method now accepts a new optional$isrequestedparameter to indicate the status of the contact request.For more information see MDL-81428
-
The
core_message/remove_contact_buttontemplate is deprecated and will be removed in a future release.For more information see MDL-81428
-
Final deprecation of the
MESSAGE_DEFAULT_LOGGEDOFF, andMESSAGE_DEFAULT_LOGGEDINconstants.For more information see MDL-73284
-
A new utility function
\question_utils::format_question_fragment()has been created so that question content can filter based on filters.For more information see MDL-78662
-
\core_question\local\bank\column_base::from_column_name()method now accepts abool $ingoremissingparameter, which can be used to ignore if the class does not exist, instead of throwing an exception.For more information see MDL-81407
-
Report has been added to subsystem components list.
For more information see MDL-81771
-
A new general output class,
\core_report\output\coursestructure, has been created.For more information see MDL-81771
-
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.For more information see MDL-78773
-
The previously deprecated
\core\report_helper::save_selected_report()method has been removed and can no longer be used.For more information see MDL-72353
-
The return type of the
set_checkbox_toggleallcallback, defined by system reports, can now be null. Use if the checkbox should not be shown for the row.For more information see MDL-52046
-
System reports now support native entity column aggregation via each columns
set_aggregation()methodFor more information see MDL-76392
-
The following external methods now return tags data relevant to each custom report:
core_reportbuilder_list_reportscore_reportbuilder_retrieve_report
For more information see MDL-81433
-
Added a new database helper method
sql_replace_parametersto help ensure uniqueness of parameters within a SQL expression.For more information see MDL-81434
-
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").For more information see MDL-82466
-
The following methods have been moved from
\core_reportbuilder\datasourceclass to its parent class\core_reportbuilder\baseto make them available for use in system reports:add_columns_from_entity()add_filters_from_entity()report_element_search()
For more information see MDL-82529
-
In order to better support float values in filter forms, the following filter types now cast given SQL prior to comparison:
durationfilesizenumber
For more information see MDL-81168
-
The base datasource
\core_reportbuilder\datasource::add_all_from_entities()method accepts a new optionalarray $entitynamesparameter to specify which entities to add elements from.For more information see MDL-81330
-
All time-related code has been updated to the PSR-20 Clock interface, as such the following methods no longer accept a
$timenowparameter (instead please use\core\clockdependency injection):core_reportbuilder_generator::create_schedulecore_reportbuilder\local\helpers\schedule::create_schedule()core_reportbuilder\local\helpers\schedule::calculate_next_send_time()
For more information see MDL-82041
-
The following classes have been moved to use the new exception API as a L2 namespace:
Old class New class \core_reportbuilder\report_access_exception\core_reportbuilder\exception\report_access_exception\core_reportbuilder\source_invalid_exception\core_reportbuilder\exception\source_invalid_exception\core_reportbuilder\source_unavailable_exception\core_reportbuilder\exception\source_unavailable_exceptionFor more information see MDL-82133
-
Support for the following entity classes, renamed since 4.1, have now been removed completely:
\core_admin\local\entities\task_log\core_cohort\local\entities\cohort\core_cohort\local\entities\cohort_member\core_course\local\entities\course_category\report_configlog\local\entities\config_change
For more information see MDL-74583
-
The following previously deprecated local helper methods have been removed and can no longer be used:
\core_reportbuilder\local\helpers\audience::get_all_audiences_menu_types()\core_reportbuilder\local\helpers\report::get_available_columns()
For more information see MDL-76690
-
All session management has been moved to the
\core\session\managerclass. This removes the dependancy to use thesessionstable.Session management plugins (like Redis) should now inherit the base
\core\session\handlerclass, which implementsSessionHandlerInterface, and override methods as required.The following methods in
\core\session\managerhave been deprecated:Old method name New method name kill_all_sessionsdestroy_allkill_sessiondestroykill_sessions_for_auth_plugindestroy_by_auth_pluginkill_user_sessionsdestroy_user_sessionsFor more information see MDL-66151
-
A new
\core_smssubsystem has been created.For more information see MDL-81924
-
A new
$reponsiveproperty (defaulting totrue) has been added to the\core_table\flexible_tableclass. This property allows you to control whether the table is rendered as a responsive table.For more information see MDL-80748
-
The
\core_table\dynamicclass declares a new method::has_capability()to allow classes implementing this interface to perform access checks on the dynamic table. Note: This is a breaking change. All implementations of the\core_table\dynamictable interface must implement the newhas_capability(): boolmethod for continued functionality.For more information see MDL-82567
-
New
\core_user\hook\extend_user_menuhook added to allow third party plugins to extend the user menu navigation.For more information see MDL-71823
-
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.For more information see MDL-82066
-
The visibility of the following methods have been increased to public:
\core_user\form\private_files::check_access_for_dynamic_submission()\core_user\form\private_files::get_options()
For more information see MDL-78293
-
The user profile field
\profile_field_base::display_name()method now accepts an optional$escapeparameter to define whether to escape the returned name.For more information see MDL-82494
-
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().For more information see MDL-78030
-
The base class
\core_availability\info::get_groups()method now accepts a$useridparameter to specify which user you want to retrieve course groups (defaults to current user).For more information see MDL-81850
-
A new hook,
\customfield_number\hook\add_custom_providers, has been added which allows automatic calculation of number course custom field.For more information see MDL-82715
-
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.For more information see MDL-82715
-
Added new webservice
customfield_number_recalculate_value, has been added to recalculate a value of number course custom field.For more information see MDL-82715
-
A new task,
\customfield_number\task\cron, cron task that recalculates automatically calculated number course custom fields.For more information see MDL-82715
-
The field controller
get_optionsmethod now returns each option pre-formatted.For more information see MDL-82481
-
The
helplinktextlanguage string is no longer required by editor plugins, instead thepluginnamewill be used in the help dialogue.For more information see MDL-81572
-
The following classes are removed as the SMS feature now takes advantage of
core_smsAPI:\factor_sms\event\sms_sent\factor_sms\local\smsgateway\aws_sns\factor_sms\local\smsgateway\gateway_interface
For more information see MDL-80962
-
The
gradereport_grader/groupESM has been deprecated. Please usecore_course/actionbar/groupinstead.For more information see MDL-80745
-
The
gradereport_singleview/groupESM has been deprecated. Please usecore_course/actionbar/groupinstead.For more information see MDL-80745
-
The
gradereport_user/groupESM has been deprecated. Please usecore_course/actionbar/groupinstead.For more information see MDL-80745
-
Added new
FEATURE_QUICKCREATEfor modules that can be quickly created in the course wihout filling a previous form.For more information see MDL-81767
-
Added 2 new settings:
mod_assign/defaultgradetype- The value of this setting dictates which of the
GRADE_TYPE_Xconstants is the default option when creating new instances of the assignment. - The default value is
GRADE_TYPE_VALUE(Point)
- The value of this setting dictates which of the
mod_assign/defaultgradescale- The value of this setting dictates which of the existing scales is the default option when creating new instances of the assignment.
For more information see MDL-54105
-
A new web service called
mod_assign_remove_submissionhas been created to remove the submission for a specific user ID and assignment activity ID.For more information see MDL-74050
-
A new default value for
attemptreopenmethodhas been set to "Automatically until pass".For more information see MDL-80741
-
A new method,
\assign_feedback_plugin::get_grading_batch_operation_details(), has been added to theassign_feedback_pluginabstract 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.For more information see MDL-80750
-
The constant
ASSIGN_ATTEMPT_REOPEN_METHOD_NONEhas been deprecated, and a new default value forattemptreopenmethodhas been set to "Automatically until pass".For more information see MDL-80741
-
The
\assign_feedback_plugin::get_grading_batch_operations()method is now deprecated. Useassign_feedback_plugin::get_grading_batch_operation_detailsinstead.For more information see MDL-80750
-
The
\assign_grading_table::plugingradingbatchoperationsproperty has been removed. You can use\assign_feedback_plugin::get_grading_batch_operation_details()instead.For more information see MDL-80750
-
The
$submissionpluginenabledand$submissioncountparameters from the constructor of the\mod_assign\output::grading_actionmenuclass have been deprecated.For more information see MDL-80752
-
The method
\assign::process_save_grading_options()has been deprecated as it is no longer used.For more information see MDL-82681
-
The default option "Never" for the
attemptreopenmethodsetting, which disallowed multiple attempts at the assignment, has been removed. This option was unnecessary because limiting attempts to 1 through themaxattemptssetting achieves the same behavior.For more information see MDL-80741
-
The
\mod_assign_grading_options_formclass has been removed since it is no longer used.For more information see MDL-82857
-
Added new
meeting_infovalue to show presentation file on BBB activity pageFor more information see MDL-82520
-
The
broker::process_meeting_events()method has been extended to call the::process_action()method implemented by plugins.For more information see MDL-82872
-
Mobile support via plugin has been removed as it is now natively available in the Moodle App.
For more information see MDL-82447
-
The
\data_add_record()method accepts a new$approvedparameter to set the corresponding state of the new record.For more information see MDL-81274
-
The
\mod_data_renderer::render_fields_footer()method has been deprecated as it's no longer used.For more information see MDL-81321
-
The
\feedback_check_is_switchrole()function has been deprecated as it didn't work.For more information see MDL-72424
-
The method
\mod_feedback\output\renderer::create_template_form()has been deprecated. It is not used anymore.For more information see MDL-81742
-
The following methods of the
quiz_overview_reportclass now take a new optional$slotsparameter used to only regrade some slots in each attempt (default all):\quiz_overview_report::regrade_attempts()\quiz_overview_report::regrade_batch_of_attempts()
For more information see MDL-79546
-
The
\qbank_managecategories\question_category_objectclass has been deprecated. Methods previously part of this class have been moved to either\qbank_managecategories\question_categories, for the parts used within this plugin for display a list of categories; or
\core_question\category_manager, for the parts used for generate CRUD operations on question categories, including outside of this plugin.This change will allow
\qbank_managecategories\question_category_objectto be deprecated, and avoids other parts of the system wishing to manipulate question categories from having to violate cross-component communication rules.For more information see MDL-72397
-
Category lists are now generated by templates. The following classes have been deprecated:
\qbank_managecategories\question_category_list\qbank_managecategories\question_category_list_item
For more information see MDL-72397
-
The following methods of
\qbank_managecategories\helperhave been deprecated and moved to\core_question\category_manager:Method Replacement question_is_only_child_of_top_category_in_context\core_question\category_manager::is_only_child_of_top_category_in_contextquestion_is_top_category\core_question\category_manager::is_top_categoryquestion_can_delete_cat\core_question\category_manager::can_delete_catFor more information see MDL-72397
-
\qbank_managecategories\question_category_objectis 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.For more information see MDL-72397
-
The following deprecated methods in
report_eventlist_list_generatorhave been removed:\report_eventlist_list_generator::get_core_events_list()\report_eventlist_list_generator::get_non_core_event_list()
For more information see MDL-72786
-
The
\report_log_renderable::get_activities_list()method return values now includes an array of disabled elements, in addition to the array of activities.For more information see MDL-82146
-
The following previously deprecated methods have been removed and can no longer be used:
\repository_onedrive::can_import_skydrive_files()\repository_onedrive::import_skydrive_files()
For more information see MDL-72620
-
Added a new
\renderer_base::get_pagegetter method.For more information see MDL-81597
-
New
core/context_headermustache template has been added. This template can be overridden by themes to modify the context header.For more information see MDL-81597
-
The method
\core\output\core_renderer::render_context_headerhas been deprecated please use\core\output\core_renderer::render($contextheader)insteadFor more information see MDL-82160
-
Removed all references to
iconhelp,icon-pre,icon-post,iconlarge, andiconsortCSS classes.For more information see MDL-74251
-
Bridged
theme-color-levelusing a newshift-colorfunction to prepare for its deprecation in Boostrap 5.For more information see MDL-81816
-
Upon upgrading Font Awesome from version 4 to 6, the solid family was selected by default.
Support for the
regular, andbrandsfamilies of icons has now been added, allowing icons defined with\core\outut\icon_system::FONTAWESOMEto use them.Icons can select the FontAwesome family (
fa-regular,fa-brands,fa-solid) by using the relevant class name when display the icon.For more information see MDL-82210
-
The Bootstrap
.no-guttersclass is no longer used, use.g-0instead.For more information see MDL-81818
-
The
.page-header-headingsCSS class now has a background colour applied to the maintenance and secure layouts. You may need to override this class in your maintenance and secure layouts if both of the following are true:- Your theme plugin inherits from
theme_boostand uses this CSS class - Your theme plugin applies a different styling for the page header for the maintenance and secure layouts.
For more information see MDL-83047
- Your theme plugin inherits from
-
The Convert to InnoDB plugin (
tool_innodb) has been completely removed.For more information see MDL-78776
-
Behat tests are now checking for deprecated icons. This check can be disabled by using the
--no-icon-deprecationsoption in the behat CLI.For more information see MDL-82212
-
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.For more information see MDL-67554