186 lines
5.5 KiB
PHP
186 lines
5.5 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)
|
|
]);
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
public function profile($type){
|
|
|
|
$data = [
|
|
'title' => 'Detail Akun',
|
|
'user' => Auth::user(),
|
|
'roles' => Role::all(),
|
|
'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);
|
|
}
|
|
}
|
|
|
|
}
|