fipamo/app/Http/Controllers/FrontController.php
ro 743d7c4d90
routing overhaul
previously all the of the page routing was handlede through controller
organized by CRUD methods. it worked, but organizing by CRUD and not
purpose resulted in more time spent looking for a specific task through
controllers, so it turned out not to an effecient way of organizing.

so routing has been completely reorganized into laravel's web routing
section and methods have been moved to their appropriate controller so
tasks are much easier to find

front facing page routing turned out to be a bit more tricky that
anticipated do the overap of routing paths, but it only affects dynamic
page rendering and there's a patch in place that handles that issue
until a better solution is found. Rendered HTML pages works fine.

whew!
2025-05-16 17:37:53 -06:00

137 lines
5.4 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Interfaces\PageRepositoryInterface;
use App\Services\Assets\AssetService;
use App\Services\Data\SettingsService;
use App\Services\Data\SortingService;
use App\Services\Upkeep\InitService;
use App\Http\Controllers\DashController;
use Illuminate\Http\Request;
use function _\find;
class FrontController extends Controller
{
protected $settings;
protected PageRepositoryInterface $pages;
protected AssetService $assets;
protected SortingService $sort;
protected $init;
protected $dash;
public function __construct(
PageRepositoryInterface $pageRepository,
SettingsService $settingsService,
AssetService $assetService,
SortingService $sortService,
InitService $initService,
DashController $dashController,
) {
$this->pages = $pageRepository;
$this->settings = $settingsService;
$this->assets = $assetService;
$this->sort = $sortService;
$this->init = $initService;
$this->dash = $dashController;
}
public function start($one = 00, $two = 00, $three = 00)
{
$global = $this->settings->getGlobal();
$currentTheme = $this->assets->getCurrentTheme();
$template;
$pageData = [];
$pages = $this->pages->getAll();
//weird bug where the whole url is being passed with optional params
//for now, just split it manually and set it to the vars used
$paths = explode('/', $one);
if (isset($paths[0])) {
$one = $paths[0];
}
if (isset($paths[1])) {
$two = $paths[1];
}
if (isset($paths[2])) {
$three = $paths[2];
}
//check if configs are present
if (file_exists(env('FOLKS_PATH')) && file_exists(env('SETTINGS_PATH'))) {
if ($global['dynamicRender'] == 'true') {
if (is_numeric($one)) {
if ($one == 00 || !isset($one)) {
$page = $pages->where('id', 0)->first();
$pageData = $this->sort->page($page, false);
$template = $currentTheme . '.index';
} else {
$page = $this->pages->getBySlug($three);
$pageData = $this->sort->page($page, false);
$template = $currentTheme . '.' . $page['layout'];
}
} else {
if ($one == null || $one == '') {
$page = $pages->where('id', 0)->first();
$pageData = $this->sort->page($page, false);
$template = $currentTheme . '.index';
} else {
if ($one == 'archives' || $one == 'archive' || $one == 'tags') {
$currentTheme = $this->assets->getCurrentTheme();
switch ($one) {
case 'archive':
case 'archives':
$template = $currentTheme . '.archive';
$pageData = $this->sort->archive(false);
break;
case 'tags':
$template = $currentTheme . '.tags';
$tags = $this->sort->tags(false);
$tagData = find($tags['tags'], ['tag_name' => $two]);
$pageData = [
'theme' => $currentTheme, // for theme kit
'title' => 'Pages Tagged as ' . $two,
'dynamicRender' => $tags['dynamicRender'],
'info' => $tags['info'],
'menu' => $tags['menu'],
'pages' => $tagData['pages'],
'media' => $tags['media'],
];
break;
}
} else {
$page = $this->pages->getBySlug($one);
$pageData = $this->sort->page($page, false);
$template = $currentTheme . '.' . $page['layout'];
}
}
}
return view($template, $pageData);
} else {
if (is_file('../public/index.html')) {
return response()->file('../public/index.html');
} else {
return redirect()->intended('dashboard/start');
}
}
} else {
return view('back.init', ["status" => false, "title" => "Set Up"]);
}
}
//setup up a new site or restore from back up
public function init($task, Request $request)
{
$result = [];
switch ($task) {
case 'fresh':
$result = $this->init->fresh(json_decode($request->getContent()));
break;
case 'restore':
$result = $this->init->restore($request);
break;
}
return response()->json($result)->header('Content-Type', 'application/json');
}
}