/home2/mshostin/carnival.ms-hostingladz.com/app/Http/Controllers/EventController.php
<?php
namespace App\Http\Controllers;
use App\Models\Event;
use App\Models\Ticket;
use App\Models\Package;
use App\Models\Category;
use App\Models\EventTicket;
use App\Models\EventImage;
use App\Models\Vendor;
use App\Models\Country;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Services\EventService;
use App\Traits\ImageTrait;
use App\Traits\MultipleImageTrait;
class EventController extends Controller
{
protected $eventService;
public function __construct(EventService $eventService)
{
$this->eventService = $eventService;
}
public function index(Request $request)
{
$packages = Package::all();
$ticktes = Ticket::all();
$categories = Category::where('type', 'events')->get();
$show_events = Event::with("category", "package");
if ($request->has('search') && $request->search != null && $request->search != '') {
$show_events = $show_events->where('name', 'LIKE', '%' . $request->search . '%')->orWhere('eventType', 'LIKE', '%' . $request->search . '%')
->orWhere('start_date', 'LIKE', '%' . $request->search . '%')
->orWhere('start_time', 'LIKE', '%' . $request->search . '%')
->orWhere('end_date', 'LIKE', '%' . $request->search . '%')
->orWhere('end_time', 'LIKE', '%' . $request->search . '%')
->orWhereHas('category', function ($query) use ($request) {
$query->where('title', 'LIKE', '%' . $request->search . '%');
});
}
// $show_events = $show_events->orderBy('id', 'DESC')->paginate(10);
if (Auth::user()->isAdmin()) {
$show_events = $show_events->orderBy('id', 'DESC')->paginate(10);
$events = Event::all(['id', 'name', 'start_date', 'end_date']);
} else {
$show_events = $show_events->where('user_id', Auth::id())->orderBy('id', 'DESC')->paginate(10);
$events = Event::where('user_id', Auth::id())->get(['id', 'name', 'start_date', 'end_date']);
}
if ($request->has("type")) {
return $show_events;
}
$layout = match (Auth::user()->role->name) {
'Admin' => 'dashboard.admin.layouts.app',
'Vendor' => 'dashboard.vendor.layouts.app',
'SubVendor' => 'dashboard.subVendor.layouts.app',
};
return view('dashboard.admin.events.index', compact('packages', 'categories', 'events', 'ticktes', 'layout'));
}
public function create()
{
$packages = Package::all();
$ticktes = Ticket::all();
$countries = Country::all();
$categories = Category::where('type', 'events')->get();
$show_events = Event::with("category", "package");
$events = Event::all(['id', 'name', 'start_date', 'end_date']);
$vendors = Vendor::WhereHas('user', function ($query) {
$query->where('status', 1);
})->get();
$layout = match (Auth::user()->role->name) {
'Admin' => 'dashboard.admin.layouts.app',
'Vendor' => 'dashboard.vendor.layouts.app',
'SubVendor' => 'dashboard.subVendor.layouts.app',
};
return view('dashboard.admin.events.create', compact('packages', 'categories', 'ticktes', 'show_events', 'events', 'vendors', 'countries', 'layout'));
}
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'package_id' => 'required|exists:packages,id',
'category_id' => 'required|exists:categories,id',
'total_no_of_tickets' => 'required|integer|min:1',
'venue' => 'required|string|max:255',
'address' => 'required|string|max:255',
'location' => 'required|string',
'dress_code' => 'nullable|array',
'dress_code.*' => 'nullable|string|max:255',
'ticket_id' => 'required|array',
'ticket_id.*' => 'exists:tickets,id',
'description' => 'nullable|string',
'eventType' => 'required|in:private,public',
'start_date' => 'nullable|date',
'start_time' => 'nullable',
'end_date' => 'nullable|date|after_or_equal:start_date',
// 'end_time' => 'nullable|after:start_time',
'all_day' => 'nullable',
'status' => 'required|in:active,inactive',
]);
$request['user_id'] = request()->has('user_id') ? request('user_id') : Auth::id();
// $request['user_id'] = Auth::id();
$request['booking_start_time_btn'] = $request->has('booking-start-time-btn') ? 1 : 0;
$request['booking_end_time_btn'] = $request->has('booking-end-time-btn') ? 1 : 0;
$request['passing_service_charge_btn'] = $request->has('passing-service-charge-btn') ? 1 : 0;
$request['refund_policies_btn'] = $request->has('refund-policies-btn') ? 1 : 0;
$request['ticket_instructions_btn'] = $request->has('ticket-instructions-btn') ? 1 : 0;
$request['tags_btn'] = $request->has('tags-btn') ? 1 : 0;
if ($request->has('all_day')) {
$request['all_day'] = $request->all_day ? 1 : 0;
}
$event = $this->eventService->createEvent($request->all());
// return response()->json(['success' => 'Event created successfully.', 'event' => $event]);
return redirect()->route('events.index');
}
public function edit(Event $event)
{
$event->load('user', 'category', 'package');
$packages = Package::all();
$categories = Category::all();
$countries = Country::all();
return response()->json(['event' => $event, 'packages' => $packages, 'categories' => $categories, 'countries' => $countries]);
}
public function update(Request $request, Event $event)
{
$request->validate([
'name' => 'required|string|max:255',
'package_id' => 'required|exists:packages,id',
'category_id' => 'required|exists:categories,id',
'description' => 'nullable|string',
'status' => 'required|in:active,inactive',
]);
$event = $this->eventService->updateEvent($event, $request->all());
return redirect()->route('events.index')
->with('success', 'Event updated successfully.');
}
public function destroy(Event $event)
{
$event->delete();
return redirect()->route('events.index')
->with('success', 'Event deleted successfully.');
}
public function getCategories($packageId)
{
$categories = Category::where('package_id', $packageId)->get();
return response()->json($categories);
}
}