forked from projects/fipamo
ro
8c375e6ba1
setting sync is working but member data was not being updated in the folks file or in the current active session, so that's been addressed still need to turn on avatar updating as well, but that is tied to updating the settings page, so that will be handled when image uploads for that area are reactivated
207 lines
6.5 KiB
PHP
207 lines
6.5 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Data;
|
|
|
|
use Carbon\Carbon;
|
|
use App\Services\Assets\DocService;
|
|
|
|
use function _\find;
|
|
|
|
class SettingsService
|
|
{
|
|
protected $settings;
|
|
protected $tags;
|
|
protected $docs;
|
|
protected $contents;
|
|
|
|
public function __construct(DocService $docService, ContentService $contentService)
|
|
{
|
|
if (file_exists(env('TAGS_PATH'))) {
|
|
$this->tags = json_decode(file_get_contents(env('TAGS_PATH')), true);
|
|
} else {
|
|
$this->tags = [];
|
|
}
|
|
|
|
$this->docs = $docService;
|
|
}
|
|
|
|
protected function loadSettings()
|
|
{
|
|
$settings = [];
|
|
//if config files aren't avaiable, load templates
|
|
if (file_exists(env('SETTINGS_PATH'))) {
|
|
$settings = json_decode(file_get_contents(env('SETTINGS_PATH')), true);
|
|
} else {
|
|
$settings = json_decode(
|
|
file_get_contents('../content/init/settings-template.json'),
|
|
true
|
|
);
|
|
}
|
|
return $settings;
|
|
}
|
|
|
|
public function getSettings()
|
|
{
|
|
return $this->loadSettings();
|
|
}
|
|
|
|
public function getGlobal()
|
|
{
|
|
$this->settings = $this->loadSettings();
|
|
return $this->settings['global'];
|
|
}
|
|
|
|
public function getEmail()
|
|
{
|
|
$this->settings = $this->loadSettings();
|
|
return $this->settings['email'];
|
|
}
|
|
|
|
public function getMenu()
|
|
{
|
|
$this->settings = $this->loadSettings();
|
|
return $this->settings['menu'];
|
|
}
|
|
|
|
public function getTags()
|
|
{
|
|
return $this->tags;
|
|
}
|
|
|
|
public function updatePageIndex()
|
|
{
|
|
$this->settings = $this->loadSettings();
|
|
$this->settings['library_stats']['current_index']++;
|
|
$this->docs->writeSettings($this->settings);
|
|
}
|
|
|
|
public function updateGlobalData($key, $value)
|
|
{
|
|
$this->settings = $this->loadSettings();
|
|
$this->settings['global'][$key] = $value;
|
|
$this->docs->writeSettings($this->settings);
|
|
}
|
|
|
|
public function updateMenu($body)
|
|
{
|
|
$settings = $this->loadSettings();
|
|
//$menu = $settings["menu"];
|
|
$item = [
|
|
'title' => $body->title,
|
|
'id' => $body->id,
|
|
'uuid' => $body->uuid,
|
|
'slug' => $body->slug,
|
|
'path' => $body->path,
|
|
];
|
|
if ($body->menu == 'true') {
|
|
if (!find($settings['menu'], ['uuid' => $item['uuid']])) {
|
|
array_push($settings['menu'], $item);
|
|
}
|
|
} else {
|
|
if (find($settings['menu'], ['uuid' => $item['uuid']])) {
|
|
pull($settings['menu'], $item);
|
|
}
|
|
}
|
|
$this->docs->writeSettings($settings);
|
|
}
|
|
|
|
public function updateTags($update)
|
|
{
|
|
$this->docs->writeSettings($update, env('TAGS_PATH'));
|
|
}
|
|
|
|
public function sync($data)
|
|
{
|
|
$settings = $this->getSettings();
|
|
$settings['global']['base_url'] = $data->global->base_url;
|
|
$settings['global']['title'] = $data->global->title;
|
|
$settings['global']['descriptions'] = $data->global->descriptions;
|
|
$settings['global']['private'] = $data->global->private;
|
|
$settings['global']['renderOnSave'] = $data->global->renderOnSave;
|
|
$settings['global']['theme'] = $data->global->theme;
|
|
$settings['global']['externalAPI'] = $data->global->externalAPI;
|
|
$settings['global']['dynamicRender'] = $data->global->dynamicRender;
|
|
|
|
//TODO: This is for to be created MemberServices
|
|
//Member::updateData('handle', $data['member']['handle']);
|
|
//Member::updateData('email', $data['member']['email']);
|
|
|
|
$settings['email']['active'] = $data->email->active;
|
|
$settings['email']['smtp'] = $data->email->smtp;
|
|
$settings['email']['mailgun'] = $data->email->mailgun;
|
|
|
|
return $this->docs::writeSettings($settings);
|
|
}
|
|
|
|
public function navSync($data)
|
|
{
|
|
$settings = $this->loadSettings();
|
|
$pages = $this->contents->loadAllPages();
|
|
$remove = $data->remove;
|
|
$result = [];
|
|
//if remove contains id, find nav item page and set menu to false
|
|
if ($remove != null || $remove != '') {
|
|
$page = $pages->where('uuid', $remove)->first();
|
|
$page['menu'] = 'false';
|
|
$page['published']
|
|
? ($page['published'] = 'true')
|
|
: ($page['published'] = 'false');
|
|
$page['featured']
|
|
? ($page['featured'] = 'true')
|
|
: ($page['featured'] = 'false');
|
|
$page['deleted']
|
|
? ($page['deleted'] = 'true')
|
|
: ($page['deleted'] = 'false');
|
|
$updated = Carbon::now();
|
|
$created = new Carbon($page['rawCreated']);
|
|
$page['created'] = $created->format("Y-m-d\TH:i:sP");
|
|
$page['updated'] = $updated->format("Y-m-d\TH:i:sP");
|
|
|
|
if ($page['layout'] == 'index') {
|
|
$writePath = '../content/pages/start/index.md';
|
|
} else {
|
|
$writePath = '../content/pages/' . $page['path'] . '/' . $page['slug'] . '.md';
|
|
}
|
|
try {
|
|
$object = (object) $page;
|
|
$object->imageList = $page['feature'];
|
|
$object->fileList = $page['files'];
|
|
$this->docs::writePages('write', $page['path'], $writePath, $this->docs::objectToMD($object));
|
|
} catch (\Exception $e) {
|
|
$result = [
|
|
'message' => 'Page Was Not Updated. Be cool ',
|
|
'type' => 'pageUpdateError',
|
|
'error' => $e->getMessage(),
|
|
];
|
|
return $result;
|
|
}
|
|
}
|
|
|
|
$settings['menu'] = [];
|
|
$items = $data->menu;
|
|
foreach ($items as $item) {
|
|
array_push($settings['menu'], [
|
|
'title' => $item->title,
|
|
'id' => $item->id,
|
|
'uuid' => $item->uuid,
|
|
'slug' => $item->slug,
|
|
'path' => $item->path,
|
|
]);
|
|
}
|
|
try {
|
|
$this->docs->writeSettings($settings);
|
|
$result = [
|
|
'message' => 'Navigation updated. Very slick!',
|
|
'type' => 'menuUpdated',
|
|
];
|
|
} catch (\Exception $e) {
|
|
$result = [
|
|
'message' => 'Navigation Update Error. It\'ll be ok!',
|
|
'type' => 'menuUpdateError',
|
|
];
|
|
};
|
|
|
|
return $result;
|
|
}
|
|
}
|