forked from projects/fipamo
ro
f8005aa60d
ported over the backup functionality from the old build to the new while making few tweaks instead of packaging up all files in the site to create massive zip files, now a list of files is created for the user and blog directories that the system will use to download and put them in the appropriate directories, resulting in a such slimmer backup file. archiving images my be added at a later date, but will be kept seperate from the current back up process
195 lines
6.2 KiB
PHP
195 lines
6.2 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use Carbon\Carbon;
|
|
|
|
use function _\find;
|
|
|
|
class SettingsService
|
|
{
|
|
protected $settings;
|
|
protected $folks;
|
|
protected $tags;
|
|
protected $docs;
|
|
protected $contents;
|
|
|
|
public function __construct(DocService $docService, ContentService $contentService)
|
|
{
|
|
$this->folks = json_decode(file_get_contents(env('FOLKS_PATH')), true);
|
|
$this->tags = json_decode(file_get_contents(env('TAGS_PATH')), true);
|
|
$this->docs = $docService;
|
|
$this->contents = $contentService;
|
|
}
|
|
|
|
protected function loadSettings()
|
|
{
|
|
return json_decode(file_get_contents(env('SETTINGS_PATH')), true);
|
|
}
|
|
|
|
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 getFolks()
|
|
{
|
|
return $this->folks;
|
|
}
|
|
|
|
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 sync($data)
|
|
{
|
|
//dd($data->global->renderOnSave);
|
|
$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;
|
|
}
|
|
}
|