
PK 
<?php
namespace App\Http\Controllers;
use App\Banner;
use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\View\View;
use Illuminate\Http\JsonResponse;
use Carbon\Carbon;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
class BannerController extends Controller
{
/**
* Create a new controller instance.
*/
public function __construct()
{
$this->middleware('auth:admin');
}
/**
* Display a listing of the resource.
*/
public function index(): View|RedirectResponse
{
if (view()->exists('backend.admin.banners.banner')) {
$banners = Banner::orderBy('banner_sortby', 'desc')->paginate(5);
$banners->withPath('banner');
return view('backend.admin.banners.banner', compact('banners'));
}
return back()->with('error', 'View not found');
}
/**
* Show the form for creating a new resource.
*/
public function create(): View|RedirectResponse
{
if (view()->exists('backend.admin.banners.bannerCreate')) {
return view('backend.admin.banners.bannerCreate');
}
return back()->with('error', 'View not found');
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): RedirectResponse
{
// CSRF token validation
if ($request->_token !== Session::token()) {
return Redirect::back()->with('error', 'Invalid form submission!');
}
// Validation rules
$validator = Validator::make($request->all(), [
'category_id' => 'required|integer',
'banner_image' => 'required|image|mimes:jpeg,png,jpg,gif,webp,svg|max:5120', // 5MB max
'banner_sortby' => 'required|integer|min:1',
'isvisible' => 'required|boolean',
'isactive' => 'required|boolean',
'banner_title' => 'nullable|string|max:255',
'banner_desc' => 'nullable|string',
'banner_url' => 'nullable|string|max:255',
]);
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator)
->withInput();
}
try {
$banner = new Banner();
$banner->category_id = (int) $request->category_id;
$banner->banner_title = $request->banner_title ?? '';
$banner->banner_desc = $request->banner_desc ?? '';
$banner->banner_url = $request->banner_url ?? '#';
$banner->banner_sortby = (int) $request->banner_sortby;
$banner->isvisible = (bool) $request->isvisible;
$banner->isactive = (bool) $request->isactive;
$banner->isdelete = 1;
$banner->addedby = Auth::id();
$banner->created_at = Carbon::now();
$banner->visitor = $request->ip();
// Image Upload
$destinationPath = 'images/banner';
// Create directory if it doesn't exist
if (!File::exists(public_path($destinationPath))) {
File::makeDirectory(public_path($destinationPath), 0755, true);
}
if ($request->hasFile('banner_image') && $request->file('banner_image')->isValid()) {
$extension = $request->file('banner_image')->getClientOriginalExtension();
$timestamp = Carbon::now()->timestamp;
$fileName = 'banner_' . $timestamp . '.' . $extension;
if ($request->file('banner_image')->move(public_path($destinationPath), $fileName)) {
$banner->banner_image = $destinationPath . '/' . $fileName;
} else {
return back()->with('error', 'Failed to upload banner image.');
}
} else {
return back()->with('error', 'Please select a valid banner image.');
}
if ($banner->save()) {
return redirect()->route('banner.index')
->with('success', 'New banner added successfully!');
}
return back()->with('error', 'Failed to save banner. Please try again.');
} catch (\Exception $e) {
return back()->with('error', 'An error occurred while creating the banner.');
}
}
/**
* Display the specified resource.
*/
public function show(Banner $banner)
{
// Method intentionally left empty
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Banner $banner): View|RedirectResponse
{
if (view()->exists('backend.admin.banners.bannerEdit')) {
return view('backend.admin.banners.bannerEdit', compact('banner'));
}
return back()->with('error', 'View not found');
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, Banner $banner): RedirectResponse
{
// CSRF token validation
if ($request->_token !== Session::token()) {
return Redirect::back()->with('error', 'Invalid form submission!');
}
// Validation rules
$validator = Validator::make($request->all(), [
'category_id' => 'required|integer',
'banner_image' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp,svg|max:5120',
'banner_sortby' => 'required|integer|min:1',
'isvisible' => 'required|boolean',
'isactive' => 'required|boolean',
'banner_title' => 'nullable|string|max:255',
'banner_desc' => 'nullable|string',
'banner_url' => 'nullable|string|max:255',
]);
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator)
->withInput();
}
try {
$banner->category_id = (int) $request->category_id;
$banner->banner_title = Str::title($request->banner_title ?? '');
$banner->banner_desc = $request->banner_desc ?? '';
$banner->banner_url = $request->banner_url ?? '#';
$banner->banner_sortby = (int) $request->banner_sortby;
$banner->isvisible = (bool) $request->isvisible;
$banner->isactive = (bool) $request->isactive;
$banner->addedby = Auth::id();
$banner->updated_at = Carbon::now();
$banner->visitor = $request->ip();
// Image Upload
$destinationPath = 'images/banner';
// Create directory if it doesn't exist
if (!File::exists(public_path($destinationPath))) {
File::makeDirectory(public_path($destinationPath), 0755, true);
}
if ($request->hasFile('banner_image') && $request->file('banner_image')->isValid()) {
$oldFileName = $banner->banner_image;
// Delete old image if it exists
if ($oldFileName && File::exists(public_path($oldFileName))) {
File::delete(public_path($oldFileName));
}
$extension = $request->file('banner_image')->getClientOriginalExtension();
$timestamp = Carbon::now()->timestamp;
$fileName = 'banner_' . $banner->id . '_' . $timestamp . '.' . $extension;
if ($request->file('banner_image')->move(public_path($destinationPath), $fileName)) {
$banner->banner_image = $destinationPath . '/' . $fileName;
} else {
return back()->with('error', 'Failed to upload new banner image.');
}
}
if ($banner->save()) {
return redirect()->route('banner.edit', $banner->id)
->with('success', 'Banner updated successfully!');
}
return back()->with('error', 'Failed to update banner. Please try again.');
} catch (\Exception $e) {
return back()->with('error', 'An error occurred while updating the banner.');
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Banner $banner)
{
// Method intentionally left empty - using delete method instead
}
/**
* Soft delete the specified resource from storage.
*/
public function delete(Request $request, int $id): JsonResponse
{
try {
$banner = Banner::withTrashed()->findOrFail($id);
$banner->isdelete = 0;
$banner->addedby = Auth::id();
$banner->deleted_at = Carbon::now();
if ($banner->save()) {
// Delete associated image file
if ($banner->banner_image && File::exists(public_path($banner->banner_image))) {
File::delete(public_path($banner->banner_image));
}
return response()->json([
'id' => $banner->id,
'status' => true,
'msg' => 'Banner deleted successfully!'
]);
}
return response()->json([
'status' => false,
'msg' => 'Failed to delete banner!'
], 500);
} catch (\Exception $e) {
return response()->json([
'status' => false,
'msg' => 'Banner not found or already deleted!'
], 404);
}
}
/**
* Restore the specified resource from storage.
*/
public function restore(int $id = 0): RedirectResponse
{
try {
if ($id > 0) {
$banner = Banner::withTrashed()->findOrFail($id);
$banner->restore();
$banner->isdelete = 1;
$banner->save();
return back()->with('success', 'Banner restored successfully!');
} else {
// Restore all trashed banners
Banner::onlyTrashed()->restore();
Banner::where('isdelete', 0)->update([
'isdelete' => 1,
'addedby' => Auth::id()
]);
return back()->with('success', 'All banners restored successfully!');
}
} catch (\Exception $e) {
return back()->with('error', 'Failed to restore banner. Please try again.');
}
}
/**
* Change banner visibility status.
*/
public function changeStatus(Request $request): JsonResponse
{
try {
$id = $request->input('id');
$banner = Banner::findOrFail($id);
$banner->isvisible = !$banner->isvisible;
$banner->save();
return response()->json([
'status' => true,
'isvisible' => $banner->isvisible,
'message' => 'Banner visibility updated successfully'
]);
} catch (\Exception $e) {
return response()->json([
'status' => false,
'message' => 'Failed to update banner status'
], 500);
}
}
/**
* Change banner active status.
*/
public function changeActiveStatus(Request $request): JsonResponse
{
try {
$id = $request->input('id');
$banner = Banner::findOrFail($id);
$banner->isactive = !$banner->isactive;
$banner->save();
return response()->json([
'status' => true,
'isactive' => $banner->isactive,
'message' => 'Banner status updated successfully'
]);
} catch (\Exception $e) {
return response()->json([
'status' => false,
'message' => 'Failed to update banner status'
], 500);
}
}
}


PK 99