Spaces:
No application file
No application file
File size: 3,700 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
<?php
declare(strict_types=1);
namespace MauticPlugin\GrapesJsBuilderBundle\Helper;
use Mautic\CoreBundle\Exception\FileUploadException;
use Mautic\CoreBundle\Helper\CoreParametersHelper;
use Mautic\CoreBundle\Helper\FileUploader;
use Mautic\CoreBundle\Helper\PathsHelper;
use Symfony\Component\Filesystem\Exception\IOException;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Finder\Finder;
class FileManager
{
public const GRAPESJS_IMAGES_DIRECTORY = '';
public function __construct(
private FileUploader $fileUploader,
private CoreParametersHelper $coreParametersHelper,
private PathsHelper $pathsHelper
) {
}
/**
* @return array
*/
public function uploadFiles($request)
{
if (isset($request->files->all()['files'])) {
$files = $request->files->all()['files'];
$uploadDir = $this->getUploadDir();
$uploadedFiles = [];
foreach ($files as $file) {
try {
$uploadedFiles[] = $this->getFullUrl($this->fileUploader->upload($uploadDir, $file));
} catch (FileUploadException) {
}
}
}
return $uploadedFiles;
}
/**
* @param string $fileName
*/
public function deleteFile($fileName): void
{
$this->fileUploader->delete($this->getCompleteFilePath($fileName));
}
/**
* @param string $fileName
*/
public function getCompleteFilePath($fileName): string
{
$uploadDir = $this->getUploadDir();
return $uploadDir.$fileName;
}
private function getUploadDir(): string
{
return $this->getGrapesJsImagesPath(true);
}
public function getFullUrl($fileName, $separator = '/'): string
{
// if a static_url (CDN) is configured use that, otherwiese use the site url
$url = $this->coreParametersHelper->getParameter('static_url') ?? $this->coreParametersHelper->getParameter('site_url');
return $url
.$separator
.$this->getGrapesJsImagesPath(false, $separator)
.$fileName;
}
/**
* @param bool $fullPath
* @param string $separator
*/
private function getGrapesJsImagesPath($fullPath = false, $separator = '/'): string
{
return $this->pathsHelper->getSystemPath('images', $fullPath)
.$separator
.self::GRAPESJS_IMAGES_DIRECTORY;
}
public function getImages(): array
{
$files = [];
$uploadDir = $this->getUploadDir();
$fileSystem = new Filesystem();
if (!$fileSystem->exists($uploadDir)) {
try {
$fileSystem->mkdir($uploadDir);
} catch (IOException) {
return $files;
}
}
$finder = new Finder();
$finder->files()->in($uploadDir);
foreach ($finder as $file) {
// exclude certain folders from grapesjs file manager
if (in_array($file->getRelativePath(), $this->coreParametersHelper->get('image_path_exclude'))) {
continue;
}
if ($size = @getimagesize($this->getCompleteFilePath($file->getRelativePathname()))) {
$files[] = [
'src' => $this->getFullUrl($file->getRelativePathname()),
'width' => $size[0],
'type' => 'image',
'height' => $size[1],
];
} else {
$files[] = $this->getFullUrl($file->getRelativePathname());
}
}
return $files;
}
}
|