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

}