MDL-38689 behat: Steps definitions to compare DOM nodes position inside the DOM
MDL-38686 behat: New restore course test

According to MDLQA-4596, a teacher can change
the format of a restored course
weekly release 2.5dev
MDL-38787 behat: Move to the new Javascript-based test class manager
MDL-26956 (1) Library: Move search SQL function to datalib

This function used to be in the user selector, but it is useful in
other areas where we want to search for users as it handles a number
of search options (including extra fields, etc.) and returns SQL
which can be included in a joined query.

A unit test has been added to check the results of these searches.
MDL-26956 (2) Forms: Function to render form to string

Previously it was only possible to display the form immediately as
HTML output. You had to wrap in an output buffer in order to put
it in a renderer. This new function does the output buffer for you.
MDL-26956 (3) Enrol: Add filter options to enrolments screen
MDL-38493 Make mdeploy.php able to install new plugin

The patch implements the second mode of the mdeploy.php script. If
--install option is passed, the given package is downloaded, verified
and deployed to the requested location.
MDL-38493 Improve documentation of mdeploy.php
MDL-38509 Document the plugin deployment lockers in config-dist.php
MDL-38509 Implement new plugin_manager::get_plugin_types()

This new method just takes the result of the core get_plugin_types() and
re-orders the plugin types in the same way as they are displayed at the
Plugins overview screen.
MDL-38509 Implement new plugin_manager::plugintype_name()

This has exactly the same behaviour as the existing
plugintype_name_plural() method, but returns the singular form of the
plugin type (such as 'Activity module').
MDL-38509 Initial version of the new admin tool to install add-ons
MDL-38509 Mark the new installaddon admin tool as the standard plugin
MDL-38509 Check for writable plugin type location in install from ZIP form

Standard mform validation is implemented as well as progressively
enhanced AJAX version.
MDL-38509 Implement the plugin ZIP package validator

The validator code contains (modified) fragments of the
local_plugins_archive_validator class copyrighted by Marina Glancy that
is part of the local_plugins plugin. It operates over an extracted
copy of the ZIP file.
MDL-38509 Add new tool_installaddon_installer::get_plugintype_root() method
MDL-38509 Save uploaded ZIP into a temporary location and redirect to validator
MDL-38509 Add new tool_installaddon_installer::extract_installfromzip_file() method
MDL-38509 Implement the ZIP package validation page

The script validate.php expects a ZIP file stored in a temporary
location. It extracts the ZIP (optionally renaming the root directory)
and executes the validator. Then it renders the validator log messages
and continue buttons.