Files
crm.clientright.ru/crm_extensions/file_storage/PDFMAKER_S3_INTEGRATION.md

5.3 KiB
Raw Blame History

PDFMaker S3 Integration

🚀 ГОТОВО! PDFMaker теперь сохраняет файлы в S3

📋 Что сделано:

  1. Модифицирован основной метод сохранения PDF: PDFMaker_PDFMaker_Model::createPDFAndSaveFile()
  2. Добавлена новая функция: saveAttachmentS3() для сохранения метаданных S3
  3. Обновлен SaveIntoDocuments: теперь по умолчанию создает External файлы
  4. Создан тестовый скрипт: 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

🔍 Как проверить работу:

  1. Запустить тест:
cd /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage
php test_pdfmaker_s3.php
  1. Создать PDF через CRM:

    • Зайти в любой модуль (Contacts, Accounts, etc.)
    • Выбрать запись
    • Нажать "PDF" → создать PDF
    • Проверить что файл сохранился как External
  2. Проверить в базе данных:

SELECT notesid, filename, filelocationtype, s3_key, s3_bucket 
FROM vtiger_notes 
WHERE filetype = 'application/pdf' 
AND filelocationtype = 'E'
ORDER BY notesid DESC 
LIMIT 5;

⚠️ Важные моменты:

  1. Безопасность: Весь оригинальный код закомментирован, не удален
  2. Fallback: Если S3 недоступен, работает как раньше (локально)
  3. Логирование: Все S3 операции логируются в PHP error_log
  4. Совместимость: Не затрагивает существующие локальные файлы

🛠️ В случае проблем:

  1. Откат к локальному хранению:

    • Раскомментировать оригинальный код в createPDFAndSaveFile()
    • Изменить в SaveIntoDocuments.php: 'fileversion' => 'I'
  2. Проверить логи:

tail -f /var/log/apache2/error.log | grep PDFMaker
  1. Проверить S3 подключение:
php test_pdfmaker_s3.php

Результат:

PDFMaker теперь автоматически сохраняет все новые PDF файлы в S3!

  • 🔄 Автоматическая загрузка в S3 при создании PDF
  • 🛡️ Безопасный fallback на локальное хранение
  • 📊 Полная интеграция с существующей S3 инфраструктурой
  • 🔧 Легкий откат к старому поведению при необходимости