Server : Apache System : Linux 145.162.205.92.host.secureserver.net 5.14.0-611.45.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Apr 1 05:56:53 EDT 2026 x86_64 User : tradze ( 1001) PHP Version : 8.1.34 Disable Function : NONE Directory : /home/tradze/www/app/Modules/Users/Http/Controllers/Admin/ |
<?php
namespace App\Modules\Users\Http\Controllers\Admin;
use App\Http\Controllers\AdminController;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Modules\Services\Models\ServiceType;
use App\Modules\Users\Http\Requests\ClientCreateRequest;
use App\Modules\Users\Http\Requests\ClientUpdAvatarRequest;
use App\Modules\Users\Http\Requests\ClientUpdInfoRequest;
use App\Modules\Users\Http\Requests\ClientUpdPassRequest;
use App\Modules\Users\Models\UserAddress;
use App\Modules\Users\Models\UserProfile;
use App\User;
use Spatie\Permission\Models\Role;
use Carbon\Carbon;
use Cmgmyr\Messenger\Models\Thread;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Laracasts\Flash\Flash;
use Yajra\Datatables\Datatables;
use Mail;
class ClientController extends AdminController
{
/**
* Show the application admin login form.
*
* @return \Illuminate\Http\Response
*/
public function getLoginAs($id)
{
$login = Auth::loginUsingId($id);
return redirect('/');
}
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index(Request $request)
{
//store filters to sessions
\Log::info('------0');
if ($request->get('search')) {
$request->session()->put('clients.site.filters', $request->except(['_token', 'search']));
return redirect(route('admin.users.clients.index'));
} elseif ($request->get('reset')) {
$request->session()->forget('clients.site.filters');
return redirect(route('admin.users.clients.index'));
} //end elseif
$this->data['page_title'] = trans('users::clients.page_title');
$this->data['filters'] = $request->session()->get('clients.site.filters');
return view('users::admin.clients_index', $this->data);
}
/**
* Show a list of all companies
*
* @return mixed
*/
public function data(Request $request)
{
\Log::info('------1');
//create object contact
$obj = $this->getData($request);
//create array with contacts permissions access
$this->data['can'] = [
'view' => $this->data['user']->roles->pluck('slug')[0] == 'developer',
'edit' => $this->data['user']->roles->pluck('slug')[0] == 'developer',
'delete' => $this->data['user']->roles->pluck('slug')[0] == 'developer',
];
//return datatables data
return Datatables::of($obj)
->editColumn('name', function ($o){
$data['o'] = $o;
return view('users::admin.partial_name_with_pic',$data)->render();
})
->addColumn('actions', function ($o) {
$this->data['o']=$o;
return view('users::admin.clients_list_actions',$this->data)->render();
})
->rawColumns([
'name',
'actions'
])
->removeColumn('id')
->removeColumn('updated_at')
->make(true);
}
/**
* Get object entries
* @param Request $request
*/
protected function getData(Request $request)
{
\Log::info('------2');
//get filters
$filters = $request->session()->get('clients.site.filters');
$obj = User::query()
->whereHas('roles',function($query){
return $query->where('slug','customer');
})
->OfName(isset($filters['search_name']) ? $filters['search_name'] : null)
->OfPhone(isset($filters['search_phone']) ? $filters['search_phone'] : null)
;
//return object
return $obj;
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
\Log::info('------3');
$this->data['page_title'] = trans('users::clients.page_title');
//show page
return view('users::admin.clients_create', $this->data);
}
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store(ClientCreateRequest $request)
{ \Log::info('------4');
//start transaction
DB::beginTransaction();
$data = [
'name' => $request->first_name.' '.$request->last_name,
'email' => $request->email,
'password' => $request->password,
];
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'trial_ends_at' => Carbon::now()->addYears(10),
]);
//create user profile
$profile = UserProfile::create([
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'mobile_number' => $request->mobile_number,
'trial_ends_at' => Carbon::now()->addYears(10),
'user_id' => $user->id,
]);
//get customer role
$role = Role::where('slug','customer')->first();
//attach role
if ($role)
$role_status = $user->assignRole($role);
if ($user && $profile){
//commit transaction
DB::commit();
//redirect
if ($request->save)
return redirect(route('admin.users.clients.show', ['id' => $obj->id]));
elseif ($request->save_exit)
return redirect(route('admin.users.clients.index'));
}
else{
//rollback
DB::rollback();
return redirect(route('admin.users.clients.create'))->withInput();
} //end elseif
}
/**
* Edit Customer/Client account
*
* @param $label
* @return \BladeView|bool|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function edit(Request $request, $obj)
{
\Log::info('------5');
$user = User::with('profile')->find($obj);
$user->first_name = $user->profile->first_name;
$user->last_name = $user->profile->last_name;
$user->mobile_number = $user->profile->mobile_number;
$user->role = $user->roles->pluck('name')->first();
$this->data['page_title'] = trans('users::clients.page_title');
$this->data['obj'] = $user;
$this->data['form']['useraddress'] = $this->get_request_address($request);
$this->data['form']['saved_addr'] = $this->get_saved_address($user);
//show page
return view('users::admin.clients_edit', $this->data);
}
protected function get_request_address($request)
{
\Log::info('------6');
$data['address'] = $request->old('address');
$data['county'] = $request->old('county');
$data['postcode'] = $request->old('postcode');
$data['is_main'] = $request->old('is_main');
return $data;
}
/**
* Get contracts documents
* @param $obj
*/
protected function get_saved_address($obj)
{
\Log::info('------7');
$results = [];
$address = UserAddress::where('user_id',$obj->id)->get();
foreach($address as $adr){
$results[$adr->id]=[
'id' => $adr->id,
'address' => $adr->address,
'postcode' => $adr->postcode,
'county' => $adr->county,
'country' => $adr->country,
'is_main' => $adr->is_main,
];
} //endforeach
//return results
return $results;
}
/**
* Update the specified resource in storage.
*
* @param int $id
* @return Response
*/
public function update(ClientUpdInfoRequest $request, $id)
{
$user = User::with('profile')->find($id);
$user_data = [
'name' => $request->first_name.' '.$request->last_name,
];
User::where('id',$id)->update($user_data);
$profile_data = [
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'mobile_number' => $request->mobile_number,
];
$profile = $user->profile;
$profile->update($profile_data);
//save existing address
foreach($user->address as $adr){
$adrData=[
'address'=>$request["address_{$adr->id}"],
'postcode'=>$request["postcode_{$adr->id}"],
'county'=>$request["county_{$adr->id}"],
'country'=>$request["country_{$adr->id}"],
'is_main'=>$request["is_main_{$adr->id}"],
];
$adr->update($adrData);
} //end save existing address
//save new address
if ($request->has('address')){
foreach($request->address as $key=>$val){
$newaddr = UserAddress::create([
'address' => $val,
'county'=>$request['county'][$key],
'postcode'=>$request['postcode'][$key],
'is_main'=>$request['is_main'][$key],
'user_id' => $id,
]);
} //endforeach
} //endif
//redirect
if ($request->save) {
return redirect(route('admin.users.clients.edit', ['client' => $id]));
} elseif ($request->save_exit) {
return redirect(route('admin.users.clients.index'));
}
}
/**
* Update user password
* @param TherapistUpdPassRequest $request
* @param $obj
*/
public function update_pass(ClientUpdPassRequest $request, $obj)
{
\Log::info('------9');
$user = User::find($obj);
$data = [
'password' => bcrypt($request->password),
];
$user->update($data);
//redirect
if ($request->save) {
return redirect(route('admin.users.clients.edit', ['client' => $obj]));
} elseif ($request->save_exit) {
return redirect(route('admin.users.clients.index'));
}
}
/**
* Update user password
* @param TherapistUpdPassRequest $request
* @param $obj
*/
public function update_avatar(ClientUpdAvatarRequest $request, $obj)
{
\Log::info('------10');
$file = $request->file('avatar');
$filename = strtolower(Str::random(20)).'-'.Str::slug(str_replace($file->getClientOriginalExtension(),'',$file->getClientOriginalName()));
$extension = ($file->getClientOriginalExtension())?:'jpg';
$path_file = 'avatar/'.$filename.".".$extension;
//upload file
$upload = Storage::disk('public_images')->put(
$path_file,
file_get_contents($request->file('avatar')->getRealPath())
);
$user = User::with('profile')->find($obj);
$profile = $user->profile;
$profile->avatar = $path_file;
$profile->save();
//redirect
if ($request->save) {
return redirect(route('admin.users.clients.edit', ['client' => $obj]));
} elseif ($request->save_exit) {
return redirect(route('admin.users.clients.index'));
}
}
/**
* Delete page
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function delete($obj)
{
\Log::info('------11');
$user = User::with('profile')->find($obj);
$this->data['obj'] = $user;
return view('users::admin.clients_delete', $this->data);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($obj)
{
\Log::info('------12');
$user = User::with('profile')->find($obj);
//set object name
$obj_name = $user->name;
//delete contact
$user->delete();
//set success message
Flash::info(trans('users::clients.message_confirm_delete', ['name' => $user->name]));
//redirect to contacts list
return redirect(route('admin.users.clients.index'));
}
/*
* Delete permanently the specified resource from storage.
*
*
*/
public function permanentDelete($id)
{
$user = User::withTrashed()->where('id', $id)->first();
$data['user'] = $user;
if (isset($user->salon_id)) {
$salon_id = $user->salon_id;
}
\Log::info('------12');
//set object name
$obj_name = $user->name;
//delete contact
if ($user->forceDelete()) {
Mail::send('users::admin.email_deleted_user_successfully', ['user' => $user], function ($m) use ($data) {
$m->from(env('MAIL_FROM'), env('APP_NAME'));
$m->to($data['user']->email, $data['user']->name);
$m->bcc(explode(',', env('MAIL_DELETE_USER_BCC')), env('MAIL_DELETE_USER_BCC_NAME'));
$m->subject(env('APP_NAME') . ' – User Deleted Permanently');
});
}
//set success message
Flash::info(trans('users::clients.message_confirm_delete', ['name' => $obj_name]));
//redirect to contacts list
return redirect(route('admin.users.clients.index'));
}
/**
* Profile Overview
* @param $obj
*/
public function show($id)
{
$obj = User::find($id);
\Log::info('------13');
$obj->role = $obj->roles->pluck('name')->first();
//load messages
// $threads = Thread::forUser($obj->id)->latest('updated_at')->get();
$this->data['obj'] = $obj;
$this->data['threads'] = $obj->threads;
$this->data['address'] = $obj->address;
$this->data['bookings'] = $obj->bookings()
->select('*',DB::raw('CONCAT_WS(" ",date,hour) as bookingdate'))
->whereRaw('CONCAT_WS(" ",date,hour) >= NOW()')
->where('is_active',1)
->orderBy('bookingdate','asc')
->get();
//display page
return view('users::admin.clients_show', $this->data);
}
/**
* Add new address
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function add_address()
{
\Log::info('------14');
return view('users::admin.client_partial_new_address');
}
/**
* Delete user address
* @param $id
*/
public function del_address($id)
{
\Log::info('------15');
$address = UserAddress::findOrFail($id);
$address->delete();
}
}