protected function determineDynamicType($mix_value)
{
switch (gettype($mix_value)) {
case 'boolean':
$int_dynamic_type = Schema::PROPERTY_BOOLEAN;
break;
case 'integer':
$int_dynamic_type = Schema::PROPERTY_INTEGER;
break;
case 'double':
$int_dynamic_type = Schema::PROPERTY_DOUBLE;
break;
case 'string':
$int_dynamic_type = Schema::PROPERTY_STRING;
break;
case 'array':
$int_dynamic_type = Schema::PROPERTY_STRING_LIST;
break;
case 'object':
if ($mix_value instanceof \DateTime) {
$int_dynamic_type = Schema::PROPERTY_DATETIME;
break;
}
if ($mix_value instanceof Geopoint) {
$int_dynamic_type = Schema::PROPERTY_GEOPOINT;
break;
}
$int_dynamic_type = Schema::PROPERTY_STRING;
if (method_exists($mix_value, '__toString')) {
$mix_value = $mix_value->__toString();
} else {
$mix_value = null;
}
break;
case 'resource':
case 'null':
case 'unknown type':
default:
$int_dynamic_type = Schema::PROPERTY_STRING;
$mix_value = null;
}
return ['type' => $int_dynamic_type, 'value' => $mix_value];
}