Neos\Flow\Http\Request::parseContentNegotiationQualityValues PHP Method

parseContentNegotiationQualityValues() public static method

Parses a RFC 2616 content negotiation header field by evaluating the Quality Values and splitting the options into an array list, ordered by user preference.
public static parseContentNegotiationQualityValues ( string $rawValues ) : array
$rawValues string The raw Accept* Header field value
return array The parsed list of field values, ordered by user preference
    public static function parseContentNegotiationQualityValues($rawValues)
    {
        $acceptedTypes = array_map(function ($acceptType) {
            $typeAndQuality = preg_split('/;\\s*q=/', $acceptType);
            return [$typeAndQuality[0], isset($typeAndQuality[1]) ? (double) $typeAndQuality[1] : ''];
        }, preg_split('/,\\s*/', $rawValues));
        $flattenedAcceptedTypes = [];
        $valuesWithoutQualityValue = [[], [], [], []];
        foreach ($acceptedTypes as $typeAndQuality) {
            if ($typeAndQuality[1] === '') {
                $parsedType = MediaTypes::parseMediaType($typeAndQuality[0]);
                if ($parsedType['type'] === '*') {
                    $valuesWithoutQualityValue[3][$typeAndQuality[0]] = true;
                } elseif ($parsedType['subtype'] === '*') {
                    $valuesWithoutQualityValue[2][$typeAndQuality[0]] = true;
                } elseif ($parsedType['parameters'] === []) {
                    $valuesWithoutQualityValue[1][$typeAndQuality[0]] = true;
                } else {
                    $valuesWithoutQualityValue[0][$typeAndQuality[0]] = true;
                }
            } else {
                $flattenedAcceptedTypes[$typeAndQuality[0]] = $typeAndQuality[1];
            }
        }
        $valuesWithoutQualityValue = array_merge(array_keys($valuesWithoutQualityValue[0]), array_keys($valuesWithoutQualityValue[1]), array_keys($valuesWithoutQualityValue[2]), array_keys($valuesWithoutQualityValue[3]));
        arsort($flattenedAcceptedTypes);
        $parsedValues = array_merge($valuesWithoutQualityValue, array_keys($flattenedAcceptedTypes));
        return $parsedValues;
    }