✅ Что реализовано: - SSL/HTTPS для Nextcloud (Let's Encrypt R13) - Redis кэширование для производительности - Collabora Online редактор документов - WOPI allow list настроен (0.0.0.0/0) - Динамическое получение fileId через WebDAV - Поддержка файлов из S3 и локальных файлов - Автоматическое извлечение имени файла из URL - Промежуточная страница для обхода CSRF 🚀 Как работает: 1. JavaScript передает recordId и fileName 2. PHP получает fileId через WebDAV PROPFIND 3. PHP делает редирект на рабочий URL Nextcloud 4. Файл открывается в редакторе Collabora 📁 Файлы: - layouts/v7/lib/nextcloud-editor.js - JavaScript интеграция - crm_extensions/file_storage/api/open_file.php - PHP редирект - modules/Documents/actions/NcPrepareEdit.php - API подготовка - crm_extensions/docs/ - документация 🎯 Результат: Каждый документ в CRM открывает СВОЙ файл в Nextcloud редакторе!
9.9 KiB
9.9 KiB
Интеграция 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. Пользователь нажимает кнопку
<button onclick="editInNextcloud('{$RECORD->getId()}', '{$RECORD->get('filename')}')" ...>
<i class="fa fa-cloud"></i> Nextcloud
</button>
2. JavaScript вызывает API
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
// NcPrepareEdit.php
private function resolveNcFileId(int $recordId, string $fileName): ?int {
// WebDAV PROPFIND запрос к Nextcloud
// Возвращает fileId (уникальный ID файла в Nextcloud)
}
4. Формируются URL для редактора
$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
window.open(editUrl, 'nextcloud_editor', 'width=1200,height=800');
Исправления от 21.10.2025
Проблема
Кнопка открывала папку с документом, а не редактор.
Причины
- Неправильное имя функции: Кнопка вызывала
editInNextcloud, но функция называласьopenNextcloudEditor - Неправильный URL:
https://office.clientright.ruбез порта:8443 - Отсутствие авторизации: Не использовался токен RichDocuments
Решение
-
Добавлен алиас функции:
function editInNextcloud(recordId, fileName) { console.log('📝 editInNextcloud called (alias)'); return openNextcloudEditor(recordId, fileName); } -
Исправлен baseUrl в JS:
const baseUrl = 'https://office.clientright.ru:8443'; // было без :8443 -
Исправлен baseUrl в PHP:
private function getNcBaseUrl(): string { return 'https://office.clientright.ru:8443'; // было без :8443 } -
Добавлена поддержка токена RichDocuments:
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 }; -
Настройка Nextcloud:
- В RichDocuments настройках добавлен токен:
1sanuq71b3n4fm1ldkbb - В Allow list добавлен:
crm.clientright.ru - WOPI allow list установлен:
0.0.0.0/0(разрешены все IP) - Включен доступ внешним приложениям
- В RichDocuments настройках добавлен токен:
-
Настроены правильные креды в .env:
NEXTCLOUD_URL=https://office.clientright.ru:8443 NEXTCLOUD_USERNAME=admin NEXTCLOUD_PASSWORD=office -
Найден рабочий формат 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
Отладка
Включение логов в браузере
- Откройте консоль (F12)
- Все логи начинаются с эмодзи:
- 🚀 - Вызов функции
- ✅ - Успех
- ❌ - Ошибка
- 🔍 - Тестирование
- 📡 - API запрос
Проверка в консоли
// Проверить, загружен ли скрипт
typeof editInNextcloud === 'function' // должно быть true
// Ручной тест
editInNextcloud('12345', 'test.docx')
Проверка API
# Прямой запрос к API
curl 'https://crm.clientright.ru/index.php?module=Documents&action=NcPrepareEdit&record=12345&fileName=test.docx'
Альтернативные способы открытия
JavaScript автоматически создает несколько URL:
- collabora_editor (рекомендуется) - открытие в Collabora по fileId
- onlyoffice_editor - открытие в OnlyOffice
- files_with_open - файловый менеджер с автооткрытием
- files_manager - просто файловый менеджер
- 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: Проверьте, что кнопка есть
- Откройте карточку документа в CRM
- Должна быть голубая кнопка с облаком "Nextcloud"
Шаг 2: Нажмите кнопку
- Откройте консоль (F12)
- Нажмите кнопку "Nextcloud"
- Проверьте логи в консоли
Шаг 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 (просмотр)
- История изменений
- Комментарии в документах
- Совместное редактирование с уведомлениями