Merge branch 'release'

semi-fullscreen
Paal Joergensen 2018-11-01 14:50:46 +01:00
commit d9940b81e2
1 changed files with 34 additions and 25 deletions

View File

@ -64,15 +64,16 @@ abstract class H5PMetadata {
',"authorComments":' . (isset($content->author_comments) ? json_encode($content->author_comments) : 'null') . '}'; ',"authorComments":' . (isset($content->author_comments) ? json_encode($content->author_comments) : 'null') . '}';
} }
/** /**
* Make the metadata into an associative array keyed by the property names * Make the metadata into an associative array keyed by the property names
* @param mixed $metadata Array or object containing metadata * @param mixed $metadata Array or object containing metadata
* @param bool $include_title * @param bool $include_title
* @param bool $include_missing For metadata fields not being set, skip 'em.
* Relevant for content upgrade
* @param array $types * @param array $types
* @return array * @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(); $fields = array();
if (!is_array($metadata)) { if (!is_array($metadata)) {
@ -81,35 +82,43 @@ abstract class H5PMetadata {
foreach (self::$fields as $key => $config) { foreach (self::$fields as $key => $config) {
// Ignore title?
if ($key === 'title' && !$include_title) { if ($key === 'title' && !$include_title) {
continue; continue;
} }
if (array_key_exists($key, $metadata)) { $exists = array_key_exists($key, $metadata);
$value = $metadata[$key];
$db_field_name = strtolower(preg_replace('/(?<!^)[A-Z]/', '_$0', $key));
switch ($config['type']) { // Don't include missing fields
case 'text': if (!$include_missing && !exists) {
if ($value !== null && strlen($value) > $config['maxLength']) { continue;
$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;
} }
$value = $exists ? $metadata[$key] : null;
// lowerCamelCase to snake_case
$db_field_name = strtolower(preg_replace('/(?<!^)[A-Z]/', '_$0', $key));
switch ($config['type']) {
case 'text':
if ($value !== null && strlen($value) > $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; return $fields;