1
0
mirror of https://github.com/flarum/core.git synced 2025-10-22 12:16:07 +02:00

Rework public API based on events

This commit is contained in:
Toby Zerner
2015-07-18 22:59:47 +09:30
parent 5085c09c30
commit 57650fa648
136 changed files with 1157 additions and 1245 deletions

View File

@@ -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

View File

@@ -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.

View File

@@ -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') : '',

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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'),

View File

@@ -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

View File

@@ -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

View File

@@ -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