%PDF- %PDF-
| Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/circles/lib/Model/Federated/ |
| Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/circles/lib/Model/Federated/FederatedEvent.php |
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Circles\Model\Federated;
use JsonSerializable;
use OCA\Circles\Model\Circle;
use OCA\Circles\Model\Member;
use OCA\Circles\Tools\Exceptions\InvalidItemException;
use OCA\Circles\Tools\Model\SimpleDataStore;
use OCA\Circles\Tools\Traits\TArrayTools;
/**
* Class FederatedEvent
*
* @package OCA\Circles\Model\Federated
*/
class FederatedEvent implements JsonSerializable {
public const SEVERITY_LOW = 1;
public const SEVERITY_HIGH = 3;
public const BYPASS_CIRCLE = 1;
public const BYPASS_LOCALCIRCLECHECK = 2;
public const BYPASS_LOCALMEMBERCHECK = 4;
public const BYPASS_INITIATORCHECK = 8;
public const BYPASS_INITIATORMEMBERSHIP = 16;
use TArrayTools;
/** @var string */
private $class;
/** @var string */
private $origin = '';
/** @var Circle */
private $circle;
/** @var string */
private $itemId = '';
/** @var string */
private $itemSource = '';
/** @var Member */
private $member;
/** @var Member[] */
private $members = [];
/** @var SimpleDataStore */
private $params;
/** @var SimpleDataStore */
private $internal;
/** @var SimpleDataStore */
private $data;
/** @var int */
private $severity = self::SEVERITY_LOW;
/** @var array */
private $outcome = [];
/** @var SimpleDataStore */
private $result;
/** @var bool */
private $async = false;
/** @var bool */
private $limitedToInstanceWithMember = false;
/** @var bool */
private $dataRequestOnly = false;
/** @var string */
private $sender = '';
/** @var string */
private $wrapperToken = '';
/** @var int */
private $bypass = 0;
private bool $forceSync = false;
/**
* FederatedEvent constructor.
*
* @param string $class
*/
public function __construct(string $class = '') {
$this->class = $class;
$this->params = new SimpleDataStore();
$this->internal = new SimpleDataStore();
$this->data = new SimpleDataStore();
$this->result = new SimpleDataStore();
}
/**
* @return string
*/
public function getClass(): string {
return $this->class;
}
/**
* @param mixed $class
*
* @return self
*/
public function setClass($class): self {
$this->class = $class;
return $this;
}
/**
* Origin of the event.
*
* @return string
*/
public function getOrigin(): string {
return $this->origin;
}
/**
* @param string $origin
*
* @return self
*/
public function setOrigin(string $origin): self {
$this->origin = $origin;
return $this;
}
/**
* @return bool
*/
public function isAsync(): bool {
return $this->async;
}
/**
* @param bool $async
*
* @return self
*/
public function setAsync(bool $async): self {
$this->async = $async;
return $this;
}
/**
* @return bool
*/
public function isLimitedToInstanceWithMember(): bool {
return $this->limitedToInstanceWithMember;
}
/**
* @param bool $limitedToInstanceWithMember
*
* @return self
*/
public function setLimitedToInstanceWithMember(bool $limitedToInstanceWithMember): self {
$this->limitedToInstanceWithMember = $limitedToInstanceWithMember;
return $this;
}
/**
* @return bool
*/
public function isDataRequestOnly(): bool {
return $this->dataRequestOnly;
}
/**
* @param bool $dataRequestOnly
*
* @return self
*/
public function setDataRequestOnly(bool $dataRequestOnly): self {
$this->dataRequestOnly = $dataRequestOnly;
return $this;
}
/**
*
* Origin of the request
*
* @param string $sender
*
* @return self
*/
public function setSender(string $sender): self {
$this->sender = $sender;
return $this;
}
/**
* @return string
*/
public function getSender(): string {
return $this->sender;
}
/**
* @param string $wrapperToken
*
* @return FederatedEvent
*/
public function setWrapperToken(string $wrapperToken): self {
$this->wrapperToken = $wrapperToken;
return $this;
}
/**
* @return string
*/
public function getWrapperToken(): string {
return $this->wrapperToken;
}
/**
* @return bool
*/
public function hasCircle(): bool {
return ($this->circle !== null);
}
/**
* @param Circle $circle
*
* @return self
*/
public function setCircle(Circle $circle): self {
$this->circle = $circle;
return $this;
}
/**
* @return Circle
*/
public function getCircle(): Circle {
return $this->circle;
}
/**
* @param string $itemId
*
* @return self
*/
public function setItemId(string $itemId): self {
$this->itemId = $itemId;
return $this;
}
/**
* @return string
*/
public function getItemId(): string {
return $this->itemId;
}
/**
* @param string $itemSource
*
* @return self
*/
public function setItemSource(string $itemSource): self {
$this->itemSource = $itemSource;
return $this;
}
/**
* @return string
*/
public function getItemSource(): string {
return $this->itemSource;
}
/**
* @return Member
*/
public function getMember(): Member {
return $this->member;
}
/**
* @param Member|null $member
*
* @return self
*/
public function setMember(?Member $member): self {
$this->member = $member;
return $this;
}
/**
* @return bool
*/
public function hasMember(): bool {
return ($this->member !== null);
}
/**
* @return Member[]
*/
public function getMembers(): array {
return $this->members;
}
/**
* @param Member[] $members
*
* @return self
*/
public function setMembers(array $members): self {
$this->members = $members;
return $this;
}
/**
* @param SimpleDataStore $params
*
* @return self
*/
public function setParams(SimpleDataStore $params): self {
$this->params = $params;
return $this;
}
/**
* @return SimpleDataStore
*/
public function getParams(): SimpleDataStore {
return $this->params;
}
/**
* @param SimpleDataStore $internal
*
* @return self
*/
public function setInternal(SimpleDataStore $internal): self {
$this->internal = $internal;
return $this;
}
/**
* @return SimpleDataStore
*/
public function getInternal(): SimpleDataStore {
return $this->internal;
}
/**
* @return $this
*/
public function resetInternal(): self {
$this->internal = new SimpleDataStore();
return $this;
}
/**
* @param SimpleDataStore $data
*
* @return self
*/
public function setData(SimpleDataStore $data): self {
$this->data = $data;
return $this;
}
/**
* @return SimpleDataStore
*/
public function getData(): SimpleDataStore {
return $this->data;
}
/**
* @return $this
*/
public function resetData(): self {
$this->resetInternal();
$this->data = new SimpleDataStore();
return $this;
}
/**
* @return int
*/
public function getSeverity(): int {
return $this->severity;
}
/**
* @param int $severity
*
* @return self
*/
public function setSeverity(int $severity): self {
$this->severity = $severity;
return $this;
}
/**
* @return array
*/
public function getOutcome(): array {
return $this->outcome;
}
/**
* @param array $data
*
* @return $this
*/
public function setOutcome(array $data): self {
$this->outcome = $data;
return $this;
}
/**
* @return SimpleDataStore
*/
public function getResult(): SimpleDataStore {
return $this->result;
}
/**
* @param SimpleDataStore $result
*
* @return self
*/
public function setResult(SimpleDataStore $result): self {
$this->result = $result;
return $this;
}
/**
* @return $this
*/
public function resetResult(): self {
$this->result = new SimpleDataStore();
return $this;
}
/**
* @param string $key
* @param array $result
*
* @return $this
*/
public function setResultEntry(string $key, array $result): self {
if (is_null($this->result)) {
$this->result = new SimpleDataStore();
}
$this->result->sData($key, new SimpleDataStore($result));
return $this;
}
/**
* @param string $key
* @param array $result
*
* @return $this
*/
public function addResultEntry(string $key, array $result): self {
if (is_null($this->result)) {
$this->result = new SimpleDataStore();
}
$this->result->aData($key, new SimpleDataStore($result));
return $this;
}
/**
* @param int $flag
*
* @return FederatedEvent
*/
public function bypass(int $flag): self {
if (!$this->canBypass($flag)) {
$this->bypass += $flag;
}
return $this;
}
/**
* @param int $flag
*
* @return bool
*/
public function canBypass(int $flag): bool {
return (($this->bypass & $flag) !== 0);
}
public function forceSync(bool $forceSync): self {
$this->forceSync = $forceSync;
return $this;
}
public function isForceSync(): bool {
return $this->forceSync;
}
/**
* @param array $data
*
* @return self
* @throws InvalidItemException
*/
public function import(array $data): self {
$this->setClass($this->get('class', $data));
$this->setSeverity($this->getInt('severity', $data));
$this->setParams(new SimpleDataStore($this->getArray('params', $data)));
$this->setInternal(new SimpleDataStore($this->getArray('internal', $data)));
$this->setData(new SimpleDataStore($this->getArray('data', $data)));
$this->setResult(new SimpleDataStore($this->getArray('result', $data)));
$this->setOrigin($this->get('origin', $data));
$this->setItemId($this->get('itemId', $data));
try {
$circle = new Circle();
$circle->import($this->getArray('circle', $data));
$this->setCircle($circle);
} catch (InvalidItemException $e) {
}
if (array_key_exists('member', $data)) {
$member = new Member();
$member->import($this->getArray('member', $data));
$this->setMember($member);
}
$members = [];
foreach ($this->getArray('members', $data) as $item) {
$member = new Member();
$members[] = $member->import($item);
}
$this->setMembers($members);
return $this;
}
/**
* @return array
*/
public function jsonSerialize(): array {
$arr = [
'class' => $this->getClass(),
'severity' => $this->getSeverity(),
'params' => $this->getParams(),
'internal' => $this->getInternal(),
'data' => $this->getData(),
'result' => $this->getResult(),
'origin' => $this->getOrigin(),
'sender' => $this->getSender(),
'itemId' => $this->getItemId(),
'outcome' => $this->getOutcome(),
'members' => $this->getMembers()
];
if ($this->hasCircle()) {
$arr['circle'] = $this->getCircle();
}
if ($this->hasMember()) {
$arr['member'] = $this->getMember();
}
return $arr;
}
}