primo commit
This commit is contained in:
158
libraries/vendor/willdurand/negotiation/src/Negotiation/BaseAccept.php
vendored
Normal file
158
libraries/vendor/willdurand/negotiation/src/Negotiation/BaseAccept.php
vendored
Normal file
@ -0,0 +1,158 @@
|
||||
<?php
|
||||
|
||||
namespace Negotiation;
|
||||
|
||||
abstract class BaseAccept
|
||||
{
|
||||
/**
|
||||
* @var float
|
||||
*/
|
||||
private $quality = 1.0;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $normalized;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $value;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $parameters;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $type;
|
||||
|
||||
/**
|
||||
* @param string $value
|
||||
*/
|
||||
public function __construct($value)
|
||||
{
|
||||
list($type, $parameters) = $this->parseParameters($value);
|
||||
|
||||
if (isset($parameters['q'])) {
|
||||
$this->quality = (float) $parameters['q'];
|
||||
unset($parameters['q']);
|
||||
}
|
||||
|
||||
$type = trim(strtolower($type));
|
||||
|
||||
$this->value = $value;
|
||||
$this->normalized = $type . ($parameters ? "; " . $this->buildParametersString($parameters) : '');
|
||||
$this->type = $type;
|
||||
$this->parameters = $parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getNormalizedValue()
|
||||
{
|
||||
return $this->normalized;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getValue()
|
||||
{
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getType()
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return float
|
||||
*/
|
||||
public function getQuality()
|
||||
{
|
||||
return $this->quality;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getParameters()
|
||||
{
|
||||
return $this->parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @param mixed $default
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getParameter($key, $default = null)
|
||||
{
|
||||
return isset($this->parameters[$key]) ? $this->parameters[$key] : $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function hasParameter($key)
|
||||
{
|
||||
return isset($this->parameters[$key]);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string|null $acceptPart
|
||||
* @return array
|
||||
*/
|
||||
private function parseParameters($acceptPart)
|
||||
{
|
||||
if ($acceptPart === null) {
|
||||
return ['', []];
|
||||
}
|
||||
|
||||
$parts = explode(';', $acceptPart);
|
||||
$type = array_shift($parts);
|
||||
|
||||
$parameters = [];
|
||||
foreach ($parts as $part) {
|
||||
$part = explode('=', $part);
|
||||
|
||||
if (2 !== count($part)) {
|
||||
continue; // TODO: throw exception here?
|
||||
}
|
||||
|
||||
$key = strtolower(trim($part[0])); // TODO: technically not allowed space around "=". throw exception?
|
||||
$parameters[$key] = trim($part[1], ' "');
|
||||
}
|
||||
|
||||
return [ $type, $parameters ];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $parameters
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function buildParametersString($parameters)
|
||||
{
|
||||
$parts = [];
|
||||
|
||||
ksort($parameters);
|
||||
foreach ($parameters as $key => $val) {
|
||||
$parts[] = sprintf('%s=%s', $key, $val);
|
||||
}
|
||||
|
||||
return implode('; ', $parts);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user