HEX
Server: LiteSpeed
System: Linux sv4.hami.host 5.14.0-611.54.3.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 7 16:31:24 EDT 2026 x86_64
User: armgroup (1008)
PHP: 8.2.32
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open, mail, socket_create, socket_create_listen, socket_create_pair, link, dl, openlog, syslog, stream_socket_server, curl_multi_init
Upload Files
File: //home/armgroup/libs/app/Imports/ProductsImport2.php
<?php

namespace App\Imports;

use App\Models\Product;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use Maatwebsite\Excel\Concerns\SkipsEmptyRows;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Events\AfterImport;
use Maatwebsite\Excel\Events\ImportFailed;
use Maatwebsite\Excel\Imports\HeadingRowFormatter;
use Maatwebsite\Excel\Validators\ValidationException;

HeadingRowFormatter::default('none');

class ProductsImport2 implements ShouldQueue, SkipsEmptyRows, ToCollection, WithChunkReading, WithEvents, WithHeadingRow
{
    public function collection(Collection $rows)
    {
        $products = [];

        foreach ($rows as $row) {
            $products[] = [
                'id' => $row['ID'],
                'user_id' => 1,
                'name' => $row['post_title'],
                'slug' => $row['post_name'],
                'weight' => (int) $row['weight'],
                'price' => (int) $row['sale_price'],
                'stock' => (int) $row['stock'],
                'description' => $row['post_content'],
                'status' => $row['post_status'] == 'publish',
                'image' => $row['images'] ? 'storage/photos/shares'.str_replace('https://havin.com', '', explode(' ', $row['images'])[0]) : 'images/defaults/default.jpg',
                'created_at' => now(),
                'updated_at' => now(),
            ];
        }

        Product::insert($products);
    }

    public function chunkSize(): int
    {
        return 50;
    }

    public function registerEvents(): array
    {
        return [
            ImportFailed::class => function (ImportFailed $event) {
                if (get_class($event->getException()) == ValidationException::class) {
                    $errors = [];
                    foreach ($event->getException()->failures() as $failure) {
                        $errors = array_merge($errors, $failure->toArray());
                    }
                    Log::warning($errors);
                } else {
                    Log::error($event->getException()->getMessage());
                }
            },
            AfterImport::class => function (AfterImport $event) {
                Log::info('اکسل محصولات با موفقیت ایمپورت شد.');
            },
        ];
    }
}