From 758a2cdf23f39888715e030809fdf5de9a02deab Mon Sep 17 00:00:00 2001
From: Chris Sangwin <C.J.Sangwin@ed.ac.uk>
Date: Tue, 14 Nov 2023 18:49:12 +0000
Subject: [PATCH] WIP fix to issue #1053: strings being used to define PRT
 scores.

---
 questiontype.php | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/questiontype.php b/questiontype.php
index 34a6af73e..57e265825 100644
--- a/questiontype.php
+++ b/questiontype.php
@@ -1085,13 +1085,16 @@ class qtype_stack extends question_type {
 
         foreach ($q->prts as $index => $prt) {
             foreach ($prt->get_nodes_summary() as $nodeid => $choices) {
-                $parts[$index . '-' . $nodeid] = array(
-                    $choices->falseanswernote => new question_possible_response(
-                            $choices->falseanswernote, $choices->falsescore * $prt->get_value()),
-                    $choices->trueanswernote => new question_possible_response(
-                            $choices->trueanswernote, $choices->truescore * $prt->get_value()),
-                    null              => question_possible_response::no_response(),
-                );
+                // STACK allows variables in scores, which may not be evaluated.
+                if (is_numeric($choices->falsescore) && is_numeric($choices->truescore)) {
+                    $parts[$index . '-' . $nodeid] = array(
+                        $choices->falseanswernote => new question_possible_response(
+                                $choices->falseanswernote, $choices->falsescore * $prt->get_value()),
+                        $choices->trueanswernote => new question_possible_response(
+                                $choices->trueanswernote, $choices->truescore * $prt->get_value()),
+                        null              => question_possible_response::no_response(),
+                    );
+                }
             }
         }
 
-- 
GitLab