Skip to content

Commit 19c2b02

Browse files
Merge pull request #728 from nextcloud/fix/noid/mail-on-new-share
Sending mail on new shares
2 parents f5fe8d1 + 5779875 commit 19c2b02

14 files changed

+660
-117
lines changed

lib/AppInfo/Application.php

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
use OC;
3939
use OCA\Circles\Events\AddingCircleMemberEvent;
4040
use OCA\Circles\Events\CircleMemberAddedEvent;
41+
use OCA\Circles\Events\Files\CreatingFileShareEvent;
42+
use OCA\Circles\Events\Files\FileShareCreatedEvent;
4143
use OCA\Circles\Events\MembershipsCreatedEvent;
4244
use OCA\Circles\Events\MembershipsRemovedEvent;
4345
use OCA\Circles\Events\RemovingCircleMemberEvent;
@@ -48,9 +50,11 @@
4850
use OCA\Circles\Listeners\Examples\ExampleMembershipsCreated;
4951
use OCA\Circles\Listeners\Examples\ExampleMembershipsRemoved;
5052
use OCA\Circles\Listeners\Examples\ExampleRequestingCircleMember;
51-
use OCA\Circles\Listeners\Files\AddingMember as ListenerFilesAddingMember;
52-
use OCA\Circles\Listeners\Files\MemberAdded as ListenerFilesMemberAdded;
53+
use OCA\Circles\Listeners\Files\AddingMemberSendMail as ListenerFilesAddingMemberSendMail;
54+
use OCA\Circles\Listeners\Files\CreatingShareSendMail as ListenerFilesCreatingShareSendMail;
55+
use OCA\Circles\Listeners\Files\MemberAddedSendMail as ListenerFilesMemberAddedSendMail;
5356
use OCA\Circles\Listeners\Files\RemovingMember as ListenerFilesRemovingMember;
57+
use OCA\Circles\Listeners\Files\ShareCreatedSendMail as ListenerFilesShareCreatedSendMail;
5458
use OCA\Circles\Listeners\GroupCreated;
5559
use OCA\Circles\Listeners\GroupDeleted;
5660
use OCA\Circles\Listeners\GroupMemberAdded;
@@ -137,11 +141,26 @@ public function register(IRegistrationContext $context): void {
137141
$context->registerEventListener(UserRemovedEvent::class, GroupMemberRemoved::class);
138142

139143
// Local Events (for Files/Shares/Notifications management)
140-
$context->registerEventListener(AddingCircleMemberEvent::class, ListenerFilesAddingMember::class);
141-
$context->registerEventListener(CircleMemberAddedEvent::class, ListenerFilesMemberAdded::class);
144+
$context->registerEventListener(
145+
AddingCircleMemberEvent::class,
146+
ListenerFilesAddingMemberSendMail::class
147+
);
148+
$context->registerEventListener(
149+
CircleMemberAddedEvent::class,
150+
ListenerFilesMemberAddedSendMail::class
151+
);
152+
$context->registerEventListener(
153+
CreatingFileShareEvent::class,
154+
ListenerFilesCreatingShareSendMail::class
155+
);
156+
$context->registerEventListener(
157+
FileShareCreatedEvent::class,
158+
ListenerFilesShareCreatedSendMail::class
159+
);
142160
$context->registerEventListener(RemovingCircleMemberEvent::class, ListenerFilesRemovingMember::class);
143161
$context->registerEventListener(
144-
RequestingCircleMemberEvent::class, ListenerNotificationsRequestingMember::class
162+
RequestingCircleMemberEvent::class,
163+
ListenerNotificationsRequestingMember::class
145164
);
146165

147166
// It seems that AccountManager use deprecated dispatcher, let's use a deprecated listener
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
3+
4+
declare(strict_types=1);
5+
6+
7+
/**
8+
* Circles - Bring cloud-users closer together.
9+
*
10+
* This file is licensed under the Affero General Public License version 3 or
11+
* later. See the COPYING file.
12+
*
13+
* @author Maxence Lange <maxence@artificial-owl.com>
14+
* @copyright 2021
15+
* @license GNU AGPL version 3 or any later version
16+
*
17+
* This program is free software: you can redistribute it and/or modify
18+
* it under the terms of the GNU Affero General Public License as
19+
* published by the Free Software Foundation, either version 3 of the
20+
* License, or (at your option) any later version.
21+
*
22+
* This program is distributed in the hope that it will be useful,
23+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
24+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25+
* GNU Affero General Public License for more details.
26+
*
27+
* You should have received a copy of the GNU Affero General Public License
28+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
29+
*
30+
*/
31+
32+
33+
namespace OCA\Circles\Events\Files;
34+
35+
use OCA\Circles\Events\CircleGenericEvent;
36+
use OCA\Circles\Model\Federated\FederatedEvent;
37+
use OCA\Circles\Model\Mount;
38+
39+
/**
40+
* Class CreatingFileShareEvent
41+
*
42+
* @package OCA\Circles\Events\Files
43+
*/
44+
class CreatingFileShareEvent extends CircleGenericEvent {
45+
46+
47+
/** @var Mount */
48+
private $mount;
49+
50+
51+
/**
52+
* CreatingFileShareEvent constructor.
53+
*
54+
* @param FederatedEvent $federatedEvent
55+
*/
56+
public function __construct(FederatedEvent $federatedEvent) {
57+
parent::__construct($federatedEvent);
58+
}
59+
60+
61+
/**
62+
* @param Mount $mount
63+
*/
64+
public function setMount(Mount $mount): void {
65+
$this->mount = $mount;
66+
}
67+
68+
/**
69+
* @return Mount
70+
*/
71+
public function getMount(): Mount {
72+
return $this->mount;
73+
}
74+
75+
/**
76+
* @return bool
77+
*/
78+
public function hasMount(): bool {
79+
return !is_null($this->mount);
80+
}
81+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
6+
/**
7+
* Circles - Bring cloud-users closer together.
8+
*
9+
* This file is licensed under the Affero General Public License version 3 or
10+
* later. See the COPYING file.
11+
*
12+
* @author Maxence Lange <maxence@artificial-owl.com>
13+
* @copyright 2021
14+
* @license GNU AGPL version 3 or any later version
15+
*
16+
* This program is free software: you can redistribute it and/or modify
17+
* it under the terms of the GNU Affero General Public License as
18+
* published by the Free Software Foundation, either version 3 of the
19+
* License, or (at your option) any later version.
20+
*
21+
* This program is distributed in the hope that it will be useful,
22+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
23+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24+
* GNU Affero General Public License for more details.
25+
*
26+
* You should have received a copy of the GNU Affero General Public License
27+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
28+
*
29+
*/
30+
31+
32+
namespace OCA\Circles\Events\Files;
33+
34+
use ArtificialOwl\MySmallPhpTools\Model\SimpleDataStore;
35+
use OCA\Circles\Events\CircleResultGenericEvent;
36+
use OCA\Circles\Model\Federated\FederatedEvent;
37+
38+
/**
39+
* Class CreatingFileShareEvent
40+
*
41+
* @package OCA\Circles\Events\Files
42+
*/
43+
class FileShareCreatedEvent extends CircleResultGenericEvent {
44+
45+
46+
/**
47+
* FileShareCreatedEvent constructor.
48+
*
49+
* @param FederatedEvent $federatedEvent
50+
* @param SimpleDataStore[] $result
51+
*/
52+
public function __construct(FederatedEvent $federatedEvent, array $result) {
53+
parent::__construct($federatedEvent, $result);
54+
}
55+
}

lib/FederatedItems/Files/FileShare.php

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ class FileShare implements
7575
* FileShare constructor.
7676
*
7777
* @param MountRequest $mountRequest
78+
* @param EventService $eventService
7879
* @param ConfigService $configService
7980
*/
8081
public function __construct(
@@ -105,18 +106,23 @@ public function verify(FederatedEvent $event): void {
105106
* @throws CircleNotFoundException
106107
*/
107108
public function manage(FederatedEvent $event): void {
108-
if ($this->configService->isLocalInstance($event->getOrigin())) {
109-
return;
109+
$mount = null;
110+
if (!$this->configService->isLocalInstance($event->getOrigin())) {
111+
/** @var ShareWrapper $wrappedShare */
112+
$wrappedShare = $event->getParams()->gObj('wrappedShare', ShareWrapper::class);
113+
$mount = new Mount();
114+
$mount->fromShare($wrappedShare);
115+
$mount->setMountId($this->token(15));
116+
117+
$this->mountRequest->save($mount);
110118
}
111119

112-
/** @var ShareWrapper $wrappedShare */
113-
$wrappedShare = $event->getParams()->gObj('wrappedShare', ShareWrapper::class);
114-
$mount = new Mount();
115-
$mount->fromShare($wrappedShare);
116-
$mount->setMountId($this->token(15));
120+
$this->eventService->fileShareCreating($event, $mount);
117121

118-
$this->mountRequest->save($mount);
119-
$this->eventService->federatedShareCreated($wrappedShare, $mount);
122+
// $this->eventService->federatedShareCreated($wrappedShare, $mount);
123+
124+
125+
// $this->eventService->fileSharing($event);
120126

121127
// $this->mountRequest->create($mount);
122128
// $circle = $event->getDeprecatedCircle();
@@ -172,6 +178,8 @@ public function manage(FederatedEvent $event): void {
172178
* @param array $results
173179
*/
174180
public function result(FederatedEvent $event, array $results): void {
181+
$this->eventService->fileShareCreated($event, $results);
182+
175183
// $event = null;
176184
// $contacts = [];
177185
// foreach (array_keys($events) as $instance) {

lib/Listeners/Files/AddingMember.php renamed to lib/Listeners/Files/AddingMemberSendMail.php

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
use OCA\Circles\AppInfo\Application;
3838
use OCA\Circles\Events\AddingCircleMemberEvent;
3939
use OCA\Circles\Exceptions\RequestBuilderException;
40-
use OCA\Circles\Exceptions\ShareTokenAlreadyExistException;
4140
use OCA\Circles\Model\Member;
4241
use OCA\Circles\Service\ConfigService;
4342
use OCA\Circles\Service\ContactService;
@@ -51,7 +50,7 @@
5150
*
5251
* @package OCA\Circles\Listeners\Files
5352
*/
54-
class AddingMember implements IEventListener {
53+
class AddingMemberSendMail implements IEventListener {
5554
use TStringTools;
5655
use TNC22Logger;
5756

@@ -126,7 +125,7 @@ public function handle(Event $event): void {
126125
foreach ($shares as $share) {
127126
try {
128127
$shareToken = $this->shareTokenService->generateShareToken($share, $member);
129-
} catch (ShareTokenAlreadyExistException $e) {
128+
} catch (Exception $e) {
130129
continue;
131130
}
132131

@@ -136,29 +135,10 @@ public function handle(Event $event): void {
136135

137136
$result[$member->getId()] = [
138137
'shares' => $files,
139-
'mails' => $this->getMailAddressesFromContact($member)
138+
'mails' => $this->contactService->getMailAddressesFromMember($member)
140139
];
141140
}
142141

143142
$event->getFederatedEvent()->setResultEntry('files', $result);
144143
}
145-
146-
147-
/**
148-
* @param Member $member
149-
*
150-
* @return array
151-
*/
152-
private function getMailAddressesFromContact(Member $member): array {
153-
if ($member->getUserType() !== Member::TYPE_CONTACT
154-
|| !$this->configService->isLocalInstance($member->getInstance())) {
155-
return [];
156-
}
157-
158-
try {
159-
return $this->contactService->getMailAddresses($member->getUserId());
160-
} catch (Exception $e) {
161-
return [];
162-
}
163-
}
164144
}

0 commit comments

Comments
 (0)