From c350f712dc56d722893c6a4960d49831f56514a3 Mon Sep 17 00:00:00 2001 From: F4ilji Date: Mon, 23 Mar 2026 12:05:08 +0500 Subject: [PATCH] changes --- .../Tasks/DownloadAttachmentsTask.php | 37 +++++++++++++++---- .../Filament/Domain/Posts/VkPostPublisher.php | 4 +- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/app/Containers/Dashboard/Tasks/DownloadAttachmentsTask.php b/app/Containers/Dashboard/Tasks/DownloadAttachmentsTask.php index d460a82..2a7629b 100644 --- a/app/Containers/Dashboard/Tasks/DownloadAttachmentsTask.php +++ b/app/Containers/Dashboard/Tasks/DownloadAttachmentsTask.php @@ -139,13 +139,36 @@ class DownloadAttachmentsTask */ private function generateUniqueFilename(string $originalName): string { - $extension = strtolower(pathinfo($originalName, PATHINFO_EXTENSION)); - $basename = pathinfo($originalName, PATHINFO_FILENAME); - + // Декодируем MIME-кодировку (=?UTF-8?B?...?=) + $decodedName = mb_decode_mimeheader($originalName) ?: $originalName; + + // Если не декодировалось, пробуем другой метод + if ($decodedName === $originalName && str_contains($originalName, '=?')) { + $decodedName = iconv_mime_decode($originalName, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, 'UTF-8') ?: $originalName; + } + // Очищаем имя от специальных символов - $basename = preg_replace('/[^a-zA-Z0-9_\-\p{L}]/u', '_', $basename); - - // Добавляем timestamp для уникальности - return $basename . '_' . time() . '_' . bin2hex(random_bytes(4)) . '.' . $extension; + $decodedName = preg_replace('/[^a-zA-Z0-9_\-\p{L}.]/u', '_', $decodedName); + + // Удаляем множественные подчёркивания + $decodedName = preg_replace('/_+/', '_', $decodedName); + + // Получаем расширение + $extension = strtolower(pathinfo($decodedName, PATHINFO_EXTENSION)); + + // Если расширение пустое, пробуем определить из оригинального имени + if (empty($extension) && str_contains($originalName, '.docx')) { + $extension = 'docx'; + } elseif (empty($extension) && str_contains($originalName, '.doc')) { + $extension = 'doc'; + } elseif (empty($extension) && str_contains($originalName, '.pdf')) { + $extension = 'pdf'; + } + + // Генерируем уникальное имя + $basename = pathinfo($decodedName, PATHINFO_FILENAME); + $basename = mb_substr($basename, 0, 100); // Ограничиваем длину + + return $basename . '_' . time() . '_' . bin2hex(random_bytes(4)) . '.' . ($extension ?: 'bin'); } } diff --git a/app/Services/Filament/Domain/Posts/VkPostPublisher.php b/app/Services/Filament/Domain/Posts/VkPostPublisher.php index 876eb8b..2bb8f6a 100755 --- a/app/Services/Filament/Domain/Posts/VkPostPublisher.php +++ b/app/Services/Filament/Domain/Posts/VkPostPublisher.php @@ -26,7 +26,7 @@ class VkPostPublisher if ($settings['vk']) { $text = $this->generateContentForVk($post); - $imagesFromPost = $post->images; + $imagesFromPost = $post->images ?? []; $imagesFromContent = $this->extractImagesFromContent($post->content); $allImages = array_merge($imagesFromPost, $imagesFromContent); $imageLinks = $this->generateImageLinksForVk($allImages); @@ -51,7 +51,7 @@ class VkPostPublisher if ($settings['vk']) { $text = $this->generateContentForVk($post); - $imagesFromPost = $post->images; + $imagesFromPost = $post->images ?? []; $imagesFromContent = $this->extractImagesFromContent($post->content); $allImages = array_merge($imagesFromPost, $imagesFromContent); $imageLinks = $this->generateImageLinksForVk($allImages);