/** * Returns an array of indexes for of matches of higher precedence than the existing pairing. * * @param MatchedPreferenceInterface[] $matchingList * @param PreferenceInterface $clientPref * * @return int[] */ private function getMatchingIndexes(array $matchingList, PreferenceInterface $clientPref) { $matchingIndexList = array(); foreach ($matchingList as $key => $matching) { if ($clientPref->getPrecedence() > $matching->getClientPreference()->getPrecedence()) { $matchingIndexList[] = $key; } } return $matchingIndexList; }
/** * Returns true if the server preference contains a partial language that matches the language in the client * preference. * * e.g. An server variant of en-* would match en, en-US but not es-ES * * @param string $fromField * @param MatchedPreferenceInterface $matchedPreference * @param PreferenceInterface $newClientPref * * @return bool */ private function partialLangMatches($fromField, MatchedPreferenceInterface $matchedPreference, PreferenceInterface $newClientPref) { $serverPref = $matchedPreference->getServerPreference(); $oldClientPref = $matchedPreference->getClientPreference(); // Note that this only supports the simplest case of (e.g.) en-* matching en-GB and en-US, additional // Language tags are explicitly ignored list($clientMainLang) = explode('-', $newClientPref->getVariant()); list($serverMainLang) = explode('-', $serverPref->getVariant()); return PreferenceInterface::LANGUAGE === $fromField && PreferenceInterface::PARTIAL_WILDCARD === $serverPref->getPrecedence() && $clientMainLang == $serverMainLang && $newClientPref->getPrecedence() > $oldClientPref->getPrecedence(); }
/** * Returns an array of indexes for of matches of higher precedence than the existing pairing. * * @param MatchedPreferenceInterface[] $matchingList * @param PreferenceInterface $clientPref * * @return int[] */ private function getMatchingIndexes(array $matchingList, PreferenceInterface $clientPref) { $matchingIndexList = array(); foreach ($matchingList as $key => $matching) { $serverPref = $matching->getServerPreference(); list($clientMimeType) = explode('/', $clientPref->getVariant()); list($serverMimeType) = explode('/', $serverPref->getVariant()); if ($clientMimeType == $serverMimeType && $clientPref->getPrecedence() > $matching->getClientPreference()->getPrecedence()) { $matchingIndexList[] = $key; } } return $matchingIndexList; }
/** * Compare precedences of preferences. * * @param PreferenceInterface $lValue * @param PreferenceInterface $rValue * * @return int -1, 0, 1 (see usort() callback for meaning) */ private function comparePrecedence(PreferenceInterface $lValue, PreferenceInterface $rValue) { if ($rValue->getPrecedence() < $lValue->getPrecedence()) { return -1; } elseif ($rValue->getPrecedence() > $lValue->getPrecedence()) { return 1; } else { return 0; } }
/** * Returns true if the match was by partial language wildcard. * * @return bool */ private function isLanguageWildcard() { return PreferenceInterface::LANGUAGE === $this->fromField && PreferenceInterface::PARTIAL_WILDCARD === $this->serverPref->getPrecedence(); }