1
0
mirror of https://github.com/flarum/core.git synced 2025-10-14 00:15:51 +02:00
Files
php-flarum/src/Extend/ApiAction.php
2015-06-18 12:45:14 +09:30

144 lines
3.1 KiB
PHP

<?php namespace Flarum\Extend;
use Illuminate\Contracts\Container\Container;
class ApiAction implements ExtenderInterface
{
protected $action;
protected $serializer;
protected $addInclude = [];
protected $removeInclude = [];
protected $addLink = [];
protected $removeLink = [];
protected $limitMax;
protected $limit;
protected $addSortFields = [];
protected $removeSortFields = [];
protected $sort;
public function __construct($action)
{
$this->action = $action;
}
public function serializer($serializer)
{
$this->serializer = $serializer;
return $this;
}
public function addInclude($relation, $default = true)
{
$this->addInclude[] = compact('relation', 'default');
return $this;
}
public function removeInclude($relation)
{
$this->removeInclude[] = $relation;
return $this;
}
public function addLink($relation)
{
$this->addLink[] = $relation;
return $this;
}
public function removeLink($relation)
{
$this->removeLink[] = $relation;
return $this;
}
public function limitMax($limitMax)
{
$this->limitMax = $limitMax;
return $this;
}
public function limit($limit)
{
$this->limit = $limit;
return $this;
}
public function addSortField($field)
{
$this->addSortFields[] = $field;
return $this;
}
public function removeSortField($field)
{
$this->removeSortFields[] = $field;
return $this;
}
public function sort($sort)
{
$this->sort = $sort;
return $this;
}
public function extend(Container $container)
{
foreach ((array) $this->action as $action) {
if ($this->serializer) {
$action::$serializer = $this->serializer;
}
foreach ($this->addInclude as $include) {
$action::$include[$include['relation']] = $include['default'];
}
foreach ($this->removeInclude as $relation) {
unset($action::$include[$relation]);
}
foreach ($this->addLink as $relation) {
$action::$link[] = $relation;
}
foreach ($this->removeLink as $relation) {
if (($k = array_search($relation, $action::$link)) !== false) {
unset($action::$link[$k]);
}
}
if ($this->limitMax) {
$action::$limitMax = $this->limitMax;
}
if ($this->limit) {
$action::$limit = $this->limit;
}
foreach ($this->addSortFields as $field) {
$action::$sortFields[] = $field;
}
foreach ($this->removeSortFields as $field) {
if (($k = array_search($field, $action::$sortFields)) !== false) {
unset($action::$sortFields[$k]);
}
}
if ($this->sort) {
$action::$sort = $this->sort;
}
}
}
}