MDL-33532 quiz editing: let uses enter locale floats.
authorTim Hunt <T.J.Hunt@open.ac.uk>
Thu, 7 Jun 2012 11:55:53 +0000 (12:55 +0100)
committerTim Hunt <T.J.Hunt@open.ac.uk>
Thu, 7 Jun 2012 11:55:53 +0000 (12:55 +0100)
So, for example, Croatian users can set the maximum grade to 65,5.

lib/moodlelib.php
mod/quiz/edit.php

index 23ee2f5..40c55aa 100644 (file)
@@ -132,6 +132,14 @@ define('PARAM_FILE',   'file');
 
 /**
  * PARAM_FLOAT - a real/floating point number.
+ *
+ * Note that you should not use PARAM_FLOAT for numbers typed in by the user.
+ * It does not work for languages that use , as a decimal separator.
+ * Instead, do something like
+ *     $rawvalue = required_param('name', PARAM_RAW);
+ *     // ... other code including require_login, which sets current lang ...
+ *     $realvalue = unformat_float($rawvalue);
+ *     // ... then use $realvalue
  */
 define('PARAM_FLOAT',  'float');
 
index 503999f..e2f24d2 100644 (file)
@@ -318,7 +318,7 @@ if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey()) {
         if (preg_match('!^g([0-9]+)$!', $key, $matches)) {
             // Parse input for question -> grades.
             $questionid = $matches[1];
-            $quiz->grades[$questionid] = clean_param($value, PARAM_FLOAT);
+            $quiz->grades[$questionid] = unformat_float($value);
             quiz_update_question_instance($quiz->grades[$questionid], $questionid, $quiz);
             $deletepreviews = true;
             $recomputesummarks = true;
@@ -385,7 +385,7 @@ if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey()) {
     }
 
     // If rescaling is required save the new maximum.
-    $maxgrade = optional_param('maxgrade', -1, PARAM_FLOAT);
+    $maxgrade = unformat_float(optional_param('maxgrade', -1, PARAM_RAW));
     if ($maxgrade >= 0) {
         quiz_set_grade($maxgrade, $quiz);
     }