With Moodle 4.1 and up, we have stopped to work with strftime(),
because it's deprecated for PHP 8.1 and up and, instead we are
using core_date::strftime() that performs the conversions using
the php-intl extension.
The original strftime() had a lot of OS-specific dependencies,
both about locale names and charsets used to provide the information.
Instead, the php-intl gets rid of all those OS-specific nightmares
and only uses ICU/Unicode locales and UTF-8.
Because of that, the old utf-8 => windows charset => utf-8
conversions aren't needed anymore. Hence, removing them.
At the moment, quiz_statistics\task\recalculate gives no useful
information about what it is doing, which makes it hard to investigate
if the task fails. This commit makes it more usefully verbose.
Also, following this change, one instance of this task will not
run for more than one hour at a time.
As part of this commit, I have added a new helper mtrace_exception.
to consistently log exceptions in scheduled tasks. It is sad to
add a new function to moodlelib.php, but that seemed the logical place.
Looking at other tasks, this method is badly needed. Many are just
logging the ->getMessage() which is normaly insufficient for proper
debugging. However, swiching all existing tasks to use the new function
will need to wait for a future MDL.
Default value of the $flag argument changed in PHP 8.1 from ENT_COMPAT to ENT_QUOTES | ENT_SUBSTITUTE
To ensure consistent behavior across different PHP version the second parameter is now required for the functions:
htmlspecialchars(), htmlentities(), htmlspecialchars_decode(), html_entity_decode() and get_html_translation_table()
This allows admins to configure whether contact site support is
available to everyone, authenticated users, or nobody.
The behat testing checks linked and direct access for each setting,
as well as adding testing that the support page override works as
expected.
Show performance information about locks (time taken to acquire lock,
time lock is held for) in the 'perfinfo' display.
Also show existing information (that was already calculated but not
shown before) about the session lock, which is not a 'core\lock' type
lock, but the information is similarly useful.
For a long time, Moodle has had the feature to force the language
for a whole course. This change adds the same feature at activity
level.
The course-level feature was controlled by a capability
moodle/course:setforcedlanguage, and I decided to use the same
capability to control this feature. I think a new capability would be
overkill.
The $CFG->enabledashboard setting has been added to Appearance >
Navigation, to let admins disable the "Dashboard" option from the
primary navigation.
This commit also changes the behaviour of get_home_page(), to take
into account this setting and adds a new method, get_default_home_page(),
to return the expected default home page (that wil be used when current
default page is not defined or valid).
- There is now a single point for the configuration to be updated or
inserted into the DB.
- De-nestifying the code does make it longer to scroll through but you
can now edit areas of interest with more confidence, and should make
it easier to grok places of interest.
- Updated DB check from get_field to get_record as it's better in the
case of an update - using the id.
- Updates will happen on the ID field, which should be the primary key
for the table.
- Cache won't be invalidated if no changes were made.
- Property does not need to be checked for behat test if you are just
inserting a new value to an array using the arr[] = value syntax as it
should just work.
- Opted to replace array_key_exists with isset which is a faster check
due to it being a language construct and the fact that it should NOT
contain null values (as a null value would be removed) should mean
this is a safe change.
- Cleanup function param defaults.
- Prefer [] arrays instead of array() declarations.