mirror of
https://github.com/flarum/core.git
synced 2025-07-24 02:01:19 +02:00
Merge branch 'master' into psr-7
Conflicts: src/Api/Actions/Discussions/IndexAction.php src/Api/Actions/SerializeAction.php src/Core/Formatter/FormatterManager.php src/Extend/ForumAssets.php src/Forum/Actions/IndexAction.php src/Forum/ForumServiceProvider.php
This commit is contained in:
@@ -84,15 +84,11 @@ class IndexAction extends SerializeCollectionAction
|
||||
$load = array_merge($request->include, ['state']);
|
||||
$results = $this->searcher->search($criteria, $request->limit, $request->offset, $load);
|
||||
|
||||
if (($total = $results->getTotal()) !== null) {
|
||||
$document->addMeta('total', $total);
|
||||
}
|
||||
|
||||
static::addPaginationLinks(
|
||||
$document,
|
||||
$request,
|
||||
$this->url->toRoute('flarum.api.discussions.index'),
|
||||
$total ?: $results->areMoreResults()
|
||||
$results->areMoreResults()
|
||||
);
|
||||
|
||||
return $results->getDiscussions();
|
||||
|
@@ -93,7 +93,7 @@ class ShowAction extends SerializeResourceAction
|
||||
|
||||
$discussion = $this->discussions->findOrFail($request->get('id'), $user);
|
||||
|
||||
$discussion->posts_ids = $discussion->posts()->whereCan($user, 'view')->get(['id'])->fetch('id')->all();
|
||||
$discussion->posts_ids = $discussion->visiblePosts($user)->lists('id');
|
||||
|
||||
if (in_array('posts', $request->include)) {
|
||||
$length = strlen($prefix = 'posts.');
|
||||
|
29
framework/core/src/Api/Actions/Forum/ShowAction.php
Normal file
29
framework/core/src/Api/Actions/Forum/ShowAction.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php namespace Flarum\Api\Actions\Forum;
|
||||
|
||||
use Flarum\Core\Models\Forum;
|
||||
use Flarum\Api\Actions\SerializeResourceAction;
|
||||
use Flarum\Api\JsonApiRequest;
|
||||
use Flarum\Api\JsonApiResponse;
|
||||
|
||||
class ShowAction extends SerializeResourceAction
|
||||
{
|
||||
/**
|
||||
* The name of the serializer class to output results with.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $serializer = 'Flarum\Api\Serializers\ForumSerializer';
|
||||
|
||||
/**
|
||||
* Get the forum, ready to be serialized and assigned to the JsonApi
|
||||
* response.
|
||||
*
|
||||
* @param \Flarum\Api\JsonApiRequest $request
|
||||
* @param \Flarum\Api\JsonApiResponse $response
|
||||
* @return \Flarum\Core\Models\Forum
|
||||
*/
|
||||
protected function data(JsonApiRequest $request, JsonApiResponse $response)
|
||||
{
|
||||
return app('flarum.forum');
|
||||
}
|
||||
}
|
@@ -1,11 +1,12 @@
|
||||
<?php namespace Flarum\Api\Actions;
|
||||
|
||||
use Flarum\Api\Events\WillRespond;
|
||||
use Flarum\Api\Request;
|
||||
use Flarum\Api\JsonApiRequest;
|
||||
use Flarum\Api\JsonApiResponse;
|
||||
use Tobscure\JsonApi\Criteria;
|
||||
use Tobscure\JsonApi\Document;
|
||||
use Tobscure\JsonApi\SerializerInterface;
|
||||
use Tobscure\JsonApi\Criteria;
|
||||
|
||||
abstract class SerializeAction extends JsonApiAction
|
||||
{
|
||||
@@ -68,15 +69,18 @@ abstract class SerializeAction extends JsonApiAction
|
||||
public function respond(Request $request)
|
||||
{
|
||||
$request = static::buildJsonApiRequest($request);
|
||||
|
||||
$document = new Document();
|
||||
|
||||
$data = $this->data($request, $document);
|
||||
|
||||
$serializer = new static::$serializer($request->actor, $request->include, $request->link);
|
||||
|
||||
$document->setData($this->serialize($serializer, $data));
|
||||
$response = new JsonApiResponse($document);
|
||||
|
||||
return new JsonApiResponse($document);
|
||||
event(new WillRespond($this, $data, $request, $response));
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -29,6 +29,8 @@ class ShowAction extends SerializeResourceAction
|
||||
'groups' => true
|
||||
];
|
||||
|
||||
public static $link = [];
|
||||
|
||||
/**
|
||||
* Instantiate the action.
|
||||
*
|
||||
|
20
framework/core/src/Api/Events/WillRespond.php
Normal file
20
framework/core/src/Api/Events/WillRespond.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php namespace Flarum\Api\Events;
|
||||
|
||||
class WillRespond
|
||||
{
|
||||
public $action;
|
||||
|
||||
public $data;
|
||||
|
||||
public $request;
|
||||
|
||||
public $response;
|
||||
|
||||
public function __construct($action, &$data, $request, $response)
|
||||
{
|
||||
$this->action = $action;
|
||||
$this->data = &$data;
|
||||
$this->request = $request;
|
||||
$this->response = $response;
|
||||
}
|
||||
}
|
@@ -4,6 +4,7 @@ use Tobscure\JsonApi\SerializerAbstract;
|
||||
use Flarum\Api\Events\SerializeAttributes;
|
||||
use Flarum\Api\Events\SerializeRelationship;
|
||||
use Flarum\Support\Actor;
|
||||
use Illuminate\Database\Eloquent\Relations\Relation;
|
||||
use Closure;
|
||||
|
||||
/**
|
||||
@@ -54,7 +55,7 @@ abstract class BaseSerializer extends SerializerAbstract
|
||||
$data = $relation($model, $include);
|
||||
} else {
|
||||
if ($include) {
|
||||
$data = !is_null($model->$relation) ? $model->$relation : $model->$relation()->getResults();
|
||||
$data = $model->getRelation($relation);
|
||||
} elseif ($many) {
|
||||
$relationIds = $relation.'_ids';
|
||||
$data = $model->$relationIds ?: $model->$relation()->get(['id'])->fetch('id')->all();
|
||||
|
@@ -2,6 +2,8 @@
|
||||
|
||||
class DiscussionBasicSerializer extends BaseSerializer
|
||||
{
|
||||
protected static $relationships = [];
|
||||
|
||||
/**
|
||||
* The resource type.
|
||||
*
|
||||
|
31
framework/core/src/Api/Serializers/ForumSerializer.php
Normal file
31
framework/core/src/Api/Serializers/ForumSerializer.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php namespace Flarum\Api\Serializers;
|
||||
|
||||
class ForumSerializer extends BaseSerializer
|
||||
{
|
||||
/**
|
||||
* The resource type.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $type = 'forums';
|
||||
|
||||
protected function id($forum)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize attributes of a Forum model for JSON output.
|
||||
*
|
||||
* @param Forum $forum The Forum model to serialize.
|
||||
* @return array
|
||||
*/
|
||||
protected function attributes($forum)
|
||||
{
|
||||
$attributes = [
|
||||
'title' => $forum->title
|
||||
];
|
||||
|
||||
return $this->extendAttributes($forum, $attributes);
|
||||
}
|
||||
}
|
@@ -2,6 +2,8 @@
|
||||
|
||||
class PostBasicSerializer extends BaseSerializer
|
||||
{
|
||||
protected static $relationships = [];
|
||||
|
||||
/**
|
||||
* The resource type.
|
||||
*
|
||||
|
Reference in New Issue
Block a user