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/ipsremont-demo/app/Services/Device/DeviceService.php
<?php


namespace App\Services\Device;


use App\Http\Requests\DeleteRequest;
use App\Http\Requests\Device\CreateRequest;
use App\Http\Requests\Device\IndexRequest;
use App\Models\Device;
use App\Repository\Device\DeviceRepository;
use App\Services\ImportService;
use Illuminate\Support\Facades\Validator;

class DeviceService
{

    protected DeviceRepository $repository;

    public function __construct()
    {
        $this->repository = new DeviceRepository();
    }

    /**
     * @param IndexRequest $request
     *
     * @return mixed
     */
    public function search(IndexRequest $request)
    {
        return $this->repository->search($request);
    }

    /**
     * @param IndexRequest $request
     *
     * @return mixed
     */
    public function searchDevicesAjax($term)
    {
        return $this->repository->searchDevicesAjax($term)->get(['text', 'id'])->toArray();
    }

    /**
     * @param IndexRequest $request
     *
     * @return mixed
     */
    public function search_specifications(IndexRequest $request)
    {
        return $this->repository->search_specifications($request);
    }

    /**
     * @param $request
     *
     * @return mixed
     */
    public function getDevice($request)
    {
        return $this->repository->getDevice($request);
    }

    public static function getManufacturer($device)
    {
        if (stripos($device->name, '//')) {
            $manufacturer = str_replace('//', '', stristr($device->name, '//'));
        } else {
            $arr = explode(' ', $device->name);
            $manufacturer = array_pop($arr);
        }

        return $manufacturer;
    }

    public static function getName($device)
    {
        return str_replace([self::getManufacturer($device), '//'], '', $device->name);
    }

    protected static function formattingData($device): array
    {
        return [
            'name' => trim((string) $device->name),
            'external_id' => trim((string) $device->code),
            'category_code' => trim(substr(trim($device->code), 0, 3)),
            'action' => trim((string) $device->action),
            'photo' => trim((string) $device->image ?? ''),
            'specification' => trim((string) $device->specification ?? ''),
        ];
    }

    public static function import($device): array
    {
        $data = self::formattingData($device);
        $device_id = 0;
        $result = 0;

        if (isset($data['action'])) {
            switch ($data['action']) {
                case ImportService::NEW:
                    $request = new CreateRequest();
                    $validator = Validator::make($data, $request->rules());

                    if ($validator->fails()) {
                        $result = $validator->errors();
                    } else {
                        $device = DeviceRepository::save($data);

                        $device_id = $device->id;
                        $result = 1;
                    }
                    break;
                case ImportService::UPDATE:
                    $request = new CreateRequest();
                    $validator = Validator::make($data, $request->rules());

                    if ($validator->fails()) {
                        $result = $validator->errors();
                    } else {
                        $device = Device::query()->where('external_id', $data['external_id'])->withTrashed()->first();

                        if ($device) {
                            $device = DeviceRepository::update($data, $device);
                        } else {
                            $device = DeviceRepository::save($data);
                        }

                        $device_id = $device->id;
                        $result = 1;
                    }
                    break;
                case ImportService::DELETE:
                    $request = new DeleteRequest();
                    $validator = Validator::make($data, $request->rules());

                    if ($validator->fails()) {
                        $result = $validator->errors();
                    } else {
                        $res = DeviceRepository::delete($data);
                        $device_id = $res['device_id'];
                        $result = $res['result'];
                    }
                    break;
            }
        }

        return ['device_id' => $device_id, 'result' => $result];
    }
}