-
-
Notifications
You must be signed in to change notification settings - Fork 829
/
PostSerializer.php
77 lines (62 loc) · 2 KB
/
PostSerializer.php
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
<?php
/*
* This file is part of Flarum.
*
* For detailed copyright and license information, please view the
* LICENSE file that was distributed with this source code.
*/
namespace Flarum\Api\Serializer;
use Flarum\Post\CommentPost;
use Flarum\Post\Post;
use Tobscure\JsonApi\Relationship;
class PostSerializer extends BasicPostSerializer
{
/**
* @param Post $model
*/
protected function getDefaultAttributes(object|array $model): array
{
$attributes = parent::getDefaultAttributes($model);
unset($attributes['content']);
$canEdit = $this->actor->can('edit', $model);
if ($model instanceof CommentPost) {
if ($canEdit) {
$attributes['content'] = $model->content;
}
if ($this->actor->can('viewIps', $model)) {
$attributes['ipAddress'] = $model->ip_address;
}
} else {
$attributes['content'] = $model->content;
}
if ($model->edited_at) {
$attributes['editedAt'] = $this->formatDate($model->edited_at);
}
if ($model->hidden_at) {
$attributes['isHidden'] = true;
$attributes['hiddenAt'] = $this->formatDate($model->hidden_at);
}
$attributes += [
'canEdit' => $canEdit,
'canDelete' => $this->actor->can('delete', $model),
'canHide' => $this->actor->can('hide', $model)
];
return $attributes;
}
protected function user(Post $post): ?Relationship
{
return $this->hasOne($post, UserSerializer::class);
}
protected function discussion(Post $post): ?Relationship
{
return $this->hasOne($post, BasicDiscussionSerializer::class);
}
protected function editedUser(Post $post): ?Relationship
{
return $this->hasOne($post, BasicUserSerializer::class);
}
protected function hiddenUser(Post $post): ?Relationship
{
return $this->hasOne($post, BasicUserSerializer::class);
}
}