/home2/mshostin/carnival.ms-hostingladz.com/app/Http/Controllers/UserManagementController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Role;
use App\Models\Package;
use App\Models\Vendor;
use App\Models\SubVendor;
use App\Models\Category;
use App\Models\User;
use App\Models\Customer;
use App\Models\Region;
use App\Models\Blogs;
use App\Models\UserDetailBanner;
use App\Models\UserDetailTabs;
use App\Models\Sponsers;
use App\Models\Cart;
use App\Models\Order;
use App\Models\Product;
use App\Models\Costume;
use App\Models\Event;
use App\Models\Appointment;
use App\Models\CostumeVariantImage;
use App\Models\ProductVariantImage;
use App\Models\GalleryAlbum;
use App\Models\SiteGallery;
use App\Models\Music;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use App\Traits\ImageTrait;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\DB;
class UserManagementController extends Controller
{
use ImageTrait;
public function indexUser(Request $request)
{
// $users = User::with('role')->paginate(20);
$packages = Package::where('status', 1)->get();
$query = User::with(['role', 'vendor.package', 'subvendor'])->where('role_id', '!=', 1);
/** @var \App\Models\User|null $user */
$user = Auth::user();
// for vendors - getting subvendors only
if ($user->isVendor()) {
$query->where('role_id', 3)
->whereHas('subVendor', function ($q1) use ($user) {
$q1->where('vendor_id', $user->vendor->id);
});
}
if ($request->filled('search')) {
$query->where(function ($q) use ($request) {
$q->where('first_name', 'like', '%' . $request->search . '%')
->orWhere('last_name', 'like', '%' . $request->search . '%')
->orWhere('email', 'like', '%' . $request->search . '%');
});
}
if ($request->filled('role')) {
$query->where('role_id', $request->role);
}
if ($request->filled('package')) {
if ($request->package == '123') {
$query->where('role_id', 3);
} else {
$query->where(function ($q) use ($request) {
$q->whereHas('vendor', function ($q1) use ($request) {
$q1->where('package_id', $request->package);
})->orWhereHas('subVendor.vendor', function ($q2) use ($request) {
$q2->where('package_id', $request->package);
});
});
}
}
if ($request->filled('status')) {
$query->where('status', $request->status);
}
$users = $query->paginate(10);
if ($request->ajax()) {
return view('dashboard.admin.users.partials.user_table', compact('users'))->render();
}
return view('dashboard.admin.user_management.users.index', compact('users', 'packages'));
}
public function createUser()
{
$continents = Region::all();
$roles = Role::where('status', 1)->get();
$packages = Package::where('status', 1)->get();
$vendors = Vendor::with('user')->where('status', 1)->get();
return view('dashboard.admin.user_management.users.create', compact('roles', 'packages', 'vendors', 'continents'));
}
public function getCategories(Request $request)
{
$categories = '';
if ($request->has('role') && $request->role != null) {
$categories = Category::where('package_id', $request->package)->get();
}
if ($request->has('vendor') && $request->vendor != null) {
$user = Vendor::find($request->vendor);
$categories = $user->package->category;
}
return response()->json($categories);
}
public function register(Request $request)
{
// dd($request->toArray());
$validator = $this->validator($request->all());
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator)
->withInput();
}
$data = $request->all();
if ($request->hasFile('logo')) {
$imageName = $this->uploadImage($request->file('logo'), 'images');
$data['logo'] = $imageName; // Add logo path to data array
}
if ($request->hasFile('image')) {
$imageName = $this->uploadImage($request->file('image'), 'images');
$data['image'] = $imageName;
}
$user = $this->create($data);
return redirect()->route('users.index')
->with('success', 'User registered successfully.');
}
protected function validator(array $data, $userId = null)
{
$rules = [
'first_name' => ['required', 'string', 'max:255'],
'last_name' => ['required', 'string', 'max:255'],
'email' => [
'required',
'string',
'email',
'max:255',
Rule::unique('users')->ignore($userId),
],
'phone' => ['required', 'string', 'max:18'],
'address' => ['nullable', 'string', 'max:255'],
'city' => ['nullable', 'string', 'max:255'],
'state' => ['nullable', 'string', 'max:255'],
'country' => ['nullable', 'string', 'max:255'],
'zipcode' => ['nullable', 'string', 'max:255'],
'package_id' => ['nullable'],
'age' => ['nullable'],
'nationality' => ['nullable'],
'age_range' => ['nullable'],
'gender' => ['nullable'],
'height' => ['nullable'],
'weight' => ['nullable'],
'bust' => ['nullable'],
'hips' => ['nullable'],
'waist' => ['nullable'],
'short_description' => ['nullable', 'string', 'max:500'],
'continent' => ['nullable', 'string', 'max:255'],
'facebook' => ['nullable', 'url', 'max:255'],
'twitter' => ['nullable', 'url', 'max:255'],
'instagram' => ['nullable', 'url', 'max:255'],
'linkedin' => ['nullable', 'url', 'max:255'],
'youtube' => ['nullable', 'url', 'max:255'],
'website' => ['nullable', 'url', 'max:255'],
'image' => ['nullable', 'image', 'max:2048'],
'logo' => ['nullable', 'image', 'max:2048'],
'tabs.*.title' => ['nullable', 'string', 'max:255'],
'tabs.*.content' => ['nullable', 'string'],
'sponsors.*.name' => ['nullable', 'string', 'max:255'],
'sponsors.*.website' => ['nullable', 'url', 'max:255'],
'sponsor_logos.*' => ['required_with:sponsors.*.name', 'image', 'max:2048'],
'banners.*.title' => ['nullable', 'string', 'max:255'],
'banners.*.link_url' => ['nullable', 'url', 'max:255'],
'banner_files.*' => ['required_with:banners.*.title', 'file', 'max:10240'], // 10MB for videos
];
if ($userId) {
$user = User::find($userId);
if ($user && $user->role_id == 3) {
$rules['vendor_id'] = ['required', 'numeric'];
} else {
$rules['vendor_id'] = ['nullable', 'numeric'];
}
} else {
if (isset($data['role_id']) && $data['role_id'] == 3) {
$rules['vendor_id'] = ['required', 'numeric'];
} else {
$rules['vendor_id'] = ['nullable', 'numeric'];
}
}
if (!$userId) {
$rules['password'] = ['required', 'string', 'min:8', 'confirmed'];
$rules['address'] = ['required', 'string', 'max:255'];
$rules['city'] = ['required', 'string', 'max:255'];
$rules['state'] = ['required', 'string', 'max:255'];
$rules['country'] = ['required', 'string', 'max:255'];
$rules['zipcode'] = ['required', 'string', 'max:255'];
}
return Validator::make($data, $rules);
}
protected function create(array $data)
{
DB::beginTransaction();
try {
$slug = $this->generateUniqueSlug($data['first_name'] . ' ' . $data['last_name']);
$package_id = '';
if ($data['package_id'] == 'section_leader') {
$package_id = '123';
$data['role_id'] = '3';
} else {
$package_id = $data['package_id'];
$data['role_id'] = '2';
}
$user = User::create([
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
'full_name' => $data['first_name'] . ' ' . $data['last_name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'phone' => $data['phone'],
'address' => $data['address'],
'city' => $data['city'],
'state' => $data['state'],
'country' => $data['country'],
'zipcode' => $data['zipcode'],
'role_id' => $data['role_id'],
'slug' => $slug,
'age' => $data['age'] ?? null,
'nationality' => $data['nationality'] ?? null,
'age_range' => $data['age_range'] ?? null,
'gender' => $data['gender'] ?? null,
'height' => $data['height'] ?? null,
'weight' => $data['weight'] ?? null,
'bust' => $data['bust'] ?? null,
'hips' => $data['hips'] ?? null,
'waist' => $data['waist'] ?? null,
'image' => $data['image'] ?? null,
]);
// Handle tabs
if (isset($data['tabs']) && is_array($data['tabs'])) {
foreach ($data['tabs'] as $tab) {
if (!empty($tab['title']) && !empty($tab['content'])) {
UserDetailTabs::create([
'user_id' => $user->id,
'name' => $tab['title'],
'description' => $tab['content'],
]);
}
}
}
// Handle sponsors
if (isset($data['sponsors']) && is_array($data['sponsors'])) {
foreach ($data['sponsors'] as $index => $sponsor) {
if (!empty($sponsor['name'])) {
// Only create sponsor if logo is provided
if (isset($data['sponsor_logos'][$index]) && $data['sponsor_logos'][$index]) {
$logoName = $this->uploadImage($data['sponsor_logos'][$index], 'sponser_images');
$sponsorData = [
'user_id' => $user->id,
'title' => $sponsor['name'],
'description' => $sponsor['website'] ?? '',
'logo' => 'sponser_images/' . $logoName,
];
Sponsers::create($sponsorData);
}
}
}
}
// Handle banners
if (isset($data['banners']) && is_array($data['banners'])) {
foreach ($data['banners'] as $index => $banner) {
if (!empty($banner['title'])) {
// Only create banner if file is provided
if (isset($data['banner_files'][$index]) && $data['banner_files'][$index]) {
$file = $data['banner_files'][$index];
$fileName = $this->uploadImage($file, 'userBanners');
$bannerData = [
'user_id' => $user->id,
'title' => $banner['title'],
'subtitle' => $banner['link_url'] ?? '',
'description' => $banner['description'] ?? '',
'button_text' => $banner['button_text'] ?? '',
'banner' => 'userBanners/' . $fileName,
];
UserDetailBanner::create($bannerData);
}
}
}
}
if ($data['role_id'] == 2) {
Vendor::create([
'user_id' => $user->id,
'package_id' => $package_id,
'name' => $data['shop_name'],
'email' => $data['shop_email'],
'address' => $data['shop_address'],
'phone' => $data['shop_phone'],
'continent' => $data['continent'],
'insta' => $data['shop_insta'] ?? null,
'facebook' => $data['shop_facebook'] ?? null,
'youtube' => $data['shop_youtube'] ?? null,
'twitter' => $data['shop_twitter'] ?? null,
'tiktok' => $data['shop_tiktok'] ?? null,
'wa_business_page' => $data['shop_wa_business_page'] ?? null,
'linkedin' => $data['shop_linkedin'] ?? null,
'short_description' => $data['short_description'] ?? null,
'status' => 1,
'logo' => $data['logo'] ?? null,
]);
}
if ($data['role_id'] == 3) {
SubVendor::create([
'user_id' => $user->id,
'vendor_id' => $data['vendor_id'],
'name' => $data['shop_name'],
'email' => $data['shop_email'],
'address' => $data['shop_address'],
'phone' => $data['shop_phone'],
'continent' => $data['continent'],
'insta' => $data['shop_insta'] ?? null,
'facebook' => $data['shop_facebook'] ?? null,
'youtube' => $data['shop_youtube'] ?? null,
'twitter' => $data['shop_twitter'] ?? null,
'tiktok' => $data['shop_tiktok'] ?? null,
'wa_business_page' => $data['shop_wa_business_page'] ?? null,
'linkedin' => $data['shop_linkedin'] ?? null,
'ecommerce' => $data['ecommerce'] ?? 0,
'events' => $data['events'] ?? 0,
'music' => $data['music'] ?? 0,
'appointment' => $data['appointment'] ?? 0,
'ad_space' => $data['ad_space'] ?? 0,
'blogging' => $data['blogging'] ?? 0,
'status' => 1,
'logo' => $data['logo'] ?? null,
]);
}
if ($data['role_id'] == 4) {
Customer::create([
'user_id' => $user->id,
'package_id' => $package_id,
'status' => 1,
]);
}
DB::commit();
return $user;
} catch (\Exception $e) {
// dd($e->getMessage());
DB::rollBack();
return redirect()->back()
->withErrors($e->getMessage())
->withInput();
// throw new \RuntimeException('Unable to create user at this time.');
}
}
public function edit($id)
{
$continents = Region::all();
$user = User::with(['banners', 'tabs', 'sponsors', 'vendor.package', 'subVendor.vendor.package'])->findOrFail($id);
$roles = Role::where('status', 1)->get();
$packages = Package::where('status', 1)->get();
$vendors = Vendor::with('user')->where('status', 1)->get();
return view('dashboard.admin.user_management.users.edit', compact('user', 'roles', 'packages', 'vendors', 'continents'));
}
public function update(Request $request, $id)
{
$user = User::findOrFail($id);
// Validate the request
$validator = $this->validator($request->all(), $id);
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator)
->withInput();
}
DB::beginTransaction();
try {
$package_id = '';
if ($request->package_id == 'section_leader') {
$package_id = '123';
} else {
$package_id = $request->package_id;
}
// Handle logo upload
$logo = null;
if ($request->hasFile('logo')) {
$imageName = $this->uploadImage($request->logo, 'images');
$logo = $imageName;
}
// Update vendor data
if ($user->vendor) {
$user->vendor->update([
'ecommerce' => $request->input('ecommerce', 0),
'events' => $request->input('events', 0),
'music' => $request->input('music', 0),
'appointment' => $request->input('appointment', 0),
'ad_space' => $request->input('ad_space', 0),
'blogging' => $request->input('blogging', 0),
'package_id' => $package_id,
'name' => $request->input('shop_name'),
'email' => $request->input('shop_email'),
'address' => $request->input('shop_address'),
'phone' => $request->input('shop_phone'),
'status' => 1,
]);
}
// Update sub-vendor data
if ($user->subVendor) {
$user->subVendor->update([
'vendor_id' => $request->input('vendor_id') ?? $user->subVendor->vendor_id,
'name' => $request->input('shop_name'),
'email' => $request->input('shop_email'),
'address' => $request->input('shop_address'),
'phone' => $request->input('shop_phone'),
'continent' => $request->input('continent'),
'insta' => $request->input('shop_insta'),
'facebook' => $request->input('shop_facebook'),
'youtube' => $request->input('shop_youtube'),
'twitter' => $request->input('shop_twitter'),
'tiktok' => $request->input('shop_tiktok'),
'wa_business_page' => $request->input('shop_wa_business_page'),
'linkedin' => $request->input('shop_linkedin'),
'ecommerce' => $request->input('ecommerce', 0),
'events' => $request->input('events', 0),
'music' => $request->input('music', 0),
'appointment' => $request->input('appointment', 0),
'ad_space' => $request->input('ad_space', 0),
'blogging' => $request->input('blogging', 0),
'status' => 1,
'logo' => $logo ?? $user->subVendor->logo,
]);
}
// Update user basic information
$userData = $request->only([
'first_name',
'last_name',
'email',
'phone',
'address',
'city',
'state',
'country',
'zipcode',
'age_range',
'status'
]);
$user->update($userData);
// Handle profile image upload
if ($request->hasFile('image')) {
if ($user->image && file_exists(public_path($user->image))) {
$this->deleteImage('images/' . $user->image);
}
$imageName = $this->uploadImage($request->file('image'), 'images');
$user->image = $imageName;
$user->save();
}
// Handle tabs
if ($request->has('tabs') && is_array($request->tabs)) {
// Delete existing tabs
UserDetailTabs::where('user_id', $user->id)->delete();
// Create new tabs
foreach ($request->tabs as $tab) {
if (!empty($tab['title']) && !empty($tab['content'])) {
UserDetailTabs::create([
'user_id' => $user->id,
'name' => $tab['title'],
'description' => $tab['content'],
]);
}
}
}
// Handle sponsors
if ($request->has('sponsors') && is_array($request->sponsors)) {
// Delete existing sponsors
Sponsers::where('user_id', $user->id)->delete();
// Create new sponsors
foreach ($request->sponsors as $index => $sponsor) {
if (!empty($sponsor['name'])) {
// Only create sponsor if logo is provided
if (isset($request->file('sponsor_logos')[$index])) {
$logoName = $this->uploadImage($request->file('sponsor_logos')[$index], 'sponser_images');
$sponsorData = [
'user_id' => $user->id,
'title' => $sponsor['name'],
'description' => $sponsor['website'] ?? '',
'logo' => 'sponser_images/' . $logoName,
];
Sponsers::create($sponsorData);
}
}
}
}
// Handle banners
if ($request->has('banners') && is_array($request->banners)) {
// Delete existing banners
UserDetailBanner::where('user_id', $user->id)->delete();
// Create new banners
foreach ($request->banners as $index => $banner) {
if (!empty($banner['title'])) {
// Only create banner if file is provided
if (isset($request->file('banner_files')[$index]) && $request->file('banner_files')[$index]) {
$file = $request->file('banner_files')[$index];
$fileName = $this->uploadImage($file, 'userBanners');
$bannerData = [
'user_id' => $user->id,
'title' => $banner['title'],
'subtitle' => $banner['link_url'] ?? '',
'description' => $banner['description'] ?? '',
'button_text' => $banner['button_text'] ?? '',
'banner' => 'userBanners/' . $fileName,
];
UserDetailBanner::create($bannerData);
}
}
}
}
DB::commit();
return redirect()->back()
->with('success', 'User updated successfully.');
} catch (\Exception $e) {
DB::rollback();
return redirect()->back()
->with('error', 'Error updating user: ' . $e->getMessage())
->withInput();
}
}
public function getSingleUser($id)
{
$user = User::with('vendor', 'subVendor', 'vendor.package')->find($id);
return response()->json($user);
}
protected function generateUniqueSlug($title)
{
$slug = Str::slug($title);
$uniqueSlug = $slug;
$counter = 1;
while (User::where('slug', $uniqueSlug)->exists()) {
$uniqueSlug = $slug . '-' . $counter++;
}
return $uniqueSlug;
}
public function delete(Request $request)
{
$banner = UserDetailBanner::find($request->id);
if ($banner) {
if (file_exists(public_path($banner->banner))) {
unlink(public_path($banner->banner));
}
$banner->delete();
return response()->json(['success' => true]);
}
return response()->json(['success' => false, 'message' => 'Banner not found']);
}
public function getDeletionDetails($id)
{
$user = User::with(['role', 'vendor', 'subVendor', 'banners', 'tabs', 'sponsors'])->findOrFail($id);
// Count related data
$banners_count = $user->banners()->count();
$tabs_count = $user->tabs()->count();
$sponsors_count = $user->sponsors()->count();
$vendor_count = ($user->vendor || $user->subVendor) ? 1 : 0;
// Count products, costumes, events, blogs, appointments through user_id
$products_count = \App\Models\Product::where('user_id', $user->id)->count();
$costumes_count = \App\Models\Costume::where('user_id', $user->id)->count();
$events_count = \App\Models\Event::where('user_id', $user->id)->count();
$blogs_count = \App\Models\Blogs::where('user_id', $user->id)->count();
$appointments_count = \App\Models\Appointment::where('user_id', $user->id)->count();
// Count gallery and music files
$gallery_albums_count = \App\Models\GalleryAlbum::where('user_id', $user->id)->count();
$site_gallery_count = \App\Models\SiteGallery::where('user_id', $user->id)->count();
$music_count = \App\Models\Music::where('user_id', $user->id)->count();
// Count cart items and orders
$cart_items_count = Cart::where('user_id', $user->id)->count();
$orders_count = Order::where('user_id', $user->id)->count();
$total_items = 1 + $banners_count + $tabs_count + $sponsors_count + $vendor_count +
$products_count + $costumes_count + $events_count + $blogs_count +
$appointments_count + $gallery_albums_count + $site_gallery_count +
$music_count + $cart_items_count + $orders_count;
return response()->json([
'user' => [
'first_name' => $user->first_name,
'last_name' => $user->last_name,
'email' => $user->email,
'role_name' => $user->role ? $user->role->name : 'Unknown',
'created_at' => $user->created_at->format('M d, Y')
],
'banners_count' => $banners_count,
'tabs_count' => $tabs_count,
'sponsors_count' => $sponsors_count,
'vendor_count' => $vendor_count,
'products_count' => $products_count,
'costumes_count' => $costumes_count,
'events_count' => $events_count,
'blogs_count' => $blogs_count,
'appointments_count' => $appointments_count,
'gallery_albums_count' => $gallery_albums_count,
'site_gallery_count' => $site_gallery_count,
'music_count' => $music_count,
'cart_items_count' => $cart_items_count,
'orders_count' => $orders_count,
'total_items' => $total_items
]);
}
public function destroyUser($id)
{
DB::beginTransaction();
try {
$user = User::findOrFail($id);
// Delete user banners and their files
$banners = $user->banners;
foreach ($banners as $banner) {
if (file_exists(public_path($banner->banner))) {
unlink(public_path($banner->banner));
}
}
$user->banners()->delete();
// Delete user tabs
$user->tabs()->delete();
// Delete user sponsors and their files
$sponsors = $user->sponsors;
foreach ($sponsors as $sponsor) {
if (file_exists(public_path('sponser_images/' . $sponsor->logo))) {
unlink(public_path('sponser_images/' . $sponsor->logo));
}
}
$user->sponsors()->delete();
// Delete vendor/subvendor related data
if ($user->vendor) {
// Delete products and their files
$products = \App\Models\Product::where('user_id', $user->id)->get();
foreach ($products as $product) {
// Delete product images
$productImages = $product->product_images;
foreach ($productImages as $image) {
if (file_exists(public_path($image->image))) {
unlink(public_path($image->image));
}
}
$product->product_images()->delete();
// Delete product variants and their images
$variants = $product->variants;
foreach ($variants as $variant) {
$variantImages = \App\Models\ProductVariantImage::where('product_variant_id', $variant->id)->get();
foreach ($variantImages as $image) {
if (file_exists(public_path($image->image))) {
unlink(public_path($image->image));
}
}
$variantImages->each->delete();
}
$product->variants()->detach();
// Delete product media
$productMedia = $product->media;
foreach ($productMedia as $media) {
if (file_exists(public_path($media->file))) {
unlink(public_path($media->file));
}
}
$product->media()->delete();
}
\App\Models\Product::where('user_id', $user->id)->delete();
// Delete costumes and their files
$costumes = \App\Models\Costume::where('user_id', $user->id)->get();
foreach ($costumes as $costume) {
// Delete costume variant images
$costumeVariants = $costume->variants;
foreach ($costumeVariants as $variant) {
$variantImages = \App\Models\CostumeVariantImage::where('costume_variant_id', $variant->id)->get();
foreach ($variantImages as $image) {
if (file_exists(public_path($image->image))) {
unlink(public_path($image->image));
}
}
$variantImages->each->delete();
}
$costume->variants()->detach();
}
\App\Models\Costume::where('user_id', $user->id)->delete();
// Delete events and their files
$events = \App\Models\Event::where('user_id', $user->id)->get();
foreach ($events as $event) {
// Delete event banner
if ($event->banner && file_exists(public_path($event->banner))) {
unlink(public_path($event->banner));
}
// Delete promotional video
if ($event->promotional_Video && file_exists(public_path($event->promotional_Video))) {
unlink(public_path($event->promotional_Video));
}
// Delete promotional image
if ($event->promotional_image && file_exists(public_path($event->promotional_image))) {
unlink(public_path($event->promotional_image));
}
// Delete additional images (if stored as JSON array)
if ($event->additional_images) {
$additionalImages = json_decode($event->additional_images, true);
if (is_array($additionalImages)) {
foreach ($additionalImages as $image) {
if (file_exists(public_path($image))) {
unlink(public_path($image));
}
}
}
}
// Delete event images through relationship
$eventImages = $event->images;
foreach ($eventImages as $image) {
if (file_exists(public_path($image->image))) {
unlink(public_path($image->image));
}
}
$event->images()->delete();
}
\App\Models\Event::where('user_id', $user->id)->delete();
// Delete blogs and their images
$blogs = \App\Models\Blogs::where('user_id', $user->id)->get();
foreach ($blogs as $blog) {
if ($blog->image && file_exists(public_path($blog->image))) {
unlink(public_path($blog->image));
}
}
\App\Models\Blogs::where('user_id', $user->id)->delete();
// Delete appointments
\App\Models\Appointment::where('user_id', $user->id)->delete();
// Delete vendor record
$user->vendor()->delete();
}
if ($user->subVendor) {
// Delete products and their files (same as vendor)
$products = \App\Models\Product::where('user_id', $user->id)->get();
foreach ($products as $product) {
$productImages = $product->product_images;
foreach ($productImages as $image) {
if (file_exists(public_path($image->image))) {
unlink(public_path($image->image));
}
}
$product->product_images()->delete();
$variants = $product->variants;
foreach ($variants as $variant) {
$variantImages = \App\Models\ProductVariantImage::where('product_variant_id', $variant->id)->get();
foreach ($variantImages as $image) {
if (file_exists(public_path($image->image))) {
unlink(public_path($image->image));
}
}
$variantImages->each->delete();
}
$product->variants()->detach();
$productMedia = $product->media;
foreach ($productMedia as $media) {
if (file_exists(public_path($media->file))) {
unlink(public_path($media->file));
}
}
$product->media()->delete();
}
\App\Models\Product::where('user_id', $user->id)->delete();
// Delete costumes and their files
$costumes = \App\Models\Costume::where('user_id', $user->id)->get();
foreach ($costumes as $costume) {
// Delete costume variant images
$costumeVariants = $costume->variants;
foreach ($costumeVariants as $variant) {
$variantImages = \App\Models\CostumeVariantImage::where('costume_variant_id', $variant->id)->get();
foreach ($variantImages as $image) {
if (file_exists(public_path($image->image))) {
unlink(public_path($image->image));
}
}
$variantImages->each->delete();
}
$costume->variants()->detach();
}
\App\Models\Costume::where('user_id', $user->id)->delete();
// Delete events and their files
$events = \App\Models\Event::where('user_id', $user->id)->get();
foreach ($events as $event) {
// Delete event banner
if ($event->banner && file_exists(public_path($event->banner))) {
unlink(public_path($event->banner));
}
// Delete promotional video
if ($event->promotional_Video && file_exists(public_path($event->promotional_Video))) {
unlink(public_path($event->promotional_Video));
}
// Delete promotional image
if ($event->promotional_image && file_exists(public_path($event->promotional_image))) {
unlink(public_path($event->promotional_image));
}
// Delete additional images (if stored as JSON array)
if ($event->additional_images) {
$additionalImages = json_decode($event->additional_images, true);
if (is_array($additionalImages)) {
foreach ($additionalImages as $image) {
if (file_exists(public_path($image))) {
unlink(public_path($image));
}
}
}
}
// Delete event images through relationship
$eventImages = $event->images;
foreach ($eventImages as $image) {
if (file_exists(public_path($image->image))) {
unlink(public_path($image->image));
}
}
$event->images()->delete();
}
\App\Models\Event::where('user_id', $user->id)->delete();
// Delete blogs and their images
$blogs = \App\Models\Blogs::where('user_id', $user->id)->get();
foreach ($blogs as $blog) {
if ($blog->image && file_exists(public_path($blog->image))) {
unlink(public_path($blog->image));
}
}
\App\Models\Blogs::where('user_id', $user->id)->delete();
// Delete appointments
\App\Models\Appointment::where('user_id', $user->id)->delete();
// Delete subvendor record
$user->subVendor()->delete();
}
// Delete cart items
Cart::where('user_id', $user->id)->delete();
// Delete orders
Order::where('user_id', $user->id)->delete();
// Delete gallery albums and their images
$galleryAlbums = \App\Models\GalleryAlbum::where('user_id', $user->id)->get();
foreach ($galleryAlbums as $album) {
$albumImages = $album->images;
foreach ($albumImages as $image) {
if ($image->image && file_exists(public_path($image->image))) {
unlink(public_path($image->image));
}
}
$album->images()->delete();
}
\App\Models\GalleryAlbum::where('user_id', $user->id)->delete();
// Delete site gallery images
$siteGalleryImages = \App\Models\SiteGallery::where('user_id', $user->id)->get();
foreach ($siteGalleryImages as $image) {
if ($image->image && file_exists(public_path($image->image))) {
unlink(public_path($image->image));
}
}
\App\Models\SiteGallery::where('user_id', $user->id)->delete();
// Delete music files and their images
$musics = \App\Models\Music::where('user_id', $user->id)->get();
foreach ($musics as $music) {
// Delete music file
if ($music->music && file_exists(public_path($music->music))) {
unlink(public_path($music->music));
}
// Delete cover image
if ($music->cover_image && file_exists(public_path($music->cover_image))) {
unlink(public_path($music->cover_image));
}
// Delete images array (if stored as JSON)
if ($music->images && is_array($music->images)) {
foreach ($music->images as $image) {
if (file_exists(public_path($image))) {
unlink(public_path($image));
}
}
}
// Delete music images through relationship
$musicImages = $music->imagesRelation;
foreach ($musicImages as $image) {
if (file_exists(public_path($image->image))) {
unlink(public_path($image->image));
}
}
$music->imagesRelation()->delete();
}
\App\Models\Music::where('user_id', $user->id)->delete();
// Delete user profile image
if ($user->image && file_exists(public_path($user->image))) {
unlink(public_path($user->image));
}
// Delete user logo
if ($user->logo && file_exists(public_path($user->logo))) {
unlink(public_path($user->logo));
}
// Finally delete the user
$user->delete();
DB::commit();
return response()->json(['success' => true, 'message' => 'User and all related data deleted successfully']);
} catch (\Exception $e) {
DB::rollBack();
return response()->json(['success' => false, 'message' => 'Failed to delete user: ' . $e->getMessage()], 500);
}
}
}