Sh3ll
OdayForums


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/tradze/www/app/Modules/Users/Http/Controllers/Admin/ClientController.php
<?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();
    }




}

ZeroDay Forums Mini