# Обновленная функция CopyToS3 - Поддержка S3 файлов ## Описание Функция `wf_copytos3($ticketid)` была обновлена для работы как с локальными файлами, так и с файлами в S3 хранилище. ## Что изменилось ### 1. Функция `CopyEntityFiles($crmid, $folder)` **Добавлено:** - Поддержка файлов в S3 (`filelocationtype = 'E'`) - Автоматическое определение типа файла (локальный/S3) - Скачивание файлов из S3 при необходимости - Подробное логирование операций **Новые поля в SQL запросе:** ```sql n.filelocationtype, -- Тип хранения файла ('I' = локальный, 'E' = S3) n.s3_key, -- Ключ файла в S3 n.s3_url -- URL файла в S3 ``` **Логика работы:** 1. Если `filelocationtype = 'E'` и есть `s3_key` → файл в S3 2. Скачиваем файл из S3 через `S3StorageService` 3. Сохраняем в локальную папку 4. Если файл локальный → копируем как раньше ### 2. Функция `CopyToS3($ticketid)` **Добавлено:** - Подробное логирование всех операций - Отслеживание создания папок - Логирование ошибок и предупреждений ## Использование ### В Workflow2: ```php $disableFunctionlist = 1; $env["result"] = wf_copytos3($id); if ($env["result"] == "YES") { $result = "yes"; } else { $result = "no"; } return $result; ``` ### Прямой вызов: ```php require_once 'include/utils/utils.php'; $result = CopyToS3($ticket_id); ``` ## Результаты - **"YES"** - файлы успешно скопированы - **"Заявка не связана с Проектом"** - нет связи с проектом (cf_2066 пустое) - **"Заявка id = X была выгружена ранее"** - папка заявки уже существует - **"Не удалось создать папку Проекта/Заявки"** - ошибка создания папки ## Структура папок ``` /s3/ERV/ ├── {project_id}/ # Папка проекта │ ├── file1.pdf # Файлы проекта │ ├── file2.pdf │ └── {ticket_id}/ # Папка заявки │ ├── file3.pdf # Файлы заявки │ └── file4.pdf ``` ## Логирование Все операции записываются в `logs/CopyToS3.log`: ``` 2025-09-29 16:08:44 Начинаем копирование файлов для заявки 393903 2025-09-29 16:08:44 Найден проект ID: 393566 для заявки 393903 2025-09-29 16:08:44 Проверяем папку проекта: /var/www/fastuser/data/www/crm.clientright.ru/s3/ERV/393566 2025-09-29 16:08:44 Папка проекта уже существует: /var/www/fastuser/data/www/crm.clientright.ru/s3/ERV/393566 2025-09-29 16:08:44 Создаем папку заявки: /var/www/fastuser/data/www/crm.clientright.ru/s3/ERV/393566/393903 2025-09-29 16:08:45 Копируем файлы заявки 393903 2025-09-29 16:08:45 CopyEntityFiles: найдено 0 документов для записи 393903 2025-09-29 16:08:45 Завершено копирование для заявки 393903. Результат: YES ``` **Пример с файлами:** ``` 2025-09-29 15:30:01 CopyEntityFiles: найдено 2 документов для записи 12345 2025-09-29 15:30:01 CopyEntityFiles: обрабатываем файл 1/2 - 12345_file1.pdf 2025-09-29 15:30:01 CopyEntityFiles: filelocationtype=E, s3_key=crm2/.../file1.pdf 2025-09-29 15:30:01 S3 файл скопирован: crm2/.../file1.pdf -> /var/www/.../s3/ERV/12345/12345_file1.pdf 2025-09-29 15:30:01 CopyEntityFiles: обрабатываем файл 2/2 - 12345_file2.pdf 2025-09-29 15:30:01 CopyEntityFiles: filelocationtype=I, s3_key= 2025-09-29 15:30:01 Локальный файл скопирован: /storage/.../file2.pdf -> /var/www/.../s3/ERV/12345/12345_file2.pdf ``` ## Тестирование Функция протестирована и работает корректно: - ✅ Логирование работает - ✅ Создание папок работает - ✅ Обработка файлов работает (локальные и S3) - ✅ Проверка существующих папок работает ## Зависимости - `crm_extensions/file_storage/S3StorageService.php` - для работы с S3 - Права на запись в папку `/s3/ERV/` - Права на создание логов в папке `logs/` ## Совместимость Функция полностью совместима с существующим кодом: - Работает с локальными файлами как раньше - Добавлена поддержка S3 файлов - Сохранен тот же интерфейс и результаты