HEX
Server: Apache
System: Linux server1.ariadata.co 4.18.0-553.120.1.el8_10.x86_64 #1 SMP Mon Apr 20 18:04:27 EDT 2026 x86_64
User: nepi (1051)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system,show_source,popen,proc_open
Upload Files
File: /home/nepi/file.nepi.ir/app/Listeners/HydrateUserWithSampleDriveContents.php
<?php

namespace App\Listeners;

use App\Folder;
use App\Services\Entries\CreateFolder;
use App\Services\Shares\AttachUsersToEntry;
use Common\Auth\Events\UserCreated;
use Common\Files\Actions\CreateFileEntry;
use Common\Files\Actions\StoreFile;
use Common\Files\FileEntryPayload;
use Illuminate\Filesystem\Filesystem;
use Illuminate\Http\UploadedFile;

class HydrateUserWithSampleDriveContents
{
    public function __construct(private Filesystem $fs)
    {
    }

    public function handle(UserCreated $event): void
    {
        $user = $event->user;

        $this->hydrateFolder('root', $user->id);

        $images = $this->hydrateFolder('images', $user->id);
        $this->hydrateFolder('nested folder', $user->id, $images->id);

        $this->hydrateFolder('documents', $user->id);

        $folder = $this->hydrateFolder('shared', $user->id);
        app(AttachUsersToEntry::class)->execute(
            ['tester@tester.com'],
            [$folder],
            ['view' => true],
        );
    }

    private function hydrateFolder($name, $userId, $parentId = null): ?Folder
    {
        if ($name !== 'root') {
            $folder = app()
                ->make(CreateFolder::class)
                ->execute([
                    'name' => ucwords($name),
                    'ownerId' => $userId,
                    'parentId' => $parentId,
                ]);
        }

        $this->createFiles($name, isset($folder) ? $folder->id : null, $userId);

        return $folder ?? null;
    }

    private function createFiles($dirName, $parentId, $userId): void
    {
        $folderPath = base_path("sample-files/$dirName");

        if (!$this->fs->exists($folderPath)) {
            return;
        }

        foreach ($this->fs->files($folderPath) as $path) {
            $uploadedFile = new UploadedFile(
                $path,
                basename($path),
                $this->fs->mimeType($path),
                $this->fs->size($path),
            );

            $payload = new FileEntryPayload([
                'file' => $uploadedFile,
                'parentId' => $parentId,
                'ownerId' => $userId,
            ]);

            app(StoreFile::class)->execute($payload, ['file' => $uploadedFile]);
            app(CreateFileEntry::class)->execute($payload);
        }
    }
}