mirror of
https://github.com/flarum/core.git
synced 2025-07-23 17:51:24 +02:00
Rework public API based on events
This commit is contained in:
@@ -21,12 +21,12 @@ class IndexAction extends SerializeCollectionAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\ActivitySerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\ActivitySerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [
|
||||
public $include = [
|
||||
'subject' => true,
|
||||
'subject.user' => true,
|
||||
'subject.discussion' => true
|
||||
@@ -35,27 +35,27 @@ class IndexAction extends SerializeCollectionAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = ['user'];
|
||||
public $link = ['user'];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* @param UserRepository $users
|
||||
|
@@ -18,12 +18,12 @@ class CreateAction extends BaseCreateAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\DiscussionSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\DiscussionSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [
|
||||
public $include = [
|
||||
'posts' => true,
|
||||
'startUser' => true,
|
||||
'lastUser' => true,
|
||||
@@ -34,27 +34,27 @@ class CreateAction extends BaseCreateAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* Instantiate the action.
|
||||
|
@@ -22,12 +22,12 @@ class IndexAction extends SerializeCollectionAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\DiscussionSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\DiscussionSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [
|
||||
public $include = [
|
||||
'startUser' => true,
|
||||
'lastUser' => true,
|
||||
'startPost' => false,
|
||||
@@ -40,27 +40,27 @@ class IndexAction extends SerializeCollectionAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = ['lastTime', 'commentsCount', 'startTime'];
|
||||
public $sortFields = ['lastTime', 'commentsCount', 'startTime'];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* @param DiscussionSearcher $searcher
|
||||
@@ -93,7 +93,7 @@ class IndexAction extends SerializeCollectionAction
|
||||
$results = $this->searcher->search($criteria, $request->limit, $request->offset, $load);
|
||||
|
||||
// TODO: add query params (filter, sort, include) to the pagination URLs
|
||||
static::addPaginationLinks(
|
||||
$this->addPaginationLinks(
|
||||
$document,
|
||||
$request,
|
||||
$request->http ? $this->url->toRoute('flarum.api.discussions.index') : '',
|
||||
|
@@ -19,12 +19,12 @@ class ShowAction extends SerializeResourceAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\DiscussionSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\DiscussionSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [
|
||||
public $include = [
|
||||
'startUser' => false,
|
||||
'lastUser' => false,
|
||||
'startPost' => false,
|
||||
@@ -39,27 +39,27 @@ class ShowAction extends SerializeResourceAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = ['posts', 'posts.discussion'];
|
||||
public $link = ['posts', 'posts.discussion'];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = ['time'];
|
||||
public $sortFields = ['time'];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort = ['time' => 'asc'];
|
||||
public $sort = ['time' => 'asc'];
|
||||
|
||||
/**
|
||||
* Instantiate the action.
|
||||
|
@@ -17,37 +17,37 @@ class UpdateAction extends SerializeResourceAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\DiscussionSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\DiscussionSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [];
|
||||
public $include = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* @param Dispatcher $bus
|
||||
|
@@ -9,37 +9,37 @@ class ShowAction extends SerializeResourceAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\ForumSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\ForumSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [];
|
||||
public $include = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* Get the forum, ready to be serialized and assigned to the JsonApi
|
||||
|
@@ -10,37 +10,37 @@ class IndexAction extends SerializeCollectionAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\GroupSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\GroupSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [];
|
||||
public $include = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* Get the groups, ready to be serialized and assigned to the document
|
||||
|
@@ -16,12 +16,12 @@ class IndexAction extends SerializeCollectionAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\NotificationSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\NotificationSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [
|
||||
public $include = [
|
||||
'sender' => true,
|
||||
'subject' => true,
|
||||
'subject.discussion' => true
|
||||
@@ -30,27 +30,27 @@ class IndexAction extends SerializeCollectionAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 10;
|
||||
public $limit = 10;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* Instantiate the action.
|
||||
|
@@ -16,37 +16,37 @@ class UpdateAction extends SerializeResourceAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\NotificationSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\NotificationSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [];
|
||||
public $include = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* @param Dispatcher $bus
|
||||
|
@@ -16,12 +16,12 @@ class CreateAction extends BaseCreateAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\PostSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\PostSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [
|
||||
public $include = [
|
||||
'user' => true,
|
||||
'discussion' => true
|
||||
];
|
||||
@@ -29,27 +29,27 @@ class CreateAction extends BaseCreateAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = ['discussion.posts'];
|
||||
public $link = ['discussion.posts'];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* Instantiate the action.
|
||||
|
@@ -12,12 +12,12 @@ class IndexAction extends SerializeCollectionAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\PostSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\PostSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [
|
||||
public $include = [
|
||||
'user' => true,
|
||||
'user.groups' => true,
|
||||
'editUser' => true,
|
||||
@@ -28,27 +28,27 @@ class IndexAction extends SerializeCollectionAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* @param PostRepository $posts
|
||||
|
@@ -16,12 +16,12 @@ class ShowAction extends SerializeResourceAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\PostSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\PostSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [
|
||||
public $include = [
|
||||
'user' => true,
|
||||
'user.groups' => true,
|
||||
'editUser' => true,
|
||||
@@ -32,27 +32,27 @@ class ShowAction extends SerializeResourceAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* @param PostRepository $posts
|
||||
|
@@ -16,37 +16,37 @@ class UpdateAction extends SerializeResourceAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\PostSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\PostSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [];
|
||||
public $include = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* @param Dispatcher $bus
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php namespace Flarum\Api\Actions;
|
||||
|
||||
use Flarum\Api\Events\WillSerializeData;
|
||||
use Flarum\Events\BuildApiAction;
|
||||
use Flarum\Events\WillSerializeData;
|
||||
use Flarum\Api\Request;
|
||||
use Flarum\Api\JsonApiRequest;
|
||||
use Tobscure\JsonApi\Criteria;
|
||||
@@ -15,7 +16,7 @@ abstract class SerializeAction extends JsonApiAction
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $serializer;
|
||||
public $serializer;
|
||||
|
||||
/**
|
||||
* The relationships that are available to be included (keys), and which
|
||||
@@ -23,42 +24,42 @@ abstract class SerializeAction extends JsonApiAction
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $include = [];
|
||||
public $include = [];
|
||||
|
||||
/**
|
||||
* The relationships that are linked by default.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* The maximum number of records that can be requested.
|
||||
*
|
||||
* @var integer
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* The number of records included by default.
|
||||
*
|
||||
* @var integer
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* The fields that are available to be sorted by.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* The default sort field and order to user.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* Handle an API request and return an API response.
|
||||
@@ -68,14 +69,14 @@ abstract class SerializeAction extends JsonApiAction
|
||||
*/
|
||||
public function respond(Request $request)
|
||||
{
|
||||
$request = static::buildJsonApiRequest($request);
|
||||
$request = $this->buildJsonApiRequest($request);
|
||||
$document = new Document();
|
||||
|
||||
$data = $this->data($request, $document);
|
||||
|
||||
event(new WillSerializeData($this, $data, $request));
|
||||
|
||||
$serializer = new static::$serializer($request->actor, $request->include, $request->link);
|
||||
$serializer = new $this->serializer($request->actor, $request->include, $request->link);
|
||||
|
||||
$document->setData($this->serialize($serializer, $data));
|
||||
|
||||
@@ -107,17 +108,19 @@ abstract class SerializeAction extends JsonApiAction
|
||||
* @param Request $request
|
||||
* @return JsonApiRequest
|
||||
*/
|
||||
protected static function buildJsonApiRequest(Request $request)
|
||||
protected function buildJsonApiRequest(Request $request)
|
||||
{
|
||||
$request = new JsonApiRequest($request->input, $request->actor, $request->http);
|
||||
|
||||
$criteria = new Criteria($request->input);
|
||||
|
||||
$request->include = static::sanitizeInclude($criteria->getInclude());
|
||||
$request->sort = static::sanitizeSort($criteria->getSort());
|
||||
event(new BuildApiAction($this));
|
||||
|
||||
$request->include = $this->sanitizeInclude($criteria->getInclude());
|
||||
$request->sort = $this->sanitizeSort($criteria->getSort());
|
||||
$request->offset = $criteria->getOffset();
|
||||
$request->limit = static::sanitizeLimit($criteria->getLimit());
|
||||
$request->link = static::$link;
|
||||
$request->limit = $this->sanitizeLimit($criteria->getLimit());
|
||||
$request->link = $this->link;
|
||||
|
||||
return $request;
|
||||
}
|
||||
@@ -129,9 +132,9 @@ abstract class SerializeAction extends JsonApiAction
|
||||
* @param array $include
|
||||
* @return array
|
||||
*/
|
||||
protected static function sanitizeInclude(array $include)
|
||||
protected function sanitizeInclude(array $include)
|
||||
{
|
||||
return array_intersect($include, array_keys(static::$include)) ?: array_keys(array_filter(static::$include));
|
||||
return array_intersect($include, array_keys($this->include)) ?: array_keys(array_filter($this->include));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -141,9 +144,9 @@ abstract class SerializeAction extends JsonApiAction
|
||||
* @param array $sort
|
||||
* @return array
|
||||
*/
|
||||
protected static function sanitizeSort(array $sort)
|
||||
protected function sanitizeSort(array $sort)
|
||||
{
|
||||
return array_intersect_key($sort, array_flip(static::$sortFields)) ?: static::$sort;
|
||||
return array_intersect_key($sort, array_flip($this->sortFields)) ?: $this->sort;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -152,9 +155,9 @@ abstract class SerializeAction extends JsonApiAction
|
||||
* @param int $limit
|
||||
* @return int
|
||||
*/
|
||||
protected static function sanitizeLimit($limit)
|
||||
protected function sanitizeLimit($limit)
|
||||
{
|
||||
return min($limit, static::$limitMax) ?: static::$limit;
|
||||
return min($limit, $this->limitMax) ?: $this->limit;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -169,10 +172,10 @@ abstract class SerializeAction extends JsonApiAction
|
||||
* is unknown ('last' link is ommitted).
|
||||
* @return void
|
||||
*/
|
||||
protected static function addPaginationLinks(Document $document, JsonApiRequest $request, $url, $total = true)
|
||||
protected function addPaginationLinks(Document $document, JsonApiRequest $request, $url, $total = true)
|
||||
{
|
||||
$input = [];
|
||||
if ($request->limit != static::$limit) {
|
||||
if ($request->limit != $this->limit) {
|
||||
array_set($input, 'page.limit', $request->limit);
|
||||
}
|
||||
|
||||
|
@@ -4,7 +4,7 @@ use Flarum\Api\Commands\GenerateAccessToken;
|
||||
use Flarum\Api\Request;
|
||||
use Flarum\Core\Users\UserRepository;
|
||||
use Flarum\Core\Exceptions\PermissionDeniedException;
|
||||
use Flarum\Core\Users\Events\UserEmailChangeWasRequested;
|
||||
use Flarum\Events\UserEmailChangeWasRequested;
|
||||
use Illuminate\Contracts\Bus\Dispatcher;
|
||||
use Zend\Diactoros\Response\JsonResponse;
|
||||
|
||||
|
@@ -15,37 +15,37 @@ class CreateAction extends BaseCreateAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\UserSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\UserSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [];
|
||||
public $include = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* @param Dispatcher $bus
|
||||
|
@@ -16,7 +16,7 @@ class DeleteAvatarAction extends SerializeResourceAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\UserSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\UserSerializer';
|
||||
|
||||
/**
|
||||
* @param Dispatcher $bus
|
||||
|
@@ -22,39 +22,39 @@ class IndexAction extends SerializeCollectionAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\UserSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\UserSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [
|
||||
public $include = [
|
||||
'groups' => true
|
||||
];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = ['username', 'postsCount', 'discussionsCount', 'lastSeenTime', 'joinTime'];
|
||||
public $sortFields = ['username', 'postsCount', 'discussionsCount', 'lastSeenTime', 'joinTime'];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* @param UserSearcher $searcher
|
||||
@@ -84,7 +84,7 @@ class IndexAction extends SerializeCollectionAction
|
||||
|
||||
$results = $this->searcher->search($criteria, $request->limit, $request->offset, $request->include);
|
||||
|
||||
static::addPaginationLinks(
|
||||
$this->addPaginationLinks(
|
||||
$document,
|
||||
$request,
|
||||
$this->url->toRoute('flarum.api.users.index'),
|
||||
|
@@ -15,39 +15,39 @@ class ShowAction extends SerializeResourceAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\CurrentUserSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\CurrentUserSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [
|
||||
public $include = [
|
||||
'groups' => true
|
||||
];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* @param UserRepository $users
|
||||
|
@@ -16,37 +16,37 @@ class UpdateAction extends SerializeResourceAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\CurrentUserSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\CurrentUserSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [];
|
||||
public $include = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* @param Dispatcher $bus
|
||||
|
@@ -16,37 +16,37 @@ class UploadAvatarAction extends SerializeResourceAction
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\UserSerializer';
|
||||
public $serializer = 'Flarum\Api\Serializers\UserSerializer';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $include = [];
|
||||
public $include = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $link = [];
|
||||
public $link = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limitMax = 50;
|
||||
public $limitMax = 50;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $limit = 20;
|
||||
public $limit = 20;
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sortFields = [];
|
||||
public $sortFields = [];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public static $sort;
|
||||
public $sort;
|
||||
|
||||
/**
|
||||
* @param Dispatcher $bus
|
||||
|
@@ -1,6 +1,11 @@
|
||||
<?php namespace Flarum\Api;
|
||||
|
||||
use Flarum\Api\Serializers\ActivitySerializer;
|
||||
use Flarum\Api\Serializers\NotificationSerializer;
|
||||
use Flarum\Core\Users\Guest;
|
||||
use Flarum\Events\RegisterApiRoutes;
|
||||
use Flarum\Events\RegisterActivityTypes;
|
||||
use Flarum\Events\RegisterNotificationTypes;
|
||||
use Flarum\Http\RouteCollection;
|
||||
use Flarum\Http\UrlGenerator;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
@@ -37,6 +42,45 @@ class ApiServiceProvider extends ServiceProvider
|
||||
public function boot()
|
||||
{
|
||||
$this->routes();
|
||||
|
||||
$this->registerActivitySerializers();
|
||||
$this->registerNotificationSerializers();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register activity serializers.
|
||||
*/
|
||||
protected function registerActivitySerializers()
|
||||
{
|
||||
$blueprints = [];
|
||||
$serializers = [
|
||||
'posted' => 'Flarum\Api\Serializers\PostBasicSerializer',
|
||||
'startedDiscussion' => 'Flarum\Api\Serializers\PostBasicSerializer',
|
||||
'joined' => 'Flarum\Api\Serializers\UserSerializer'
|
||||
];
|
||||
|
||||
event(new RegisterActivityTypes($blueprints, $serializers));
|
||||
|
||||
foreach ($serializers as $type => $serializer) {
|
||||
ActivitySerializer::setSubjectSerializer($type, $serializer);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register notification serializers.
|
||||
*/
|
||||
protected function registerNotificationSerializers()
|
||||
{
|
||||
$blueprints = [];
|
||||
$serializers = [
|
||||
'discussionRenamed' => 'Flarum\Api\Serializers\DiscussionBasicSerializer'
|
||||
];
|
||||
|
||||
event(new RegisterNotificationTypes($blueprints, $serializers));
|
||||
|
||||
foreach ($serializers as $type => $serializer) {
|
||||
NotificationSerializer::setSubjectSerializer($type, $serializer);
|
||||
}
|
||||
}
|
||||
|
||||
protected function routes()
|
||||
@@ -268,6 +312,8 @@ class ApiServiceProvider extends ServiceProvider
|
||||
'flarum.api.groups.delete',
|
||||
$this->action('Flarum\Api\Actions\Groups\DeleteAction')
|
||||
);
|
||||
|
||||
event(new RegisterApiRoutes($routes));
|
||||
}
|
||||
|
||||
protected function action($class)
|
||||
|
@@ -1,39 +0,0 @@
|
||||
<?php namespace Flarum\Api\Events;
|
||||
|
||||
use Flarum\Api\Serializers\Serializer;
|
||||
|
||||
class SerializeAttributes
|
||||
{
|
||||
/**
|
||||
* The class doing the serializing.
|
||||
*
|
||||
* @var Serializer
|
||||
*/
|
||||
public $serializer;
|
||||
|
||||
/**
|
||||
* The model being serialized.
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
public $model;
|
||||
|
||||
/**
|
||||
* The serialized attributes of the resource.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $attributes;
|
||||
|
||||
/**
|
||||
* @param Serializer $serializer The class doing the serializing.
|
||||
* @param object $model The model being serialized.
|
||||
* @param array $attributes The serialized attributes of the resource.
|
||||
*/
|
||||
public function __construct(Serializer $serializer, $model, array &$attributes)
|
||||
{
|
||||
$this->serializer = $serializer;
|
||||
$this->model = $model;
|
||||
$this->attributes = &$attributes;
|
||||
}
|
||||
}
|
@@ -1,17 +0,0 @@
|
||||
<?php namespace Flarum\Api\Events;
|
||||
|
||||
class WillSerializeData
|
||||
{
|
||||
public $action;
|
||||
|
||||
public $data;
|
||||
|
||||
public $request;
|
||||
|
||||
public function __construct($action, &$data, $request)
|
||||
{
|
||||
$this->action = $action;
|
||||
$this->data = &$data;
|
||||
$this->request = $request;
|
||||
}
|
||||
}
|
@@ -1,10 +1,10 @@
|
||||
<?php namespace Flarum\Api\Serializers;
|
||||
|
||||
use BadMethodCallException;
|
||||
use Closure;
|
||||
use Flarum\Core\Users\User;
|
||||
use Flarum\Events\ApiAttributes;
|
||||
use Flarum\Events\ApiRelationship;
|
||||
use Tobscure\JsonApi\SerializerAbstract;
|
||||
use Flarum\Api\Events\SerializeAttributes;
|
||||
|
||||
abstract class Serializer extends SerializerAbstract
|
||||
{
|
||||
@@ -13,13 +13,6 @@ abstract class Serializer extends SerializerAbstract
|
||||
*/
|
||||
public $actor;
|
||||
|
||||
/**
|
||||
* An array of custom relation methods, grouped by subclass.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $relationMethods = [];
|
||||
|
||||
/**
|
||||
* @param User $actor
|
||||
* @param array|null $include
|
||||
@@ -39,7 +32,7 @@ abstract class Serializer extends SerializerAbstract
|
||||
{
|
||||
$attributes = $this->getDefaultAttributes($model);
|
||||
|
||||
event(new SerializeAttributes($this, $model, $attributes));
|
||||
event(new ApiAttributes($this, $model, $attributes));
|
||||
|
||||
return $attributes;
|
||||
}
|
||||
@@ -57,13 +50,26 @@ abstract class Serializer extends SerializerAbstract
|
||||
*/
|
||||
protected function getRelationshipFromMethod($name)
|
||||
{
|
||||
if (isset(static::$relationMethods[$name])) {
|
||||
return call_user_func(static::$relationMethods[$name], $this);
|
||||
if ($relationship = $this->getCustomRelationship($name)) {
|
||||
return $relationship;
|
||||
}
|
||||
|
||||
return parent::getRelationshipFromMethod($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a custom relationship.
|
||||
*
|
||||
* @param string $name
|
||||
* @return mixed
|
||||
*/
|
||||
protected function getCustomRelationship($name)
|
||||
{
|
||||
return app('events')->until(
|
||||
new ApiRelationship($this, $name)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a closure that returns a Collection/Resource representing a relation.
|
||||
*
|
||||
@@ -154,16 +160,4 @@ abstract class Serializer extends SerializerAbstract
|
||||
{
|
||||
return $this->getRelationship($serializer, $relation, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a custom relation to the model.
|
||||
*
|
||||
* @param string $name The name of the relation.
|
||||
* @param callable $callback The callback to execute. This should return a
|
||||
* relation closure {@see Serializer::getRelationship()}
|
||||
*/
|
||||
public static function setRelationMethod($name, callable $callback)
|
||||
{
|
||||
static::$relationMethods[get_called_class()][$name] = $callback;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user