%PDF- %PDF-
| Direktori : /home/graphicd/public_html/vebto/vendor/kreait/firebase-php/src/Firebase/ |
| Current File : /home/graphicd/public_html/vebto/vendor/kreait/firebase-php/src/Firebase/RemoteConfig.php |
<?php
declare(strict_types=1);
namespace Kreait\Firebase;
use Kreait\Firebase\Exception\RemoteConfig\VersionNotFound;
use Kreait\Firebase\RemoteConfig\ApiClient;
use Kreait\Firebase\RemoteConfig\FindVersions;
use Kreait\Firebase\RemoteConfig\Template;
use Kreait\Firebase\RemoteConfig\Version;
use Kreait\Firebase\RemoteConfig\VersionNumber;
use Kreait\Firebase\Util\JSON;
use Psr\Http\Message\ResponseInterface;
use Traversable;
class RemoteConfig implements Contract\RemoteConfig
{
/** @var ApiClient */
private $client;
/**
* @internal
*/
public function __construct(ApiClient $client)
{
$this->client = $client;
}
public function get(): Template
{
return $this->buildTemplateFromResponse($this->client->getTemplate());
}
public function validate($template): void
{
$this->client->validateTemplate($this->ensureTemplate($template));
}
public function publish($template): string
{
$etag = $this->client
->publishTemplate($this->ensureTemplate($template))
->getHeader('ETag');
return \array_shift($etag) ?: '';
}
public function getVersion($versionNumber): Version
{
$versionNumber = $this->ensureVersionNumber($versionNumber);
foreach ($this->listVersions() as $version) {
if ($version->versionNumber()->equalsTo($versionNumber)) {
return $version;
}
}
throw VersionNotFound::withVersionNumber($versionNumber);
}
public function rollbackToVersion($versionNumber): Template
{
$versionNumber = $this->ensureVersionNumber($versionNumber);
return $this->buildTemplateFromResponse($this->client->rollbackToVersion($versionNumber));
}
public function listVersions($query = null): Traversable
{
$query = $query instanceof FindVersions ? $query : FindVersions::fromArray((array) $query);
$pageToken = null;
$count = 0;
$limit = $query->limit();
do {
$response = $this->client->listVersions($query, $pageToken);
$result = JSON::decode((string) $response->getBody(), true);
foreach ((array) ($result['versions'] ?? []) as $versionData) {
++$count;
yield Version::fromArray($versionData);
if ($count === $limit) {
return;
}
}
$pageToken = $result['nextPageToken'] ?? null;
} while ($pageToken);
}
/**
* @param Template|array<string, mixed> $value
*/
private function ensureTemplate($value): Template
{
return $value instanceof Template ? $value : Template::fromArray($value);
}
/**
* @param VersionNumber|int|string $value
*/
private function ensureVersionNumber($value): VersionNumber
{
return $value instanceof VersionNumber ? $value : VersionNumber::fromValue($value);
}
private function buildTemplateFromResponse(ResponseInterface $response): Template
{
$etagHeader = $response->getHeader('ETag');
$etag = \array_shift($etagHeader) ?: '*';
$data = JSON::decode((string) $response->getBody(), true);
return Template::fromArray($data, $etag);
}
}