simedkom/app/Http/Controllers/Dashboard/UserController.php
2025-04-04 13:39:26 +07:00

251 lines
8.1 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\LoginHistory;
use App\Models\Role;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class UserController extends Controller
{
public function index(Request $request){
return view('dashboard.users.index', [
'title' => 'Pengguna',
'role' => $request->input('role', null),
'status' => $request->input('status', 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, $type){
$user = User::with(['role', 'company.media.journalists'])->findOrFail(decrypt_id($id));
$data = [
'title' => 'Profile Pengguna',
'user' => $user,
'roles' => Role::all(),
'page' => 'show-user',
'type' => $type
];
if($type === 'account'){
return view('dashboard.users.profiles.account', $data);
}elseif($type === 'login-activities'){
$data['loginActivities'] = LoginHistory::where('user_id', $user->id)->orderByDesc('id')->simplePaginate(20);
return view('dashboard.users.profiles.login-activity', $data);
}elseif($type === 'company'){
return view('dashboard.users.profiles.company', $data);
}elseif($type === 'media'){
return view('dashboard.users.profiles.media', $data);
}elseif($type === 'journalists'){
return view('dashboard.users.profiles.journalists', $data);
}
}
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(Request $request, $id, $action){
$user = User::findOrFail(decrypt_id($id));
if($user->status === '0' && Auth::check() && is_role(['1'])){
if($action == 'accept'){
$user->update([
'status' => '1'
]);
return response()->json(['message' => 'Berhasil menyetujui pengguna.']);
}else if($action == 'reject'){
$validatedData = $request->validate([
'rejection_reason' => ['required'],
], [
'rejection_reason.required' => 'Alasan penolakan wajib diisi.',
]);
$user->update([
'status' => '3'
]);
$user->company->update([
'rejection_reason' => $validatedData['rejection_reason']
]);
return redirect()->back()->with('success-status', 'Berhasil menolak pengguna.');
}
}
// return redirect()->route('dashboard.users.index')->with('success-status', 'Berhasil menyetujui pengguna.');
}
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);
}
}
public function profile($type){
$data = [
'title' => 'Detail Akun',
'user' => Auth::user(),
'roles' => Role::all(),
'page' => 'profile',
'type' => $type
];
if($type === 'account'){
return view('dashboard.users.profiles.account', $data);
}elseif($type === 'login-activities'){
$data['loginActivities'] = LoginHistory::where('user_id', Auth::user()->id)->orderByDesc('id')->simplePaginate(20);
return view('dashboard.users.profiles.login-activity', $data);
}elseif($type === 'company'){
return view('dashboard.users.profiles.company', $data);
}elseif($type === 'media'){
return view('dashboard.users.profiles.media', $data);
}elseif($type === 'journalists'){
return view('dashboard.users.profiles.journalists', $data);
}
}
public function filter(Request $request){
$filteredRequest = $request->except('_token');
$filterField = array_filter($filteredRequest, function ($value) {
return filled($value);
});
return redirect()->route('dashboard.users.index', $filterField);
}
public function process($id, $type, $process){
$user = User::with(['role', 'company.media.journalists'])->findOrFail(decrypt_id($id));
$data = [
'title' => 'Profile Pengguna',
'user' => $user,
'roles' => Role::all(),
'page' => 'process',
'type' => $type,
'process' => $process,
];
if($type === 'account'){
return view('dashboard.users.profiles.account', $data);
}elseif($type === 'login-activities'){
$data['loginActivities'] = LoginHistory::where('user_id', $user->id)->orderByDesc('id')->simplePaginate(20);
return view('dashboard.users.profiles.login-activity', $data);
}elseif($type === 'company'){
return view('dashboard.users.profiles.company', $data);
}elseif($type === 'media'){
return view('dashboard.users.profiles.media', $data);
}elseif($type === 'journalists'){
return view('dashboard.users.profiles.journalists', $data);
}
}
}