Files
crm.clientright.ru/crm_extensions/docs/CRM_NEXTCLOUD_INTEGRATION.md

275 lines
9.9 KiB
Markdown
Raw Normal View History

# Интеграция 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
<button onclick="editInNextcloud('{$RECORD->getId()}', '{$RECORD->get('filename')}')" ...>
<i class="fa fa-cloud"></i> Nextcloud
</button>
```
### 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 (просмотр)
- [ ] История изменений
- [ ] Комментарии в документах
- [ ] Совместное редактирование с уведомлениями