Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/job-board.corals.io/Corals/modules/Advert/Classes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/job-board.corals.io/Corals/modules/Advert/Classes/Advert.php
<?php

namespace Corals\Modules\Advert\Classes;

use Carbon\Carbon;
use Corals\Modules\Advert\Models\Banner;
use Corals\Modules\Advert\Models\Impression;
use Corals\Modules\Advert\Models\Zone;
use Jenssegers\Agent\Agent;

class Advert
{
    /**
     * Advert constructor.
     */
    function __construct()
    {
    }


    public function getDimensionsList()
    {
        $dimensions = array_keys(config('advert.dimensions'));

        return array_combine($dimensions, $dimensions);
    }

    /**
     * @param Zone $zone
     * @return mixed
     */
    public function getZoneActiveBanners(Zone $zone)
    {
        $modulePrefix = 'advert_';

        $bannersTable = $modulePrefix . 'banners';
        $bannerZoneTable = $modulePrefix . 'banner_zone';
        $campaignsTable = $modulePrefix . 'campaigns';
        $advertisersTable = $modulePrefix . 'advertisers';

        $today = Carbon::today();

        $activeBannersQuery = \DB::table($bannersTable)
            ->join($bannerZoneTable, "{$bannerZoneTable}.banner_id", '=', "{$bannersTable}.id")
            ->join($campaignsTable, "{$campaignsTable}.id", '=', "{$bannersTable}.campaign_id")
            ->join($advertisersTable, "{$advertisersTable}.id", '=', "{$campaignsTable}.advertiser_id")
            ->where("{$bannerZoneTable}.zone_id", $zone->id)
            ->where("{$bannersTable}.status", 'active')
            ->where("{$campaignsTable}.status", 'active')
            ->where("{$advertisersTable}.status", 'active')
            ->whereDate("{$campaignsTable}.starts_at", '<=', $today)
            ->where(function ($query) use ($today, $campaignsTable) {
                $query->whereDate("{$campaignsTable}.ends_at", '>=', $today)
                    ->orWhereNull("{$campaignsTable}.ends_at");
            });

        $scopes = [];
        $scopes = \Filters::do_filter('advert_banner_scopes', $scopes, $activeBannersQuery);

        foreach ($scopes as $scope) {
            $scope->apply($activeBannersQuery);
        }
        $activeBannersQuery = $activeBannersQuery->select("{$bannersTable}.*")->get();


        return Banner::hydrate($activeBannersQuery->toArray());
    }

    protected function EmptyZoneHandler()
    {
        return '';
    }

    /**
     * @param Zone $zone
     * @return string
     * @throws \Throwable
     */
    public function getRandomWeightedBanner(Zone $zone)
    {
        return rescue(function () use ($zone) {
            if (!$zone->isValid()) {

                return $this->EmptyZoneHandler();
            }


            $banners = $this->getZoneActiveBanners($zone);
            if ($banners->isEmpty()) {
                return $this->EmptyZoneHandler();
            }
            $bannersWeights = $banners->pluck('weight', 'id')->toArray();

            $weightedArray = [];

            foreach ($bannersWeights as $id => $weight) {
                for ($i = 0; $i < $weight; $i++) {
                    $weightedArray[] = $id;
                }
            }

            $randomWeight = mt_rand(0, (count($weightedArray) - 1));

            // query on collection
            $banner = $banners->where('id', $weightedArray[$randomWeight])->first();

            $bannerSlug = \Str::random();

            $impression = Impression::updateOrCreate([
                'session_id' => session()->getId(),
                'banner_id' => $banner->id,
                'zone_id' => $zone->id,
                'page_slug' => request()->headers->get('referer') ?? url()->current(),
            ], [
                'impression_slug' => $bannerSlug,
            ]);

            $impression->visitorDetail()->updateOrCreate(['impression_id' => $impression->id], $this->getVisitorDetails());
            return view('Advert::zones.partials.show')->with(compact('zone', 'banner', 'bannerSlug'))->render();
        }, function () {
            return $this->EmptyZoneHandler();
        });

    }

    protected function getVisitorDetails()
    {
        $details = [];

        return rescue(function () use ($details) {
            $agent = new Agent();

            $details['browser'] = $agent->browser();
            $details['browser_version'] = $agent->version($details['browser']);
            $details['is_phone'] = $agent->isPhone();
            $details['is_tablet'] = $agent->isTablet();
            $details['is_desktop'] = $agent->isDesktop();
            $details['is_robot'] = $agent->isRobot();
            $details['robot'] = $agent->robot();
            $details['device'] = $agent->device();
            $details['platform'] = $agent->platform();
            $details['platform_version'] = $agent->version($details['platform']);
            $details['languages'] = $agent->languages();

            return $details;
        }, function () use ($details) {
            return $details;
        });
    }

    /**
     * @param Zone $zone
     * @return mixed
     */
    public function getZoneEmbedCode(Zone $zone)
    {
        $code = '<div data-embed-src="' . url('adverts/' . $zone->hashed_id . '/embed') . '"></div><script type="text/javascript" src="' . asset('assets/corals/plugins/advert/js/embed.js') . '"></script>';

        return '<pre><code id="embed_' . $zone->hashed_id . '">' . htmlentities($code, ENT_COMPAT, 'UTF-8') . '</code> <a href="#" onclick="event.preventDefault();" class="copy-button"data-clipboard-target="#embed_' . $zone->hashed_id . '"><i class="fa fa-clipboard"></i></a></pre>';

    }
}

Spamworldpro Mini