Aknaproff/app/Http/Controllers/Superadmin/ManageUsersController.php
2023-09-21 15:01:58 +01:00

395 lines
14 KiB
PHP

<?php
namespace App\Http\Controllers\Superadmin;
use App\Form;
use App\Http\Controllers\Controller;
use App\Notifications\UserNotification;
use App\Package;
use App\User;
use App\UserForm;
use Illuminate\Http\Request;
use Yajra\DataTables\Facades\DataTables;
class ManageUsersController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
if (! auth()->user()->can('superadmin')) {
abort(403, 'Unauthorized action.');
}
if ($request->ajax()) {
$users = User::select('name', 'email', 'is_active', 'created_at', 'id');
if (! empty($request->input('status'))) {
$is_active = ($request->input('status') == 'active') ? 1 : 0;
$users->where('is_active', $is_active);
}
return DataTables::of($users)
->addColumn(
'action',
'
@if($is_active)
<span title="@lang("messages.mark_inactive")">
<a class="btn btn-link btn-icon btn-sm text-danger toggle_is_active pointer" data-href="{{ action([\App\Http\Controllers\Superadmin\ManageUsersController::class, "toggleUserActiveStatus"], [$id])}}">
<i class="fas fa-toggle-on font_icon_size"></i>
</a>
</span>
@else
<span title="@lang("messages.mark_active")">
<a class="btn btn-link btn-icon btn-sm text-success toggle_is_active pointer" data-href="{{ action([\App\Http\Controllers\Superadmin\ManageUsersController::class, "toggleUserActiveStatus"], [$id])}}">
<i class="fas fa-toggle-off font_icon_size"></i>
</a>
</span>
@endif
<a class="btn btn-link btn-icon btn-sm text-info edit_user pointer" data-href="{{action([\App\Http\Controllers\Superadmin\ManageUsersController::class, "edit"], [$id])}}" title="@lang("messages.edit")">
<i class="fas fa-edit font_icon_size"></i>
</a>
<a class="btn btn-link btn-icon btn-sm text-info upgrade_account pointer" data-href="{{action([\App\Http\Controllers\Superadmin\ManageUsersController::class, "upgrade"], [$id])}}" title="@lang("messages.edit")">
<i class="fas fa-money-check font_icon_size"></i>
</a>
<a class="btn btn-link btn-icon btn-sm text-danger delete_user pointer" data-href="{{action([\App\Http\Controllers\Superadmin\ManageUsersController::class, "destroy"], [$id])}}" title="@lang("messages.delete")">
<i class="fas fa-trash-alt font_icon_size"></i>
</a>
'
)
->editColumn(
'is_active',
'
@if($is_active)
<span class="badge badge-pill badge-success">
<i class="far fa-check-circle"></i>
@lang(\'messages.active\')
</span>
@else
<span class="badge badge-pill badge-danger">
<i class="far fa-times-circle"></i>
@lang(\'messages.inactive\')
</span>
@endif
'
)
->editColumn(
'created_at',
'
@php
$date = \Carbon\Carbon::parse($created_at)->isoFormat("D/M/YY HH:mm A");
@endphp
{{$date}}
'
)
->removeColumn('id')
->rawColumns(['action', 'is_active', 'created_at'])
->make(true);
}
return view('superadmin.users.index');
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
if (request()->ajax()) {
$user = request()->user();
$forms = Form::where('is_template', 0)
->where('created_by', $user->id)
->pluck('name', 'id')
->toArray();
return view('superadmin.users.create')
->with(compact('forms'));
}
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
try {
if (! empty($this->notAllowedInDemo())) {
return $this->notAllowedInDemo();
}
$input = $request->only('name', 'email', 'is_active', 'can_create_form', 'show_form_response_user', 'show_edit_buttons_form');
if (! empty($request->input('password'))) {
$input['password'] = bcrypt($request->input('password'));
}
$input['is_active'] = ! empty($input['is_active']) ? 1 : 0;
$input['can_create_form'] = ! empty($input['can_create_form']) ? 1 : 0;
$input['show_form_response_user'] = ! empty($input['show_form_response_user']) ? 1 : 0;
$input['show_edit_buttons_form'] = ! empty($input['show_edit_buttons_form']) ? 1 : 0;
$user = User::create($input);
//save user forms (assgined)
$permissions = $request->input('permissions');
$form_ids = $request->input('form_id');
$user_forms = [];
if (! empty($form_ids) && ! empty($permissions)) {
foreach ($form_ids as $key => $form_id) {
$user_forms[] = [
'form_id' => $form_id,
'assigned_by' => \Auth::id(),
'permissions' => $permissions,
];
}
}
$user->userForms()->createMany($user_forms);
if (! empty($request->input('send_email'))) {
$input['password'] = $request->input('password');
$user->notify(new UserNotification($input));
}
$output = $this->respondSuccess();
} catch (Exception $e) {
$output = $this->respondWentWrong($e);
}
return $output;
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
if (request()->ajax()) {
$user = User::findOrFail($id);
$logged_in_user = request()->user();
$forms = Form::where('is_template', 0)
->where('created_by', $logged_in_user->id)
->pluck('name', 'id')
->toArray();
$assigned_forms = UserForm::with('form')
->where('assigned_by', \Auth::id())
->where('assigned_to', $id)
->get();
return view('superadmin.users.edit')
->with(compact('user', 'forms', 'assigned_forms'));
}
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
try {
if (! empty($this->notAllowedInDemo())) {
return $this->notAllowedInDemo();
}
$input = $request->only('name', 'email', 'is_active', 'can_create_form', 'show_form_response_user', 'show_edit_buttons_form');
$input['is_active'] = ! empty($input['is_active']) ? 1 : 0;
$input['can_create_form'] = ! empty($input['can_create_form']) ? 1 : 0;
$input['show_form_response_user'] = ! empty($input['show_form_response_user']) ? 1 : 0;
$input['show_edit_buttons_form'] = ! empty($input['show_edit_buttons_form']) ? 1 : 0;
if (! empty($request->input('password'))) {
$input['password'] = bcrypt($request->input('password'));
}
$user = User::findOrFail($id);
$user->update($input);
//update user forms (assgined)
$edit_permissions = $request->input('edit_permissions');
$assgined_form_ids = $request->input('edit_assigned_form_id');
if (! empty($assgined_form_ids)) {
$non_existing_ids = [];
foreach ($assgined_form_ids as $key => $id) {
if (! empty($edit_permissions[$id])) {
$user_form = UserForm::find($id);
$user_form->permissions = $edit_permissions[$id];
$user_form->save();
} else {
$non_existing_ids[] = $id;
}
}
UserForm::whereIn('id', $non_existing_ids)
->delete();
}
//save user forms (assgined)
$permissions = $request->input('permissions');
$form_ids = $request->input('form_id');
$user_forms = [];
if (! empty($form_ids) && ! empty($permissions)) {
foreach ($form_ids as $key => $form_id) {
$user_forms[] = [
'form_id' => $form_id,
'assigned_by' => \Auth::id(),
'permissions' => $permissions,
];
}
}
$user->userForms()->createMany($user_forms);
if (! empty($request->input('send_email'))) {
$input['password'] = $request->input('password');
$user->notify(new UserNotification($input));
}
$output = $this->respondSuccess();
} catch (Exception $e) {
$output = $this->respondWentWrong($e);
}
return $output;
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
try {
if (request()->ajax()) {
if (! empty($this->notAllowedInDemo())) {
return $this->notAllowedInDemo();
}
$user = User::findOrFail($id);
if (\Auth::id() != $user->id) {
$user->createdForms()->delete();
$user->userForms()->delete();
$user->delete();
$output = $this->respondSuccess();
} else {
$output = $this->respondWithError(__('messages.something_went_wrong'));
}
}
} catch (Exception $e) {
$output = $this->respondWentWrong($e);
}
return $output;
}
/**
* toggle users status(active/inactive)
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function toggleUserActiveStatus($id)
{
try {
if (request()->ajax()) {
if (! empty($this->notAllowedInDemo())) {
return $this->notAllowedInDemo();
}
$user = User::findOrFail($id);
if (\Auth::id() != $user->id) {
$user->is_active = ! $user->is_active;
$user->save();
$output = $this->respondSuccess();
} else {
$output = $this->respondWithError(__('messages.something_went_wrong'));
}
}
} catch (Exception $e) {
$output = $this->respondWentWrong($e);
}
return $output;
}
/**
* check if email exist or not
*
* @return \Illuminate\Http\Response
*/
public function checkIfEmailExist(Request $request)
{
$email = $request->input('email');
$query = User::where('email', $email);
if (! empty($request->input('user_id'))) {
$user_id = $request->input('user_id');
$query->where('id', '!=', $user_id);
}
$exists = $query->exists();
if (! $exists) {
echo 'true';
exit;
} else {
echo 'false';
exit;
}
}
/**
* Upgrade modal for upgrade the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function upgrade($id)
{
if (request()->ajax()) {
$user = User::findOrFail($id);
$active_packages = Package::where('is_active', 1)
->orderBy('sort_order', 'asc')
->paginate(20);
return view('superadmin.users.upgrade')
->with(compact('user', 'active_packages'));
}
}
}