5.3 KiB
5.3 KiB
PDFMaker S3 Integration
🚀 ГОТОВО! PDFMaker теперь сохраняет файлы в S3
📋 Что сделано:
- Модифицирован основной метод сохранения PDF:
PDFMaker_PDFMaker_Model::createPDFAndSaveFile() - Добавлена новая функция:
saveAttachmentS3()для сохранения метаданных S3 - Обновлен SaveIntoDocuments: теперь по умолчанию создает External файлы
- Создан тестовый скрипт:
test_pdfmaker_s3.php
🔧 Изменения в коде:
1. modules/PDFMaker/models/PDFMaker.php
Функция createPDFAndSaveFile() теперь:
- ✅ Создает PDF локально
- ✅ Загружает в S3 используя
S3StorageService - ✅ Сохраняет S3 метаданные в БД (
s3_key,s3_bucket,s3_etag) - ✅ Устанавливает
filelocationtype = 'E'(External) - ✅ Обновляет
filenameна S3 URL - ✅ Удаляет локальный файл после успешной загрузки
- ✅ Fallback: если S3 недоступен, сохраняет локально (старый способ)
Добавлена функция saveAttachmentS3():
- ✅ Создает запись в
vtiger_crmentity - ✅ НЕ создает запись в
vtiger_attachments(S3 файлы хранятся внешне) - ✅ Комментирован оригинальный код для возможного отката
2. modules/PDFMaker/actions/SaveIntoDocuments.php
Изменено:
// БЫЛО:
$recordModel->set('fileversion', 'I');
// СТАЛО:
$recordModel->set('fileversion', 'E'); // External для S3
🏗️ Архитектура интеграции:
PDFMaker создание PDF
↓
Генерация локально
↓
Попытка загрузки в S3
↓
┌─────────────────────┬─────────────────────┐
│ S3 успешно │ S3 недоступен │
├─────────────────────┼─────────────────────┤
│ • Сохранить S3 meta │ • Локальное хранение│
│ • filelocationtype=E│ • filelocationtype=I│
│ • filename = S3 URL │ • filename = имя │
│ • Удалить локальный │ • Оставить локальный│
└─────────────────────┴─────────────────────┘
📊 S3 ключи для PDFMaker:
Паттерн: crm2/CRM_Active_Files/Documents/{documentId}/{fileName}
Пример:
- Document ID:
123456 - File:
contract_2025.pdf - S3 Key:
crm2/CRM_Active_Files/Documents/123456/contract_2025.pdf - S3 URL:
https://s3.twcstorage.ru/f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c/crm2/CRM_Active_Files/Documents/123456/contract_2025.pdf
🔍 Как проверить работу:
- Запустить тест:
cd /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage
php test_pdfmaker_s3.php
-
Создать PDF через CRM:
- Зайти в любой модуль (Contacts, Accounts, etc.)
- Выбрать запись
- Нажать "PDF" → создать PDF
- Проверить что файл сохранился как External
-
Проверить в базе данных:
SELECT notesid, filename, filelocationtype, s3_key, s3_bucket
FROM vtiger_notes
WHERE filetype = 'application/pdf'
AND filelocationtype = 'E'
ORDER BY notesid DESC
LIMIT 5;
⚠️ Важные моменты:
- Безопасность: Весь оригинальный код закомментирован, не удален
- Fallback: Если S3 недоступен, работает как раньше (локально)
- Логирование: Все S3 операции логируются в PHP error_log
- Совместимость: Не затрагивает существующие локальные файлы
🛠️ В случае проблем:
-
Откат к локальному хранению:
- Раскомментировать оригинальный код в
createPDFAndSaveFile() - Изменить в
SaveIntoDocuments.php:'fileversion' => 'I'
- Раскомментировать оригинальный код в
-
Проверить логи:
tail -f /var/log/apache2/error.log | grep PDFMaker
- Проверить S3 подключение:
php test_pdfmaker_s3.php
✅ Результат:
PDFMaker теперь автоматически сохраняет все новые PDF файлы в S3!
- 🔄 Автоматическая загрузка в S3 при создании PDF
- 🛡️ Безопасный fallback на локальное хранение
- 📊 Полная интеграция с существующей S3 инфраструктурой
- 🔧 Легкий откат к старому поведению при необходимости