Your IP : 216.73.216.79


Current Path : /var/www/html/reddsis/app/Http/Controllers/
Upload File :
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'));
    }
}