<?php
declare(strict_types=1);
namespace SlimStat\Dependencies\BrowscapPHP\Helper;
use function array_key_exists;
use function strip_tags;
use function trim;
use function urldecode;
/**
* class to help getting the user agent
*/
final class Support implements SupportInterface
{
/** @var string[] */
private array $source = [];
/**
* The HTTP Headers that this application will look through to find the best
* User Agent, if one is not specified
*
* @var string[]
*/
private array $userAgentHeaders = [
'HTTP_X_DEVICE_USER_AGENT',
'HTTP_X_ORIGINAL_USER_AGENT',
'HTTP_X_OPERAMINI_PHONE_UA',
'HTTP_X_SKYFIRE_PHONE',
'HTTP_X_BOLT_PHONE_UA',
'HTTP_USER_AGENT',
];
/**
* @param string[]|null $source
*
* @throws void
*/
public function __construct(?array $source = null)
{
if ($source === null) {
$source = [];
}
$this->source = $source;
}
/**
* detect the useragent
*
* @throws void
*/
public function getUserAgent(): string
{
$userAgent = '';
foreach ($this->userAgentHeaders as $header) {
if (
array_key_exists($header, $this->source)
&& $this->source[$header]
) {
$userAgent = $this->cleanParam($this->source[$header]);
break;
}
}
return $userAgent;
}
/**
* clean Parameters taken from GET or POST Variables
*
* @param string $param the value to be cleaned
*
* @throws void
*/
private function cleanParam(string $param): string
{
return strip_tags(trim(urldecode($param)));
}
}