diff --git a/h5p-metadata.class.php b/h5p-metadata.class.php index 3a504e3..8462fa4 100644 --- a/h5p-metadata.class.php +++ b/h5p-metadata.class.php @@ -64,15 +64,16 @@ abstract class H5PMetadata { ',"authorComments":' . (isset($content->author_comments) ? json_encode($content->author_comments) : 'null') . '}'; } - /** * Make the metadata into an associative array keyed by the property names * @param mixed $metadata Array or object containing metadata * @param bool $include_title + * @param bool $include_missing For metadata fields not being set, skip 'em. + * Relevant for content upgrade * @param array $types * @return array */ - public static function toDBArray($metadata, $include_title = true, &$types = array()) { + public static function toDBArray($metadata, $include_title = true, $include_missing = true, &$types = array()) { $fields = array(); if (!is_array($metadata)) { @@ -81,35 +82,43 @@ abstract class H5PMetadata { foreach (self::$fields as $key => $config) { + // Ignore title? if ($key === 'title' && !$include_title) { continue; } - if (array_key_exists($key, $metadata)) { - $value = $metadata[$key]; - $db_field_name = strtolower(preg_replace('/(? $config['maxLength']) { - $value = mb_substr($value, 0, $config['maxLength']); - } - $types[] = '%s'; - break; - - case 'int': - $value = ($value !== null) ? intval($value): null; - $types[] = '%d'; - break; - - case 'json': - $value = ($value !== null) ? json_encode($value) : null; - $types[] = '%s'; - break; - } - - $fields[$db_field_name] = $value; + // Don't include missing fields + if (!$include_missing && !exists) { + continue; } + + $value = $exists ? $metadata[$key] : null; + + // lowerCamelCase to snake_case + $db_field_name = strtolower(preg_replace('/(? $config['maxLength']) { + $value = mb_substr($value, 0, $config['maxLength']); + } + $types[] = '%s'; + break; + + case 'int': + $value = ($value !== null) ? intval($value) : null; + $types[] = '%d'; + break; + + case 'json': + $value = ($value !== null) ? json_encode($value) : null; + $types[] = '%s'; + break; + } + + $fields[$db_field_name] = $value; } return $fields;