mirror of
https://github.com/flarum/framework.git
synced 2025-03-10 20:31:24 +08:00
64 lines
2.0 KiB
PHP
64 lines
2.0 KiB
PHP
![]() |
<?php
|
||
|
|
||
|
/*
|
||
|
* This file is part of Flarum.
|
||
|
*
|
||
|
* For detailed copyright and license information, please view the
|
||
|
* LICENSE file that was distributed with this source code.
|
||
|
*/
|
||
|
|
||
|
namespace Flarum\Extend;
|
||
|
|
||
|
use Flarum\Api\Serializer\AbstractSerializer;
|
||
|
use Flarum\Api\Serializer\ForumSerializer;
|
||
|
use Flarum\Extension\Extension;
|
||
|
use Flarum\Foundation\ContainerUtil;
|
||
|
use Flarum\Settings\SettingsRepositoryInterface;
|
||
|
use Illuminate\Contracts\Container\Container;
|
||
|
|
||
|
class Settings implements ExtenderInterface
|
||
|
{
|
||
|
private $settings = [];
|
||
|
|
||
|
/**
|
||
|
* Serialize a setting value to the ForumSerializer attributes.
|
||
|
*
|
||
|
* @param string $attributeName: The attribute name to be used in the ForumSerializer attributes array.
|
||
|
* @param string $key: The key of the setting.
|
||
|
* @param string|callable|null $callback: Optional callback to modify the value before serialization.
|
||
|
* @return $this
|
||
|
*/
|
||
|
public function serializeToForum(string $attributeName, string $key, $callback = null)
|
||
|
{
|
||
|
$this->settings[$key] = compact('attributeName', 'callback');
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
public function extend(Container $container, Extension $extension = null)
|
||
|
{
|
||
|
if (! empty($this->settings)) {
|
||
|
AbstractSerializer::addMutator(
|
||
|
ForumSerializer::class,
|
||
|
function () use ($container) {
|
||
|
$settings = $container->make(SettingsRepositoryInterface::class);
|
||
|
$attributes = [];
|
||
|
|
||
|
foreach ($this->settings as $key => $setting) {
|
||
|
$value = $settings->get($key, null);
|
||
|
|
||
|
if (isset($setting['callback'])) {
|
||
|
$callback = ContainerUtil::wrapCallback($setting['callback'], $container);
|
||
|
$value = $callback($value);
|
||
|
}
|
||
|
|
||
|
$attributes[$setting['attributeName']] = $value;
|
||
|
}
|
||
|
|
||
|
return $attributes;
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|