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

147 lines
3.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Xentral\Modules\GoogleCalendar\Data;
use Xentral\Modules\GoogleCalendar\Exception\InvalidArgumentException;
final class GoogleCalendarListItem
{
/** @var string ROLE_READER */
public const ROLE_READER = 'reader';
/** @var string ROLE_OWNER */
public const ROLE_OWNER = 'owner';
/** @var string ROLE_FREEBUSYREADER */
public const ROLE_FREEBUSYREADER = 'freeBusyReader';
/** @var string $kind */
private static $kind = 'calendar#calendarListEntry';
/** @var string $id */
private $id;
/** @var string $summary */
private $summary;
/** @var string $role */
private $role;
/** @var string $timeZone */
private $timeZone;
/** @var string $colorId */
private $colorId;
/** @var bool $selected */
private $selected;
/** @var bool $primary */
private $primary;
/**
* @param string $id
* @param string $summary
* @param string $role
* @param string $timeZone
* @param string $colorId
* @param bool $selected
* @param bool $primary
*/
public function __construct($id, $summary, $role, $timeZone, $colorId, $selected = false, $primary = false)
{
$this->id = $id;
$this->summary = $summary;
if ($role !== self::ROLE_FREEBUSYREADER && $role !== self::ROLE_READER && $role !== self::ROLE_OWNER) {
throw new InvalidArgumentException('Invalid calendar Role.');
}
$this->role = $role;
$this->timeZone = $timeZone;
$this->colorId = $colorId;
$this->selected = $selected;
$this->primary = $primary;
}
/**
* @param $data
*
* @return GoogleCalendarListItem
*/
public static function fromArray($data)
{
if (!isset($data['kind']) || $data['kind'] !== self::$kind) {
throw new InvalidArgumentException('Invalid resource type. Expected: calendar#event');
}
if (!isset($data['id'])) {
throw new InvalidArgumentException('Missing required resorce field "id".');
}
$id = $data['id'];
$summary = $data['summary'];
$role = $data['accessRole'];
$timeZone = $data['timeZone'];
$colorId = $data['colorId'];
$selected = (isset($data['selected']) && $data['selected'] === true);
$primary = (isset($data['primary']) && $data['primary'] === true);
return new self($id, $summary, $role, $timeZone, $colorId, $selected, $primary);
}
/**
* @return string
*/
public function getId()
{
return $this->id;
}
/**
* @return string
*/
public function getSummary()
{
return $this->summary;
}
/**
* @return string
*/
public function getRole()
{
return $this->role;
}
/**
* @return string
*/
public function getTimeZone()
{
return $this->timeZone;
}
/**
* @return string
*/
public function getColorId()
{
return $this->colorId;
}
/**
* @return bool
*/
public function isSelected()
{
return $this->selected;
}
/**
* @return bool
*/
public function isPrimary()
{
return $this->primary;
}
}