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/AdminController.php
<?php

namespace App\Http\Controllers;

use App\Http\Requests\Admin\SyncRequest;
use App\Models\ActiveCampaignList;
use App\Models\BitrixAcSyncSetting;
use App\Models\BitrixStatuses;
use App\Services\ActiveCampaignService;
use App\Services\BitrixService;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redirect;

class AdminController extends BaseController
{

    use ValidatesRequests;

    public function index()
    {
        $usedStatuses = [];
        $bitrixAcSyncSettings = BitrixAcSyncSetting::all();
        foreach ($bitrixAcSyncSettings as $setting) {
            $usedStatuses[$setting->entity_id][] = $setting->bitrix_status;
        }
        $entitiesMap = [
            'STATUS' => 'Lead',
            'DEAL_STAGE' => 'Deal',
        ];
        $activeCampaignList = ActiveCampaignList::query()->get()->keyBy('ac_id')->toArray();
        $bitrixStatusesData = BitrixStatuses::query()->get()->toArray();
        $bitrixStatuses = [];
        $skipIds = [];
        foreach ($bitrixStatusesData as $status) {
            if (in_array($status['status_id'], $usedStatuses[$status['entity_id']] ?? [])) {
                $skipIds[] = $status['id'];
            }
            $bitrixStatuses[$status['entity_id']][$status['status_id']] = $status;
        }

        return view('dashboard', compact('skipIds', 'bitrixAcSyncSettings', 'entitiesMap', 'activeCampaignList', 'bitrixStatuses'));
    }

    public function syncBitrixStatuses(BitrixService $bitrixService)
    {
        if (!$bitrixService->check()) {
            return Redirect::route('dashboard')->with(['error' => 'Need to fill BITRIX24_HOST, BITRIX24_USER_ID or BITRIX24_TOKEN in .env']);
        }

        if (!$bitrixService->syncStatuses()) {
            return Redirect::route('dashboard')->with(['error' => $bitrixService->lastError]);
        }

        return Redirect::route('dashboard')->with(['message' => 'Statuses updated successfully', 'log' => $bitrixService->getLastActionLog()]);
    }

    public function syncActiveCampaignLists(ActiveCampaignService $activeCampaignService)
    {
        if (!$activeCampaignService->check()) {
            return Redirect::route('dashboard')->with(['error' => 'Need to fill ACTIVE_CAMPAIGN_HOST and ACTIVE_CAMPAIGN_TOKEN in .env']);
        }

        if (!$activeCampaignService->syncLists()) {
            return Redirect::route('dashboard')->with(['error' => $activeCampaignService->lastError]);
        }

        return Redirect::route('dashboard')->with(['message' => 'Lists updated successfully', 'log' => $activeCampaignService->getLastActionLog()]);
    }

    public function createSync(SyncRequest $request)
    {
        $isSameBitrixAcSyncSetting = BitrixAcSyncSetting::query()
            ->where('entity_id', $request->entity_id)
            ->where('bitrix_status', $request->bitrix_status)
            ->where('active_campaign_list_id', $request->active_campaign_list_id)
            ->exists();
        if ($isSameBitrixAcSyncSetting) {
            return response()->json(['error' => 'Same sync already exist'], 400);
        }
        $bitrixAcSyncSetting = new BitrixAcSyncSetting();
        $bitrixAcSyncSetting->entity_id = $request->entity_id;
        $bitrixAcSyncSetting->bitrix_status = $request->bitrix_status;
        $bitrixAcSyncSetting->active_campaign_list_id = $request->active_campaign_list_id;
        $bitrixAcSyncSetting->with_unsubscribe = $request->with_unsubscribe;
        $bitrixAcSyncSetting->save();
        Log::channel('admin')->info('Sync settings created', $bitrixAcSyncSetting->toArray());

        return response()->json(['message' => 'Sync successfully created']);
    }

    public function deleteSync(BitrixAcSyncSetting $bitrixAcSyncSetting)
    {
        $bitrixAcSyncSetting->delete();
        Log::channel('admin')->info('Sync settings deleted', $bitrixAcSyncSetting->toArray());

        return response()->redirectTo(route('dashboard'));
    }

}