laravelEcomm/app/Http/Controllers/AdminController.php

248 lines
8.4 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use App\Models\User;
use App\Models\Order;
use App\Models\OrderItem;
use Illuminate\Http\Request;
use App\Models\Product;
class AdminController extends Controller
{
public function index()
{
if (session()->get('type') == 'Admin') {
return view('Dashboard.index');
}
return redirect()->back();
}
public function products()
{
if (session()->get('type') == 'Admin') {
$products = Product::all();
return view('Dashboard.products', compact('products'));
}
return redirect()->back();
}
// public function addNewProduct()
// {
// $validated = request()->validate([
// 'name' => 'required',
// 'price' => 'required',
// 'description' => 'required',
// 'image' => 'required|image|mimes:jpeg,png,jpg,gif,
// svg|max:2048',
// 'quantity' => 'required',
// ]);
// if (request()->hasFile('file')) {
// $file = request()->file('file');
// $fileName = $file->getClientOriginalName();
// $file->move('uploads/products/', $fileName);
// request()->merge([
// 'picture' => $fileName,
// ]);
// }
// Product::create(request()->all());
// // $product = new Product();
// // $product->name = $data->input('name');
// // $product->picture = $data->file('file')->getClientOriginalName();
// // $data->file('file')->move('uploads/products/', $product->picture);
// // $product->description = $data->input('description');
// // $product->price = $data->input('price');
// // $product->quantity = $data->input('quantity');
// // $product->category = $data->input('category');
// // $product->type = $data->input('type');
// // $abc = $product->save();
// // dd($abc);
// return redirect()->back()->with('success', 'Product Added Successfully');
// // return view('Dashboard.addNewProduct');
// }
//mass assignment for adding new product
public function addNewProduct(Request $request)
{
if (session()->get('type') == 'Admin') {
$validated = $request->validate([
'name' => 'required',
'price' => 'required|numeric',
'description' => 'required',
'file' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:10240',
'quantity' => 'required|numeric',
'category' => 'required',
'type' => 'required',
]);
if ($request->hasFile('file')) {
$file = $request->file('file');
$fileName = time() . '_' . $file->getClientOriginalName();
$file->move(public_path('uploads/products'), $fileName);
$validated['picture'] = $fileName;
}
Product::create($validated);
return redirect()->back()->with('success', 'Product Added Successfully');
}
return redirect()->back();
}
//normal assignment for update
// public function updateProduct(Request $request)
// {
// $validated = $request->validate([
// 'name' => 'required',
// 'price' => 'required|numeric',
// 'description' => 'required',
// 'file' => 'image|mimes:jpeg,png,jpg,gif,svg|max
// :2048',
// 'quantity' => 'required|numeric',
// 'category' => 'required',
// 'type' => 'required',
// ]);
// if ($request->hasFile('file')) {
// $file = $request->file('file');
// $fileName = time() . '_' . $file->getClientOriginalName();
// $file->move(public_path('uploads/products'), $fileName);
// $validated['picture'] = $fileName;
// }
// $product = Product::find($request->id);
// $product->name = $validated['name'];
// $product->price = $validated['price'];
// $product->description = $validated['description'];
// $product->quantity = $validated['quantity'];
// $product->category = $validated['category'];
// $product->type = $validated['type'];
// $product->save();
// return redirect()->back()->with('success', 'Product Updated Successfully');
// }
//mass assignment for update
public function updateProduct(Request $request)
{
if (session()->get('type') == 'Admin') {
$validated = $request->validate([
'name' => 'required',
'price' => 'required|numeric',
'description' => 'required',
'quantity' => 'required|numeric',
'category' => 'required',
'type' => 'required',
'file' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
$product = Product::find($request->input('id'));
if ($request->hasFile('file')) {
$file = $request->file('file');
$fileName = time() . '_' . $file->getClientOriginalName();
$file->move(public_path('uploads/products'), $fileName);
$validated['picture'] = $fileName;
}
$product->update($validated);
return redirect()->back()->with('success', 'Product Updated Successfully');
}
return redirect()->back();
}
public function deleteProduct($id)
{
if (session()->get('type') == 'Admin') {
$product = Product::find($id);
$product->delete();
return redirect()->back()->with('success', 'Product Deleted Successfully');
}
return redirect()->back();
}
public function profile()
{
if (session()->get('type') == 'Admin') {
$user = User::find(session()->get('id'));
return view('Dashboard.profile', compact('user'));
}
return redirect()->back();
}
public function customers()
{
if (session()->get('type') == 'Admin') {
$customers = User::where('type', 'customer')->get();
return view('Dashboard.customers', compact('customers'));
}
return redirect()->back();
}
public function changeUserStatus($status, $id)
{
if (session()->get('type') == 'Admin') {
$user = User::find($id);
$user->status = $status;
$user->save();
return redirect()->back()->with('success', 'User Status Changed Successfully');
}
return redirect()->back();
}
//old orders
public function orders()
{
if (session()->get('type') == 'Admin') {
$orderItems = DB::table('order_items')
->join('products', 'order_items.productId', 'products.id')
->select('products.name', 'products.picture', 'order_items.*')
->get();
$orders = DB::table('users')
->join('orders', 'orders.customerId', 'users.id')
->select('orders.*', 'users.name', 'users.email', 'users.status as userStatus')
->get();
return view('Dashboard.orders', compact('orders', 'orderItems'));
}
return redirect()->back();
}
//new orders
// public function orders()
// {
// if (session()->get('type') == 'Admin') {
// $orderItems = DB::table('order_items')
// ->join('products', 'order_items.productId', 'products.id')
// ->select('products.name as productName', 'products.picture', 'order_items.*')
// ->get();
// $orders = DB::table('users')
// ->join('orders', 'orders.customerId', 'users.id')
// ->select('orders.*', 'users.name as userName', 'users.email', 'users.status as userStatus')
// ->get();
// return view('Dashboard.orders', compact('orders', 'orderItems'));
// }
// return redirect()->back();
// }
public function changeOrderStatus($status, $id)
{
if (session()->get('type') == 'Admin') {
$order = Order::find($id);
$order->status = $status;
$order->save();
return redirect()->back()->with('success', 'Order Status Changed Successfully');
}
return redirect()->back();
}
}