array( 'type' => 'text', 'maxLength' => 255 ), 'authors' => array( 'type' => 'json' ), 'changes' => array( 'type' => 'json' ), 'source' => array( 'type' => 'text', 'maxLength' => 255 ), 'license' => array( 'type' => 'text', 'maxLength' => 32 ), 'licenseVersion' => array( 'type' => 'text', 'maxLength' => 10 ), 'licenseExtras' => array( 'type' => 'text', 'maxLength' => 5000 ), 'authorComments' => array( 'type' => 'text', 'maxLength' => 5000 ), 'yearFrom' => array( 'type' => 'int' ), 'yearTo' => array( 'type' => 'int' ) ); /** * 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 array $types * @return array */ public static function toDBArray($metadata, $include_title = true, &$types = array()) { $fields = array(); if (!is_array($metadata)) { $metadata = (array) $metadata; } foreach (self::FIELDS as $key => $config) { if ($key === 'title' && !$include_title) { continue; } if (isset($metadata[$key])) { $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[] = '%i'; break; case 'json': $value = json_encode($value); $types[] = '%s'; break; } $fields[$db_field_name] = $value; } } return $fields; } }