Skip to content

Commit d9c33af

Browse files
committed
feat: Store user which has downloaded file in activity feed
Signed-off-by: Konstantin Myakshin <molodchick@gmail.com>
1 parent 8b3055c commit d9c33af

File tree

3 files changed

+36
-18
lines changed

3 files changed

+36
-18
lines changed

apps/files_sharing/lib/Activity/Providers/Downloads.php

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,14 @@ public function parseLongVersion(IEvent $event, ?IEvent $previousEvent = null) {
5555

5656
if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED ||
5757
$event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) {
58-
if (!isset($parsedParameters['remote-address-hash']['type'])) {
59-
$subject = $this->l->t('{file} downloaded via public link');
60-
$this->setSubjects($event, $subject, $parsedParameters);
58+
if (isset($parsedParameters['actor'])) {
59+
$subject = $this->l->t('{file} downloaded via public link by {actor}');
6160
} else {
6261
$subject = $this->l->t('{file} downloaded via public link');
63-
$this->setSubjects($event, $subject, $parsedParameters);
62+
}
63+
64+
$this->setSubjects($event, $subject, $parsedParameters);
65+
if (isset($parsedParameters['remote-address-hash']['type'])) {
6466
$event = $this->eventMerger->mergeEvents('file', $event, $previousEvent);
6567
}
6668
} elseif ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED ||
@@ -92,20 +94,25 @@ protected function getParsedParameters(IEvent $event) {
9294
switch ($subject) {
9395
case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
9496
case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
97+
$parsedParameters = [
98+
'file' => $this->getFile($parameters[0], $event),
99+
];
100+
95101
if (isset($parameters[1])) {
96-
return [
97-
'file' => $this->getFile($parameters[0], $event),
98-
'remote-address-hash' => [
99-
'type' => 'highlight',
100-
'id' => $parameters[1],
101-
'name' => $parameters[1],
102-
'link' => '',
103-
],
102+
$parsedParameters['remote-address-hash'] = [
103+
'type' => 'highlight',
104+
'id' => $parameters[1],
105+
'name' => $parameters[1],
106+
'link' => '',
104107
];
105108
}
106-
return [
107-
'file' => $this->getFile($parameters[0], $event),
108-
];
109+
110+
if (isset($parameters[2])) {
111+
$parsedParameters['actor'] = $this->getUser($parameters[2]);
112+
}
113+
114+
return $parsedParameters;
115+
109116
case self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED:
110117
case self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED:
111118
return [

apps/files_sharing/lib/Controller/ShareController.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,23 @@
3030
use OCP\IRequest;
3131
use OCP\ISession;
3232
use OCP\IURLGenerator;
33+
use OCP\IUser;
3334
use OCP\IUserManager;
35+
use OCP\IUserSession;
3436
use OCP\Security\ISecureRandom;
3537
use OCP\Share;
3638
use OCP\Share\Exceptions\ShareNotFound;
3739
use OCP\Share\IManager as ShareManager;
3840
use OCP\Share\IPublicShareTemplateFactory;
3941
use OCP\Share\IShare;
40-
use OCP\Template;
4142

4243
/**
4344
* @package OCA\Files_Sharing\Controllers
4445
*/
4546
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
4647
class ShareController extends AuthPublicShareController {
4748
protected ?Share\IShare $share = null;
49+
private ?IUser $currentUser = null;
4850

4951
public const SHARE_ACCESS = 'access';
5052
public const SHARE_AUTH = 'auth';
@@ -68,8 +70,11 @@ public function __construct(
6870
protected ISecureRandom $secureRandom,
6971
protected Defaults $defaults,
7072
private IPublicShareTemplateFactory $publicShareTemplateFactory,
73+
IUserSession $userSession,
7174
) {
7275
parent::__construct($appName, $request, $session, $urlGenerator);
76+
77+
$this->currentUser = $userSession->getUser();
7378
}
7479

7580
/**
@@ -511,11 +516,11 @@ protected function singleFileDownloaded(Share\IShare $share, \OCP\Files\Node $no
511516
} else {
512517
if ($node instanceof \OCP\Files\File) {
513518
$subject = Downloads::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED;
514-
$parameters[] = $remoteAddressHash;
515519
} else {
516520
$subject = Downloads::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED;
517-
$parameters[] = $remoteAddressHash;
518521
}
522+
$parameters[] = $remoteAddressHash;
523+
$parameters[] = $this->currentUser?->getUID();
519524
}
520525

521526
$this->publishActivity($subject, $parameters, $share->getSharedBy(), $fileId, $userPath);

apps/files_sharing/tests/Controller/ShareControllerTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
use OCP\IURLGenerator;
3838
use OCP\IUser;
3939
use OCP\IUserManager;
40+
use OCP\IUserSession;
4041
use OCP\Security\ISecureRandom;
4142
use OCP\Share\Exceptions\ShareNotFound;
4243
use OCP\Share\IPublicShareTemplateFactory;
@@ -84,6 +85,8 @@ class ShareControllerTest extends \Test\TestCase {
8485
private $defaults;
8586
/** @var IPublicShareTemplateFactory|MockObject */
8687
private $publicShareTemplateFactory;
88+
/** @var IUserSession|MockObject */
89+
private $userSession;
8790

8891
protected function setUp(): void {
8992
parent::setUp();
@@ -124,6 +127,8 @@ protected function setUp(): void {
124127
)
125128
);
126129

130+
$this->userSession = $this->createMock(IUserSession::class);
131+
127132
$this->shareController = new \OCA\Files_Sharing\Controller\ShareController(
128133
$this->appName,
129134
$this->createMock(IRequest::class),
@@ -142,6 +147,7 @@ protected function setUp(): void {
142147
$this->secureRandom,
143148
$this->defaults,
144149
$this->publicShareTemplateFactory,
150+
$this->userSession,
145151
);
146152

147153

0 commit comments

Comments
 (0)