mirror of
https://github.com/flarum/framework.git
synced 2024-12-04 08:13:39 +08:00
Add new fields, include tags on the new forum API action
This commit is contained in:
parent
d5b1d3bdb2
commit
85d7dc8752
|
@ -6,13 +6,19 @@ Tag.prototype.id = Model.prop('id');
|
||||||
Tag.prototype.name = Model.prop('name');
|
Tag.prototype.name = Model.prop('name');
|
||||||
Tag.prototype.slug = Model.prop('slug');
|
Tag.prototype.slug = Model.prop('slug');
|
||||||
Tag.prototype.description = Model.prop('description');
|
Tag.prototype.description = Model.prop('description');
|
||||||
|
|
||||||
Tag.prototype.color = Model.prop('color');
|
Tag.prototype.color = Model.prop('color');
|
||||||
Tag.prototype.backgroundUrl = Model.prop('backgroundUrl');
|
Tag.prototype.backgroundUrl = Model.prop('backgroundUrl');
|
||||||
|
Tag.prototype.backgroundMode = Model.prop('backgroundMode');
|
||||||
Tag.prototype.iconUrl = Model.prop('iconUrl');
|
Tag.prototype.iconUrl = Model.prop('iconUrl');
|
||||||
Tag.prototype.discussionsCount = Model.prop('discussionsCount');
|
|
||||||
Tag.prototype.position = Model.prop('position');
|
Tag.prototype.position = Model.prop('position');
|
||||||
Tag.prototype.parent = Model.one('parent');
|
Tag.prototype.parent = Model.one('parent');
|
||||||
Tag.prototype.defaultSort = Model.prop('defaultSort');
|
Tag.prototype.defaultSort = Model.prop('defaultSort');
|
||||||
Tag.prototype.isChild = Model.prop('isChild');
|
Tag.prototype.isChild = Model.prop('isChild');
|
||||||
|
|
||||||
|
Tag.prototype.discussionsCount = Model.prop('discussionsCount');
|
||||||
|
Tag.prototype.lastTime = Model.prop('lastTime', Model.date);
|
||||||
|
Tag.prototype.lastDiscussion = Model.one('lastDiscussion');
|
||||||
|
|
||||||
export default Tag;
|
export default Tag;
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
<?php namespace Flarum\Tags\Handlers;
|
|
||||||
|
|
||||||
use Flarum\Tags\Tag;
|
|
||||||
use Flarum\Tags\TagSerializer;
|
|
||||||
use Flarum\Forum\Events\RenderView;
|
|
||||||
|
|
||||||
class TagPreloader
|
|
||||||
{
|
|
||||||
public function subscribe($events)
|
|
||||||
{
|
|
||||||
$events->listen('Flarum\Forum\Events\RenderView', __CLASS__.'@renderForum');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function renderForum(RenderView $event)
|
|
||||||
{
|
|
||||||
$serializer = new TagSerializer($event->action->actor, null, ['parent']);
|
|
||||||
$event->view->data = array_merge($event->view->data, $serializer->collection(Tag::orderBy('position')->get())->toArray());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -5,4 +5,16 @@ use Flarum\Core\Models\Model;
|
||||||
class Tag extends Model
|
class Tag extends Model
|
||||||
{
|
{
|
||||||
protected $table = 'tags';
|
protected $table = 'tags';
|
||||||
|
|
||||||
|
protected $dates = ['last_time'];
|
||||||
|
|
||||||
|
public function parent()
|
||||||
|
{
|
||||||
|
return $this->belongsTo('Flarum\Tags\Tag', 'parent_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lastDiscussion()
|
||||||
|
{
|
||||||
|
return $this->belongsTo('Flarum\Core\Models\Discussion', 'last_discussion_id');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,11 +25,13 @@ class TagSerializer extends BaseSerializer
|
||||||
'slug' => $tag->slug,
|
'slug' => $tag->slug,
|
||||||
'color' => $tag->color,
|
'color' => $tag->color,
|
||||||
'backgroundUrl' => $tag->background_path,
|
'backgroundUrl' => $tag->background_path,
|
||||||
|
'backgroundMode' => $tag->background_mode,
|
||||||
'iconUrl' => $tag->icon_path,
|
'iconUrl' => $tag->icon_path,
|
||||||
'discussionsCount' => (int) $tag->discussions_count,
|
'discussionsCount' => (int) $tag->discussions_count,
|
||||||
'position' => $tag->position === null ? null : (int) $tag->position,
|
'position' => $tag->position === null ? null : (int) $tag->position,
|
||||||
'defaultSort' => $tag->default_sort,
|
'defaultSort' => $tag->default_sort,
|
||||||
'isChild' => (bool) $tag->parent_id
|
'isChild' => (bool) $tag->parent_id,
|
||||||
|
'lastTime' => $tag->last_time ? $tag->last_time->toRFC3339String() : null
|
||||||
];
|
];
|
||||||
|
|
||||||
return $this->extendAttributes($tag, $attributes);
|
return $this->extendAttributes($tag, $attributes);
|
||||||
|
@ -39,4 +41,9 @@ class TagSerializer extends BaseSerializer
|
||||||
{
|
{
|
||||||
return $this->hasOne('Flarum\Tags\TagSerializer');
|
return $this->hasOne('Flarum\Tags\TagSerializer');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function lastDiscussion()
|
||||||
|
{
|
||||||
|
return $this->hasOne('Flarum\Api\Serializers\DiscussionSerializer');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,6 @@ class TagsServiceProvider extends ServiceProvider
|
||||||
|
|
||||||
new EventSubscribers([
|
new EventSubscribers([
|
||||||
'Flarum\Tags\Handlers\DiscussionTaggedNotifier',
|
'Flarum\Tags\Handlers\DiscussionTaggedNotifier',
|
||||||
'Flarum\Tags\Handlers\TagPreloader',
|
|
||||||
'Flarum\Tags\Handlers\TagSaver'
|
'Flarum\Tags\Handlers\TagSaver'
|
||||||
]),
|
]),
|
||||||
|
|
||||||
|
@ -39,6 +38,14 @@ class TagsServiceProvider extends ServiceProvider
|
||||||
|
|
||||||
new ApiInclude(['discussions.index', 'discussions.show'], 'tags', true),
|
new ApiInclude(['discussions.index', 'discussions.show'], 'tags', true),
|
||||||
|
|
||||||
|
new Relationship('Flarum\Core\Models\Forum', 'tags', function ($model) {
|
||||||
|
return Tag::query();
|
||||||
|
}),
|
||||||
|
|
||||||
|
new SerializeRelationship('Flarum\Api\Serializers\ForumSerializer', 'hasMany', 'tags', 'Flarum\Tags\TagSerializer'),
|
||||||
|
|
||||||
|
new ApiInclude(['forum.show'], ['tags', 'tags.parent', 'tags.lastDiscussion'], true),
|
||||||
|
|
||||||
(new Permission('discussion.tag'))
|
(new Permission('discussion.tag'))
|
||||||
->serialize()
|
->serialize()
|
||||||
->grant(function ($grant, $user) {
|
->grant(function ($grant, $user) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user