HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/quadcode/app/Http/Controllers/Controller.php
<?php

namespace App\Http\Controllers;

use App\Helpers\BitrixHelper;
use App\Helpers\FormatHelper;
use App\Helpers\GeoHelper;
use App\Helpers\PhoneHelper;
use App\Helpers\RegionHelper;
use App\Http\Requests\FreeBrokerageForm;
use App\Http\Requests\LpIfxForm;
use App\Http\Requests\LpSaasForm;
use App\Http\Requests\NotPopupForm;
use App\Http\Requests\PopupForm;
use App\Http\Requests\SaasForm;
use App\Http\Requests\SaasRequestForm;
use App\Http\Requests\WlCfdBrokerRequestForm;
use App\Jobs\SendGridAddContactTiListJob;
use App\Models\Feedback;
use App\Models\PipedriveQueue;
use App\Repository\ActiveCampaignQueueRepository;
use App\Repository\BitrixQueueRepository;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{

    use ValidatesRequests;

    private static array $businessIdentifications = [
        '1' => 'Brokerage business',
        '2' => 'Introducing broker',
        '3' => 'Affiliate',
        '4' => 'Trader',
        '5' => 'Entrepreneur',
        '6' => 'Other',
    ];

    private static array $initialInvestments = [
        '0' => '$0',
        '1' => '$1000',
        '2' => '$5000',
        '3' => '$10000',
        '4' => '$25000',
        '5' => '$50000',
        '6' => 'More then $50000',
    ];

    private static bool $isPopup = false;

    private function submit($data, $requestData): JsonResponse
    {
        $data['phone'] = '+' . PhoneHelper::trim($data['phone']);
        dispatch(new SendGridAddContactTiListJob($requestData))->afterResponse();

        $regions = $data['regions'] ?? [];
        unset($data['regions'], $requestData['regions']);

        $additional = array_diff($requestData, $data);
        unset($additional['referrer']);
        if (!empty($additional)) {
            $data = array_merge($data, $additional);
        }

        $data['business_identification'] = '';
        if (isset($data['options'])) {
            $data['business_identification'] = self::$businessIdentifications[$data['options']];
            unset($data['options']);
        }
        $data['initial_investment'] = '';
        if (isset($data['range'])) {
            $data['initial_investment'] = self::$initialInvestments[$data['range']];
            unset($data['range']);
        }
        if (isset($data['region'])) {
            $data['region'] = [RegionHelper::getRegion($data['region'])];
        }
        if (!empty($regions)) {
            $data['region'] = [];
            foreach ($regions as $region) {
                $data['region'][] = RegionHelper::getRegion($region);
            }
        }

        $data['country_code'] = (new GeoHelper())->getGeo();

        $feedback = new Feedback($data);
        $feedback->send();

        unset($data['g-recaptcha-response'], $data['terms_agree']);

        $data = array_filter($data, static fn($item) => !empty($item));

        if (!empty($data['message'])) {
            $data['message'] = htmlentities($data['message']);
        }

        $pipedriveQueue = new PipedriveQueue(['data' => json_encode($data, JSON_THROW_ON_ERROR)]);
        $pipedriveQueue->save();

        $bitrixData = $data;
        $activeCampaignData = $data;
        if (self::$isPopup) {
            $bitrixData['lead_magnet'] = 1;
            $activeCampaignData['listType'] = 'popupList';
        }

        BitrixQueueRepository::create($bitrixData);
        ActiveCampaignQueueRepository::create($activeCampaignData);

        return response()->json(['success' => true]);
    }

    public function saas(SaasForm $request): JsonResponse
    {
        $validated = $request->validated();

        $validated['last_name'] = $validated['last_name'] ?? '';

        return $this->submit($validated, $request->all());
    }

    public function lpIfx(LpIfxForm $request): JsonResponse
    {
        $validated = $request->validated();

        $validated['last_name'] = '';

        return $this->submit($validated, $request->all());
    }

    public function lsSaas(LpSaasForm $request): JsonResponse
    {
        $validated = $request->validated();

        $validated['last_name'] = '';

        return $this->submit($validated, $request->all());
    }

    public function saasRequestFormSubmit(SaasRequestForm $request): JsonResponse|RedirectResponse
    {
        $validated = $request->validated();

        $validated['last_name'] = '';
        $validated['referrer'] = empty($validated['landing_url']) ? '/lp/saas_request' : $validated['landing_url'];

        return $this->submit($validated, $request->all());
    }

    public function wlCfdBroker(WlCfdBrokerRequestForm $request): JsonResponse|RedirectResponse
    {
        $validated = $request->validated();

        $validated['last_name'] = '';

        return $this->submit($validated, $request->all());
    }

    public function popup(PopupForm $request): JsonResponse|RedirectResponse
    {
        self::$isPopup = true;

        $validated = $request->validated();
        $validated['last_name'] = '';

        return $this->submit($validated, $request->all());
    }

    public function notPopup(NotPopupForm $request): JsonResponse|RedirectResponse
    {
        $validated = $request->validated();

        $validated['last_name'] = '';
        if (!empty($validated['tg'])) {
            $validated['tg'] = trim($validated['tg']);
            $validated['tg'] = ltrim($validated['tg'], '@');
        }

        return $this->submit($validated, $request->all());
    }

    public function freeBrokerage(FreeBrokerageForm $request): JsonResponse|RedirectResponse
    {
        $validated = $request->validated();

        $validated['last_name'] = '';

        if (!empty($validated['tg'])) {
            $validated['tg'] = FormatHelper::formatTelegram($validated['tg']);
        }
        if (!empty($validated['tg_channel'])) {
            $validated['tg_channel'] = FormatHelper::formatTelegram($validated['tg_channel']);
        }
        $validated['crm_status_id'] = BitrixHelper::STATUS_GIVEAWAY;

        return $this->submit($validated, $request->all());
    }

    public function health(BitrixQueueRepository $bitrixQueueRepository): JsonResponse
    {
        $count = $bitrixQueueRepository->getErrorsCount();
        if (empty($count)) {
            return response()->json(['state' => 'ok', 'error' => '']);
        }

        return response()->json(['state' => 'error', 'error' => $count]);
    }

}