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