| Current Path : /var/www/html/reddsis/app/Http/Controllers/ |
| Current File : /var/www/html/reddsis/app/Http/Controllers/FrontendSiteRenderController.php |
<?php
namespace App\Http\Controllers;
use App\Models\Backend\ContentArticle;
use App\Models\Backend\FrontendSite;
use App\Services\FrontendSiteCacheService;
use App\Services\PortalHandler;
use Illuminate\Http\Request;
class FrontendSiteRenderController extends Controller
{
public function __construct(
protected PortalHandler $handler,
protected FrontendSiteCacheService $cache
) {}
public function resolve(Request $request, string $slug, ?string $subSlug = null)
{
if (!$subSlug) {
$path = $request->path();
$parts = explode('/', $path);
$slug = $parts[0] ?? $slug;
$subSlug = $parts[1] ?? null;
}
// Single slug — check if it's a page in the default site first
if (!$subSlug) {
$defaultSite = $this->cache->getDefaultSite();
if ($defaultSite) {
$defaultPages = $defaultSite['pages'] ?? [];
if (isset($defaultPages[$slug])) {
return $this->render($this->handler->handle($defaultSite['slug'], $slug));
}
}
}
// Check if it's a CMS site
$siteMeta = $this->cache->get($slug);
if ($siteMeta) {
if ($subSlug) {
// Check if subSlug is a page in this site
$sitePages = $siteMeta['pages'] ?? [];
if (isset($sitePages[$subSlug])) {
return $this->render($this->handler->handle($slug, $subSlug));
}
// Fallback: check if subSlug is an article code
$article = ContentArticle::where('article_code', $subSlug)
->where('article_status', 'ACTIVE')
->exists();
if ($article && isset($sitePages['article'])) {
request()->merge(['id' => $subSlug]);
return $this->render($this->handler->handle($slug, 'article'));
}
abort(404);
}
return $this->render($this->handler->handle($slug));
}
// Not a CMS site
abort(404);
}
public function default()
{
$site = FrontendSite::where('is_default', true)->where('status', true)->first();
if (!$site) {
$defaultExists = FrontendSite::where('is_default', true)->exists();
return view('frontend.empty-site', [
'siteName' => 'Default Site',
'siteSlug' => '/',
'state' => $defaultExists ? 'site-inactive' : 'no-pages',
]);
}
return $this->render($this->handler->handle($site->slug));
}
public function home($siteSlug)
{
return $this->render($this->handler->handle($siteSlug));
}
public function page($siteSlug, $slug)
{
return $this->render($this->handler->handle($siteSlug, $slug));
}
protected function render(string $html)
{
return view('frontend.cms', compact('html'));
}
}