1
0
mirror of https://github.com/flarum/core.git synced 2025-07-22 17:21:27 +02:00

Implement basic settings page

This commit is contained in:
Toby Zerner
2015-07-29 21:00:09 +09:30
parent 9c6b1c0b21
commit 5f1db93e3d
13 changed files with 313 additions and 17 deletions

View File

@@ -2,6 +2,7 @@
use Flarum\Api\Actions\SerializeResourceAction;
use Flarum\Api\JsonApiRequest;
use Flarum\Core\Groups\Group;
use Tobscure\JsonApi\Document;
class ShowAction extends SerializeResourceAction
@@ -14,7 +15,9 @@ class ShowAction extends SerializeResourceAction
/**
* @inheritdoc
*/
public $include = [];
public $include = [
'groups' => true
];
/**
* @inheritdoc
@@ -51,6 +54,10 @@ class ShowAction extends SerializeResourceAction
*/
protected function data(JsonApiRequest $request, Document $document)
{
return app('flarum.forum');
$forum = app('flarum.forum');
$forum->groups = Group::all();
return $forum;
}
}

View File

@@ -0,0 +1,53 @@
<?php namespace Flarum\Api\Actions\Forum;
use Flarum\Core\Exceptions\PermissionDeniedException;
use Flarum\Core\Settings\SettingsRepository;
use Flarum\Api\Actions\SerializeResourceAction;
use Flarum\Api\JsonApiRequest;
use Tobscure\JsonApi\Document;
class UpdateAction extends SerializeResourceAction
{
/**
* @inheritdoc
*/
public $serializer = 'Flarum\Api\Serializers\ForumSerializer';
/**
* @var SettingsRepository
*/
protected $settings;
/**
* @param SettingsRepository $settings
*/
public function __construct(SettingsRepository $settings)
{
$this->settings = $settings;
}
/**
* Get the forum, ready to be serialized and assigned to the JsonApi
* response.
*
* @param JsonApiRequest $request
* @param Document $document
* @return \Flarum\Core\Forum
*/
protected function data(JsonApiRequest $request, Document $document)
{
if (! $request->actor->isAdmin()) {
throw new PermissionDeniedException;
}
$config = $request->get('data.attributes.config');
if (is_array($config)) {
foreach ($config as $k => $v) {
$this->settings->set($k, $v);
}
}
return app('flarum.forum');
}
}

View File

@@ -94,6 +94,13 @@ class ApiServiceProvider extends ServiceProvider
$this->action('Flarum\Api\Actions\Forum\ShowAction')
);
// Save forum information
$routes->patch(
'/forum',
'flarum.api.forum.update',
$this->action('Flarum\Api\Actions\Forum\UpdateAction')
);
// Retrieve authentication token
$routes->post(
'/token',

View File

@@ -1,6 +1,7 @@
<?php namespace Flarum\Api\Serializers;
use Flarum\Core;
use Flarum\Core\Groups\Permission;
class ForumSerializer extends Serializer
{
@@ -22,13 +23,29 @@ class ForumSerializer extends Serializer
*/
protected function getDefaultAttributes($forum)
{
return [
'title' => $forum->title,
$attributes = [
'title' => Core::config('forum_title'),
'baseUrl' => Core::config('base_url'),
'apiUrl' => Core::config('api_url'),
'welcomeTitle' => Core::config('welcome_title'),
'welcomeMessage' => Core::config('welcome_message'),
'themePrimaryColor' => Core::config('theme_primary_color')
];
if ($this->actor->isAdmin()) {
$attributes['config'] = app('Flarum\Core\Settings\SettingsRepository')->all();
$attributes['availableLocales'] = app('flarum.localeManager')->getLocales();
$attributes['permissions'] = Permission::map();
}
return $attributes;
}
/**
* @return callable
*/
protected function groups()
{
return $this->hasMany('Flarum\Api\Serializers\GroupSerializer');
}
}

View File

@@ -2,12 +2,24 @@
class LocaleManager
{
protected $locales = [];
protected $translations = [];
protected $js = [];
protected $config = [];
public function addLocale($locale, $name)
{
$this->locales[$locale] = $name;
}
public function getLocales()
{
return $this->locales;
}
public function addTranslations($locale, $translations)
{
if (! isset($this->translations[$locale])) {

View File

@@ -14,15 +14,16 @@ class LocaleServiceProvider extends ServiceProvider
{
$manager = $this->app->make('flarum.localeManager');
$this->registerLocale($manager, 'en');
$this->registerLocale($manager, 'en', 'English');
event(new RegisterLocales($manager));
}
public function registerLocale(LocaleManager $manager, $locale)
public function registerLocale(LocaleManager $manager, $locale, $title)
{
$path = __DIR__.'/../../locale/'.$locale;
$manager->addLocale($locale, $title);
$manager->addTranslations($locale, $path.'.yml');
$manager->addConfig($locale, $path.'.php');
$manager->addJsFile($locale, $path.'.js');