306 lines
9.9 KiB
PHP
306 lines
9.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Dashboard;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\AccountSettingRequest;
|
|
use App\Http\Requests\ChangePasswordRequest;
|
|
use App\Http\Requests\ResetPasswordRequest;
|
|
use App\Http\Requests\UserRequest;
|
|
use App\Mail\AccountVerification;
|
|
use App\Models\LoginHistory;
|
|
use App\Models\Role;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Mail;
|
|
|
|
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',
|
|
'page' => 'reset',
|
|
'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 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);
|
|
}
|
|
}
|
|
|
|
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'
|
|
]);
|
|
|
|
Mail::to($user->email)->send(new AccountVerification($user, 'accepted'));
|
|
|
|
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']
|
|
]);
|
|
|
|
Mail::to($user->email)->send(new AccountVerification($user, 'rejected', strip_tags($validatedData['rejection_reason'])));
|
|
|
|
return redirect()->back()->with('success-status', 'Berhasil menolak pengguna.');
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public function setting(){
|
|
$user = Auth::user();
|
|
|
|
return view('dashboard.users.setting', [
|
|
'title' => 'Pengaturan Akun',
|
|
'user' => $user,
|
|
]);
|
|
}
|
|
|
|
public function settingAction(AccountSettingRequest $request){
|
|
$validatedData = $request->validated();
|
|
|
|
$user = User::findOrFail(Auth::id());
|
|
$updatedUser = $user->update([
|
|
'name' => $validatedData['name'],
|
|
'email' => $validatedData['email'],
|
|
]);
|
|
|
|
if($updatedUser){
|
|
return redirect()->back()->with('success-status', 'Berhasil mengubah data akun.');
|
|
}else{
|
|
return redirect()->back()->with('failed-status', 'Gagal mengubah data akun.');
|
|
}
|
|
}
|
|
|
|
public function changePassword(){
|
|
$user = User::with(['role'])->findOrFail(Auth::id());
|
|
|
|
return view('dashboard.users.reset-password',[
|
|
'title' => 'Ubah Password',
|
|
'page' => 'change',
|
|
'user' => $user
|
|
]);
|
|
}
|
|
|
|
public function changePasswordAction(ChangePasswordRequest $request){
|
|
$validatedData = $request->validated();
|
|
|
|
$updatedUser = User::findOrFail(Auth::id())->update([
|
|
'password' => $validatedData['password']
|
|
]);
|
|
|
|
if($updatedUser){
|
|
return redirect()->route('dashboard.users.setting')->with('success-status', 'Berhasil mengubah password.');
|
|
}else{
|
|
return redirect()->back()->with('failed-status', 'Gagal mengubah password.');
|
|
}
|
|
}
|
|
|
|
}
|