www.gusucode.com > Flarum开源的PHP国外手机版论坛 0.1 Beta2 源码程序 > Flarum_v0.1.beta2/flarum/vendor/flarum/core/src/Api/Actions/Discussions/IndexAction.php

    <?php
/*
 * This file is part of Flarum.
 *
 * (c) Toby Zerner <toby.zerner@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Flarum\Api\Actions\Discussions;

use Flarum\Core\Search\SearchCriteria;
use Flarum\Core\Discussions\Search\DiscussionSearcher;
use Flarum\Api\Actions\SerializeCollectionAction;
use Flarum\Api\JsonApiRequest;
use Flarum\Http\UrlGeneratorInterface;
use Tobscure\JsonApi\Document;

class IndexAction extends SerializeCollectionAction
{
    /**
     * @var DiscussionSearcher
     */
    protected $searcher;

    /**
     * @var UrlGeneratorInterface
     */
    protected $url;

    /**
     * @inheritdoc
     */
    public $serializer = 'Flarum\Api\Serializers\DiscussionSerializer';

    /**
     * @inheritdoc
     */
    public $include = [
        'startUser' => true,
        'lastUser' => true,
        'startPost' => false,
        'lastPost' => false,
        'relevantPosts' => true,
        'relevantPosts.discussion' => true,
        'relevantPosts.user' => true
    ];

    /**
     * @inheritdoc
     */
    public $link = [];

    /**
     * @inheritdoc
     */
    public $limitMax = 50;

    /**
     * @inheritdoc
     */
    public $limit = 20;

    /**
     * @inheritdoc
     */
    public $sortFields = ['lastTime', 'commentsCount', 'startTime'];

    /**
     * @inheritdoc
     */
    public $sort;

    /**
     * @param DiscussionSearcher $searcher
     * @param UrlGeneratorInterface $url
     */
    public function __construct(DiscussionSearcher $searcher, UrlGeneratorInterface $url)
    {
        $this->searcher = $searcher;
        $this->url = $url;
    }

    /**
     * Get the discussion results, ready to be serialized and assigned to the
     * document response.
     *
     * @param JsonApiRequest $request
     * @param Document $document
     * @return \Illuminate\Database\Eloquent\Collection
     */
    protected function data(JsonApiRequest $request, Document $document)
    {
        $criteria = new SearchCriteria(
            $request->actor,
            $request->get('filter.q'),
            $request->sort
        );

        $load = array_merge($request->include, ['state']);

        $results = $this->searcher->search($criteria, $request->limit, $request->offset, $load);

        // TODO: add query params (filter, sort, include) to the pagination URLs
        $this->addPaginationLinks(
            $document,
            $request,
            $request->http ? $this->url->toRoute('flarum.api.discussions.index') : '',
            $results->areMoreResults()
        );

        return $results->getResults();
    }
}