42 lines
1.2 KiB
PHP
42 lines
1.2 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Traits\Http;
|
||
|
|
|
||
|
|
use Illuminate\Support\Facades\Storage;
|
||
|
|
|
||
|
|
trait HandlesMedia
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* Return the last media folder name,
|
||
|
|
* or a new media folder name if previous
|
||
|
|
* already contains 1000 images
|
||
|
|
*
|
||
|
|
* @return string
|
||
|
|
* @throws \ErrorException If creating the folder fails.
|
||
|
|
*/
|
||
|
|
public function getCurentMediaFolderName(): string
|
||
|
|
{
|
||
|
|
/** @var \Illuminate\Filesystem\FilesystemAdapter */
|
||
|
|
$storage = Storage::disk('media');
|
||
|
|
$directories = \collect($storage->directories());
|
||
|
|
|
||
|
|
// * si on n'a pas de dossier, on le créé
|
||
|
|
if (!$directories->count()) {
|
||
|
|
return $storage->path(uniqid());
|
||
|
|
}
|
||
|
|
|
||
|
|
$folders = collect($storage->directories())->map(function (string $folderName) use ($storage) {
|
||
|
|
return ['time' => $storage->lastModified($folderName), 'name' => $folderName];
|
||
|
|
});
|
||
|
|
|
||
|
|
$selectedFolder = $folders->firstWhere('time', $folders->max('time'))['name'];
|
||
|
|
|
||
|
|
// * si on en a plus de 1000, on créé un nouveau dossier
|
||
|
|
if (collect($storage->allFiles($selectedFolder))->count() > 1000) {
|
||
|
|
return uniqid();
|
||
|
|
}
|
||
|
|
|
||
|
|
return $selectedFolder;
|
||
|
|
}
|
||
|
|
}
|