diff --git a/mod/quiz/report/overview/overviewgraph.php b/mod/quiz/report/overview/overviewgraph.php index 4efa315014b..aeccfa1a78e 100644 --- a/mod/quiz/report/overview/overviewgraph.php +++ b/mod/quiz/report/overview/overviewgraph.php @@ -90,7 +90,9 @@ while ($bands > 20 || $bands <= 10) { } } -$bands = ceil($bands); +// See MDL-34589. Using doubles as array keys causes problems in PHP 5.4, +// hence the explicit cast to int. +$bands = (int) ceil($bands); $bandwidth = $quiz->grade / $bands; $bandlabels = array(); for ($i = 1; $i <= $bands; $i++) { diff --git a/mod/quiz/report/reportlib.php b/mod/quiz/report/reportlib.php index 8154d4dfd4a..0e7001b5783 100644 --- a/mod/quiz/report/reportlib.php +++ b/mod/quiz/report/reportlib.php @@ -190,6 +190,11 @@ function quiz_report_qm_filter_select($quiz, $quizattemptsalias = 'quiza') { */ function quiz_report_grade_bands($bandwidth, $bands, $quizid, $userids = array()) { global $DB; + if (!is_int($bands)) { + debugging('$bands passed to quiz_report_grade_bands must be an integer. (' . + gettype($bands) . ' passed.)', DEBUG_DEVELOPER); + $bands = (int) $bands; + } if ($userids) { list($usql, $params) = $DB->get_in_or_equal($userids, SQL_PARAMS_NAMED, 'u'); @@ -218,8 +223,8 @@ ORDER BY $data = $DB->get_records_sql_menu($sql, $params); - //need to create array elements with values 0 at indexes where there is no element - $data = $data + array_fill(0, $bands+1, 0); + // We need to create array elements with values 0 at indexes where there is no element. + $data = $data + array_fill(0, $bands + 1, 0); ksort($data); //place the maximum (prefect grade) into the last band i.e. make last