JFIF  x x C         C     "        } !1AQa "q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz        w !1AQ aq"2B #3Rbr{ gilour

File "ProfileController.php"

Full Path: /var/www/laravel_filter/app/Http/Controllers/ProfileController.php
File size: 19.01 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Controllers;

use Exception;
use App\Models\User;
use App\Models\Order;
use App\Models\Review;
use App\Models\Ticket;
use App\Rules\Captcha;
use App\Models\Message;
use App\Models\Wishlist;
use Illuminate\View\View;
use Hash, Image, File, Str;
use Illuminate\Http\Request;
use App\Models\RefundRequest;
use App\Models\TicketMessage;
use App\Models\CompleteRequest;
use App\Models\MessageDocument;
use App\Models\InfluencerWithdraw;
use App\Models\AppointmentSchedule;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\RedirectResponse;
use Modules\Service\Entities\Service;
use Illuminate\Support\Facades\Redirect;
use App\Http\Requests\ProfileUpdateRequest;
use Modules\Service\Entities\AdditionalService;
use Modules\Service\Entities\ServiceTranslation;
use Modules\Service\Entities\AdditionalServiceTranslation;

class ProfileController extends Controller
{

    public function __construct()
    {
        $this->middleware('auth:web');
    }

    public function dashboard(Request $request)
    {
        $user = Auth::guard('web')->user();

        $active_order = Order::where('order_status','approved_by_influencer')->where('client_id', $user->id)->count();

        $complete_order = Order::where('order_status','complete')->where('client_id', $user->id)->count();

        $cancel_order = Order::where('client_id', $user->id)->where('order_status','order_decliened_by_influencer')->orWhere('order_status', 'order_decliened_by_client')->count();

        return view('profile.dashboard', ['user' => $user, 'active_order' => $active_order, 'complete_order' => $complete_order, 'cancel_order' => $cancel_order]);
    }

    public function edit(Request $request)
    {
        $user = Auth::guard('web')->user();

        return view('profile.edit', [
            'user' => $user,
        ]);
    }

    public function update(Request $request)
    {
        $rules = [
            'name'=>'required',
            'email'=>'required',
            'phone'=>'required',
            'address'=>'required|max:220',
        ];
        $customMessages = [
            'name.required' => trans('admin_validation.Name is required'),
            'email.required' => trans('admin_validation.Email is required'),
            'phone.required' => trans('admin_validation.Phone is required'),
            'address.required' => trans('admin_validation.Address is required')
        ];
        $this->validate($request, $rules,$customMessages);

        $user = Auth::guard('web')->user();
        $user->name = $request->name;
        $user->phone = $request->phone;
        $user->address = $request->address;
        $user->designation = $request->designation;
        $user->save();

        $notification= trans('admin_validation.Your profile updated successfully');
        $notification=array('messege'=>$notification,'alert-type'=>'success');
        return redirect()->back()->with($notification);
    }

    public function change_password(Request $request)
    {
        return view('profile.change_password');
    }

    public function update_password(Request $request)
    {
        $rules = [
            'current_password'=>'required',
            'password'=>'required|min:4|confirmed',
        ];
        $customMessages = [
            'current_password.required' => trans('admin_validation.Current password is required'),
            'password.required' => trans('admin_validation.Password is required'),
            'password.min' => trans('admin_validation.Password minimum 4 character'),
            'password.confirmed' => trans('admin_validation.Confirm password does not match'),
        ];
        $this->validate($request, $rules,$customMessages);

        $user = Auth::guard('web')->user();
        if(Hash::check($request->current_password, $user->password)){
            $user->password = Hash::make($request->password);
            $user->save();

            $notification = trans('admin_validation.Password change successfully');
            $notification=array('messege'=>$notification,'alert-type'=>'success');
            return redirect()->back()->with($notification);

        }else{
            $notification = trans('admin_validation.Current password does not match');
            $notification=array('messege'=>$notification,'alert-type'=>'error');
            return redirect()->back()->with($notification);
        }
    }

