%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/circles/lib/Activity/ |
Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/circles/lib/Activity/Provider.php |
<?php declare(strict_types=1); /** * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace OCA\Circles\Activity; use OCA\Circles\AppInfo\Application; use OCA\Circles\Exceptions\FakeException; use OCA\Circles\Model\Circle; use OCA\Circles\Model\Member; use OCA\Circles\Tools\Exceptions\InvalidItemException; use OCA\Circles\Tools\Traits\TDeserialize; use OCP\Activity\Exceptions\UnknownActivityException; use OCP\Activity\IEvent; use OCP\Activity\IManager; use OCP\Activity\IProvider; use OCP\IURLGenerator; class Provider implements IProvider { use TDeserialize; public function __construct( private IManager $activityManager, private IURLGenerator $urlGenerator, private ProviderSubjectCircle $parserCircle, private ProviderSubjectMember $parserMember, private ProviderSubjectCircleMember $parserCircleMember ) { } /** * {@inheritdoc} */ public function parse($language, IEvent $event, ?IEvent $previousEvent = null): IEvent { try { $params = $event->getSubjectParameters(); $this->initActivityParser($event, $params); /** @var Circle $circle */ $circle = $this->deserializeJson($params['circle'], Circle::class); $this->setIcon($event); $this->parseAsNonMember($event, $circle); $this->parseAsMember($event, $circle, $params); $this->parseAsModerator($event, $circle, $params); } catch (FakeException|InvalidItemException $e) { /** clean exit */ } return $event; } /** * @param IEvent $event * @param array $params */ private function initActivityParser(IEvent $event, array $params): void { if ($event->getApp() !== Application::APP_ID) { throw new UnknownActivityException(); } if (!key_exists('circle', $params)) { throw new UnknownActivityException(); } } /** * @param IEvent $event */ private function setIcon(IEvent $event): void { $path = $this->urlGenerator->imagePath(Application::APP_ID, 'circles.svg'); $event->setIcon($this->urlGenerator->getAbsoluteURL($path)); } /** * @param IEvent $event * @param Circle $circle * @param array $params * * @throws FakeException */ private function parseAsNonMember( IEvent $event, Circle $circle ): void { if ($event->getType() !== 'circles_as_non_member') { return; } $this->parserCircle->parseSubjectCircleCreate($event, $circle); } /** * @param IEvent $event * @param Circle $circle * @param array $params * * @throws FakeException */ private function parseAsMember( IEvent $event, Circle $circle, array $params ): void { if ($event->getType() !== 'circles_as_member') { return; } $this->parserCircle->parseSubjectCircleCreate($event, $circle); $this->parserCircle->parseSubjectCircleDelete($event, $circle); $this->parseMemberAsMember($event, $circle, $params); $this->parseCircleMemberAsMember($event, $circle, $params); } /** * @param Circle $circle * @param IEvent $event * @param array $params * * @throws FakeException * @throws InvalidItemException */ private function parseAsModerator(IEvent $event, Circle $circle, array $params): void { if ($event->getType() !== 'circles_as_moderator') { return; } $this->parseMemberAsModerator($event, $circle, $params); } /** * @param IEvent $event * @param Circle $circle * @param array $params * * @throws FakeException * @throws InvalidItemException */ private function parseMemberAsMember( IEvent $event, Circle $circle, array $params ): void { if (!key_exists('member', $params)) { return; } /** @var Member $member */ $member = $this->deserializeJson($params['member'], Member::class); $this->parserMember->parseSubjectMemberJoin($event, $circle, $member); $this->parserMember->parseSubjectMemberAdd($event, $circle, $member); $this->parserMember->parseSubjectMemberLeft($event, $circle, $member); $this->parserMember->parseSubjectMemberRemove($event, $circle, $member); } /** * @param IEvent $event * @param Circle $circle * @param array $params * * @throws FakeException * @throws InvalidItemException */ private function parseCircleMemberAsMember( IEvent $event, Circle $circle, array $params ): void { if (!key_exists('member', $params)) { return; } /** @var Member $member */ $member = $this->deserializeJson($params['member'], Member::class); $this->parserCircleMember->parseSubjectCircleMemberJoin($event, $circle, $member); $this->parserCircleMember->parseSubjectCircleMemberAdd($event, $circle, $member); $this->parserCircleMember->parseSubjectCircleMemberLeft($event, $circle, $member); $this->parserCircleMember->parseSubjectCircleMemberRemove($event, $circle, $member); } /** * @param IEvent $event * @param Circle $circle * @param array $params * * @throws FakeException * @throws InvalidItemException */ private function parseMemberAsModerator( IEvent $event, Circle $circle, array $params ): void { if (!key_exists('member', $params)) { return; } /** @var Member $member */ $member = $this->deserializeJson($params['member'], Member::class); $this->parserMember->parseMemberInvited($event, $circle, $member); $this->parserMember->parseMemberLevel($event, $circle, $member, $params['level'] ?? 0); $this->parserMember->parseMemberRequestInvitation($event, $circle, $member); $this->parserMember->parseMemberOwner($event, $circle, $member); } }