Skip to content

Commit

Permalink
feat: flarum/gdpr integration (#91)
Browse files Browse the repository at this point in the history
  • Loading branch information
rafaucau authored Feb 19, 2025
1 parent a107616 commit 91ab538
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 2 deletions.
8 changes: 6 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,10 @@
"backgroundSize": "90%",
"backgroundRepeat": "no-repeat",
"backgroundPosition": "center"
}
},
"optional-dependencies": [
"flarum/gdpr"
]
},
"flagrow": {
"discuss": "https://discuss.flarum.org/d/5791"
Expand All @@ -61,7 +64,8 @@
}
},
"require-dev": {
"flarum/phpstan": "*"
"flarum/phpstan": "*",
"flarum/gdpr": "^1.0.0@beta"
},
"scripts": {
"analyse:phpstan": "phpstan analyse",
Expand Down
7 changes: 7 additions & 0 deletions extend.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use Flarum\Api\Serializer\BasicUserSerializer;
use Flarum\Api\Serializer\ForumSerializer;
use Flarum\Api\Serializer\UserSerializer;
use Flarum\Gdpr\Extend\UserData;
use Flarum\User\Filter\UserFilterer;
use Flarum\User\Search\UserSearcher;
use Flarum\User\User;
Expand Down Expand Up @@ -109,4 +110,10 @@

(new Extend\Filter(UserFilterer::class))
->addFilter(Gambits\AnswerGambit::class),

(new Extend\Conditional())
->whenExtensionEnabled('flarum-gdpr', fn () => [
(new UserData())
->addType(Data\MasqueradeAnswers::class),
]),
];
8 changes: 8 additions & 0 deletions resources/locale/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,11 @@ fof-masquerade:
email: Email
select: Dropdown
url: URL

flarum-gdpr:
lib:
data:
masqueradeanswers:
export_description: Exports the user's profile field answers
delete_description: Removes all profile field answers from the user's account
anonymize_description: => flarum-gdpr.lib.data.masqueradeanswers.delete_description
40 changes: 40 additions & 0 deletions src/Data/MasqueradeAnswers.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

namespace FoF\Masquerade\Data;

use Flarum\Gdpr\Data\Type;
use FoF\Masquerade\Answer;
use Illuminate\Support\Arr;

class MasqueradeAnswers extends Type
{
public function export(): ?array
{
$data = [];

Answer::query()
->where('user_id', '=', $this->user->id)
->each(function (Answer $answer) use (&$data) {
$data[] = ["masquerade/answer-{$answer->id}.json" => $this->encodeForExport($this->sanitize($answer))];
});

return $data;
}

protected function sanitize(Answer $answer): array
{
return Arr::except($answer->toArray(), ['id', 'user_id']);
}

public function anonymize(): void
{
$this->delete();
}

public function delete(): void
{
Answer::query()
->where('user_id', '=', $this->user->id)
->delete();
}
}

0 comments on commit 91ab538

Please sign in to comment.