    public function upload_user_avatar(Request $request){
        $user = Auth::guard('web')->user();
        if($request->file('image')){
            $old_image = $user->image;
            $user_image = $request->image;
            $extention = $user_image->getClientOriginalExtension();
            $image_name = Str::slug($user->name).date('-Y-m-d-h-i-s-').rand(999,9999).'.'.$extention;
            $image_name = 'uploads/custom-images/'.$image_name;
            Image::make($user_image)->save(public_path().'/'.$image_name);
            $user->image = $image_name;
            $user->save();
            if($old_image){
                if(File::exists(public_path().'/'.$old_image))unlink(public_path().'/'.$old_image);
            }
        }

        $notification = trans('admin_validation.Image updated successfully');
        return response()->json(['message' => $notification]);
    }

    public function orders(){

        $user = Auth::guard('web')->user();

        $orders = Order::with('influencer')->select('id','influencer_id','order_id','booking_date','order_status','total_amount','coupon_discount', 'start_date')->where('client_id', $user->id)->orderBy('id','desc')->paginate(10);

        return view('profile.orders', ['orders' => $orders]);
    }

    public function order_show($order_id){

        $user = Auth::guard('web')->user();

        $order = Order::with('influencer','service')->where('client_id', $user->id)->where('order_id', $order_id)->first();
        if(!$order)abort(404);
        $refund_request = RefundRequest::where('order_id', $order->id)->first();

        return view('profile.order_show', ['order' => $order, 'refund_request' => $refund_request]);
    }

    public function mark_as_complete($id){
        $order = Order::find($id);
        $order->order_status = 'complete';
        $order->save();

        $notification = trans('admin_validation.Mark as a completed successfully');
        $notification = array('messege'=>$notification,'alert-type'=>'success');
        return redirect()->back()->with($notification);
    }

    public function mark_as_declined($id){
        $order = Order::find($id);
        $order->order_status = 'order_decliened_by_client';
        $order->save();

        $notification = trans('admin_validation.Mark as a declined successfully');
        $notification = array('messege'=>$notification,'alert-type'=>'success');
        return redirect()->back()->with($notification);
    }

    public function refund_request(Request $request, $id){
        $user = Auth::guard('web')->user();
        $rules = [
            'reasone'=>'required',
            'account_information'=>'required',
        ];
        $customMessages = [
            'order_id.required' => trans('admin_validation.Order id is required'),
            'reasone.required' => trans('admin_validation.Reasone is required'),
            'account_information.required' => trans('admin_validation.Account information is required'),
        ];
        $this->validate($request, $rules,$customMessages);

        $refund = new RefundRequest();
        $refund->client_id = $user->id;
        $refund->reasone = $request->reasone;
        $refund->order_id = $id;
        $refund->account_information = $request->account_information;
        $refund->save();

        $notification = trans('admin_validation.Refund request successfully');
        $notification = array('messege'=>$notification,'alert-type'=>'success');
        return redirect()->back()->with($notification);
    }


    public function add_to_wishlist($id){
        $user = Auth::guard('web')->user();
        $is_exist = Wishlist::where(['user_id' => $user->id, 'service_id' => $id])->count();
        if($is_exist == 0){

            $wishlist = new Wishlist();
            $wishlist->service_id = $id;
            $wishlist->user_id = $user->id;
            $wishlist->save();

            $message = trans('admin_validation.Item added to favourite list');
            return response()->json(['message' => $message]);

        }else{
            $message = trans('admin_validation.Already added to favourite list');
            return response()->json(['message' => $message],403);
        }

    }

    public function wishlists(){

        $user = Auth::guard('web')->user();
        $wishlists = Wishlist::where(['user_id' => $user->id])->get();
        $wishlist_arr = array();
        foreach($wishlists as $wishlist){
            $wishlist_arr [] = $wishlist->service_id;
        }

        $services = Service::with('category','influencer')->where(['status' => 'active', 'approve_by_admin' => 'enable', 'is_banned' => 'disable'])->whereIn('id', $wishlist_arr)->get();

        return view('profile.wishlists', ['services' => $services]);

    }

