From 60a7064a1c6261004b2b8667a6c7cdcf72fee9a3 Mon Sep 17 00:00:00 2001 From: Colin McFadden Date: Mon, 7 May 2018 14:57:07 -0500 Subject: [PATCH] Add support for passing extra resultData back to a consumer. Specifically targetting Canvas --- src/ToolProvider/Outcome.php | 36 +++++++++++++++++++++++++++++-- src/ToolProvider/ResourceLink.php | 14 ++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/ToolProvider/Outcome.php b/src/ToolProvider/Outcome.php index 77508fd..17c86f0 100644 --- a/src/ToolProvider/Outcome.php +++ b/src/ToolProvider/Outcome.php @@ -52,15 +52,23 @@ class Outcome */ private $value = null; +/** + * Outcome result data passback. + * + * @var array $resultData (type=>value) + */ + private $resultData = null; + + /** * Class constructor. * * @param string $value Outcome value (optional, default is none) */ - public function __construct($value = null) + public function __construct($value = null, $resultData = null) { - $this->value = $value; + $this->resultData = $resultData; $this->language = 'en-US'; $this->date = gmdate('Y-m-d\TH:i:s\Z', time()); $this->type = 'decimal'; @@ -91,4 +99,28 @@ public function setValue($value) } +/** + * Get the outcome result data. + * + * @return array Outcome Result Data (type=>value) + */ + public function getResultData() + { + + return $this->resultData; + + } + +/** + * Set the outcome result data. + * + * @param array $resultData Outcome result (type=>value) + */ + public function setResultData($resultData) + { + + $this->resultData = $resultData; + + } + } diff --git a/src/ToolProvider/ResourceLink.php b/src/ToolProvider/ResourceLink.php index f08f11c..a9afbf0 100644 --- a/src/ToolProvider/ResourceLink.php +++ b/src/ToolProvider/ResourceLink.php @@ -591,6 +591,19 @@ public function doOutcomesService($action, $ltiOutcome, $user) if ($urlLTI11) { $xml = ''; if ($action === self::EXT_WRITE) { + $xmlResultAppend = null; + if($ltiOutcome->getResultData() && is_array($ltiOutcome->getResultData())) { + $resultData = $ltiOutcome->getResultData(); + reset($resultData); + $resultKey = key($resultData); + $resultValue = current($resultData); + $xmlResultAppend = << + <{$resultKey}>{$resultValue} + +EOF; + + } $xml = << @@ -598,6 +611,7 @@ public function doOutcomesService($action, $ltiOutcome, $user) {$ltiOutcome->language} {$value} + {$xmlResultAppend} EOF; }