Your IP : 216.73.216.79


Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/
Upload File :
Current File : /var/www/html/reddsis/app/Http/Controllers/Backend/FrontendSiteController.php

<?php

namespace App\Http\Controllers\Backend;

use App\Http\Controllers\Controller;
use App\Http\Requests\Backend\FrontendSiteRequest;
use App\Models\Backend\FrontendSite;
use App\Models\Backend\FrontendComponent;
use App\Services\BladeSyncService;
use Illuminate\Http\Request;

class FrontendSiteController extends Controller
{
    public function index(Request $request)
    {
        $search = $request->get('search');
        $sites = FrontendSite::with('header', 'footer')
            ->when($search, fn($q) => $q->where(function($q) use ($search) {
                $q->where('name', 'like', "%{$search}%")
                  ->orWhere('slug', 'like', "%{$search}%");
            }))
            ->orderByDesc('is_default')
            ->orderByDesc('status')
            ->orderBy('sort_order')
            ->orderBy('name')
            ->paginate(10);

        return view('backend.module.frontendSite.site.index', ['sites' => $sites, 'search' => $search]);
    }

    public function create()
    {
        $headers = FrontendComponent::where('category', 'Header')->where('status', true)->get();
        $footers = FrontendComponent::where('category', 'Footer')->where('status', true)->get();
        $components = FrontendComponent::where('status', true)->get();

        return view('backend.module.frontendSite.site.create', ['headers' => $headers, 'footers' => $footers, 'components' => $components]);
    }

    public function store(FrontendSiteRequest $request)
    {
        $data = $request->validated();
        $data['status'] = $request->boolean('status');
        $data['is_default'] = $request->boolean('is_default');

        if ($data['is_default']) {
            FrontendSite::where('is_default', true)->update(['is_default' => false]);
        }

        $site = FrontendSite::create($data);

        if (FrontendSite::count() === 1) {
            $site->update(['is_default' => true]);
        }

        app(BladeSyncService::class)->syncAll();

        if ($request->ajax()) {
            return response()->json(['message' => 'Code updated successfully!']);
        }

        flash()->success('Site created successfully!');
        return redirect()->route('frontend-site.sites.index');
    }

    public function edit($id)
    {
        $site = FrontendSite::findOrFail($id);
        $headers = FrontendComponent::where('category', 'Header')->where('status', true)->get();
        $footers = FrontendComponent::where('category', 'Footer')->where('status', true)->get();
        $components = FrontendComponent::where('status', true)->get();

        return view('backend.module.frontendSite.site.edit', ['site' => $site, 'headers' => $headers, 'footers' => $footers, 'components' => $components]);
    }

    public function update(FrontendSiteRequest $request, $id)
    {
        $site = FrontendSite::findOrFail($id);
        $data = $request->validated();
        $data['status'] = $request->boolean('status');
        $data['is_default'] = $request->boolean('is_default');

        if ($data['is_default']) {
            FrontendSite::where('is_default', true)->update(['is_default' => false]);
            $site->refresh();
        }

        $site->update($data);

        app(BladeSyncService::class)->syncAll();

        if ($request->ajax()) {
            return response()->json(['message' => 'Code updated successfully!']);
        }

        flash()->success('Site updated successfully!');
        return redirect()->route('frontend-site.sites.index');
    }

    public function destroy($id)
    {
        $site = FrontendSite::findOrFail($id);
        $site->delete();

        app(BladeSyncService::class)->syncAll();

        flash()->success('Site deleted successfully.');
        return redirect()->route('frontend-site.sites.index');
    }

    public function toggleStatus($id)
    {
        $site = FrontendSite::findOrFail($id);
        $site->update(['status' => !$site->status]);

        app(BladeSyncService::class)->syncAll();

        return response()->json(['status' => $site->fresh()->status]);
    }

    public function toggleDefault($id)
    {
        $site = FrontendSite::findOrFail($id);

        // Unset all first
        FrontendSite::where('is_default', true)->update(['is_default' => false]);

        // Set this one as default
        $site->update(['is_default' => true]);

        app(BladeSyncService::class)->syncAll();

        flash()->success("'{$site->name}' is now the default site");

        return response()->json(['is_default' => true, 'name' => $site->name]);
    }
}