OpenXE/classes/Modules/GoogleCalendar/Data/GoogleCalendarEventAttendeeValue.php
2021-05-21 08:49:41 +02:00

175 lines
4.1 KiB
PHP

<?php
declare(strict_types=1);
namespace Xentral\Modules\GoogleCalendar\Data;
use Xentral\Modules\GoogleCalendar\Exception\InvalidArgumentException;
final class GoogleCalendarEventAttendeeValue
{
/** @var string STATUS_ACCEPTED */
public const STATUS_ACCEPTED = 'accepted';
/** @var string STATUS_TENTATIVE */
public const STATUS_TENTATIVE = 'tentative';
/** @var string STATUS_NEEDSACTION */
public const STATUS_NEEDSACTION = 'needsAction';
/** @var string STATUS_DECLINED */
public const STATUS_DECLINED = 'declined';
/** @var string $email */
private $email;
/** @var bool $self */
private $self;
/** @var string $displayName */
private $displayName;
/** @var string $identifier */
private $identifier;
/** @var string $responseStatus */
private $responseStatus;
/** @var bool $optional */
private $optional;
/**
* @param string $email
* @param string $displayName
* @param bool $optional
* @param string $identifier
* @param string $responseStatus
* @param bool $self
*/
public function __construct(
string $email,
string $displayName = '',
bool $optional = false,
string $identifier = '',
string $responseStatus = '',
bool $self = false
) {
if ($email === '' || $email === null) {
throw new InvalidArgumentException('Email address is required.');
}
$this->email = $email;
$this->self = $self;
$this->identifier = $identifier;
$this->displayName = $displayName;
$this->responseStatus = $responseStatus;
$this->optional = $optional;
}
/**
* @param array $data
*
* @return GoogleCalendarEventAttendeeValue
*/
public static function createFromJsonArray(array $data): GoogleCalendarEventAttendeeValue
{
if (!isset($data['email'])) {
throw new InvalidArgumentException('Invalid data format.');
}
$email = $data['email'];
$self = false;
if (isset($data['self'])) {
$self = (bool)$data['self'];
}
$displayName = '';
if (isset($data['displayName'])) {
$displayName = $data['displayName'];
}
$id = '';
if (isset($data['id'])) {
$id = $data['id'];
}
$responseStatus = '';
if (isset($data['responseStatus'])) {
$responseStatus = $data['responseStatus'];
}
return new self($email, $displayName, false, $id, $responseStatus, $self);
}
/**
* @return array
*/
public function toDataArray(): array
{
$data = [];
$data['email'] = $this->getEmail();
$data['displayName'] = $this->getDisplayName();
$data['optional'] = $this->isOptional();
if ($this->getIdentifier() !== '') {
$data['id'] = $this->getIdentifier();
}
if ($this->responseStatus !== '') {
$data['responseStatus'] = $this->responseStatus;
}
return $data;
}
/**
* @return string
*/
public function getEmail(): string
{
return $this->email;
}
/**
* @return bool
*/
public function isSelf(): bool
{
return $this->self;
}
/**
* @return string
*/
public function getDisplayName(): string
{
$display = $this->displayName;
if ($display === '' || $display === null) {
$display = $this->email;
}
return $display;
}
/**
* @return string
*/
public function getIdentifier(): string
{
return $this->identifier;
}
/**
* @return bool
*/
public function isAttending(): bool
{
return (
$this->responseStatus === self::STATUS_ACCEPTED
|| $this->responseStatus === self::STATUS_TENTATIVE
|| $this->responseStatus === self::STATUS_NEEDSACTION
);
}
/**
* @return bool
*/
public function isOptional(): bool
{
return $this->optional;
}
}