HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux ip-172-26-0-120 6.17.0-1009-aws #9~24.04.2-Ubuntu SMP Fri Mar 6 23:50:29 UTC 2026 x86_64
User: ubuntu (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/www/html/spion/app/Http/Controllers/Front/TemplateController.php
<?php

namespace App\Http\Controllers\Front;

use App\Http\Controllers\Controller;
use App\Models\Industry;
use App\Models\Template;
use App\Models\UserWishlist;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

use function Laravel\Prompts\alert;

class TemplateController extends Controller
{
    public function index(Request $request)
    {
        $industries = Industry::all(); 
        $templatesCount = Template::query()
            ->when($request->filled('industry'), function ($query) use ($request) {
                $query->whereIn('industry_id', $request->industry);
            })
            ->when($request->filled('search'), function ($query) use ($request) {
                $searchTerm = $request->search;
                $query->where(function ($query) use ($searchTerm) {
                    $query->whereHas('industry', function ($query) use ($searchTerm) {
                        $query->where('title', 'like', "%$searchTerm%");
                    })
                        ->orWhere('title', 'like', "%$searchTerm%"); 
                });
            })
            ->with('industry')
            ->count();
            $limit = 6;
            $offset = ($request->current_page - 1) * $limit;
            $templates = Template::query()
            ->when($request->filled('industry'), function ($query) use ($request) {
                $query->whereIn('industry_id', $request->industry);
            })
            ->when($request->filled('search'), function ($query) use ($request) {
                $searchTerm = $request->search;
                $query->where(function ($query) use ($searchTerm) {
                    $query->whereHas('industry', function ($query) use ($searchTerm) {
                        $query->where('title', 'like', "%$searchTerm%");
                    })
                        ->orWhere('title', 'like', "%$searchTerm%");
                });
            })
            ->with(['industry'])
            ->withCount(['wishlists' => function ($query) {
                $query->where('user_id', Auth::id()); 
            }])
            ->offset($offset)
            ->limit($limit)
            ->get() 
            ->map(function ($template) {
                $template->is_in_wishlist = $template->wishlists_count > 0; 
                return $template;
            });
            // dd($templates);
            // ->map(function ($template) {
            //     $template->main_image_url = $template->getFirstMediaUrl('main_image'); 
            //     $template->industry_title = $template->industry->title ?? 'N/A'; 
            //     return $template;
            // });

            $last_page = ceil($templatesCount / $limit);

            // dd($last_page);
            if ($request->ajax()) {
                return response()->json([
                    'templates' => $templates,
                    'templatesCount' => $templatesCount,
                    'current_page' => $request->current_page,
                    'limit' => $limit,
                    'last_page' => $last_page,
                ]);
            }

            return view('front.pages.template', compact('templates', 'industries'));
    }
    public function templateDetailShow($id)
    {
        $templates = Template::find($id);
        // dd($templates);
        if ($templates && is_string($templates->features)) {
            $templates->features = explode(',', trim($templates->features, '[]"'));
        }
        return view('front.pages.template_detail', compact('templates'));
    }
    public function getScreenshots($id)
    {
        $template = Template::findOrFail($id);

        if ($template && $template->hasMedia('screenshots')) {
            $screenshots = $template->getMedia('screenshots')->map(function ($media) {
                return $media->getUrl();
            });

            return response()->json([
                'screenshots' => $screenshots,
            ]);
        } else {
            return response()->json([
                'screenshots' => [],
            ]);
        }
    }
    public function addTemplateWishlist(Request $request)
    {

        if (!Auth::check()) {
            return response()->json([
                'success' => false,
                'message' => 'Please log in to manage your wishlist.'
            ], 401);
        }
    
        $request->validate([
            'template_id' => 'required|exists:templates,id',
        ]);
    
        $user = Auth::user();
        $template = Template::find($request->template_id);
    
        $existingWishlistItem = UserWishlist::where('user_id', $user->id)
            ->where('template_id', $template->id)
            ->first();
    
        if ($existingWishlistItem) {
            $existingWishlistItem->delete();
    
            return response()->json([
                'success' => true,
                'message' => 'Template removed from your wishlist.',
                'is_in_wishlist' => false
            ]);
        }
    
        UserWishlist::create([
            'user_id' => $user->id,
            'template_id' => $template->id,
        ]);
    
        return response()->json([
            'success' => true,
            'message' => 'Template added to your wishlist successfully!',
            'is_in_wishlist' => true
        ]);
    }
    
}