2025-03-26 10:01:46 +07:00

165 lines
4.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\DataTables\UsersDataTable;
use App\Models\User;
use App\Helpers\AuthHelper;
use Spatie\Permission\Models\Role;
use App\Http\Requests\UserRequest;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(UsersDataTable $dataTable)
{
$pageTitle = trans('global-message.list_form_title',['form' => trans('users.title')] );
$auth_user = AuthHelper::authSession();
$assets = ['data-table'];
$headerAction = '<a href="'.route('users.create').'" class="btn btn-sm btn-primary" role="button">Add User</a>';
return $dataTable->render('global.datatable', compact('pageTitle','auth_user','assets', 'headerAction'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$roles = Role::where('status',1)->get()->pluck('title', 'id');
return view('users.form', compact('roles'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(UserRequest $request)
{
$request['password'] = bcrypt($request->password);
$request['username'] = $request->username ?? stristr($request->email, "@", true) . rand(100,1000);
$user = User::create($request->all());
storeMediaFile($user,$request->profile_image, 'profile_image');
$user->assignRole('user');
// Save user Profile data...
$user->userProfile()->create($request->userProfile);
return redirect()->route('users.index')->withSuccess(__('message.msg_added',['name' => __('users.store')]));
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$data = User::with('userProfile','roles')->findOrFail($id);
$profileImage = getSingleMedia($data, 'profile_image');
return view('users.profile', compact('data', 'profileImage'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$data = User::with('userProfile','roles')->findOrFail($id);
$data['user_type'] = $data->roles->pluck('id')[0] ?? null;
$roles = Role::where('status',1)->get()->pluck('title', 'id');
$profileImage = getSingleMedia($data, 'profile_image');
return view('users.form', compact('data','id', 'roles', 'profileImage'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(UserRequest $request, $id)
{
// dd($request->all());
$user = User::with('userProfile')->findOrFail($id);
$role = Role::find($request->user_role);
if(env('IS_DEMO')) {
if($role->name === 'admin'&& $user->user_type === 'admin') {
return redirect()->back()->with('error', 'Permission denied');
}
}
$user->assignRole($role->name);
$request['password'] = $request->password != '' ? bcrypt($request->password) : $user->password;
// User user data...
$user->fill($request->all())->update();
// Save user image...
if (isset($request->profile_image) && $request->profile_image != null) {
$user->clearMediaCollection('profile_image');
$user->addMediaFromRequest('profile_image')->toMediaCollection('profile_image');
}
// user profile data....
$user->userProfile->fill($request->userProfile)->update();
if(auth()->check()){
return redirect()->route('users.index')->withSuccess(__('message.msg_updated',['name' => __('message.user')]));
}
return redirect()->back()->withSuccess(__('message.msg_updated',['name' => 'My Profile']));
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$user = User::findOrFail($id);
$status = 'errors';
$message= __('global-message.delete_form', ['form' => __('users.title')]);
if($user!='') {
$user->delete();
$status = 'success';
$message= __('global-message.delete_form', ['form' => __('users.title')]);
}
if(request()->ajax()) {
return response()->json(['status' => true, 'message' => $message, 'datatable_reload' => 'dataTable_wrapper']);
}
return redirect()->back()->with($status,$message);
}
}