IEntity and getLink()

Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
This commit is contained in:
Maxence Lange 2021-08-05 12:20:27 -01:00
parent e65dfc8145
commit d68ca65322
8 changed files with 112 additions and 54 deletions

View file

@ -344,9 +344,10 @@ class CirclesReport extends Base implements IInteractiveShellClient {
$federatedUser->setBasedOn($this->obfuscateCircle($federatedUser->getBasedOn()));
}
if ($federatedUser->hasLink()) {
$federatedUser->setLink($this->obfuscateMembership($federatedUser->getLink()));
}
// what was that for ?
// if ($federatedUser->hasLink()) {
// $federatedUser->setLink($this->obfuscateMembership($federatedUser->getLink()));
// }
if ($federatedUser->hasMemberships()) {
$memberships = [];

View file

@ -31,6 +31,7 @@ declare(strict_types=1);
namespace OCA\Circles;
use OCA\Circles\Exceptions\MembershipNotFoundException;
use OCA\Circles\Model\Membership;
/**
@ -38,7 +39,7 @@ use OCA\Circles\Model\Membership;
*
* @package OCA\Circles
*/
interface IMemberships {
interface IEntity {
/**
* @return string
@ -56,4 +57,13 @@ interface IMemberships {
* @return Membership[]
*/
public function getMemberships(): array;
/**
* @param string $singleId
* @param bool $detailed
*
* @return Membership
* @throws MembershipNotFoundException
*/
public function getLink(string $singleId, bool $detailed = false): Membership;
}

View file

@ -39,13 +39,25 @@ use OCA\Circles\Model\Circle;
* @package OCA\Circles
*/
interface IFederatedUser extends IFederatedModel {
public function getSingleId(): string;
/**
* @return string
*/
public function getUserId(): string;
/**
* @return int
*/
public function getUserType(): int;
/**
* @return string
*/
public function getDisplayName(): string;
/**
* @return Circle|null
*/
public function getBasedOn(): ?Circle;
}

View file

@ -113,7 +113,7 @@ class RemovingMember implements IEventListener {
foreach ($singleIds as $singleId) {
try {
$member->getMembership($singleId);
$member->getLink($singleId);
continue;
} catch (MembershipNotFoundException $e) {
}

View file

@ -40,13 +40,14 @@ use DateTime;
use JsonSerializable;
use OCA\Circles\Exceptions\CircleNotFoundException;
use OCA\Circles\Exceptions\FederatedItemException;
use OCA\Circles\Exceptions\MembershipNotFoundException;
use OCA\Circles\Exceptions\OwnerNotFoundException;
use OCA\Circles\Exceptions\RemoteInstanceException;
use OCA\Circles\Exceptions\RemoteNotFoundException;
use OCA\Circles\Exceptions\RemoteResourceNotFoundException;
use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\Exceptions\UnknownRemoteException;
use OCA\Circles\IMemberships;
use OCA\Circles\IEntity;
/**
* Class Circle
@ -76,7 +77,7 @@ use OCA\Circles\IMemberships;
*
* @package OCA\Circles\Model
*/
class Circle extends ManagedModel implements IMemberships, IDeserializable, INC22QueryRow, JsonSerializable {
class Circle extends ManagedModel implements IEntity, IDeserializable, INC22QueryRow, JsonSerializable {
use TArrayTools;
use TNC22Deserialize;
@ -430,7 +431,7 @@ class Circle extends ManagedModel implements IMemberships, IDeserializable, INC2
*
* @return self
*/
public function setMembers(array $members): IMemberships {
public function setMembers(array $members): self {
$this->members = $members;
return $this;
@ -454,7 +455,7 @@ class Circle extends ManagedModel implements IMemberships, IDeserializable, INC2
*
* @return self
*/
public function setInheritedMembers(array $members, bool $detailed): IMemberships {
public function setInheritedMembers(array $members, bool $detailed): self {
$this->inheritedMembers = $members;
$this->detailedInheritedMember = $detailed;
@ -464,9 +465,9 @@ class Circle extends ManagedModel implements IMemberships, IDeserializable, INC2
/**
* @param array $members
*
* @return IMemberships
* @return Circle
*/
public function addInheritedMembers(array $members): IMemberships {
public function addInheritedMembers(array $members): self {
$knownIds = array_map(
function (Member $member): string {
return $member->getId();
@ -527,7 +528,7 @@ class Circle extends ManagedModel implements IMemberships, IDeserializable, INC2
*
* @return self
*/
public function setMemberships(array $memberships): IMemberships {
public function setMemberships(array $memberships): IEntity {
$this->memberships = $memberships;
return $this;
@ -545,6 +546,21 @@ class Circle extends ManagedModel implements IMemberships, IDeserializable, INC2
}
/**
* @param string $singleId
* @param bool $detailed
*
* @return Membership
* @throws MembershipNotFoundException
* @throws RequestBuilderException
*/
public function getLink(string $singleId, bool $detailed = false): Membership {
$this->getManager()->getLink($this, $singleId, $detailed);
throw new MembershipNotFoundException();
}
/**
* @param Member|null $initiator
*

View file

@ -38,10 +38,12 @@ use ArtificialOwl\MySmallPhpTools\Traits\Nextcloud\nc22\TNC22Deserialize;
use ArtificialOwl\MySmallPhpTools\Traits\TArrayTools;
use JsonSerializable;
use OCA\Circles\Exceptions\FederatedUserNotFoundException;
use OCA\Circles\Exceptions\MembershipNotFoundException;
use OCA\Circles\Exceptions\OwnerNotFoundException;
use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\Exceptions\UnknownInterfaceException;
use OCA\Circles\IFederatedUser;
use OCA\Circles\IMemberships;
use OCA\Circles\IEntity;
/**
* Class FederatedUser
@ -50,7 +52,7 @@ use OCA\Circles\IMemberships;
*/
class FederatedUser extends ManagedModel implements
IFederatedUser,
IMemberships,
IEntity,
IDeserializable,
INC22QueryRow,
JsonSerializable {
@ -79,9 +81,6 @@ class FederatedUser extends ManagedModel implements
/** @var string */
private $instance;
/** @var Membership */
private $link;
/** @var Membership[] */
private $memberships = null;
@ -283,7 +282,7 @@ class FederatedUser extends ManagedModel implements
*
* @return self
*/
public function setMemberships(array $memberships): IMemberships {
public function setMemberships(array $memberships): IEntity {
$this->memberships = $memberships;
return $this;
@ -301,29 +300,19 @@ class FederatedUser extends ManagedModel implements
}
/**
* @return bool
*/
public function hasLink(): bool {
return !is_null($this->link);
}
/**
* @param Membership $link
* @param string $singleId
* @param bool $detailed
*
* @return $this
*/
public function setLink(Membership $link): self {
$this->link = $link;
return $this;
}
/**
* @return Membership
* @throws MembershipNotFoundException
* @throws RequestBuilderException
*/
public function getLink(): Membership {
return $this->link;
public function getLink(string $singleId, bool $detailed = false): Membership {
$this->getManager()->getLink($this, $singleId, $detailed);
throw new MembershipNotFoundException();
}
@ -429,10 +418,6 @@ class FederatedUser extends ManagedModel implements
$arr['basedOn'] = $this->getBasedOn();
}
if ($this->hasLink()) {
$arr['link'] = $this->getLink();
}
if (!is_null($this->memberships)) {
$arr['memberships'] = $this->getMemberships();
}

View file

@ -42,10 +42,11 @@ use OCA\Circles\AppInfo\Capabilities;
use OCA\Circles\Exceptions\MemberNotFoundException;
use OCA\Circles\Exceptions\MembershipNotFoundException;
use OCA\Circles\Exceptions\ParseMemberLevelException;
use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\Exceptions\UnknownInterfaceException;
use OCA\Circles\Exceptions\UserTypeNotFoundException;
use OCA\Circles\IFederatedUser;
use OCA\Circles\IMemberships;
use OCA\Circles\IEntity;
use OCA\Circles\Model\Federated\RemoteInstance;
/**
@ -54,7 +55,7 @@ use OCA\Circles\Model\Federated\RemoteInstance;
* @package OCA\Circles\Model
*/
class Member extends ManagedModel implements
IMemberships,
IEntity,
IFederatedUser,
IDeserializable,
INC22QueryRow,
@ -707,7 +708,7 @@ class Member extends ManagedModel implements
*
* @return self
*/
public function setMemberships(array $memberships): IMemberships {
public function setMemberships(array $memberships): IEntity {
$this->memberships = $memberships;
return $this;
@ -724,22 +725,34 @@ class Member extends ManagedModel implements
return $this->memberships;
}
/**
* @param string $circleId
* @param string $singleId
* @param bool $detailed
*
* @return Membership
* @throws MembershipNotFoundException
* @throws RequestBuilderException
*/
public function getMembership(string $circleId): Membership {
foreach ($this->getMemberships() as $membership) {
if ($membership->getCircleId() === $circleId) {
return $membership;
}
}
public function getLink(string $singleId, bool $detailed = false): Membership {
$this->getManager()->getLink($this, $singleId, $detailed);
throw new MembershipNotFoundException();
}
/**
* @param string $circleId
* @param bool $detailed
*
* @return Membership
* @throws MembershipNotFoundException
* @throws RequestBuilderException
* @deprecated - use getLink();
*/
public function getMembership(string $circleId, bool $detailed = false): Membership {
return $this->getLink($circleId, $detailed);
}
/**
* @param Member $member

View file

@ -50,10 +50,11 @@ use OCA\Circles\Exceptions\RemoteResourceNotFoundException;
use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\Exceptions\UnknownInterfaceException;
use OCA\Circles\Exceptions\UnknownRemoteException;
use OCA\Circles\IMemberships;
use OCA\Circles\IEntity;
use OCA\Circles\Model\Federated\RemoteInstance;
use OCA\Circles\Service\ConfigService;
use OCA\Circles\Service\InterfaceService;
use OCA\Circles\Service\MembershipService;
use OCA\Circles\Service\RemoteService;
use OCP\IURLGenerator;
@ -84,6 +85,9 @@ class ModelManager {
/** @var InterfaceService */
private $interfaceService;
/** @var MembershipService */
private $membershipService;
/** @var RemoteService */
private $remoteService;
@ -104,6 +108,7 @@ class ModelManager {
* @param MemberRequest $memberRequest
* @param MembershipRequest $membershipRequest
* @param InterfaceService $interfaceService
* @param MembershipService $membershipService
* @param RemoteService $remoteService
* @param ConfigService $configService
*/
@ -114,6 +119,7 @@ class ModelManager {
MemberRequest $memberRequest,
MembershipRequest $membershipRequest,
InterfaceService $interfaceService,
MembershipService $membershipService,
RemoteService $remoteService,
ConfigService $configService
) {
@ -123,6 +129,7 @@ class ModelManager {
$this->memberRequest = $memberRequest;
$this->membershipRequest = $membershipRequest;
$this->interfaceService = $interfaceService;
$this->membershipService = $membershipService;
$this->remoteService = $remoteService;
$this->configService = $configService;
@ -197,14 +204,28 @@ class ModelManager {
/**
* @param IMemberships $member
* @param IEntity $member
*/
public function getMemberships(IMemberships $member): void {
public function getMemberships(IEntity $member): void {
$memberships = $this->membershipRequest->getMemberships($member->getSingleId());
$member->setMemberships($memberships);
}
/**
* @param IEntity $member
* @param string $circleId
* @param bool $detailed
*
* @return Membership
* @throws MembershipNotFoundException
* @throws RequestBuilderException
*/
public function getLink(IEntity $member, string $circleId, bool $detailed = false): Membership {
return $this->membershipService->getMembership($circleId, $member->getSingleId(), $detailed);
}
/**
* @param ManagedModel $model
* @param array $data