File: /var/www/quadcode-site/app/Http/Controllers/CalendlyController.php
<?php
namespace App\Http\Controllers;
use App\Http\Requests\CalendlyWebhookForm;
use App\Repository\PipedriveQueueRepository;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Log;
class CalendlyController extends BaseController
{
use ValidatesRequests;
public function webhook(CalendlyWebhookForm $request, PipedriveQueueRepository $pipedriveQueueRepository): JsonResponse|RedirectResponse
{
$requestData = $request->toArray();
Log::channel('calendlyWebhook')->info('Webhook purchase', $requestData);
$payload = $requestData['payload'];
$firstName = empty($payload['first_name']) ? $payload['name'] : $payload['first_name'];
if (empty($firstName)) {
$error = 'Empty name';
Log::channel('calendlyWebhook')->error($error);
return response()->json(['success' => false, 'error' => $error]);
}
$referrer = '/lp/wl-broker';
$landingUrl = in_array(App::environment(), ['local', 'dev']) ? 'http://quadcode.foach.site' : 'https://quadcode.com';
$landingUrl .= $referrer;
$data = [
'first_name' => $firstName,
'email' => $payload['email'],
'referrer' => $referrer,
'landing_url' => $landingUrl,
'lang' => 'en',
'calendly_scheduled' => 'yes',
];
if (!empty($payload['last_name'])) {
$data['last_name'] = $payload['last_name'];
}
$phone = null;
foreach ($payload['questions_and_answers'] as $item) {
switch (strtolower($item['question'])) {
case 'phone':
case 'phone number':
$phone = $item['answer'];
break;
default:
$data[$item['question']] = $item['answer'];
break;
}
}
if (empty($phone)) {
$error = 'Empty phone';
Log::channel('calendlyWebhook')->error($error);
return response()->json(['success' => false, 'error' => $error]);
}
$data['phone'] = $phone;
$tracking = $payload['tracking'] ?? [];
foreach ($tracking as $utmName => $value) {
if (empty($value)) {
continue;
}
$data[$utmName] = $value;
}
$eventGuestsData = [];
$eventGuests = $payload['scheduled_event']['event_guests'] ?? [];
foreach ($eventGuests as $eventGuest) {
if (!empty($eventGuest['email'])) {
$eventGuestsData[] = $eventGuest['email'];
}
}
if (!empty($eventGuestsData)) {
$data['eventGuests'] = array_unique($eventGuestsData);
}
$pipedriveQueueRepository->create($data);
return response()->json(['success' => true]);
}
}