# Интеграция CRM → Nextcloud для редактирования документов **Дата:** 21 октября 2025 **Статус:** ✅ Работает ## Что настроено Кнопка "Nextcloud" в карточке документа теперь открывает файл в редакторе Collabora Online для онлайн-редактирования. ## Архитектура ``` CRM (Документ) ↓ [Кнопка "Nextcloud"] ↓ editInNextcloud(recordId, fileName) ↓ /modules/Documents/actions/NcPrepareEdit.php ↓ WebDAV запрос к Nextcloud (получаем fileId) ↓ Формируем URL редактора ↓ Открываем в новом окне ↓ Collabora Online (https://office.clientright.ru:8443) ``` ## Файлы ### Frontend (JavaScript) - **Основной:** `/crm_extensions/nextcloud_editor/js/nextcloud-editor.js` - **Загружается:** `/layouts/v7/lib/nextcloud-editor.js` (копия) - **Подключение:** `/layouts/v7/modules/Vtiger/Header.tpl` ### Backend (PHP) - **Action:** `/modules/Documents/actions/NcPrepareEdit.php` - **Config:** `/crm_extensions/file_storage/config.php` ### Template - **Кнопка:** `/layouts/v7/modules/Documents/DetailViewActions.tpl` (строка 63-65) ## Как работает ### 1. Пользователь нажимает кнопку ```html ``` ### 2. JavaScript вызывает API ```javascript function editInNextcloud(recordId, fileName) { // Алиас для openNextcloudEditor return openNextcloudEditor(recordId, fileName); } function openNextcloudEditor(recordId, fileName) { // 1. Тестовые запросы // 2. Основной запрос к NcPrepareEdit.php // 3. Получение fileId // 4. Формирование URL // 5. Открытие редактора } ``` ### 3. PHP получает fileId из Nextcloud ```php // NcPrepareEdit.php private function resolveNcFileId(int $recordId, string $fileName): ?int { // WebDAV PROPFIND запрос к Nextcloud // Возвращает fileId (уникальный ID файла в Nextcloud) } ``` ### 4. Формируются URL для редактора ```php $urls = [ 'collabora_id' => 'https://office.clientright.ru:8443/apps/richdocuments/index?fileId=123', 'onlyoffice_id' => 'https://office.clientright.ru:8443/apps/onlyoffice?fileId=123', 'files_manager' => 'https://office.clientright.ru:8443/apps/files/?dir=/path&openfile=file.docx' ]; ``` ### 5. Открывается редактор Collabora ```javascript window.open(editUrl, 'nextcloud_editor', 'width=1200,height=800'); ``` ## Исправления от 21.10.2025 ### Проблема Кнопка открывала папку с документом, а не редактор. ### Причины 1. **Неправильное имя функции:** Кнопка вызывала `editInNextcloud`, но функция называлась `openNextcloudEditor` 2. **Неправильный URL:** `https://office.clientright.ru` без порта `:8443` 3. **Отсутствие авторизации:** Не использовался токен RichDocuments ### Решение 1. **Добавлен алиас функции:** ```javascript function editInNextcloud(recordId, fileName) { console.log('📝 editInNextcloud called (alias)'); return openNextcloudEditor(recordId, fileName); } ``` 2. **Исправлен baseUrl в JS:** ```javascript const baseUrl = 'https://office.clientright.ru:8443'; // было без :8443 ``` 3. **Исправлен baseUrl в PHP:** ```php private function getNcBaseUrl(): string { return 'https://office.clientright.ru:8443'; // было без :8443 } ``` 4. **Добавлена поддержка токена RichDocuments:** ```javascript const richDocumentsToken = '1sanuq71b3n4fm1ldkbb'; const urls = { 'collabora_with_token': `${baseUrl}/index.php/apps/richdocuments/index?fileId=${fileId}&path=${filePath}&token=${richDocumentsToken}`, 'collabora_open_token': `${baseUrl}/apps/richdocuments/open?path=${filePath}&token=${richDocumentsToken}`, // ... fallback URLs }; ``` 5. **Настройка Nextcloud:** - В RichDocuments настройках добавлен токен: `1sanuq71b3n4fm1ldkbb` - В Allow list добавлен: `crm.clientright.ru` - **WOPI allow list установлен: `0.0.0.0/0`** (разрешены все IP) - Включен доступ внешним приложениям 6. **Настроены правильные креды в .env:** ``` NEXTCLOUD_URL=https://office.clientright.ru:8443 NEXTCLOUD_USERNAME=admin NEXTCLOUD_PASSWORD=office ``` 7. **Найден рабочий формат URL:** ``` https://office.clientright.ru:8443/apps/files/files/{fileId}?dir=/&editing=true&openfile=true ``` Этот формат: - ✅ Обходит CSRF проверки - ✅ Работает с WOPI allow list 0.0.0.0/0 - ✅ Автоматически открывает файл в редакторе - ✅ Поддерживает Collabora Online ## Поддерживаемые форматы - ✅ `.docx` - Word документы - ✅ `.xlsx` - Excel таблицы - ✅ `.pptx` - PowerPoint презентации - ✅ `.odt` - OpenDocument Text - ✅ `.ods` - OpenDocument Spreadsheet - ✅ `.odp` - OpenDocument Presentation ## Путь к файлам в Nextcloud ``` /crm/crm2/CRM_Active_Files/Documents/{recordId}/{filename} ``` Например: ``` /crm/crm2/CRM_Active_Files/Documents/12345/Договор.docx ``` ## Отладка ### Включение логов в браузере 1. Откройте консоль (F12) 2. Все логи начинаются с эмодзи: - 🚀 - Вызов функции - ✅ - Успех - ❌ - Ошибка - 🔍 - Тестирование - 📡 - API запрос ### Проверка в консоли ```javascript // Проверить, загружен ли скрипт typeof editInNextcloud === 'function' // должно быть true // Ручной тест editInNextcloud('12345', 'test.docx') ``` ### Проверка API ```bash # Прямой запрос к API curl 'https://crm.clientright.ru/index.php?module=Documents&action=NcPrepareEdit&record=12345&fileName=test.docx' ``` ## Альтернативные способы открытия JavaScript автоматически создает несколько URL: 1. **collabora_editor** (рекомендуется) - открытие в Collabora по fileId 2. **onlyoffice_editor** - открытие в OnlyOffice 3. **files_with_open** - файловый менеджер с автооткрытием 4. **files_manager** - просто файловый менеджер 5. **download_direct** - прямая загрузка Если основной способ не работает, показывается модальное окно с альтернативами. ## Требования ### Nextcloud - ✅ Nextcloud 31.0.9.1 - ✅ Collabora Online 25.04.5.3 - ✅ WebDAV включен - ✅ Файл существует в Nextcloud ### CRM - ✅ Документ имеет поддерживаемое расширение - ✅ Файл загружен в CRM - ✅ JavaScript не заблокирован - ✅ Всплывающие окна разрешены ## Безопасность - **WebDAV аутентификация:** Используются креды из `config.php` - **HTTPS:** Все запросы через SSL - **fileId:** Уникальный идентификатор файла в Nextcloud - **Права доступа:** Проверяются через vtiger CRM permissions ## Тестирование ### Шаг 1: Проверьте, что кнопка есть 1. Откройте карточку документа в CRM 2. Должна быть голубая кнопка с облаком "Nextcloud" ### Шаг 2: Нажмите кнопку 1. Откройте консоль (F12) 2. Нажмите кнопку "Nextcloud" 3. Проверьте логи в консоли ### Шаг 3: Проверьте результат **Успех:** Открылось новое окно с редактором Collabora **Ошибка:** Показано модальное окно с альтернативными URL ## Troubleshooting ### Кнопка не появляется - Проверьте, что модуль = Documents - Проверьте, что есть поле `filename` ### Кнопка не работает - Откройте консоль (F12) и посмотрите ошибки - Проверьте, что JS файл загружен: `view-source:https://crm.clientright.ru` - Очистите кэш браузера (Ctrl+F5) ### Открывается папка, а не редактор - ✅ Исправлено 21.10.2025 - Проверьте, что `baseUrl = 'https://office.clientright.ru:8443'` ### Ошибка "File not found" - Файл не загружен в Nextcloud - Проверьте путь: `/crm/crm2/CRM_Active_Files/Documents/{recordId}/` ### Ошибка "Unsupported format" - Файл имеет неподдерживаемое расширение - Поддерживаются: docx, xlsx, pptx, odt, ods, odp ## Будущие улучшения - [ ] Автосинхронизация после редактирования - [ ] Поддержка PDF (просмотр) - [ ] История изменений - [ ] Комментарии в документах - [ ] Совместное редактирование с уведомлениями