forked from projects/fipamo
ro
a0f7bff67c
the module used to sanitize html is no longer maintained, so updated that methodology to use symfony's very sexy sanitizer checked to make sure render on save was working as well.
205 lines
6.4 KiB
PHP
205 lines
6.4 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Data;
|
|
|
|
use Carbon\Carbon;
|
|
use App\Services\Assets\DocService;
|
|
|
|
use function _\find;
|
|
use function _\pull;
|
|
|
|
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;
|
|
$this->contents = $contentService;
|
|
}
|
|
|
|
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;
|
|
|
|
//$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;
|
|
}
|
|
}
|