%PDF- %PDF-
| Direktori : /home/graphicd/public_html/vebto/vendor/kreait/firebase-php/src/Firebase/Request/ |
| Current File : /home/graphicd/public_html/vebto/vendor/kreait/firebase-php/src/Firebase/Request/UpdateUser.php |
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Request;
use Kreait\Firebase\Exception\InvalidArgumentException;
use Kreait\Firebase\Request;
use Kreait\Firebase\Util\JSON;
use Kreait\Firebase\Value\Provider;
final class UpdateUser implements Request
{
use EditUserTrait;
public const DISPLAY_NAME = 'DISPLAY_NAME';
public const PHOTO_URL = 'PHOTO_URL';
public const EMAIL = 'EMAIL';
/** @var array<string> */
private $attributesToDelete = [];
/** @var Provider[] */
private $providersToDelete = [];
/** @var array<string, mixed>|null */
private $customAttributes;
private function __construct()
{
}
public static function new(): self
{
return new self();
}
/**
* @param array<string, mixed> $properties
*
* @throws InvalidArgumentException when invalid properties have been provided
*/
public static function withProperties(array $properties): self
{
$request = self::withEditableProperties(new self(), $properties);
foreach ($properties as $key => $value) {
switch (\mb_strtolower((string) \preg_replace('/[^a-z]/i', '', $key))) {
case 'deletephoto':
case 'deletephotourl':
case 'removephoto':
case 'removephotourl':
$request = $request->withRemovedPhotoUrl();
break;
case 'deletedisplayname':
case 'removedisplayname':
$request = $request->withRemovedDisplayName();
break;
case 'deleteemail':
case 'removeemail':
$request = $request->withRemovedEmail();
break;
case 'deleteattribute':
case 'deleteattributes':
foreach ((array) $value as $deleteAttribute) {
switch (\mb_strtolower(\preg_replace('/[^a-z]/i', '', $deleteAttribute))) {
case 'displayname':
$request = $request->withRemovedDisplayName();
break;
case 'photo':
case 'photourl':
$request = $request->withRemovedPhotoUrl();
break;
case 'email':
$request = $request->withRemovedEmail();
break;
}
}
break;
case 'customattributes':
case 'customclaims':
$request = $request->withCustomAttributes($value);
break;
case 'phonenumber':
case 'phone':
if (!$value) {
$request = $request->withRemovedPhoneNumber();
}
break;
case 'deletephone':
case 'deletephonenumber':
case 'removephone':
case 'removephonenumber':
$request = $request->withRemovedPhoneNumber();
break;
case 'deleteprovider':
case 'deleteproviders':
case 'removeprovider':
case 'removeproviders':
$request = \array_reduce((array) $value, static function (self $request, $provider) {
return $request->withRemovedProvider($provider);
}, $request);
break;
}
}
return $request;
}
public function withRemovedPhoneNumber(): self
{
$request = clone $this;
$request->phoneNumber = null;
return $request->withRemovedProvider('phone');
}
/**
* @param Provider|string $provider
*/
public function withRemovedProvider($provider): self
{
$provider = $provider instanceof Provider ? $provider : new Provider($provider);
$request = clone $this;
$request->providersToDelete[] = $provider;
return $request;
}
public function withRemovedDisplayName(): self
{
$request = clone $this;
$request->displayName = null;
$request->attributesToDelete[] = self::DISPLAY_NAME;
return $request;
}
public function withRemovedPhotoUrl(): self
{
$request = clone $this;
$request->photoUrl = null;
$request->attributesToDelete[] = self::PHOTO_URL;
return $request;
}
public function withRemovedEmail(): self
{
$request = clone $this;
$request->email = null;
$request->attributesToDelete[] = self::EMAIL;
return $request;
}
/**
* @param array<string, mixed> $customAttributes
*/
public function withCustomAttributes(array $customAttributes): self
{
$request = clone $this;
$request->customAttributes = $customAttributes;
return $request;
}
/**
* @return array<string, mixed>
*/
public function jsonSerialize(): array
{
if (!$this->hasUid()) {
throw new InvalidArgumentException('A uid is required to update an existing user.');
}
$data = $this->prepareJsonSerialize();
if (\is_array($this->customAttributes)) {
if (empty($this->customAttributes)) {
$data['customAttributes'] = '{}';
} else {
$data['customAttributes'] = JSON::encode($this->customAttributes);
}
}
if (!empty($this->attributesToDelete)) {
$data['deleteAttribute'] = \array_unique($this->attributesToDelete);
}
if (!empty($this->providersToDelete)) {
$data['deleteProvider'] = $this->providersToDelete;
}
return $data;
}
}