    public function remove_wishlist($id){

        $user = Auth::guard('web')->user();
        Wishlist::where(['user_id' => $user->id, 'service_id' => $id])->delete();

        $notification = trans('admin_validation.Item remove to favourite list');
        $notification = array('messege'=>$notification,'alert-type'=>'success');
        return redirect()->back()->with($notification);
    }

    public function reviews(){

        $user = Auth::guard('web')->user();

        $reviews = Review::with('service')->orderBy('id','desc')->where('status', 1)->where('user_id', $user->id)->paginate(10);

        return view('profile.reviews', ['reviews' => $reviews]);
    }

    public function store_review(Request $request){

        $rules = [
            'rating'=>'required',
            'comment'=>'required',
            'g-recaptcha-response'=>new Captcha()
        ];
        $customMessages = [
            'rating.required' => trans('admin_validation.Rating is required'),
            'comment.required' => trans('admin_validation.Review is required'),
        ];
        $this->validate($request, $rules,$customMessages);

        $user = Auth::guard('web')->user();
        $is_exist_order = false;
        $is_exist_order = Order::where(['client_id' => $user->id])->count();

        if($is_exist_order){
            $review = new Review();
            $review->user_id = $user->id;
            $review->rating = $request->rating;
            $review->comment = $request->comment;
            $review->influencer_id = $request->influencer_id;
            $review->service_id = $request->service_id;
            $review->save();

            $message = trans('admin_validation.Review Submited successfully');
            return response()->json(['status' => 1, 'message' => $message]);
        }else{
            $message = trans('admin_validation.Opps! You can not review this service');
            return response()->json(['status' => 0, 'message' => $message]);
        }
    }


    public function support_tickets(){
        $user = Auth::guard('web')->user();

        $tickets = Ticket::where('user_id', $user->id)->orderBy('id','desc')->paginate(10);

        return view('profile.support_tickets', ['tickets' => $tickets]);
    }

    public function support_tickets_show($ticket_id){

        $user = Auth::guard('web')->user();

        $ticket = Ticket::where('user_id', $user->id)->where('ticket_id', $ticket_id)->orderBy('id','desc')->first();

        TicketMessage::where('ticket_id', $ticket->id)->update(['unseen_user' => 1]);

        $messages = TicketMessage::where('ticket_id', $ticket->id)->get();

        return view('profile.support_tickets_show', ['ticket' => $ticket, 'messages' => $messages]);
    }

    public function create_support_ticket(Request $request){

        $rules = [
            'subject'=>'required',
            'message'=>'required',
        ];
        $customMessages = [
            'subject.required' => trans('admin_validation.Subject is required'),
            'message.required' => trans('admin_validation.Message is required'),
        ];
        $this->validate($request, $rules,$customMessages);

        $user = Auth::guard('web')->user();

        $ticket = new Ticket();
        $ticket->user_id = $user->id;
        $ticket->subject = $request->subject;
        $ticket->ticket_id = substr(rand(0,time()),0,10);
        $ticket->status = 'pending';
        $ticket->ticket_from = 'Client';
        $ticket->save();

        $message = new TicketMessage();
        $message->ticket_id = $ticket->id;
        $message->admin_id = 0;
        $message->user_id = $user->id;
        $message->message = $request->message;
        $message->message_from = 'client';
        $message->unseen_user = 1;
        $message->unseen_admin = 0;
        $message->save();

        $notification = trans('admin_validation.Ticket created successfully');
        $notification = array('messege'=>$notification,'alert-type'=>'success');
        return redirect()->back()->with($notification);
    }

