forked from projects/fipamo
ro
eda377aba3
with the setting page set up, now the the settings api can be added, beginning with the ability to render all files from settings. the base settings api class is set up, so now the rest of the methods can be added
160 lines
5.2 KiB
PHP
160 lines
5.2 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use Illuminate\Support\Facades\File;
|
|
|
|
class RenderService
|
|
{
|
|
private $sort;
|
|
private $settings;
|
|
private $contents;
|
|
private $pageInfo;
|
|
private $menu;
|
|
private $background;
|
|
private $theme;
|
|
|
|
public function __construct(
|
|
SortingService $sortingService,
|
|
SettingsService $settingsService,
|
|
ContentService $contentService
|
|
) {
|
|
$this->sort = $sortingService;
|
|
$this->settings = $settingsService;
|
|
$this->contents = $contentService;
|
|
$this->theme = $this->settings->getGlobal()['theme'];
|
|
}
|
|
|
|
public function publishAll()
|
|
{
|
|
$message = [];
|
|
$dynamicRender = $this->settings->getGlobal()['dynamicRender'];
|
|
if (isset($dynamicRender) && $dynamicRender === 'true') {
|
|
$message = [
|
|
'message' => 'Auto Rendering is already enabled!',
|
|
'type' => 'RENDER_SUCCESS',
|
|
];
|
|
} else {
|
|
try {
|
|
$this->archive();
|
|
$this->tags();
|
|
$this->pages();
|
|
$message = [
|
|
'message' => 'Site Rendered. GOOD EFFORT',
|
|
'type' => 'RENDER_SUCCESS',
|
|
];
|
|
} catch (Error $error) {
|
|
$message = [
|
|
'message' => 'Issue With Rendering. DONT PANIC',
|
|
'type' => 'RENDER_ERROR',
|
|
];
|
|
}
|
|
}
|
|
|
|
return $message;
|
|
}
|
|
|
|
public function archive()
|
|
{
|
|
$template = $this->theme . '.archive';
|
|
$data = $this->sort->archive();
|
|
$pageData = [
|
|
'theme' => $this->theme, // for theme kit
|
|
'title' => 'Archives',
|
|
'dynamicRender' => $data['info']['dynamicRender'],
|
|
'archive' => $data['archive'],
|
|
'info' => $data['info'],
|
|
'menu' => $data['info']['menu'],
|
|
'media' => [
|
|
['file' => $data['info']['image'],
|
|
'type' => trim(pathinfo($data['info']['image'], PATHINFO_EXTENSION))]
|
|
],
|
|
];
|
|
$location = '../public/archive.html';
|
|
File::put(
|
|
$location,
|
|
view($template)
|
|
->with($pageData)
|
|
->render()
|
|
);
|
|
}
|
|
|
|
public function tags()
|
|
{
|
|
$data = $this->sort->tags();
|
|
foreach ($data['tags'] as $item) {
|
|
//$template = 'tags.twig';
|
|
$template = $this->theme . '.tags';
|
|
$pageData = [
|
|
'theme' => $this->theme, // for theme kit
|
|
'title' => 'Pages Tagged as ' . $item['tag_name'],
|
|
'dynamicRender' => $data['info']['dynamicRender'],
|
|
'info' => $data['info'],
|
|
'menu' => $data['info']['menu'],
|
|
'pages' => $item['pages'],
|
|
'media' => [
|
|
['file' => $data['info']['image'],
|
|
'type' => trim(pathinfo($data['info']['image'], PATHINFO_EXTENSION))]
|
|
],
|
|
];
|
|
|
|
$location = '../public/tags/' . $item['slug'] . '.html';
|
|
|
|
if (!is_dir('../public/tags')) {
|
|
mkdir('../public/tags', 0755, true);
|
|
}
|
|
|
|
File::put(
|
|
$location,
|
|
view($template)
|
|
->with($pageData)
|
|
->render()
|
|
);
|
|
}
|
|
}
|
|
|
|
public function pages()
|
|
{
|
|
$pages = $this->contents->loadAllPages();
|
|
foreach ($pages as $page) {
|
|
$template;
|
|
$page['layout'] == 'index' ?
|
|
$template = $this->theme . '.index' :
|
|
$template = $this->theme . '.page';
|
|
|
|
$data = $this->sort->page($page);
|
|
$pageData = [
|
|
"theme" => $this->theme,
|
|
"status" => false,
|
|
"title" => $data['title'],
|
|
"meta" => $data['meta'],
|
|
"menu" => $data['menu'],
|
|
"info" => $data['info'],
|
|
"media" => $data['media'],
|
|
"files" => $data['files'],
|
|
"content" => $data['content'],
|
|
"recent" => $data['recent'],
|
|
"feature" => $data['featured'],
|
|
"tags" => $data['tags'],
|
|
"dynamicRender" => $data['dynamicRender'],
|
|
];
|
|
|
|
if (str_contains($page['layout'], 'index')) {
|
|
$location = '../public/index.html';
|
|
} else {
|
|
// if page is a menu item, render the page on public root
|
|
if ($page['menu'] == 'true') {
|
|
$location = '../public/' . $page['slug'] . '.html';
|
|
} else {
|
|
$dir = '../public/' . $page['path'];
|
|
if (!is_dir($dir)) {
|
|
mkdir($dir, 0755, true);
|
|
}
|
|
$location = '../public/' . $page['path'] . '/' . $page['slug'] . '.html';
|
|
}
|
|
}
|
|
File::put($location, view($template)->with($pageData)->render());
|
|
}
|
|
}
|
|
}
|