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