ro
1f62e6f816
decided to keep the sorting service class as is and remix how it works to return data objects rather than just settings information to render pages. the overall size of the class is still large but now there are some opportunites to move around some methodolgy to reduce it. also made the necessary changes in the render service class and the theme controller to use the new methodology
130 lines
3.9 KiB
PHP
130 lines
3.9 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';
|
|
$pageData = $this->sort->archive(false);
|
|
$location = '../public/archives.html';
|
|
File::put(
|
|
$location,
|
|
view($template)
|
|
->with($pageData)
|
|
->render()
|
|
);
|
|
}
|
|
|
|
public function tags()
|
|
{
|
|
$data = $this->sort->tags(false);
|
|
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['dynamicRender'],
|
|
'info' => $data['info'],
|
|
'menu' => $data['menu'],
|
|
'pages' => $item['pages'],
|
|
'media' => $data['media'],
|
|
];
|
|
|
|
$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';
|
|
|
|
$pageData = $this->sort->page($page, false);
|
|
|
|
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());
|
|
}
|
|
}
|
|
}
|