-
Notifications
You must be signed in to change notification settings - Fork 58
Expand file tree
/
Copy pathCircleEdit.php
More file actions
145 lines (113 loc) · 3.5 KB
/
CircleEdit.php
File metadata and controls
145 lines (113 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Circles\FederatedItems;
use OCA\Circles\Db\CircleRequest;
use OCA\Circles\Db\MemberRequest;
use OCA\Circles\Exceptions\CircleNameTooShortException;
use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\IFederatedItem;
use OCA\Circles\Model\Federated\FederatedEvent;
use OCA\Circles\Model\Helpers\MemberHelper;
use OCA\Circles\Service\CircleService;
use OCA\Circles\Service\EventService;
use OCA\Circles\Tools\Traits\TDeserialize;
/**
* Class CircleEdit
*
* @package OCA\Circles\FederatedItems
*/
class CircleEdit implements IFederatedItem {
use TDeserialize;
/** @var CircleRequest */
private $circleRequest;
/** @var MemberRequest */
private $memberRequest;
/** @var CircleService */
private $circleService;
/** @var EventService */
private $eventService;
/**
* CircleEdit constructor.
*
* @param CircleRequest $circleRequest
* @param MemberRequest $memberRequest
* @param CircleService $circleService
* @param EventService $eventService
*/
public function __construct(
CircleRequest $circleRequest,
MemberRequest $memberRequest,
CircleService $circleService,
EventService $eventService,
) {
$this->circleRequest = $circleRequest;
$this->memberRequest = $memberRequest;
$this->circleService = $circleService;
$this->eventService = $eventService;
}
/**
* @param FederatedEvent $event
*
* @throws RequestBuilderException
* @throws CircleNameTooShortException
*/
public function verify(FederatedEvent $event): void {
$circle = $event->getCircle();
$initiatorHelper = new MemberHelper($circle->getInitiator());
$initiatorHelper->mustBeAdmin();
$data = $event->getParams();
$new = clone $circle;
if ($data->hasKey('name')) {
$new->setName($this->circleService->cleanCircleName($data->g('name')));
if (strlen($new->getName()) < 3) {
throw new CircleNameTooShortException('Circle name is too short');
}
$event->getData()->s('name', $new->getName());
}
if ($data->hasKey('displayName')) {
$new->setDisplayName($data->g('displayName'));
$event->getData()->s('displayName', $new->getDisplayName());
}
if ($data->hasKey('description')) {
$new->setDescription($data->g('description'));
$event->getData()->s('description', $new->getDescription());
}
$this->circleService->confirmName($new);
$event->setOutcome($this->serialize($new));
}
/**
* @param FederatedEvent $event
*
* @throws RequestBuilderException
*/
public function manage(FederatedEvent $event): void {
$circle = clone $event->getCircle();
$data = $event->getData();
// TODO: verify that event->GetCircle() is updated by the instance that owns the Circle so we can
// use it as a thrustable base
if ($data->hasKey('name')) {
$circle->setName($data->g('name'));
}
if ($data->hasKey('displayName')) {
$circle->setDisplayName($data->g('displayName'));
}
$this->circleService->confirmName($circle);
if ($data->hasKey('description')) {
$circle->setDescription($data->g('description'));
}
$this->circleRequest->edit($circle);
$this->memberRequest->updateDisplayName($circle->getSingleId(), $circle->getDisplayName());
$this->eventService->circleEditing($event);
}
/**
* @param FederatedEvent $event
* @param array $results
*/
public function result(FederatedEvent $event, array $results): void {
$this->eventService->circleEdited($event, $results);
}
}