MDL-67049 grading: options are array, ensure json_decode() knows it
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Mon, 28 Oct 2019 01:50:24 +0000 (02:50 +0100)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Fri, 22 Nov 2019 00:40:18 +0000 (01:40 +0100)
By default json_decode() returns object for associative arrays. That
was not a problem till now becuause array_key_exists() worked with
objects too. But in php74 that emits a warning.

So we need to ensure that the information arriving to it is
an array, allowing everything to continue working ok.

grade/grading/form/rubric/lib.php

index 361e73b..a578315 100644 (file)
@@ -386,7 +386,7 @@ class gradingform_rubric_controller extends gradingform_controller {
     public function get_options() {
         $options = self::get_default_options();
         if (!empty($this->definition->options)) {
-            $thisoptions = json_decode($this->definition->options);
+            $thisoptions = json_decode($this->definition->options, true); // Assoc. array is expected.
             foreach ($thisoptions as $option => $value) {
                 $options[$option] = $value;
             }