forked from projects/fipamo
ro
37120efe18
When testing themes, the script wasn't moving all assets that were in subdirectories of the theme css folder, so that's been fixed so it moves everything when testing a theme and rendering the site there was also an issue with saving settings options because the script was referencing email data that was no longer being provided from the front end, so it was erroring out trying to save it. those references have been removed so it's smooth sailing
203 lines
6.3 KiB
PHP
203 lines
6.3 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;
|
|
|
|
//$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;
|
|
}
|
|
}
|