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/UserWebsiteController.php
<?php

namespace App\Http\Controllers\Front;

use App\Http\Controllers\Controller;
use App\Models\Plan;
use App\Models\UserSubscription;
use App\Models\UserWebsite;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use App\Models\Country;
use App\Models\State;
use App\Models\City;
class UserWebsiteController extends Controller
{
    public function index(Request $request)
    {
        $user = auth()->user();
        if (!$user) {
            return response()->json(['error' => 'User not authenticated'], 401);
        }
    
        $limit = 6; 
        $currentPage = $request->current_page ?: 1; 
        $offset = ($currentPage - 1) * $limit;
    
        $userWebsiteCount = UserWebsite::where('user_id', $user->id)->count();
        $userSubscription = UserSubscription::where('user_id', $user->id)->orderBy('id', 'desc')->first();
        $userWebsites = UserWebsite::where('user_id', $user->id)
        ->with(['userSubscription' => function ($query) {
            $query->orderBy('charge_at', 'desc')->limit(1); // Load the most recent subscription
        }])
        ->offset($offset)
        ->limit($limit)
        ->get();
        $lastPage = ceil($userWebsiteCount / $limit); 
        if ($request->ajax()) {
            return response()->json([
                'userWebsites' => $userWebsites,
                'userSubscription' => $userSubscription,
                'userWebsiteCount' => $userWebsiteCount,
                'current_page' => $currentPage,
                'limit' => $limit,
                'last_page' => $lastPage,
            ]);
        }
        $countries = Country::all();
        $plans = Plan::with('features.pricingPlanFeature')->get();
        return view('user.website', compact('userWebsites','plans','userSubscription','countries'));
    }
    
    public function store(Request $request)
    {
        // Validate the request
        $request->validate([
            'first_name' => 'required|string|max:255',
            'last_name' => 'required|string|max:255',
            'email' => 'required|email|max:255',
            'business_name' => 'required|string|max:255',
            'business_email' => 'required|email|max:255',
            'business_phone' => 'required|string|max:20',
            'business_address_1' => 'nullable|string|max:255',
            'business_address_2' => 'nullable|string|max:255',
            'street' => 'nullable|string|max:255',
            'city' => 'nullable|string|max:255',
            'state' => 'nullable|string|max:255',
            'zip_code' => 'nullable|string|max:10',
            'country' => 'nullable|string|max:255',
            'domain_name' => 'nullable|string|max:255',
            'subdomain_preference' => 'nullable|string|max:255',
            'social_urls' => 'nullable|array',
            'social_urls.*' => 'nullable|url',
            'logo' => 'nullable|image|mimes:jpeg,png,jpg,gif',
            'media' => 'nullable|array',
            'media.*' => 'nullable|file|mimes:jpeg,png,jpg,gif,mp4',
            'pages' => 'nullable|array',
            'business_paragraph' => 'nullable|string',
            'services_name' => 'nullable|array',
            'services_description' => 'nullable|array',
            'primary_color' => 'nullable|string|max:7',
            'secondary_color' => 'nullable|string|max:7',
            'highlight_color' => 'nullable|string|max:7',
            'instructions' => 'nullable|string',
        ]);
        $user = auth()->user();
        $userId = $user->id;
        // dd($request->all());
        try {
            $website = new UserWebsite();

            $website->fill([
                'user_id' => $userId,
                'first_name' => $request->first_name,
                'last_name' => $request->last_name,
                'email' => $request->email,
                'business_name' => $request->business_name,
                'business_email' => $request->business_email,
                'business_phone' => $request->business_phone,
                'business_address_1' => $request->business_address_1,
                'business_address_2' => $request->business_address_2,
                'street' => $request->street,
                'city' => $request->city,
                'state' => $request->state,
                'zip_code' => $request->zip_code,
                'country' => $request->country,
                'domain_name' => $request->domain_name,
                'subdomain_preference' => $request->subdomain_preference,
                'social_urls' => $request->social_urls ?? [],
                'pages' => $request->pages ?? [],
                'business_paragraph' => $request->business_paragraph,
                'services_name' => $request->services_name ?? [],
                'services_description' => $request->services_description ?? [],
                'primary_color' => $request->primary_color,
                'secondary_color' => $request->secondary_color,
                'highlight_color' => $request->highlight_color,
                'instructions' => $request->instructions,
            ]);

            // Handle logo upload
            if ($request->hasFile('logo')) {
                $website->logo = $request->file('logo')->store('logos', 'public');
            }

            // Handle media upload
            if ($request->hasFile('media')) {
                $mediaFiles = [];
                foreach ($request->file('media') as $mediaFile) {
                    $mediaFiles[] = $mediaFile->store('media', 'public');
                }
                $website->media = $mediaFiles;
            }

            $website->save();
        
            return response()->json(['message' => 'Website saved successfully!', 'data' => $website]);
        } catch (\Exception $e) {
            return response()->json(['message' => $e->getMessage()], 500);
        }
        
    }
    public function getStates(Request $request)
    {
        $states = State::where('country_id', $request->country_id)->get();
        return response()->json($states);
    }

    public function getCities(Request $request)
    {
        $cities = City::where('state_id', $request->state_id)->get();
        return response()->json($cities);
    }

}