Files
sccs_laravel/app/Http/Controllers/CategoryController.php
2025-11-04 16:23:40 +05:00

177 lines
5.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Category;
use App\Models\CategoryNotes;
use App\Traits\ApiResponseHelper;
use App\Traits\ImageHelper;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class CategoryController extends Controller
{
use ApiResponseHelper, ImageHelper;
public function index()
{
$pageConfigs = [
'pageHeader' => true,
'showMenu' => true
];
$breadcrumbs = [['link' => '/', 'name' => 'Home'], ['name' => 'Course']];
$createUrl = [['url' => 'create', 'name' => "Course", 'slug' => 'category']];
$categories = Category::all();
return view('content.categories.index', [
'breadcrumbs' => $breadcrumbs,
'pageConfigs' => $pageConfigs,
'createUrl' => $createUrl,
'categories' => $categories
]);
}
public function create()
{
$pageConfigs = [
'pageHeader' => true,
'showMenu' => true
];
$breadcrumbs = [['link' => '/admin/category', 'name' => 'Course'], ['name' => 'Add']];
return view('content.categories.create', [
'pageConfigs' => $pageConfigs,
'breadcrumbs' => $breadcrumbs,
]);
}
public function store(Request $request)
{
$request->validate([
'name' => ['required', 'min: 3'],
'fee' => ['required'],
'duration' => ['required'],
'status' => ['required'],
'picture' => ['required', 'image'],
]);
try {
DB::beginTransaction();
$category = new Category();
$category->name = $request->name;
$category->fee = $request->fee;
$category->duration_in_days = $request->duration;
$category->status = $request->status;
$category->created_by = Auth::user()->role;
if ($request->hasFile('picture')) {
$prefix = 'category';
$categoryImagePath = $this->uploadFile($request->picture, $prefix, false);
$category->picture = $categoryImagePath;
}
$category->save();
DB::commit();
return redirect()->route('category.index')->with([
'success' => "Category created successfully"
]);
} catch (\Throwable $exception) {
DB::rollBack();
return redirect()->back()->with([
'error' => $exception->getMessage()
]);
}
}
public function edit(Category $category)
{
$pageConfigs = [
'pageHeader' => true,
'showMenu' => true
];
$breadcrumbs = [['link' => '/admin/category', 'name' => 'Course'], ['name' => 'Edit']];
$notes = CategoryNotes::where('category_id', $category->id)->get();
return view('content.categories.edit', [
'pageConfigs' => $pageConfigs,
'breadcrumbs' => $breadcrumbs,
'category' => $category,
'notes' => $notes,
]);
}
public function update(Request $request, Category $category)
{
$request->validate([
'name' => ['required', 'min: 3'],
'fee' => ['required'],
'duration' => ['required'],
'status' => ['required'],
'picture' => ['nullable', 'image'],
]);
if ($category->created_by =='ADMIN' && auth()->user()->role != 'ADMIN'){
return redirect()->back()->with([
'error' => 'You do not have the permission to perform this task'
]);
}
try {
DB::beginTransaction();
$category->name = $request->name;
$category->fee = $request->fee;
$category->duration_in_days = $request->duration;
$category->status = $request->status;
if ($request->hasFile('picture')) {
$prefix = 'category';
$categoryImagePath = $this->updateFile($request->picture, $category->picture, $prefix, false);
$category->picture = $categoryImagePath;
}
$category->update();
DB::commit();
return redirect()->back()->with([
'success' => "Course updated successfully"
]);
} catch (\Throwable $exception) {
DB::rollBack();
return redirect()->back()->with([
'error' => $exception->getMessage()
]);
}
}
public function destroy(Category $category)
{
if ($category->created_by =='ADMIN' && auth()->user()->role != 'ADMIN'){
return redirect()->back()->with([
'error' => 'You do not have the permission to perform this task'
]);
}
try {
DB::beginTransaction();
if ($category->courses->count() > 0){
return redirect()->back()->with([
'error' => 'Please delete all the records that are related to this course.'
]);
}
$this->deleteFile($category->picture);
$category->delete();
DB::commit();
return redirect()->back()->with([
'success' => "Course deleted successfully"
]);
} catch (\Throwable $exception) {
DB::rollBack();
return redirect()->back()->with([
'error' => $exception->getMessage()
]);
}
}
}