simedkom/app/Http/Controllers/Dashboard/UserController.php
2025-02-28 17:35:11 +07:00

161 lines
4.6 KiB
PHP

<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Controller;
use App\Http\Requests\ResetPasswordRequest;
use App\Http\Requests\UserRequest;
use App\Models\Role;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index(Request $request){
return view('dashboard.users.index', [
'title' => 'Pengguna',
'role' => $request->input('role', null)
]);
}
public function create(){
return view('dashboard.users.create', [
'title' => 'Tambah Pengguna',
'roles' => Role::all()
]);
}
public function store(UserRequest $request){
$validatedData = $request->validated();
$createdUser = User::create($validatedData);
if($createdUser){
return redirect()->back()->with('success-status', 'Berhasil menambahkan pengguna.');
}else{
return redirect()->back()->with('failed-status', 'Gagal menambahkan pengguna.');
}
}
public function edit($id){
$user = User::with(['role'])->findOrFail(decrypt_id($id));
return view('dashboard.users.edit', [
'title' => 'Ubah Pengguna',
'user' => $user,
'roles' => Role::all()
]);
}
public function update(UserRequest $request, $id){
$validatedData = $request->validated();
if (isset($validatedData['password']) && !empty($validatedData['password'])) {
$validatedData['password'] = $request->input('password');
} else {
unset($validatedData['password']);
}
$user = User::findOrFail(decrypt_id($id));
$updatedUser = $user->update($validatedData);
if($updatedUser){
return redirect()->back()->with('success-status', 'Berhasil mengubah pengguna.');
}else{
return redirect()->back()->with('failed-status', 'Gagal mengubah pengguna.');
}
}
public function show($id){
$user = User::with(['role', 'company.media.journalists'])->findOrFail(decrypt_id($id));
$viewData = [
'title' => 'Detail Pengguna',
'user' => $user,
'roles' => Role::all()
];
if($user->role_id === '3'){
$viewData['company'] = $user->company;
$viewData['media'] = $user->company->media;
$viewData['journalists'] = $user->company->media->journalists;
}
return view('dashboard.users.show', $viewData);
}
public function resetPassword($id){
$user = User::with(['role'])->findOrFail(decrypt_id($id));
return view('dashboard.users.reset-password',[
'title' => 'Reset Password',
'user' => $user
]);
}
public function resetPasswordAction(ResetPasswordRequest $request, $id){
$validatedData = $request->validated();
$updatedUser = User::findOrFail(decrypt_id($id))->update([
'password' => $validatedData['password']
]);
if($updatedUser){
return redirect()->back()->with('success-status', 'Berhasil mereset password pengguna.');
}else{
return redirect()->back()->with('failed-status', 'Gagal mereset password pengguna.');
}
}
public function statusAction($id, $action){
$user = User::findOrFail(decrypt_id($id));
if($user->status === '0'){
if($action == 'accept'){
$user->update([
'status' => '1'
]);
}else if($action == 'reject'){
$user->update([
'status' => '3'
]);
}
}
}
public function destroy($id)
{
try {
$user = User::with(['company.media.journalists'])->findOrFail(decrypt_id($id));
if ($user->role_id == '3') {
if ($user->company) {
$company = $user->company;
if ($company->media) {
$media = $company->media;
if ($media->journalists) {
$media->journalists->delete();
}
$media->delete();
}
$company->delete();
}
}
$user->delete();
return response()->json(['message' => 'Berhasil menghapus user beserta data terkait.']);
} catch (\Exception $e) {
return response()->json(['message' => 'Gagal menghapus user atau data terkait.'], 500);
}
}
}