    public function send_ticket_message(Request $request){
        $rules = [
            'ticket_id'=>'required',
            'message'=>'required',
            'documents' => 'max:2048'
        ];
        $customMessages = [
            'message.required' => trans('admin_validation.Message is required'),
            'ticket_id.required' => trans('admin_validation.Ticket is required'),
        ];
        $this->validate($request, $rules,$customMessages);

        $user = Auth::guard('web')->user();
        $message = new TicketMessage();
        $message->ticket_id = $request->ticket_id;
        $message->admin_id = 0;
        $message->user_id = $user->id;
        $message->message = $request->message;
        $message->message_from = 'client';
        $message->unseen_user = 1;
        $message->unseen_admin = 0;
        $message->save();

        if($request->hasFile('documents')){
            foreach($request->documents as $index => $request_file){
                $extention = $request_file->getClientOriginalExtension();
                $file_name = 'support-file-'.time().$index.'.'.$extention;
                $destinationPath = public_path('uploads/custom-images/');
                $request_file->move($destinationPath,$file_name);

                $document = new MessageDocument();
                $document->ticket_message_id = $message->id;
                $document->file_name = $file_name;
                $document->save();
            }
        }

        $notification = trans('admin_validation.Message send successfully');
        $notification = array('messege'=>$notification,'alert-type'=>'success');
        return redirect()->back()->with($notification);
    }



    public function account_delete(Request $request){


        return view('profile.account_delete');
    }

    public function account_delete_success(Request $request){

        $request->validate([
            'password' => 'required'
        ],[
            'password.required' => trans('admin_validation.Password is required')
        ]);

        $user = Auth::guard('web')->user();

        if(Hash::check($request->password, $user->password)){

            try{

                $inluencer = User::find($user->id);
                $inluencer_image = $inluencer->image;

                if($inluencer_image){
                    if(File::exists(public_path().'/'.$inluencer_image))unlink(public_path().'/'.$inluencer_image);
                }

                $id = $user->id;

                AppointmentSchedule::where('user_id',$id)->delete();
                Review::where('influencer_id',$id)->delete();
                Review::where('user_id',$id)->delete();

                InfluencerWithdraw::where('influencer_id',$id)->delete();

                $orders = Order::where('influencer_id',$id)->get();
                foreach($orders as $order){
                    CompleteRequest::where('order_id',$order->id)->delete();
                    RefundRequest::where('order_id',$order->id)->delete();
                    $order->delete();
                }

                $orders = Order::where('client_id',$id)->get();
                foreach($orders as $order){
                    CompleteRequest::where('order_id',$order->id)->delete();
                    RefundRequest::where('order_id',$order->id)->delete();
                    $order->delete();
                }

                $tickets = Ticket::where('user_id', $id)->get();

                foreach($tickets as $ticket){
                    $messages = TicketMessage::where('ticket_id', $ticket->id)->get();
                    foreach($messages as $message){
                        $doucments = MessageDocument::where('ticket_message_id', $message->id)->get();
                        foreach($doucments as $doucment){
                            $document_file = $doucment->file_name;
                            if($document_file){
                                if(File::exists(public_path().'/'.$document_file))unlink(public_path().'/'.$document_file);
                            }
                            $doucment->delete();
                        }
                        $message->delete();
                    }
                    $ticket->delete();
                }


                $services = Service::where('influencer_id', $inluencer->id)->get();

                foreach($services as $service){
                    $additionals = AdditionalService::where('service_id', $service->id)->get();
                    foreach($additionals as $additional){
                        $additional_image = $additional->image;
                        if($additional_image){
                            if(File::exists(public_path().'/'.$additional_image))unlink(public_path().'/'.$additional_image);
                        }

                        AdditionalServiceTranslation::where('additional_service_id', $additional->id)->delete();

                        $additional->delete();
                    }
                    $service_image = $service->image;
                    if($service_image){
                        if(File::exists(public_path().'/'.$service_image))unlink(public_path().'/'.$service_image);
                    }

                    ServiceTranslation::where('service_id', $service->id)->delete();

                    $service->delete();
                }


                $inluencer->delete();

                Auth::guard('web')->logout();

                $notification = trans('admin.Account deleted successful');
                $notification = array('messege'=>$notification,'alert-type'=>'success');
                return redirect()->route('home')->with($notification);

            }catch(Exception $ex){

                $notification = trans('admin.Something went wrong, please try again');
                $notification = array('messege'=>$notification,'alert-type'=>'error');
                return redirect()->back()->with($notification);

            }

        }else{
            $notification = trans('admin.Please provide valid password');
            $notification = array('messege'=>$notification,'alert-type'=>'error');
            return redirect()->back()->with($notification);
        }


    }
}