diff --git a/badges/classes/external/assertion_exporter.php b/badges/classes/external/assertion_exporter.php index 06b523803e300..78e86b06462f2 100644 --- a/badges/classes/external/assertion_exporter.php +++ b/badges/classes/external/assertion_exporter.php @@ -39,6 +39,20 @@ */ class assertion_exporter extends exporter { + /** + * Constructor - saves the persistent object, and the related objects. + * + * @param mixed $data - Either an stdClass or an array of values. + * @param array $related - An optional list of pre-loaded objects related to this object. + */ + public function __construct($data, $related = array()) { + // Having mixed $data is causing some issues. As this class is treating $data as an object everywhere, it can be converted + // to object at this point, to avoid errors and get the expected behaviour always. + // $data is an array when this class is a request exporter in backpack_api_mapping, but it is an object when this is + // used as a response exporter. + parent::__construct((object) $data, $related); + } + /** * Map from a request response data to the internal structure. * diff --git a/badges/classes/external/badgeclass_exporter.php b/badges/classes/external/badgeclass_exporter.php index 4d4880fbad1ed..9aee956825612 100644 --- a/badges/classes/external/badgeclass_exporter.php +++ b/badges/classes/external/badgeclass_exporter.php @@ -45,6 +45,12 @@ class badgeclass_exporter extends exporter { * @param array $related - An optional list of pre-loaded objects related to this object. */ public function __construct($data, $related = array()) { + // Having mixed $data is causing some issues. As this class is treating $data as an object everywhere, it can be converted + // to object at this point, to avoid errors and get the expected behaviour always. + // $data is an array when this class is a request exporter in backpack_api_mapping, but it is an object when this is + // used as a response exporter. + $data = (object) $data; + $pick = $this->pick_related(); foreach ($pick as $one) { $isarray = false;