fipamo/app/Services/SettingsService.php

200 lines
6.3 KiB
PHP
Raw Normal View History

<?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 updateTags($update)
{
$this->docs->writeSettings($update, env('TAGS_PATH'));
}
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;
}
}