mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 06:18:28 +01:00
3a016e2784
It has been detected, thanks to php80 specially, that there are various places in core where support for localised floats is missing. Before php80, some locale-dependent conversions were performed by PHP, allowing things to work. But with php80 all those comparisons are now locale-independent. See: https://wiki.php.net/rfc/locale_independent_float_to_string That implies that we now need to, always, unformat floats to be internally the correct (decimal point as separator) in order to compare it. While this was visited in the php80 epic (MDL-70745), nothing was found, all automated tests were passing ok. Problem is that we run behat tests with en-AU laguage that has the decimal point separator. So, in this issue we are fixing all the problems detected by running those Behat tests using localised (comma) decimal separator. Note that there may be other places still causing problems, but it's really hard to find them programmatically, so we'll have to wait for real use reports / issues and go fixing them while they happen. Back to this commit, this is the list of changes performed (note that in the next commit, we'll be adding scenarios explicitly using a localised decimal separator to ensure that they work ok). A. Changes to various grade forms to ensure that, on their validation floats are unformatted properly. Also, changed the corresponding form element from current text/PARAM_RAW to proper float ones that take care of the conversion in a number of places (but when disabled, that's the reason we still have to unformat in validation. This includes the following forms: - edit_category_form - edit_item_form (this is the original problem reported that cause all the research to be performed against full behat runs) B. Changes to edit_letter_form, so it uses a proper PARAM_LOCALISEDFLOAT (note this is the type of change that surely should be used for all the rest of /grade/edit/tree form, including those in the previous point). C. Changes to the grade_item behat generator, so it's able to work with localised floats, un-formatting them when needed. At lib/behat/classes/behat_core_generator.php D. Fix problem passing localised floats to scales, not displaying properly. At grade/report/singleview/classes/local/ui/finalgrade.php E. Change the behat text matcher in order to allow comparison of localised floats when they are the current ones. Before this change the matches was using soft/lazy comparison, so '50' and '50.0000' match. Now, when the comma (for example) is used (and only then), '50' and '50,000' will also match. This comparison is in use in a bunch of tests and makes sense to make it localisation-aware. At grade/report/singleview/classes/local/ui/finalgrade.php F. Fix a couple of number_format() uses in lesson, because they are not localised-aware. Switched to format_float(). At mod/lesson/locallib.php G. Change the quiz_contains_the_following_questions() step to accept localised maxmark expectations. At mod/quiz/tests/behat/behat_mod_quiz.php H. Change the quiz generator so it accepts localised gradepass. At mod/quiz/tests/generator/lib.php I. Change the edit question form to show proper localised penalties, previously it was always showing point-decimal ones. Of course, leaving the values of the select element unmodified (internal floats). Related, also change a couple of tests to, instead of try to match the value (always internal floats), match the description (now localised), so we can test them with different separators. At: - question/type/ddimageortext/tests/behat/backup_and_restore.feature - question/type/ddmarker/tests/behat/backup_and_restore.feature - question/type/edit_question_form.php