project: Moodle
summary: Prepare Moodle for PHP 8.2
description: master: ! ! ! 402_STABLE: ! ! ! The, hopefully small, epic to turn Moodle ready for PHP 8.2. When: Being cristal clear (aka transparent), the ideal target release for this is Moodle 4.2.0 (aka, supported since the very beginning of the branch), but be warned that full support may arrive later in any Moodle 4.2.x minor release in the branch, depending of a number of factors (extensions availability and bugs, 3rd part libraries, last minute surprises...). Some initial links: - Main changes explained: and - Changes detailed: - Accepted RFCs: Some basic requirements for this: (/) get unit and acceptance tests passing against all databases (may imply the need of upgrading phpunit/behat...). (/) phpunit upgrade: (/) behat upgrade: (/) check that all the change details have been reviewed and fixed (attached file coming soon!). Note that, until release, this file is considered WIP and subject to changes! Reference: (). (/) ensure older versions of Moodle dont work with PHP 8.2 () (/) (link| - get moodle-php-apache| docker images working with the new php version (/) verify that php-parallel-lint/php-parallel-lint| and others pass for all php versions () (/) DONE - There are a few| - search in the tracker for any issue created about "php 8.2" or "php82". Add them to this epic after analysing them. (/) FINAL: Verify that the apache logs are clean of PHP 8.1 notices/warnings/errors () (/) FINAL: Verify that all the issues found by the dev version of PHPCompatibility are fixed or false positives (). (/) (not done, we are doing it for all jobs together, see "nightlyjobs" in "TODO 1" below) - FINAL: When CIs are passing consistently, put all the MySQL (W) jobs in the target branches of the Epic to, manually, use the new PHP version (note that later, in the TODOs, well undo this manual configuration). (/) FINAL: Get gha| working with the new php version () (/) FINAL: Verify that both install and upgrade from lowest possible site works ok, without any error/warning/notice. Both cli and web (). (/) FINAL: phpcs.xml.dist : Ensure that the testVersion config setting matches the range of PHP supported versions in all the affected branches. Note that for master branch we leave the range open always. (/) (PR734| - FINAL: Update docs| (and others, see testing instructions) once this is ready. If needed to, ask for the creation of the next major release page in devdocs (example issue| ... And some tasks to do once this is upstream: TODO 1: (/) Review the travis (only moodle-plugin-ci) and/or github actions configuration for various repositories. The new PHP version needs to be covered. Known to need review / fix repos include: - (/) PR269| - moodle_docker| - (/) (already supported) moodle-ci-runner| - (/) MR51| - nightlyjobs| (dont forget to delete any manual configuration that has been done in advance for the, usually, MySQL (W) jobs in the Epic target branches). - (/) (already supported) moodle-cs| - (/) PR232| - moodle-plugin-ci| - (/) PR219| - local_codechecker| - (/) PR118| - local_moodlecheck| - (/) local_ci| - Not strictly required, but PR276| created to achieve that. - (/) Issue121| - moodle-tool_pluginskel| - (/) PR4| - moodle-webservice_xmlrpc| - ... All the issues belonging to this epic should be pulled into master (4.3dev) and backported to 4.2.x (unless they are bug fixes requiring patching older, still supported, branches)

1.summary: Perform a complete PHPCompatibility 8.2 execution against codebase
description: This task is one of the final ones to perform when everything else in the epic has been already applied. Its about to run the PHPCompatibility standard (that we usually also run as part of our local_codechecker) against the whole codebase. Prerequisites: (!) The epic must be almost finished (to avoid detecting problems that correspond to other issues). (!) PHPCompatibility must support the php versions being checked. (!) Determine the range of PHP versions supported for the branch (8.0-8.2). See for 4.3 reqs. To perform the run against master, just: Clone locally. Ensure youre in the "develop" branch (the "master" branch contains the latest release, quite old now 2019). run composer install Run: code export DIRROOT=/path/to/your/moodle ; vendor/bin/phpcs \ --standard=PHPCompatibility \ --runtime-set testVersion 8.0-8.2 \ --extensions=php \ --ignore=$DIRROOT/vendor/,$DIRROOT/local/ \ --cache=/tmp/cache -p $DIRROOT code Generate a RTF file with the report and start processing it. Look for detected stuff, discard false positives (it can be useful to look to the results of the previous PHP 8.1 Epic - ) to drag any decision already taken there to this issue.
2.summary: Bump GHA to use php82 instead of php81
description: Important note: This only can be integrated once we are consistently green in the Epic runs. Move 402_STABLE and master (4.3dev), gha integration from php81 to php82. Just that. Easier to do than to achieve green status.
3.summary: Verify that the apache logs are clean of PHP 8.2 notices/warnings/errors
description: Important note to developers: This is considered to be a FINAL task within the PHP X.Y issues, and better if its executed once the upstream branches are already passing both PHPUnit and Behat runs. Only that way the findings here will be useful. Once we get behat passing, its time to inspect web server logs to see if there is anything there that has not been detected by the runs. Usually we get both the logs from a js and non-js run (ideally from all core themes) and go looking to them. Ensure they are runs which PHP versions is the one being fixed in the Epic. Older ones arent meaningful for this issue. See for example to know how to clean the logs and focus on the important bits and, also, how to be able to know (by times) which the problematic scenario is.
4.summary: PHP 8.2: New ini_parse_quantity function
description: We may be able to get rid of some of our existing internal processing for ini parsing of size values (relating to file upload size calculations).
5.summary: PHP 8.2: Dynamic Properties are deprecated
description: From PHP 8.2, if someone tries to set a value for a class property which does not have a definitino, a deprecation notice will be emitted. For example: code class User private int $uid; $user = new User(); $user->name = Foo; code code Deprecated: Creation of dynamic property User::$name is deprecated in ... on line ... code Also from internally: code class User public function __construct() $this->name = test; new User(); code code Deprecated: Creation of dynamic property User::$name is deprecated in ... on line ... code Much more detail here: We should look at writing a sniff for this if possible. Note: For some legacy code, we may choose to work around this using the AllowDynamicProperties attribute: code AllowDynamicProperties class User private int $uid; $user = new User(); $user->name = Foo; code . Other cases not affected stdClass classes with a magic __get and __set method . phpstan configuration I used the following phpstan configuration to genreate the above: code parameters Dynamic properties emits warnings from PHP 8.2 onwards. checkDynamicProperties: true code Note: I would recommend generating a baseline| first, then adding the above configuration, and then running again against the baseline with the new configuration. This will identify any problem areas.
6.summary: PHP 8.2: Fix all problems detected by phplint
description: Just run: code composer require --dev php-parallel-lint/php-parallel-lint && \ vendor/bin/parallel-lint --show-deprecated --exclude vendor . code And fix all the problems detected by the linter
7.summary: PHP 8.2: ksort(...) - block_recentlyaccesseditems
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./blocks/recentlyaccesseditems/classes/helper.php: ksort($recentitems);
8.summary: PHP 8.2: ksort(...) - Repositories
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./repository/nextcloud/lib.php: ksort($files); ./repository/nextcloud/lib.php: ksort($folders); ./repository/lib.php: ksort($args); ./repository/webdav/lib.php: ksort($files); ./repository/webdav/lib.php: ksort($folders);
9.summary: PHP 8.2: ksort(...) - Course
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./course/tests/courselib_test.php: ksort($oldsections); ./course/tests/courselib_test.php: ksort($oldsections); ./course/tests/courselib_test.php: ksort($sections); ./course/tests/courselib_test.php: ksort($oldsections); ./course/tests/courselib_test.php: ksort($sections); ./course/lib.php: ksort($sequenceunique); // Preserve initial order of modules.
10.summary: PHP 8.2: ksort(...) - Cache
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./cache/classes/output/renderer.php: ksort($storetotals); ./cache/classes/local/administration_display_helper.php: ksort($results); ./cache/classes/administration_helper.php: ksort($return); ./cache/classes/administration_helper.php: ksort($default);
11.summary: PHP 8.2: ksort(...) - customfield
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./customfield/tests/api_test.php: ksort($expected); ./customfield/tests/api_test.php: ksort($actual);
12.summary: PHP 8.2: ksort(...) - Admin Tools
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./admin/tool/xmldb/actions/get_db_directories/get_db_directories.class.php: ksort($XMLDB->dbdirs); ./admin/tool/behat/renderer.php: ksort($componententities); ./admin/tool/behat/cli/run.php: ksort($exitcodes); ./admin/tool/behat/cli/util.php: ksort($line); ./admin/tool/behat/cli/util.php: ksort($poutput); ./admin/tool/filetypes/renderer.php: ksort($combined); ./admin/tool/filetypes/classes/utils.php: ksort($icons); ./admin/tool/brickfield/classes/accessibility.php: ksort($htmlchecker->guideline->translations); ./admin/tool/brickfield/classes/local/tool/printable.php: ksort($combotar); ./admin/tool/customlang/locallib.php: ksort($coresubsystems); // Should be but just in case.
13.summary: PHP 8.2: ksort(...) - Messaging
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./message/tests/privacy/provider_test.php: ksort($notifications); ./message/tests/privacy/provider_test.php: ksort($notifications); ./message/tests/externallib_test.php: ksort($muas); ./message/tests/externallib_test.php: ksort($muas); ./message/tests/externallib_test.php: ksort($members); ./message/tests/externallib_test.php: ksort($members); ./message/tests/api_test.php: ksort($contacts); ./message/tests/api_test.php: ksort($muas); ./message/tests/api_test.php: ksort($muas); ./message/tests/api_test.php: ksort($members); ./message/tests/api_test.php: ksort($members);
14.summary: PHP 8.2: ksort(...) - User Profile
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./user/profile/lib.php: ksort($fields);
15.summary: PHP 8.2: ksort(...) - Question
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./question/classes/statistics/questions/calculator.php: ksort($this->randomselectors$key); ./question/classes/statistics/questions/calculated.php: ksort($this->variantstats); ./question/classes/local/bank/random_question_loader.php: ksort($this->availablequestionscache$categorykey); ./question/bank/columnsortorder/tests/column_manager_test.php: ksort($currentconfig); ./question/type/multianswer/question.php: ksort($simulatedresponse); ./question/type/match/question.php: ksort($simulatedresponse); ./question/type/multichoice/question.php: ksort($simulatedresponse); ./question/type/calculated/questiontype.php: ksort($dataitems); ./question/type/calculated/questiontype.php: ksort($fromform->definition); ./question/type/calculatedsimple/questiontype.php: ksort($question->definition); ./question/type/calculatedsimple/edit_calculatedsimple_form.php: ksort($fromformdefinition); ./question/engine/bank.php: ksort($sortorder);
16.summary: PHP 8.2: ksort(...) - Global Search
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./search/classes/manager.php: ksort($searchareas);
17.summary: PHP 8.2: ksort(...) - tcpdf
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/tcpdf/include/tcpdf_fonts.php: ksort($subsetchars); ./lib/tcpdf/include/tcpdf_fonts.php: ksort($subsetglyphs); ./lib/tcpdf/include/tcpdf_fonts.php: ksort($fontcw); ./lib/tcpdf/include/barcodes/datamatrix.php: ksort($log); ./lib/tcpdf/include/barcodes/datamatrix.php: ksort($c); ./lib/tcpdf/include/barcodes/datamatrix.php: ksort($wd); ./lib/tcpdf/include/tcpdf_images.php: ksort($icc);
18.summary: PHP 8.2: ksort(...) - Accesslib
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/accesslib.php: ksort($rdefs$roleid); ./lib/accesslib.php: ksort(self::$alllevels);
19.summary: PHP 8.2: ksort(...) - Form
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/pear/HTML/QuickForm.php: ksort($this->_elements);
20.summary: PHP 8.2: ksort(...) - phpspreadsheet
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php: ksort($cfRules); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php: ksort($cfRules); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter.php: ksort($this->columns); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter.php: ksort($this->columns); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table.php: ksort($this->columns); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table.php: ksort($this->columns); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php: ksort($sortKeys); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php: ksort($hashedValues); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Sample.php: ksort($files); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/ReferenceHelper.php: ksort($cellTokens); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/ReferenceHelper.php: ksort($newCellTokens);
21.summary: PHP 8.2: ksort(...) - mlbackend
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/mlbackend/php/phpml/src/Phpml/FeatureExtraction/TokenCountVectorizer.php: ksort($counts);
22.summary: PHP 8.2: ksort(...) - Guzzle
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/guzzle ksort($results); ./lib/guzzle ksort($results); ./lib/guzzle ksort($results); ./lib/guzzle \ksort($res);
23.summary: PHP 8.2: ksort(...) - SimplePie
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/simplepie/src/SimplePie.php: ksort($options);
24.summary: PHP 8.2: ksort(...) - Core Libs
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/adodb/drivers/adodb-sqlite3.inc.php: ksort($pkIndexDatacolumns); ./lib/modinfolib.php: ksort($compressedsections); ./lib/classes/navigation/views/secondary.php: ksort($nodes); ./lib/classes/filetypes.php: ksort($defaultvalue); ./lib/classes/filetypes.php: ksort($modified); ./lib/classes/component.php: ksort($result); ./lib/classes/component.php: ksort(self::$classmap); ./lib/classes/plugin_manager.php: ksort($this->installedplugins$key); ./lib/classes/string_manager_standard.php: ksort($langs); ./lib/classes/string_manager_standard.php: ksort($langs1); ./lib/ddl/sql_generator.php: ksort($reserved_words); ./lib/adminlib.php: ksort($protocols_available); ./lib/navigationlib.php: ksort($this->collection); ./lib/moodlelib.php: ksort($valuearray); ./lib/moodlelib.php: ksort($stats); ./lib/moodlelib.php: ksort($storetotals); ./lib/enrollib.php: ksort($plugins); ./lib/enrollib.php: ksort($changes); ./lib/pdflib.php: ksort($families); ./lib/ltiprovider/src/ToolProvider/ToolProvider.php: ksort($missing);
25.summary: PHP 8.2: ksort(...) - horde
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/horde/framework/Horde/Imap/Client/Fetch/Results.php: ksort($this->_data); ./lib/horde/framework/Horde/Imap/Client/Fetch/Results.php: ksort($this->_data); ./lib/horde/framework/Horde/Imap/Client/Base.php: ksort($val); ./lib/horde/framework/Horde/Imap/Client/Base.php: ksort($options); ./lib/horde/framework/Horde/Support/ConsistentHash.php: ksort($this->_circle); ./lib/horde/framework/Horde/Mime/Headers/ContentParam.php: ksort($val);
26.summary: PHP 8.2: ksort(...) - Tests
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/tests/component_test.php: ksort($sortedapis); // Well need this later. ./lib/tests/collator_test.php: $result = core_collator::ksort($arr); ./lib/tests/collator_test.php: core_collator::ksort($b); ./lib/filestorage/tests/file_storage_test.php: ksort($originalrecord); ./lib/behat/classes/behat_config_util.php: ksort($cleanfeatures); ./lib/behat/classes/behat_config_util.php: ksort($this->contexts); ./lib/behat/classes/behat_config_util.php: ksort($themes); ./lib/behat/classes/behat_config_util.php: ksort($dirs); ./lib/behat/classes/behat_config_util.php: ksort($features); ./lib/testing/classes/tests_finder.php: ksort($plugintypes); ./lib/testing/classes/tests_finder.php: ksort($plugs); ./lib/testing/classes/tests_finder.php: ksort($subsystems); ./lib/testing/classes/tests_finder.php: ksort($dirs); ./lib/phpunit/classes/util.php: ksort($plugintypes); ./lib/phpunit/classes/util.php: ksort($plugs);
27.summary: PHP 8.2: ksort(...) - Grades
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/grade/grade_category.php: ksort($children_array); ./lib/grade/grade_category.php: ksort($children_array);
28.summary: PHP 8.2: ksort(...) - oAuth
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/oauthlib.php: ksort($sorted); ./lib/oauthlib.php: ksort($params);
29.summary: PHP 8.2: ksort(...) - SCSS
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/scssphp/SourceMap/SourceMapGenerator.php: ksort($groupedMap);
30.summary: PHP 8.2: ksort(...) - htmlpurifier
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/htmlpurifier/HTMLPurifier/Printer/CSSDefinition.php: ksort($this->def->info); ./lib/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php: ksort($this->def->info); ./lib/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php: ksort($array); ./lib/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php: ksort($array); ./lib/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php: ksort($array); ./lib/htmlpurifier/HTMLPurifier/Generator.php: ksort($assoc_array_of_attributes);
31.summary: PHP 8.2: ksort(...) - openspout
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/openspout/src/Reader/Common/Manager/RowManager.php: ksort($rowCells);
32.summary: PHP 8.2: ksort(...) - TinyMCE
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/editor/tinymce/cli/update_lang_files.php:ksort($old_strings); ./lib/editor/tinymce/cli/update_lang_files.php:ksort($parsed);
33.summary: PHP 8.2: ksort(...) - Flickr
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/flickrlib.php: ksort($args); ./lib/flickrlib.php: ksort($args);
34.summary: PHP 8.2: ksort(...) - availability
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./availability/tests/tree_test.php: ksort($result); ./availability/tests/tree_test.php: ksort($result); ./availability/tests/tree_test.php: ksort($result); ./availability/tests/tree_test.php: ksort($result); ./availability/tests/tree_test.php: ksort($result); ./availability/tests/tree_test.php: ksort($result); ./availability/condition/group/tests/condition_test.php: ksort($result); ./availability/condition/group/tests/condition_test.php: ksort($result); ./availability/condition/group/tests/condition_test.php: ksort($result); ./availability/condition/group/tests/condition_test.php: ksort($result); ./availability/condition/grouping/tests/condition_test.php: ksort($result); ./availability/condition/grouping/tests/condition_test.php: ksort($result); ./availability/condition/profile/tests/condition_test.php: ksort($result); ./availability/condition/profile/tests/condition_test.php: ksort($result); ./availability/condition/profile/tests/condition_test.php: ksort($result); ./availability/condition/profile/tests/condition_test.php: ksort($result);
35.summary: PHP 8.2: ksort(...) - Reports
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./report/insights/classes/output/insights_list.php: ksort($predictionvalues); ./report/eventlist/classes/filter_form.php: core_collator::ksort($result); ./report/stats/locallib.php: ksort($data$roleid);
36.summary: PHP 8.2: ksort(...) - Backup
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./backup/moodle2/restore_stepslib.php: ksort($qstates); ./backup/util/helper/restore_log_rule.class.php: ksort($pairs); // First literals, then mappings
37.summary: PHP 8.2: ksort(...) - p
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./p/tests/editor_framework_test.php: $this->assertEquals(ksort($expectedlangs), ksort($langs)); ./p/tests/editor_framework_test.php: ksort($expectedlibraries); ./p/tests/editor_ajax_test.php: ksort($actuallibraries); ./mod/pactivity/classes/output/result.php: ksort($result);
38.summary: PHP 8.2: ksort(...) - Badges
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./badges/criteria.php: ksort($badge->criteria);
39.summary: PHP 8.2: ksort(...) - chat
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/chat/locallib.php: ksort($this->messages);
40.summary: PHP 8.2: ksort(...) - Quiz
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/quiz/settings.php:core_collator::ksort($reportsbyname); ./mod/quiz/settings.php:core_collator::ksort($rulesbyname); ./mod/quiz/tests/attempt_walkthrough_from_csv_test.php: ksort($slots); ./mod/quiz/tests/external/external_test.php: ksort($resultquestiontypes); ./mod/quiz/tests/external/external_test.php: ksort($resultquestiontypes); ./mod/quiz/locallib.php: ksort($questions); ./mod/quiz/report/statistics/report.php: ksort($ydata$fieldtoplot); ./mod/quiz/report/reportlib.php: ksort($data);
41.summary: PHP 8.2: ksort(...) - Choice
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/choice/renderer.php: ksort($choices->options);
42.summary: PHP 8.2: ksort(...) - Forum
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/forum/lib.php: ksort($digestoptions);
43.summary: PHP 8.2: ksort(...) - lti
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/lti/tests/locallib_test.php: ksort($parms); ./mod/lti/tests/locallib_test.php: ksort($correct);
44.summary: PHP 8.2: ksort(...) - assign
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/assign/locallib.php: ksort($result); ./mod/assign/feedback/editpdf/classes/document_services.php: ksort($pages); ./mod/assign/adminlib.php: ksort($result);
45.summary: PHP 8.2: ksort(...) - glossary
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/glossary/classes/admin_setting_display_formats.php: ksort($formats);
46.summary: PHP 8.2: ksort(...) - lesson
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/lesson/backup/moodle2/restore_lesson_stepslib.php: ksort($this->answers);
47.summary: PHP 8.2: ksort(...) - database
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/data/classes/preset.php: ksort($fields); ./mod/data/lib.php: ksort($datarecords);
48.summary: PHP 8.2: ksort(...) - BBB
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/bigbluebuttonbn/classes/output/import_view.php: ksort($courses);
49.summary: Verify upgrading and installation for 402 and master work okay on PHP 8.2
description: Adding this to the PHP 8.2 epic to track that we can upgrade and install Moodle 4.2 and 4.3 (master) using PHP 8.2.
50.summary: Check PHP-8.2/UPGRADING and ensure we did not miss anything.
description: Creating a task here from the description of : quote check all the change details have been reviewed and fixed (attached file coming soon!). Note that, until release, this file is considered WIP and subject to changes! Reference: quote We need to go through this list and ensure that all changes mentioned in the file are already applied in core. If not, raise issues and add to the PHP 8.2 epic.

Below is an instruction that describes a task, paired with an input that provides an epic with this format: 
"project": "Name of the project" 
"summary": "Summary of the epic user story" 
"description": "Description of the epic user story". Write a response that appropriately completes the request.### Instruction:
Break this epic user story into smaller tasks to help the developers understand the epic better, you can divide this epic into as much as you want depending on the complexity of the epic.
### Input:
project: Moodle
summary: Prepare Moodle for PHP 8.2
description: master: ! ! ! 402_STABLE: ! ! ! The, hopefully small, epic to turn Moodle ready for PHP 8.2. When: Being cristal clear (aka transparent), the ideal target release for this is Moodle 4.2.0 (aka, supported since the very beginning of the branch), but be warned that full support may arrive later in any Moodle 4.2.x minor release in the branch, depending of a number of factors (extensions availability and bugs, 3rd part libraries, last minute surprises...). Some initial links: - Main changes explained: and - Changes detailed: - Accepted RFCs: Some basic requirements for this: (/) get unit and acceptance tests passing against all databases (may imply the need of upgrading phpunit/behat...). (/) phpunit upgrade: (/) behat upgrade: (/) check that all the change details have been reviewed and fixed (attached file coming soon!). Note that, until release, this file is considered WIP and subject to changes! Reference: (). (/) ensure older versions of Moodle dont work with PHP 8.2 () (/) (link| - get moodle-php-apache| docker images working with the new php version (/) verify that php-parallel-lint/php-parallel-lint| and others pass for all php versions () (/) DONE - There are a few| - search in the tracker for any issue created about "php 8.2" or "php82". Add them to this epic after analysing them. (/) FINAL: Verify that the apache logs are clean of PHP 8.1 notices/warnings/errors () (/) FINAL: Verify that all the issues found by the dev version of PHPCompatibility are fixed or false positives (). (/) (not done, we are doing it for all jobs together, see "nightlyjobs" in "TODO 1" below) - FINAL: When CIs are passing consistently, put all the MySQL (W) jobs in the target branches of the Epic to, manually, use the new PHP version (note that later, in the TODOs, well undo this manual configuration). (/) FINAL: Get gha| working with the new php version () (/) FINAL: Verify that both install and upgrade from lowest possible site works ok, without any error/warning/notice. Both cli and web (). (/) FINAL: phpcs.xml.dist : Ensure that the testVersion config setting matches the range of PHP supported versions in all the affected branches. Note that for master branch we leave the range open always. (/) (PR734| - FINAL: Update docs| (and others, see testing instructions) once this is ready. If needed to, ask for the creation of the next major release page in devdocs (example issue| ... And some tasks to do once this is upstream: TODO 1: (/) Review the travis (only moodle-plugin-ci) and/or github actions configuration for various repositories. The new PHP version needs to be covered. Known to need review / fix repos include: - (/) PR269| - moodle_docker| - (/) (already supported) moodle-ci-runner| - (/) MR51| - nightlyjobs| (dont forget to delete any manual configuration that has been done in advance for the, usually, MySQL (W) jobs in the Epic target branches). - (/) (already supported) moodle-cs| - (/) PR232| - moodle-plugin-ci| - (/) PR219| - local_codechecker| - (/) PR118| - local_moodlecheck| - (/) local_ci| - Not strictly required, but PR276| created to achieve that. - (/) Issue121| - moodle-tool_pluginskel| - (/) PR4| - moodle-webservice_xmlrpc| - ... All the issues belonging to this epic should be pulled into master (4.3dev) and backported to 4.2.x (unless they are bug fixes requiring patching older, still supported, branches)

### Response:
1.summary: Perform a complete PHPCompatibility 8.2 execution against codebase
description: This task is one of the final ones to perform when everything else in the epic has been already applied. Its about to run the PHPCompatibility standard (that we usually also run as part of our local_codechecker) against the whole codebase. Prerequisites: (!) The epic must be almost finished (to avoid detecting problems that correspond to other issues). (!) PHPCompatibility must support the php versions being checked. (!) Determine the range of PHP versions supported for the branch (8.0-8.2). See for 4.3 reqs. To perform the run against master, just: Clone locally. Ensure youre in the "develop" branch (the "master" branch contains the latest release, quite old now 2019). run composer install Run: code export DIRROOT=/path/to/your/moodle ; vendor/bin/phpcs \ --standard=PHPCompatibility \ --runtime-set testVersion 8.0-8.2 \ --extensions=php \ --ignore=$DIRROOT/vendor/,$DIRROOT/local/ \ --cache=/tmp/cache -p $DIRROOT code Generate a RTF file with the report and start processing it. Look for detected stuff, discard false positives (it can be useful to look to the results of the previous PHP 8.1 Epic - ) to drag any decision already taken there to this issue.
2.summary: Bump GHA to use php82 instead of php81
description: Important note: This only can be integrated once we are consistently green in the Epic runs. Move 402_STABLE and master (4.3dev), gha integration from php81 to php82. Just that. Easier to do than to achieve green status.
3.summary: Verify that the apache logs are clean of PHP 8.2 notices/warnings/errors
description: Important note to developers: This is considered to be a FINAL task within the PHP X.Y issues, and better if its executed once the upstream branches are already passing both PHPUnit and Behat runs. Only that way the findings here will be useful. Once we get behat passing, its time to inspect web server logs to see if there is anything there that has not been detected by the runs. Usually we get both the logs from a js and non-js run (ideally from all core themes) and go looking to them. Ensure they are runs which PHP versions is the one being fixed in the Epic. Older ones arent meaningful for this issue. See for example to know how to clean the logs and focus on the important bits and, also, how to be able to know (by times) which the problematic scenario is.
4.summary: PHP 8.2: New ini_parse_quantity function
description: We may be able to get rid of some of our existing internal processing for ini parsing of size values (relating to file upload size calculations).
5.summary: PHP 8.2: Dynamic Properties are deprecated
description: From PHP 8.2, if someone tries to set a value for a class property which does not have a definitino, a deprecation notice will be emitted. For example: code class User private int $uid; $user = new User(); $user->name = Foo; code code Deprecated: Creation of dynamic property User::$name is deprecated in ... on line ... code Also from internally: code class User public function __construct() $this->name = test; new User(); code code Deprecated: Creation of dynamic property User::$name is deprecated in ... on line ... code Much more detail here: We should look at writing a sniff for this if possible. Note: For some legacy code, we may choose to work around this using the AllowDynamicProperties attribute: code AllowDynamicProperties class User private int $uid; $user = new User(); $user->name = Foo; code . Other cases not affected stdClass classes with a magic __get and __set method . phpstan configuration I used the following phpstan configuration to genreate the above: code parameters Dynamic properties emits warnings from PHP 8.2 onwards. checkDynamicProperties: true code Note: I would recommend generating a baseline| first, then adding the above configuration, and then running again against the baseline with the new configuration. This will identify any problem areas.
6.summary: PHP 8.2: Fix all problems detected by phplint
description: Just run: code composer require --dev php-parallel-lint/php-parallel-lint && \ vendor/bin/parallel-lint --show-deprecated --exclude vendor . code And fix all the problems detected by the linter
7.summary: PHP 8.2: ksort(...) - block_recentlyaccesseditems
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./blocks/recentlyaccesseditems/classes/helper.php: ksort($recentitems);
8.summary: PHP 8.2: ksort(...) - Repositories
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./repository/nextcloud/lib.php: ksort($files); ./repository/nextcloud/lib.php: ksort($folders); ./repository/lib.php: ksort($args); ./repository/webdav/lib.php: ksort($files); ./repository/webdav/lib.php: ksort($folders);
9.summary: PHP 8.2: ksort(...) - Course
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./course/tests/courselib_test.php: ksort($oldsections); ./course/tests/courselib_test.php: ksort($oldsections); ./course/tests/courselib_test.php: ksort($sections); ./course/tests/courselib_test.php: ksort($oldsections); ./course/tests/courselib_test.php: ksort($sections); ./course/lib.php: ksort($sequenceunique); // Preserve initial order of modules.
10.summary: PHP 8.2: ksort(...) - Cache
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./cache/classes/output/renderer.php: ksort($storetotals); ./cache/classes/local/administration_display_helper.php: ksort($results); ./cache/classes/administration_helper.php: ksort($return); ./cache/classes/administration_helper.php: ksort($default);
11.summary: PHP 8.2: ksort(...) - customfield
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./customfield/tests/api_test.php: ksort($expected); ./customfield/tests/api_test.php: ksort($actual);
12.summary: PHP 8.2: ksort(...) - Admin Tools
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./admin/tool/xmldb/actions/get_db_directories/get_db_directories.class.php: ksort($XMLDB->dbdirs); ./admin/tool/behat/renderer.php: ksort($componententities); ./admin/tool/behat/cli/run.php: ksort($exitcodes); ./admin/tool/behat/cli/util.php: ksort($line); ./admin/tool/behat/cli/util.php: ksort($poutput); ./admin/tool/filetypes/renderer.php: ksort($combined); ./admin/tool/filetypes/classes/utils.php: ksort($icons); ./admin/tool/brickfield/classes/accessibility.php: ksort($htmlchecker->guideline->translations); ./admin/tool/brickfield/classes/local/tool/printable.php: ksort($combotar); ./admin/tool/customlang/locallib.php: ksort($coresubsystems); // Should be but just in case.
13.summary: PHP 8.2: ksort(...) - Messaging
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./message/tests/privacy/provider_test.php: ksort($notifications); ./message/tests/privacy/provider_test.php: ksort($notifications); ./message/tests/externallib_test.php: ksort($muas); ./message/tests/externallib_test.php: ksort($muas); ./message/tests/externallib_test.php: ksort($members); ./message/tests/externallib_test.php: ksort($members); ./message/tests/api_test.php: ksort($contacts); ./message/tests/api_test.php: ksort($muas); ./message/tests/api_test.php: ksort($muas); ./message/tests/api_test.php: ksort($members); ./message/tests/api_test.php: ksort($members);
14.summary: PHP 8.2: ksort(...) - User Profile
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./user/profile/lib.php: ksort($fields);
15.summary: PHP 8.2: ksort(...) - Question
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./question/classes/statistics/questions/calculator.php: ksort($this->randomselectors$key); ./question/classes/statistics/questions/calculated.php: ksort($this->variantstats); ./question/classes/local/bank/random_question_loader.php: ksort($this->availablequestionscache$categorykey); ./question/bank/columnsortorder/tests/column_manager_test.php: ksort($currentconfig); ./question/type/multianswer/question.php: ksort($simulatedresponse); ./question/type/match/question.php: ksort($simulatedresponse); ./question/type/multichoice/question.php: ksort($simulatedresponse); ./question/type/calculated/questiontype.php: ksort($dataitems); ./question/type/calculated/questiontype.php: ksort($fromform->definition); ./question/type/calculatedsimple/questiontype.php: ksort($question->definition); ./question/type/calculatedsimple/edit_calculatedsimple_form.php: ksort($fromformdefinition); ./question/engine/bank.php: ksort($sortorder);
16.summary: PHP 8.2: ksort(...) - Global Search
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./search/classes/manager.php: ksort($searchareas);
17.summary: PHP 8.2: ksort(...) - tcpdf
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/tcpdf/include/tcpdf_fonts.php: ksort($subsetchars); ./lib/tcpdf/include/tcpdf_fonts.php: ksort($subsetglyphs); ./lib/tcpdf/include/tcpdf_fonts.php: ksort($fontcw); ./lib/tcpdf/include/barcodes/datamatrix.php: ksort($log); ./lib/tcpdf/include/barcodes/datamatrix.php: ksort($c); ./lib/tcpdf/include/barcodes/datamatrix.php: ksort($wd); ./lib/tcpdf/include/tcpdf_images.php: ksort($icc);
18.summary: PHP 8.2: ksort(...) - Accesslib
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/accesslib.php: ksort($rdefs$roleid); ./lib/accesslib.php: ksort(self::$alllevels);
19.summary: PHP 8.2: ksort(...) - Form
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/pear/HTML/QuickForm.php: ksort($this->_elements);
20.summary: PHP 8.2: ksort(...) - phpspreadsheet
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php: ksort($cfRules); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php: ksort($cfRules); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter.php: ksort($this->columns); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter.php: ksort($this->columns); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table.php: ksort($this->columns); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table.php: ksort($this->columns); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php: ksort($sortKeys); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php: ksort($hashedValues); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Sample.php: ksort($files); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/ReferenceHelper.php: ksort($cellTokens); ./lib/phpspreadsheet/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/ReferenceHelper.php: ksort($newCellTokens);
21.summary: PHP 8.2: ksort(...) - mlbackend
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/mlbackend/php/phpml/src/Phpml/FeatureExtraction/TokenCountVectorizer.php: ksort($counts);
22.summary: PHP 8.2: ksort(...) - Guzzle
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/guzzle ksort($results); ./lib/guzzle ksort($results); ./lib/guzzle ksort($results); ./lib/guzzle \ksort($res);
23.summary: PHP 8.2: ksort(...) - SimplePie
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/simplepie/src/SimplePie.php: ksort($options);
24.summary: PHP 8.2: ksort(...) - Core Libs
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/adodb/drivers/adodb-sqlite3.inc.php: ksort($pkIndexDatacolumns); ./lib/modinfolib.php: ksort($compressedsections); ./lib/classes/navigation/views/secondary.php: ksort($nodes); ./lib/classes/filetypes.php: ksort($defaultvalue); ./lib/classes/filetypes.php: ksort($modified); ./lib/classes/component.php: ksort($result); ./lib/classes/component.php: ksort(self::$classmap); ./lib/classes/plugin_manager.php: ksort($this->installedplugins$key); ./lib/classes/string_manager_standard.php: ksort($langs); ./lib/classes/string_manager_standard.php: ksort($langs1); ./lib/ddl/sql_generator.php: ksort($reserved_words); ./lib/adminlib.php: ksort($protocols_available); ./lib/navigationlib.php: ksort($this->collection); ./lib/moodlelib.php: ksort($valuearray); ./lib/moodlelib.php: ksort($stats); ./lib/moodlelib.php: ksort($storetotals); ./lib/enrollib.php: ksort($plugins); ./lib/enrollib.php: ksort($changes); ./lib/pdflib.php: ksort($families); ./lib/ltiprovider/src/ToolProvider/ToolProvider.php: ksort($missing);
25.summary: PHP 8.2: ksort(...) - horde
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/horde/framework/Horde/Imap/Client/Fetch/Results.php: ksort($this->_data); ./lib/horde/framework/Horde/Imap/Client/Fetch/Results.php: ksort($this->_data); ./lib/horde/framework/Horde/Imap/Client/Base.php: ksort($val); ./lib/horde/framework/Horde/Imap/Client/Base.php: ksort($options); ./lib/horde/framework/Horde/Support/ConsistentHash.php: ksort($this->_circle); ./lib/horde/framework/Horde/Mime/Headers/ContentParam.php: ksort($val);
26.summary: PHP 8.2: ksort(...) - Tests
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/tests/component_test.php: ksort($sortedapis); // Well need this later. ./lib/tests/collator_test.php: $result = core_collator::ksort($arr); ./lib/tests/collator_test.php: core_collator::ksort($b); ./lib/filestorage/tests/file_storage_test.php: ksort($originalrecord); ./lib/behat/classes/behat_config_util.php: ksort($cleanfeatures); ./lib/behat/classes/behat_config_util.php: ksort($this->contexts); ./lib/behat/classes/behat_config_util.php: ksort($themes); ./lib/behat/classes/behat_config_util.php: ksort($dirs); ./lib/behat/classes/behat_config_util.php: ksort($features); ./lib/testing/classes/tests_finder.php: ksort($plugintypes); ./lib/testing/classes/tests_finder.php: ksort($plugs); ./lib/testing/classes/tests_finder.php: ksort($subsystems); ./lib/testing/classes/tests_finder.php: ksort($dirs); ./lib/phpunit/classes/util.php: ksort($plugintypes); ./lib/phpunit/classes/util.php: ksort($plugs);
27.summary: PHP 8.2: ksort(...) - Grades
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/grade/grade_category.php: ksort($children_array); ./lib/grade/grade_category.php: ksort($children_array);
28.summary: PHP 8.2: ksort(...) - oAuth
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/oauthlib.php: ksort($sorted); ./lib/oauthlib.php: ksort($params);
29.summary: PHP 8.2: ksort(...) - SCSS
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/scssphp/SourceMap/SourceMapGenerator.php: ksort($groupedMap);
30.summary: PHP 8.2: ksort(...) - htmlpurifier
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/htmlpurifier/HTMLPurifier/Printer/CSSDefinition.php: ksort($this->def->info); ./lib/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php: ksort($this->def->info); ./lib/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php: ksort($array); ./lib/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php: ksort($array); ./lib/htmlpurifier/HTMLPurifier/Printer/HTMLDefinition.php: ksort($array); ./lib/htmlpurifier/HTMLPurifier/Generator.php: ksort($assoc_array_of_attributes);
31.summary: PHP 8.2: ksort(...) - openspout
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/openspout/src/Reader/Common/Manager/RowManager.php: ksort($rowCells);
32.summary: PHP 8.2: ksort(...) - TinyMCE
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/editor/tinymce/cli/update_lang_files.php:ksort($old_strings); ./lib/editor/tinymce/cli/update_lang_files.php:ksort($parsed);
33.summary: PHP 8.2: ksort(...) - Flickr
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./lib/flickrlib.php: ksort($args); ./lib/flickrlib.php: ksort($args);
34.summary: PHP 8.2: ksort(...) - availability
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./availability/tests/tree_test.php: ksort($result); ./availability/tests/tree_test.php: ksort($result); ./availability/tests/tree_test.php: ksort($result); ./availability/tests/tree_test.php: ksort($result); ./availability/tests/tree_test.php: ksort($result); ./availability/tests/tree_test.php: ksort($result); ./availability/condition/group/tests/condition_test.php: ksort($result); ./availability/condition/group/tests/condition_test.php: ksort($result); ./availability/condition/group/tests/condition_test.php: ksort($result); ./availability/condition/group/tests/condition_test.php: ksort($result); ./availability/condition/grouping/tests/condition_test.php: ksort($result); ./availability/condition/grouping/tests/condition_test.php: ksort($result); ./availability/condition/profile/tests/condition_test.php: ksort($result); ./availability/condition/profile/tests/condition_test.php: ksort($result); ./availability/condition/profile/tests/condition_test.php: ksort($result); ./availability/condition/profile/tests/condition_test.php: ksort($result);
35.summary: PHP 8.2: ksort(...) - Reports
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./report/insights/classes/output/insights_list.php: ksort($predictionvalues); ./report/eventlist/classes/filter_form.php: core_collator::ksort($result); ./report/stats/locallib.php: ksort($data$roleid);
36.summary: PHP 8.2: ksort(...) - Backup
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./backup/moodle2/restore_stepslib.php: ksort($qstates); ./backup/util/helper/restore_log_rule.class.php: ksort($pairs); // First literals, then mappings
37.summary: PHP 8.2: ksort(...) - p
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./p/tests/editor_framework_test.php: $this->assertEquals(ksort($expectedlangs), ksort($langs)); ./p/tests/editor_framework_test.php: ksort($expectedlibraries); ./p/tests/editor_ajax_test.php: ksort($actuallibraries); ./mod/pactivity/classes/output/result.php: ksort($result);
38.summary: PHP 8.2: ksort(...) - Badges
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./badges/criteria.php: ksort($badge->criteria);
39.summary: PHP 8.2: ksort(...) - chat
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/chat/locallib.php: ksort($this->messages);
40.summary: PHP 8.2: ksort(...) - Quiz
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/quiz/settings.php:core_collator::ksort($reportsbyname); ./mod/quiz/settings.php:core_collator::ksort($rulesbyname); ./mod/quiz/tests/attempt_walkthrough_from_csv_test.php: ksort($slots); ./mod/quiz/tests/external/external_test.php: ksort($resultquestiontypes); ./mod/quiz/tests/external/external_test.php: ksort($resultquestiontypes); ./mod/quiz/locallib.php: ksort($questions); ./mod/quiz/report/statistics/report.php: ksort($ydata$fieldtoplot); ./mod/quiz/report/reportlib.php: ksort($data);
41.summary: PHP 8.2: ksort(...) - Choice
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/choice/renderer.php: ksort($choices->options);
42.summary: PHP 8.2: ksort(...) - Forum
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/forum/lib.php: ksort($digestoptions);
43.summary: PHP 8.2: ksort(...) - lti
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/lti/tests/locallib_test.php: ksort($parms); ./mod/lti/tests/locallib_test.php: ksort($correct);
44.summary: PHP 8.2: ksort(...) - assign
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/assign/locallib.php: ksort($result); ./mod/assign/feedback/editpdf/classes/document_services.php: ksort($pages); ./mod/assign/adminlib.php: ksort($result);
45.summary: PHP 8.2: ksort(...) - glossary
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/glossary/classes/admin_setting_display_formats.php: ksort($formats);
46.summary: PHP 8.2: ksort(...) - lesson
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/lesson/backup/moodle2/restore_lesson_stepslib.php: ksort($this->answers);
47.summary: PHP 8.2: ksort(...) - database
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/data/classes/preset.php: ksort($fields); ./mod/data/lib.php: ksort($datarecords);
48.summary: PHP 8.2: ksort(...) - BBB
description: Based on an Audit of the code, this component has the following uses of ksort without an explicit sort order which means SORT_REGULAR is applied by default and this sort behavior changes in PHP 8.2. See: Instances: ./mod/bigbluebuttonbn/classes/output/import_view.php: ksort($courses);
49.summary: Verify upgrading and installation for 402 and master work okay on PHP 8.2
description: Adding this to the PHP 8.2 epic to track that we can upgrade and install Moodle 4.2 and 4.3 (master) using PHP 8.2.
50.summary: Check PHP-8.2/UPGRADING and ensure we did not miss anything.
description: Creating a task here from the description of : quote check all the change details have been reviewed and fixed (attached file coming soon!). Note that, until release, this file is considered WIP and subject to changes! Reference: quote We need to go through this list and ensure that all changes mentioned in the file are already applied in core. If not, raise issues and add to the PHP 8.2 epic.
