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

namespace App\Services;

use App\Helpers\BitrixHelper;
use App\Models\BitrixStatuses;
use Exception;

class BitrixService extends AbstractService
{

    private BitrixHelper $bitrixHelper;

    public function __construct(BitrixHelper $bitrixHelper)
    {
        $this->bitrixHelper = $bitrixHelper;
    }

    public function check(): bool
    {
        return $this->bitrixHelper->check();
    }

    private function getAllStatuses(): array
    {
        $statuses = [];

        $filter = ['ENTITY_ID' => 'STATUS'];
        $leadStatuses = $this->bitrixHelper->statusesList($filter);
        foreach ($leadStatuses as $status) {
            $statuses[$status['ID']] = $status;
        }

        $filter = ['ENTITY_ID' => 'DEAL_STAGE'];
        $dealStatuses = $this->bitrixHelper->statusesList($filter);
        foreach ($dealStatuses as $status) {
            $statuses[$status['ID']] = $status;
        }

        return $statuses;
    }

    public function syncStatuses(): bool
    {
        $this->cleanState();

        try {
            $this->addActionLog('Get all statuses');
            $statuses = $this->getAllStatuses();
        } catch (Exception $exception) {
            $this->lastError = $exception->getMessage();

            return false;
        }
        $this->addActionLog('All statuses count: ' . count($statuses));

        $created = 0;
        $updated = 0;

        $createdStatuses = BitrixStatuses::query()->get()->keyBy('bitrix_id');
        foreach ($statuses as $id => $status) {
            if (in_array($id, $createdStatuses->keys()->toArray())) {
                /** @var BitrixStatuses $createdStatus */
                $createdStatus = $createdStatuses[$id];
                if ($status['NAME'] === $createdStatus->name) {
                    continue;
                }

                $createdStatus->name = $status['NAME'];
                $createdStatus->save();
                $updated++;
            } else {
                $newBitrixStatus = new BitrixStatuses([
                    'bitrix_id' => $id,
                    'entity_id' => $status['ENTITY_ID'],
                    'status_id' => $status['STATUS_ID'],
                    'name' => $status['NAME'],
                ]);
                $newBitrixStatus->save();
                $created++;
            }
        }

        $this->addActionLog('Created: ' . $created);
        $this->addActionLog('Updated: ' . $updated);

        return true;
    }

}