File: /var/www/quadcode-site/app/Http/Controllers/Controller.php
<?php
namespace App\Http\Controllers;
use App\Helpers\GeoHelper;
use App\Helpers\PhoneHelper;
use App\Http\Requests\LpIfxForm;
use App\Http\Requests\LpSaasForm;
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 array $regions = [
'1' => 'North America',
'2' => 'Europe',
'3' => 'Asia-Pacific',
'4' => 'South America',
'5' => 'Africa',
];
private function submit($data, $requestData): JsonResponse
{
$data['phone'] = '+' . PhoneHelper::trim($data['phone']);
dispatch(new SendGridAddContactTiListJob($requestData))->afterResponse();
$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']);
}
$data['region'] = isset($data['region']) ? (self::$regions[$data['region']] ?? '') : '';
$data['country_code'] = (new GeoHelper())->getGeo();
$feedback = new Feedback($data);
$success = $feedback->send();
unset($data['g-recaptcha-response']);
unset($data['terms_agree']);
$data = array_filter($data, fn($item) => !empty($item));
if (!empty($data['message'])) {
$data['message'] = htmlentities($data['message']);
}
$pipedriveQueue = new PipedriveQueue(['data' => json_encode($data)]);
$pipedriveQueue->save();
BitrixQueueRepository::create($data);
ActiveCampaignQueueRepository::create($data);
if ($success === true) {
return response()->json(['success' => true]);
}
return response()->json(['success' => false, 'error' => $success]);
}
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'] = '';
$validated['message'] = '';
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'] = '';
$validated['message'] = '_';
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]);
}
}