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
]);
}
}