fipamo/app/Services/SettingsService.php
ro f8005aa60d
turned on backups
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
2024-04-05 12:29:38 -06:00

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;
}
}