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]);
}
}