Skip to content

Commit 8eaf18e

Browse files
committed
Add remaining exporters
1 parent ddc0688 commit 8eaf18e

15 files changed

+293
-40
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters;
6+
7+
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8+
use App\Services\PersonalDataSelection\Exporters\Base\RelationExportable;
9+
10+
class AppsExporter extends AbstractExporter
11+
{
12+
use RelationExportable;
13+
14+
protected string $fileName = 'apps.json';
15+
protected string $relation = 'oAuthClients';
16+
// todo: columns
17+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters\Base;
6+
7+
trait RelationExportable
8+
{
9+
protected function exportData(): string|array {
10+
11+
$relation = $this->user->{$this->relation}();
12+
13+
if (!empty($this->whereColumn)) {
14+
$condition = $this->whereCondition ?? 'id';
15+
16+
$relation->where(
17+
$this->whereColumn,
18+
$this->user->{$condition}
19+
);
20+
}
21+
22+
if (!empty($this->with)) {
23+
$relation->with($this->with);
24+
}
25+
26+
if (!empty($this->columns)) {
27+
return $relation->only($this->columns);
28+
}
29+
30+
return $relation->get()->toJson();
31+
}
32+
33+
protected function onExportValidation(): bool {
34+
return !empty($this->relation);
35+
}
36+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters;
6+
7+
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8+
use App\Services\PersonalDataSelection\Exporters\Base\RelationExportable;
9+
10+
class HomeExporter extends AbstractExporter
11+
{
12+
use RelationExportable;
13+
14+
protected string $fileName = 'home.json';
15+
protected string $relation = 'home';
16+
// todo: columns
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters;
6+
7+
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8+
use App\Services\PersonalDataSelection\Exporters\Base\RelationExportable;
9+
10+
class IcsTokenExporter extends AbstractExporter
11+
{
12+
use RelationExportable;
13+
14+
protected string $fileName = 'ics_tokens.json';
15+
protected string $relation = 'icsTokens';
16+
// todo: columns
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters;
6+
7+
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8+
use App\Services\PersonalDataSelection\Exporters\Base\RelationExportable;
9+
10+
class LikesExporter extends AbstractExporter
11+
{
12+
use RelationExportable;
13+
14+
protected string $fileName = 'likes.json';
15+
protected string $relation = 'likes';
16+
// todo: columns
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters;
6+
7+
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8+
use App\Services\PersonalDataSelection\Exporters\Base\RelationExportable;
9+
10+
class NotificationsExporter extends AbstractExporter
11+
{
12+
use RelationExportable;
13+
14+
protected string $fileName = 'notifications.json';
15+
protected string $relation = 'notifications';
16+
// todo: columns
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters;
6+
7+
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8+
use App\Services\PersonalDataSelection\Exporters\Base\RelationExportable;
9+
10+
class PermissionExporter extends AbstractExporter
11+
{
12+
use RelationExportable;
13+
14+
protected string $fileName = 'permissions.json';
15+
protected string $relation = 'permissions';
16+
// todo: columns
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters;
6+
7+
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8+
use App\Services\PersonalDataSelection\Exporters\Base\RelationExportable;
9+
10+
class RoleExporter extends AbstractExporter
11+
{
12+
use RelationExportable;
13+
14+
protected string $fileName = 'roles.json';
15+
protected string $relation = 'roles';
16+
// todo: columns
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters;
6+
7+
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8+
use App\Services\PersonalDataSelection\Exporters\Base\RelationExportable;
9+
10+
class SessionExporter extends AbstractExporter
11+
{
12+
use RelationExportable;
13+
14+
protected string $fileName = 'sessions.json';
15+
protected string $relation = 'sessions';
16+
// todo: columns
17+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters;
6+
7+
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8+
use App\Services\PersonalDataSelection\Exporters\Base\RelationExportable;
9+
10+
class SocialProfileExporter extends AbstractExporter
11+
{
12+
use RelationExportable;
13+
14+
protected string $fileName = 'social_profiles.json';
15+
protected string $relation = 'socialProfile';
16+
protected string $with = 'mastodonserver';
17+
// todo: columns
18+
}

app/Services/PersonalDataSelection/Exporters/StatusExporter.php

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@
55
namespace App\Services\PersonalDataSelection\Exporters;
66

77
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8-
use App\Services\PersonalDataSelection\Exporters\Base\ModelExportable;
8+
use App\Services\PersonalDataSelection\Exporters\Base\RelationExportable;
99

1010
class StatusExporter extends AbstractExporter
1111
{
12-
use ModelExportable;
12+
use RelationExportable;
1313

1414
protected string $fileName = 'statuses.json';
15-
16-
protected function exportData(): array|string {
17-
return $this->user->statuses()->with('tags')->get()->toArray(); // todo: columns definieren
18-
}
15+
protected string $relation = 'statuses';
16+
protected string $with = 'tags';
17+
// todo: columns
1918
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters;
6+
7+
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8+
use App\Services\PersonalDataSelection\Exporters\Base\RelationExportable;
9+
10+
class TokenExporter extends AbstractExporter
11+
{
12+
use RelationExportable;
13+
14+
protected string $fileName = 'tokens.json';
15+
protected string $relation = 'tokens';
16+
// todo: columns
17+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters;
6+
7+
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8+
9+
class UserDataExporter extends AbstractExporter
10+
{
11+
protected string $fileName = 'user.json';
12+
protected array $columns = [
13+
'name', 'username', 'home_id', 'private_profile', 'default_status_visibility',
14+
'default_status_sensitivity', 'prevent_index', 'privacy_hide_days', 'language',
15+
'timezone', 'friend_checkin', 'likes_enabled', 'points_enabled', 'mapprovider',
16+
'email', 'email_verified_at', 'privacy_ack_at',
17+
'last_login', 'created_at', 'updated_at'
18+
];
19+
20+
protected function exportData(): array|string {
21+
return $this->user->only($this->columns);
22+
}
23+
24+
protected function onExportValidation(): bool {
25+
return true;
26+
}
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Services\PersonalDataSelection\Exporters;
6+
7+
use App\Services\PersonalDataSelection\Exporters\Base\AbstractExporter;
8+
9+
class WebhookExporter extends AbstractExporter
10+
{
11+
protected string $fileName = 'webhooks.json';
12+
13+
protected function exportData(): array|string {
14+
$webhooks = $this->user->webhooks()->with('events')->get();
15+
$webhooks = $webhooks->map(function($webhook) {
16+
return $webhook->only([
17+
'oauth_client_id', 'created_at', 'updated_at'
18+
]);
19+
});
20+
21+
return $webhooks->toJson();
22+
}
23+
24+
protected function onExportValidation(): bool {
25+
return true;
26+
}
27+
}

app/Services/PersonalDataSelection/UserGdprDataService.php

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
namespace App\Services\PersonalDataSelection;
44

5-
use App\Http\Controllers\Backend\User\TokenController;
65
use App\Models\User;
76
use App\Services\PersonalDataSelection\Exporters\ActivityLogExporter;
7+
use App\Services\PersonalDataSelection\Exporters\AppsExporter;
88
use App\Services\PersonalDataSelection\Exporters\Base\Exporter;
99
use App\Services\PersonalDataSelection\Exporters\BlocksExporter;
1010
use App\Services\PersonalDataSelection\Exporters\EventExporter;
@@ -14,12 +14,24 @@
1414
use App\Services\PersonalDataSelection\Exporters\FollowsExporter;
1515
use App\Services\PersonalDataSelection\Exporters\FollowsRequestsExporter;
1616
use App\Services\PersonalDataSelection\Exporters\HafasTripsExporter;
17+
use App\Services\PersonalDataSelection\Exporters\HomeExporter;
18+
use App\Services\PersonalDataSelection\Exporters\IcsTokenExporter;
19+
use App\Services\PersonalDataSelection\Exporters\LikesExporter;
1720
use App\Services\PersonalDataSelection\Exporters\MentionExporter;
1821
use App\Services\PersonalDataSelection\Exporters\MutesExporter;
22+
use App\Services\PersonalDataSelection\Exporters\NotificationsExporter;
1923
use App\Services\PersonalDataSelection\Exporters\PasswordResetsExporter;
24+
use App\Services\PersonalDataSelection\Exporters\PermissionExporter;
2025
use App\Services\PersonalDataSelection\Exporters\ReportsExporter;
26+
use App\Services\PersonalDataSelection\Exporters\RoleExporter;
27+
use App\Services\PersonalDataSelection\Exporters\SessionExporter;
28+
use App\Services\PersonalDataSelection\Exporters\SocialProfileExporter;
29+
use App\Services\PersonalDataSelection\Exporters\StatusExporter;
30+
use App\Services\PersonalDataSelection\Exporters\TokenExporter;
2131
use App\Services\PersonalDataSelection\Exporters\TrustedUsersExporter;
32+
use App\Services\PersonalDataSelection\Exporters\UserDataExporter;
2233
use App\Services\PersonalDataSelection\Exporters\WebhookCreationRequestExporter;
34+
use App\Services\PersonalDataSelection\Exporters\WebhookExporter;
2335
use Spatie\PersonalDataExport\PersonalDataSelection;
2436

2537
class UserGdprDataService
@@ -29,44 +41,13 @@ public function __invoke(PersonalDataSelection $personalDataSelection, User $dat
2941
}
3042

3143
private function addUserPersonalData(PersonalDataSelection $personalDataSelection, User $userModel): void {
32-
$userData = $userModel->only([
33-
'name', 'username', 'home_id', 'private_profile', 'default_status_visibility',
34-
'default_status_sensitivity', 'prevent_index', 'privacy_hide_days', 'language',
35-
'timezone', 'friend_checkin', 'likes_enabled', 'points_enabled', 'mapprovider',
36-
'email', 'email_verified_at', 'privacy_ack_at',
37-
'last_login', 'created_at', 'updated_at'
38-
]);
39-
40-
$webhooks = $userModel->webhooks()->with('events')->get();
41-
$webhooks = $webhooks->map(function($webhook) {
42-
return $webhook->only([
43-
'oauth_client_id', 'created_at', 'updated_at'
44-
]);
45-
});
46-
47-
4844
if ($userModel->avatar && file_exists(public_path('/uploads/avatars/' . $userModel->avatar))) {
49-
$personalDataSelection
50-
->addFile(public_path('/uploads/avatars/' . $userModel->avatar));
45+
$personalDataSelection->addFile(public_path('/uploads/avatars/' . $userModel->avatar));
5146
}
5247

53-
$personalDataSelection
54-
->add('user.json', $userData)
55-
->add('notifications.json', $userModel->notifications()->get()->toJson()) //TODO: columns definieren
56-
->add('likes.json', $userModel->likes()->get()->toJson()) //TODO: columns definieren
57-
->add('social_profile.json', $userModel->socialProfile()->with('mastodonserver')->get()) //TODO: columns definieren
58-
->add('webhooks.json', $webhooks)
59-
->add('tokens.json', TokenController::index($userModel)->toJson()) //TODO: columns definieren
60-
->add('ics_tokens.json', $userModel->icsTokens()->get()->toJson()) //TODO: columns definieren
61-
->add('apps.json', $userModel->oAuthClients()->get()->toJson()) //TODO: columns definieren
62-
->add('sessions.json', $userModel->sessions()->get()->toJson()) //TODO: columns definieren
63-
->add('home.json', $userModel->home()->get()->toJson()) //TODO: columns definieren
64-
->add('roles.json', $userModel->roles()->get()->toJson()) //TODO: columns definieren
65-
->add('permissions.json', $userModel->permissions()->get()->toJson()) //TODO: columns definieren
66-
;
6748
$exporter = new Exporter($personalDataSelection, $userModel);
6849
$exporter->export([
69-
//StatusExporter::class,
50+
StatusExporter::class,
7051
FollowRequestsExporter::class,
7152
FollowsRequestsExporter::class,
7253
FollowsExporter::class,
@@ -82,6 +63,18 @@ private function addUserPersonalData(PersonalDataSelection $personalDataSelectio
8263
EventSuggestionsExporter::class,
8364
WebhookCreationRequestExporter::class,
8465
MentionExporter::class,
66+
SocialProfileExporter::class,
67+
TokenExporter::class,
68+
IcsTokenExporter::class,
69+
AppsExporter::class,
70+
SessionExporter::class,
71+
NotificationsExporter::class,
72+
LikesExporter::class,
73+
HomeExporter::class,
74+
RoleExporter::class,
75+
PermissionExporter::class,
76+
UserDataExporter::class,
77+
WebhookExporter::class,
8578
]);
8679
}
8780
}

0 commit comments

Comments
 (0)