Skip to content

Instantly share code, notes, and snippets.

@tobyzerner
Created December 9, 2017 06:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tobyzerner/5e514a700dcb471180369903ab4562c3 to your computer and use it in GitHub Desktop.
Save tobyzerner/5e514a700dcb471180369903ab4562c3 to your computer and use it in GitHub Desktop.
Flarum PHP Extension API Rev 3
<?php
namespace Flarum\Tags;
use Flarum\Extend;
return [
new Extend\ApiRoute('tags.index', 'get', '/tags', Api\ListTagsController::class),
new Extend\ApiRoute('tags.create', 'post', '/tags', Api\CreateTagController::class),
new Extend\ApiRoute('tags.order', 'patch', '/tags/order', Api\OrderTagsController::class),
new Extend\ApiRoute('tags.update', 'patch', '/tags/{id}', Api\UpdateTagController::class),
new Extend\ApiRoute('tags.delete', 'delete', '/tags/{id}', Api\DeleteTagController::class),
new Extend\ForumSchema(function ($schema) use ($extension) {
$schema->setting('min_primary_tags', $extension);
$schema->setting('max_primary_tags', $extension);
$schema->setting('min_secondary_tags', $extension);
$schema->setting('max_secondary_tags', $extension);
$schema->hasMany('tags', TagSerializer::class);
}),
new Extend\ForumData(function ($forum, $actor) {
return ['tags' => Tag::whereVisibleTo($actor)->withUserData($actor)->get()];
}),
new Extend\DiscussionSchema(function ($schema) {
$schema->permission('tag');
$schema->hasMany('tags', TagSerializer::class);
}),
new Extend\DiscussionData(function ($discussion, $actor) {
return ['tags' => $discussion->tags()->whereVisibleTo($actor)->withUserData($actor)->get()];
}),
new Extend\DiscussionGambit(TagGabmit::class),
new Extend\DiscussionSearch(function (DiscussionSearch $search) {
if ($search->isGambitActive(TagGambit::class)) {
return;
}
$search->getQuery()->whereNotExists(function ($query) {
return $query->select(new Expression(1))
->from('discussions_tags')
->whereIn('tag_id', Tag::where('is_hidden', 1)->lists('id'))
->where('discussions.id', new Expression('discussion_id'));
});
}),
new Extend\PostsFilter('tag', function ($query, $value) {
$query->join('discussions_tags', 'discussions_tags.discussion_id', '=', 'posts.discussion_id')
->where('discussions_tags.tag_id', $value);
}),
new ExtendTags\DiscussionWasTagged(function ($discussion, $actor, $oldTags) {
$discussion->addPost(DiscussionTaggedPost::reply($discussion, $actor, $oldTags));
})
];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment