public function inferAggregateType($mime_type, $extension)
{
$allowed_types = $this->config['allowed_aggregate_types'];
$types_for_mime = $this->possibleAggregateTypesForMimeType($mime_type);
$types_for_extension = $this->possibleAggregateTypesForExtension($extension);
if (count($allowed_types)) {
$intersection = array_intersect($types_for_mime, $types_for_extension, $allowed_types);
} else {
$intersection = array_intersect($types_for_mime, $types_for_extension);
}
if (count($intersection)) {
$type = $intersection[0];
} elseif (empty($types_for_mime) && empty($types_for_extension)) {
if (!$this->config['allow_unrecognized_types']) {
throw FileNotSupportedException::unrecognizedFileType($mime_type, $extension);
}
$type = Media::TYPE_OTHER;
} else {
if ($this->config['strict_type_checking']) {
throw FileNotSupportedException::strictTypeMismatch($mime_type, $extension);
}
$merged = array_merge($types_for_mime, $types_for_extension);
$type = reset($merged);
}
if (count($allowed_types) && !in_array($type, $allowed_types)) {
throw FileNotSupportedException::aggregateTypeRestricted($type, $allowed_types);
}
return $type;
}