<?php
namespace App\Service\Visit\File;
use App\Service\Helper\StringHelper;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Finder\Finder;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class FileService
{
public function __construct(
private ParameterBagInterface $parameterBag,
private StringHelper $stringHelper,
private LoggerInterface $logger
) {
}
public function upload(UploadedFile $uploadedFile, int $companyId, int $visitId, string $directoryParam = 'visit_uploads_directory'): ?bool
{
$originalFilename = $uploadedFile->getClientOriginalName();
$directoryParam = $this->parameterBag->get($directoryParam) . $companyId;
if (!is_dir($directoryParam)) {
mkdir($directoryParam, 0775, true);
}
$directoryParam = $directoryParam . '/' . $visitId;
if (!is_dir($directoryParam)) {
mkdir($directoryParam, 0775, true);
}
try {
$uploadedFile->move(
$directoryParam,
$originalFilename
);
} catch (FileException $e) {
return false;
}
return true;
}
public function isImage(UploadedFile $uploadedFile): bool
{
return in_array($uploadedFile->guessExtension(), [
'jpeg',
'jpg',
'png',
'bmp',
'webp',
]);
}
public function isAudio(UploadedFile $uploadedFile): bool
{
return in_array($uploadedFile->getMimeType(), [
'audio/midi', ' audio/mpeg', 'audio/webm', 'audio/ogg', 'audio/wav',
]);
}
public function isVideo(UploadedFile $uploadedFile): bool
{
return in_array($uploadedFile->getMimeType(), [
'video/webm', 'video/ogg',
]);
}
public function getFileFromPathInParams(string $directoryParam = 'visit_uploads_directory', int $companyId, int $visitId): array
{
$finder = new Finder();
$finder->files()->in($this->parameterBag->get($directoryParam));
$result = [];
/*if ($sortModifiedTime) {
$finder->sortByModifiedTime();
}*/
foreach ($finder as $file) {
/* @var File */
$result[] = [
'time' => date('Y-m-d H:i:s', $file->getMTime()),
'relativePath' => $file->getRelativePathname(),
];
}
return array_reverse($result);
}
}