diff --git a/h5p.classes.php b/h5p.classes.php index 4c22804..659f224 100644 --- a/h5p.classes.php +++ b/h5p.classes.php @@ -1939,6 +1939,10 @@ class H5PCore { $content = $this->h5pF->loadContent($id); if ($content !== NULL) { + // Validate main content's metadata + $validator = new H5PContentValidator($this->h5pF, $this); + $validator->validateMetadata($content['metadata']); + $content['library'] = array( 'id' => $content['libraryId'], 'name' => $content['libraryName'], @@ -3367,6 +3371,21 @@ class H5PContentValidator { return $this->dependencies; } + /** + * Validate metadata + * + * @param array $metadata + */ + public function validateMetadata(&$metadata) { + $semantics = $this->getMetadataSemantics(); + + $group = (object)$metadata; + $this->validateGroup($group, (object) array( + 'type' => 'group', + 'fields' => $semantics, + ), FALSE); + } + /** * Validate given text value against text semantics. * @param $text @@ -3883,10 +3902,17 @@ class H5PContentValidator { $library = $this->libraries[$value->library]; } + // Validate parameters $this->validateGroup($value->params, (object) array( 'type' => 'group', 'fields' => $library['semantics'], ), FALSE); + + // Validate subcontent's metadata + if (isset($value->metadata)) { + $this->validateMetadata($value->metadata); + } + $validKeys = array('library', 'params', 'subContentId', 'metadata'); if (isset($semantics->extraAttributes)) { $validKeys = array_merge($validKeys, $semantics->extraAttributes);