Updates to 03-2025
This commit is contained in:
parent
bfa3bb1df4
commit
9ae662f63e
243 changed files with 12580 additions and 12018 deletions
|
|
@ -2,24 +2,36 @@
|
|||
|
||||
namespace App\Repositories\DC;
|
||||
|
||||
use Imagick;
|
||||
use Request;
|
||||
|
||||
use App\Models\DcFile;
|
||||
use App\Services\Util;
|
||||
use App\Models\DcFileTag;
|
||||
use App\Repositories\BaseRepository;
|
||||
use Intervention\Image\Facades\Image;
|
||||
|
||||
use Imagick;
|
||||
|
||||
class FileRepository extends BaseRepository {
|
||||
|
||||
private const ALLOWED_IMAGE_TYPES = [
|
||||
'image/jpeg',
|
||||
'image/gif',
|
||||
'image/png'
|
||||
];
|
||||
|
||||
private const ALLOWED_PDF_TYPES = [
|
||||
'application/pdf'
|
||||
];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
private const THUMB_WIDTH = 542;
|
||||
private const THUMB_HEIGHT = 360;
|
||||
private const BIG_WIDTH = 1600;
|
||||
private const BIG_HEIGHT = 900;
|
||||
|
||||
public function uploadFile( $form_data )
|
||||
public function uploadFile(array $form_data): DcFile
|
||||
{
|
||||
if (!isset($form_data['file']) || !$form_data['file']->isValid()) {
|
||||
throw new \InvalidArgumentException('Invalid file provided');
|
||||
}
|
||||
$file = $form_data['file'];
|
||||
$originalName = $file->getClientOriginalName();
|
||||
$extension = $file->getClientOriginalExtension();
|
||||
|
|
@ -43,109 +55,163 @@ class FileRepository extends BaseRepository {
|
|||
return $dc_file;
|
||||
}
|
||||
|
||||
public function makeThumb($id){
|
||||
public function makeThumb(int $id): bool
|
||||
{
|
||||
$file = DcFile::findOrFail($id);
|
||||
$this->makeThumbFromFile($file);
|
||||
return true;
|
||||
}
|
||||
|
||||
public function makeThumbFromFile($file)
|
||||
public function makeThumbFromFile(DcFile $file): bool
|
||||
{
|
||||
$path = $file->getFile(true);
|
||||
$filename = $file->filename;
|
||||
$mine = \File::mimeType($path);
|
||||
//make thumb
|
||||
$allowedMimeTypes = ['image/jpeg','image/gif','image/png'];
|
||||
if (in_array($mine, $allowedMimeTypes)) {
|
||||
$img = Image::make($path);
|
||||
$img->resize(542, 360, function ($c) {
|
||||
$c->aspectRatio();
|
||||
$c->upsize();
|
||||
});
|
||||
\Storage::disk('public')->put('dc/thumb/'.basename($filename), (string) $img->encode());
|
||||
|
||||
$img = Image::make($path);
|
||||
$img->resize(1600, 900, function ($c) {
|
||||
$c->aspectRatio();
|
||||
$c->upsize();
|
||||
});
|
||||
\Storage::disk('public')->put('dc/big/'.basename($filename), (string) $img->encode());
|
||||
}
|
||||
|
||||
$allowedMimeTypes = ['application/pdf'];
|
||||
if (in_array($mine, $allowedMimeTypes)) {
|
||||
$imagick = new \Imagick ($path.'[0]'); // 0 specifies the first page of the pdf
|
||||
$imagick->setImageBackgroundColor('#ffffff');
|
||||
$imagick = $imagick->mergeImageLayers( Imagick::LAYERMETHOD_FLATTEN );
|
||||
$imagick->setImageFormat('jpg'); // set the format of the output image
|
||||
$imagick->setImageCompression(\Imagick::COMPRESSION_JPEG);
|
||||
$imagick->setImageCompressionQuality(60);
|
||||
|
||||
$imagick->resizeImage(1600, 900, \Imagick::FILTER_LANCZOS, 1,1);
|
||||
$filestore = \Storage::disk('public')->path('dc/big/').basename($filename).".jpg";
|
||||
$imagick->writeImage($filestore);
|
||||
|
||||
$imagick->resizeImage(542, 360, \Imagick::FILTER_LANCZOS, 1,1);
|
||||
$filestore = \Storage::disk('public')->path('dc/thumb/').basename($filename).".jpg";
|
||||
$imagick->writeImage($filestore);
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function tagsUpdate($id, $tags){
|
||||
$file = DcFile::findOrFail($id);
|
||||
$file_tags = DcFileTag::where('file_id', $file->id)->get();
|
||||
|
||||
//remove Tags
|
||||
foreach ($file_tags as $file_tag) {
|
||||
if(is_array($tags) && ($pos = array_search($file_tag->tag_id, $tags)) !== FALSE){
|
||||
unset($tags[$pos]);
|
||||
}else{
|
||||
$file_tag->delete();
|
||||
try {
|
||||
$path = $file->getFile(true);
|
||||
if (!file_exists($path)) {
|
||||
throw new \Exception('File not found');
|
||||
}
|
||||
}
|
||||
//set taTagsgs
|
||||
if(is_array($tags)){
|
||||
foreach ($tags as $key => $tag_id) {
|
||||
DcFileTag::create([
|
||||
'file_id' => $file->id,
|
||||
'tag_id' => $tag_id
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
$filename = $file->filename;
|
||||
$mime = \File::mimeType($path);
|
||||
|
||||
if (in_array($mime, self::ALLOWED_IMAGE_TYPES)) {
|
||||
$this->processImage($path, $filename);
|
||||
} elseif (in_array($mime, self::ALLOWED_PDF_TYPES)) {
|
||||
$this->processPdf($path, $filename);
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (\Exception $e) {
|
||||
\Log::error('Thumbnail creation failed: ' . $e->getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private function processImage(string $path, string $filename): void
|
||||
{
|
||||
// Thumbnail
|
||||
$img = Image::make($path);
|
||||
$img->resize(542, 360, function ($c) {
|
||||
$c->aspectRatio();
|
||||
$c->upsize();
|
||||
});
|
||||
\Storage::disk('public')->put('dc/thumb/'.basename($filename), (string) $img->encode());
|
||||
|
||||
// Big image
|
||||
$img = Image::make($path);
|
||||
$img->resize(1600, 900, function ($c) {
|
||||
$c->aspectRatio();
|
||||
$c->upsize();
|
||||
});
|
||||
\Storage::disk('public')->put('dc/big/'.basename($filename), (string) $img->encode());
|
||||
}
|
||||
|
||||
private function processPdf(string $path, string $filename): void
|
||||
{
|
||||
try {
|
||||
// PDF mit höherer Auflösung rendern
|
||||
$imagick = new \Imagick();
|
||||
$imagick->setResolution(300, 300);
|
||||
$imagick->readImage($path.'[0]');
|
||||
|
||||
// Grundlegende Bildoptimierungen
|
||||
$imagick->setImageBackgroundColor('#ffffff');
|
||||
$imagick->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN);
|
||||
$imagick->setImageFormat('jpg');
|
||||
$imagick->setImageCompression(\Imagick::COMPRESSION_JPEG);
|
||||
$imagick->setImageCompressionQuality(80);
|
||||
|
||||
// Große Version erstellen
|
||||
$bigImage = clone $imagick;
|
||||
$bigImage->resizeImage(self::BIG_WIDTH, self::BIG_HEIGHT, \Imagick::FILTER_LANCZOS, 1, true);
|
||||
$bigImage->writeImage(\Storage::disk('public')->path('dc/big/').basename($filename).'.jpg');
|
||||
$bigImage->clear();
|
||||
|
||||
// Thumbnail erstellen
|
||||
$imagick->resizeImage(self::THUMB_WIDTH, self::THUMB_HEIGHT, \Imagick::FILTER_LANCZOS, 1, true);
|
||||
$imagick->writeImage(\Storage::disk('public')->path('dc/thumb/').basename($filename).'.jpg');
|
||||
|
||||
// Ressourcen freigeben
|
||||
$imagick->clear();
|
||||
} catch (\ImagickException $e) {
|
||||
\Log::error('PDF Verarbeitung fehlgeschlagen: ' . $e->getMessage());
|
||||
throw new \RuntimeException('PDF Verarbeitung fehlgeschlagen: ' . $e->getMessage());
|
||||
} finally {
|
||||
if (isset($bigImage)) {
|
||||
$bigImage->destroy();
|
||||
}
|
||||
if (isset($imagick)) {
|
||||
$imagick->destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function tagsUpdate($id, array $tags = []): bool
|
||||
{
|
||||
$file = DcFile::findOrFail($id);
|
||||
|
||||
// Get existing tags
|
||||
$existingTags = DcFileTag::where('file_id', $file->id)
|
||||
->pluck('tag_id')
|
||||
->toArray();
|
||||
|
||||
// Delete removed tags
|
||||
$tagsToDelete = array_diff($existingTags, $tags);
|
||||
if (!empty($tagsToDelete)) {
|
||||
DcFileTag::where('file_id', $file->id)
|
||||
->whereIn('tag_id', $tagsToDelete)
|
||||
->delete();
|
||||
}
|
||||
|
||||
// Add new tags
|
||||
$tagsToAdd = array_diff($tags, $existingTags);
|
||||
$newTags = [];
|
||||
foreach ($tagsToAdd as $tagId) {
|
||||
$newTags[] = [
|
||||
'file_id' => $file->id,
|
||||
'tag_id' => $tagId
|
||||
];
|
||||
}
|
||||
|
||||
if (!empty($newTags)) {
|
||||
DcFileTag::insert($newTags);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function deleteThumb($id){
|
||||
$file = DcFile::findOrFail($id);
|
||||
$path_thumb = $file->getThumb(true);
|
||||
if (file_exists($path_thumb)) {
|
||||
unlink($path_thumb);
|
||||
}
|
||||
$path_big = $file->getBig(true);
|
||||
if (file_exists($path_big)) {
|
||||
unlink($path_big);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function deleteFile($id){
|
||||
$file = DcFile::findOrFail($id);
|
||||
$path_thumb = $file->getThumb(true);
|
||||
if (file_exists($path_thumb)) {
|
||||
unlink($path_thumb);
|
||||
}
|
||||
$path_big = $file->getBig(true);
|
||||
if (file_exists($path_big)) {
|
||||
unlink($path_big);
|
||||
}
|
||||
$path = $file->getFile(true);
|
||||
private function deleteFileIfExists(string $path): void
|
||||
{
|
||||
if (file_exists($path)) {
|
||||
unlink($path);
|
||||
}
|
||||
$file->delete();
|
||||
return true;
|
||||
}
|
||||
|
||||
public function deleteThumb($id): bool
|
||||
{
|
||||
try {
|
||||
$file = DcFile::findOrFail($id);
|
||||
$this->deleteFileIfExists($file->getThumb(true));
|
||||
$this->deleteFileIfExists($file->getBig(true));
|
||||
return true;
|
||||
} catch (\Exception $e) {
|
||||
\Log::error('Thumbnail deletion failed: ' . $e->getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function deleteFile(int $id): bool
|
||||
{
|
||||
try {
|
||||
$file = DcFile::findOrFail($id);
|
||||
$this->deleteFileIfExists($file->getThumb(true));
|
||||
$this->deleteFileIfExists($file->getBig(true));
|
||||
$this->deleteFileIfExists($file->getFile(true));
|
||||
$file->delete();
|
||||
return true;
|
||||
} catch (\Exception $e) {
|
||||
\Log::error('File deletion failed: ' . $e->getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue