ro
7c027beb92
when pages where being unpinned from the main menu, there was an error resulting from a missing method reference in the class also rearranged some path references in the asset service class for the sake of better organization
204 lines
6.4 KiB
PHP
204 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;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|