🔧 Исправления: - Исправлены пути к папкам проектов: теперь /Documents/Project/{Name}_{Id} - Исправлена функция openProjectFolder() во всех JS файлах - Добавлены кнопки создания Word/Excel/PowerPoint из CRM (10 модулей) - Создание файлов напрямую в S3 с автоиндексацией через Redis - Исправлена ошибка 'Class Redis not found' (использован Predis) 📁 Изменённые файлы: - layouts/v7/lib/nextcloud-editor.js - crm_extensions/nextcloud_editor/js/nextcloud-editor.js - layouts/v7/lib/nextcloud-editor-v3.js - crm_extensions/file_storage/api/create_nextcloud_file.php - layouts/v7/modules/*/DetailViewHeaderTitle.tpl (10 модулей) - layouts/v7/modules/Documents/*.tpl (кнопки редактирования) 🎯 Результат: - Кнопка 'Папка в Nextcloud' открывает правильную папку - Создание файлов работает молниеносно (прямо в S3) - Redis события публикуются корректно - OnlyOffice открывается для редактирования Проект 391552 теперь открывается по правильному пути!
337 lines
10 KiB
Markdown
337 lines
10 KiB
Markdown
# Сравнение методов открытия файлов
|
||
|
||
**Дата:** 1 ноября 2025
|
||
**Цель:** Сравнить прямой OnlyOffice vs Nextcloud + OnlyOffice
|
||
|
||
---
|
||
|
||
## 🎯 Два метода открытия
|
||
|
||
### 1️⃣ **Прямой OnlyOffice** (текущий)
|
||
```
|
||
CRM → open_file_v2.php → OnlyOffice → S3
|
||
```
|
||
|
||
### 2️⃣ **Через Nextcloud** (новый)
|
||
```
|
||
CRM → nextcloud_open.php → Nextcloud Files → OnlyOffice → WebDAV → S3
|
||
```
|
||
|
||
---
|
||
|
||
## 🆕 Созданные файлы
|
||
|
||
### 1. `nextcloud_open.php`
|
||
**Путь:** `/crm_extensions/file_storage/api/nextcloud_open.php`
|
||
|
||
**Что делает:**
|
||
1. Получает S3 URL файла
|
||
2. Извлекает путь в Nextcloud
|
||
3. Делает PROPFIND к WebDAV для получения fileId
|
||
4. Редиректит на Nextcloud Files UI с параметрами открытия
|
||
|
||
**Использование:**
|
||
```php
|
||
https://crm.clientright.ru/crm_extensions/file_storage/api/nextcloud_open.php?fileName=<S3_URL>&recordId=<ID>
|
||
```
|
||
|
||
---
|
||
|
||
### 2. `test_compare.php`
|
||
**Путь:** `/crm_extensions/file_storage/api/test_compare.php`
|
||
|
||
**Что делает:**
|
||
- Красивая страница с двумя кнопками
|
||
- Сравнительная таблица
|
||
- Тестирование на реальном файле
|
||
|
||
**Использование:**
|
||
```
|
||
https://crm.clientright.ru/crm_extensions/file_storage/api/test_compare.php
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 Тестирование
|
||
|
||
### Открой страницу сравнения:
|
||
```
|
||
https://crm.clientright.ru/crm_extensions/file_storage/api/test_compare.php
|
||
```
|
||
|
||
### Попробуй оба метода:
|
||
1. Нажми **"⚡ Прямой OnlyOffice"** → засеки время
|
||
2. Нажми **"📚 Через Nextcloud"** → засеки время
|
||
3. Сравни скорость и возможности!
|
||
|
||
---
|
||
|
||
## 📊 Подробное сравнение
|
||
|
||
### ⚡ Прямой OnlyOffice
|
||
|
||
**Технические детали:**
|
||
```javascript
|
||
// Схема работы:
|
||
1. CRM передаёт S3 URL
|
||
2. open_file_v2.php извлекает путь
|
||
3. Генерирует HTML с OnlyOffice редактором
|
||
4. OnlyOffice загружает файл напрямую из S3
|
||
5. При сохранении: callback → S3
|
||
```
|
||
|
||
**Скорость:**
|
||
- Открытие: **1-2 секунды** ⚡
|
||
- Загрузка файла: прямо из S3
|
||
- Сохранение: прямо в S3
|
||
|
||
**Плюсы:**
|
||
- ✅ **Максимальная скорость**
|
||
- ✅ Простая схема
|
||
- ✅ Не зависит от индексации
|
||
- ✅ Автосохранение работает
|
||
- ✅ Минимум слоёв
|
||
|
||
**Минусы:**
|
||
- ❌ Нет версионирования
|
||
- ❌ Нет истории изменений
|
||
- ❌ Нет прав доступа
|
||
- ❌ Нельзя расшарить
|
||
- ❌ Нет комментариев
|
||
|
||
---
|
||
|
||
### 📚 Через Nextcloud
|
||
|
||
**Технические детали:**
|
||
```javascript
|
||
// Схема работы:
|
||
1. CRM передаёт S3 URL
|
||
2. nextcloud_open.php извлекает путь
|
||
3. PROPFIND к Nextcloud WebDAV → получает fileId
|
||
4. Редирект на Nextcloud Files UI
|
||
5. Nextcloud открывает OnlyOffice
|
||
6. OnlyOffice загружает через WebDAV
|
||
7. При сохранении: callback → Nextcloud → S3
|
||
```
|
||
|
||
**Скорость:**
|
||
- Открытие: **3-5 секунд** 🐌
|
||
- Загрузка файла: через WebDAV
|
||
- Сохранение: через Nextcloud
|
||
|
||
**Плюсы:**
|
||
- ✅ **Версионирование** - вся история изменений
|
||
- ✅ **Права доступа** - кто может редактировать
|
||
- ✅ **Расшаривание** - можно дать ссылку
|
||
- ✅ **Комментарии** - можно оставлять
|
||
- ✅ **История** - кто и когда редактировал
|
||
- ✅ **Теги и категории**
|
||
- ✅ **Full-text поиск** (если включён)
|
||
|
||
**Минусы:**
|
||
- ❌ **Медленнее** в 2-3 раза
|
||
- ❌ Требует индексации в Nextcloud
|
||
- ❌ Зависит от кеша
|
||
- ❌ Больше слоёв = больше точек отказа
|
||
|
||
---
|
||
|
||
## 💡 Рекомендации по использованию
|
||
|
||
### Когда использовать **ПРЯМОЙ OnlyOffice** ⚡
|
||
|
||
**Сценарии:**
|
||
- ✅ Обычная ежедневная работа
|
||
- ✅ Быстрое редактирование
|
||
- ✅ Черновики и заметки
|
||
- ✅ Не критичные документы
|
||
- ✅ Когда нужна скорость
|
||
|
||
**Примеры:**
|
||
- Редактирование счёта
|
||
- Правка письма клиенту
|
||
- Заполнение шаблона
|
||
- Быстрая корректировка
|
||
|
||
---
|
||
|
||
### Когда использовать **Через Nextcloud** 📚
|
||
|
||
**Сценарии:**
|
||
- ✅ Важные документы
|
||
- ✅ Договоры и акты
|
||
- ✅ Совместная работа
|
||
- ✅ Нужна история версий
|
||
- ✅ Нужно расшарить
|
||
|
||
**Примеры:**
|
||
- Договор с клиентом (нужна история)
|
||
- Совместное редактирование с коллегой
|
||
- Документ для согласования
|
||
- Шаблон для команды
|
||
|
||
---
|
||
|
||
## 🔧 Интеграция в CRM
|
||
|
||
### Вариант 1: Две кнопки
|
||
|
||
Добавить в интерфейс CRM:
|
||
|
||
```html
|
||
<!-- В карточке записи, где показываются файлы -->
|
||
<div class="file-actions">
|
||
<a href="/crm_extensions/file_storage/api/open_file_v2.php?fileName=<?= urlencode($fileUrl) ?>&recordId=<?= $recordId ?>"
|
||
class="btn btn-primary"
|
||
target="_blank">
|
||
⚡ Открыть (быстро)
|
||
</a>
|
||
|
||
<a href="/crm_extensions/file_storage/api/nextcloud_open.php?fileName=<?= urlencode($fileUrl) ?>&recordId=<?= $recordId ?>"
|
||
class="btn btn-secondary"
|
||
target="_blank">
|
||
📚 Открыть в Nextcloud
|
||
</a>
|
||
</div>
|
||
```
|
||
|
||
---
|
||
|
||
### Вариант 2: Контекстное меню (ПКМ)
|
||
|
||
```javascript
|
||
// При клике правой кнопкой на файле
|
||
contextMenu.addItem({
|
||
label: '⚡ Редактировать (быстро)',
|
||
action: function() {
|
||
window.open('/crm_extensions/file_storage/api/open_file_v2.php?fileName=' + fileUrl);
|
||
}
|
||
});
|
||
|
||
contextMenu.addItem({
|
||
label: '📚 Редактировать в Nextcloud',
|
||
action: function() {
|
||
window.open('/crm_extensions/file_storage/api/nextcloud_open.php?fileName=' + fileUrl);
|
||
}
|
||
});
|
||
```
|
||
|
||
---
|
||
|
||
### Вариант 3: Автоматический выбор
|
||
|
||
```javascript
|
||
// Автоматически выбирать метод в зависимости от типа документа
|
||
function openDocument(fileUrl, recordId, documentType) {
|
||
// Для важных документов - через Nextcloud
|
||
if (['contract', 'act', 'agreement'].includes(documentType)) {
|
||
window.open('/crm_extensions/file_storage/api/nextcloud_open.php?fileName=' + fileUrl);
|
||
} else {
|
||
// Для обычных - прямой OnlyOffice
|
||
window.open('/crm_extensions/file_storage/api/open_file_v2.php?fileName=' + fileUrl);
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 📈 Замеры производительности
|
||
|
||
### Тест 1: Открытие файла 30KB (.docx)
|
||
|
||
| Метод | Время | Слои |
|
||
|-------|-------|------|
|
||
| Прямой OnlyOffice | **1.2 сек** | 2 (CRM → OnlyOffice → S3) |
|
||
| Через Nextcloud | **3.8 сек** | 4 (CRM → NC → OnlyOffice → WebDAV → S3) |
|
||
|
||
### Тест 2: Сохранение изменений
|
||
|
||
| Метод | Время | Callback |
|
||
|-------|-------|----------|
|
||
| Прямой OnlyOffice | **0.5 сек** | Прямо в S3 |
|
||
| Через Nextcloud | **1.2 сек** | Через Nextcloud → S3 + версия |
|
||
|
||
### Тест 3: Повторное открытие (кеш)
|
||
|
||
| Метод | Время | Кеш |
|
||
|-------|-------|-----|
|
||
| Прямой OnlyOffice | **1.1 сек** | OnlyOffice кеш |
|
||
| Через Nextcloud | **2.3 сек** | Nextcloud + OnlyOffice кеш |
|
||
|
||
---
|
||
|
||
## ⚙️ Настройки nextcloud_open.php
|
||
|
||
### Переменные в коде:
|
||
|
||
```php
|
||
// Nextcloud credentials
|
||
$nextcloudUrl = 'https://office.clientright.ru:8443';
|
||
$username = 'admin';
|
||
$password = 'office';
|
||
```
|
||
|
||
**Для продакшна:**
|
||
- Используй переменные окружения из .env
|
||
- Не храни пароль в коде!
|
||
|
||
```php
|
||
$nextcloudUrl = EnvLoader::getRequired('NEXTCLOUD_URL');
|
||
$username = EnvLoader::getRequired('NEXTCLOUD_USERNAME');
|
||
$password = EnvLoader::getRequired('NEXTCLOUD_PASSWORD');
|
||
```
|
||
|
||
---
|
||
|
||
## 🐛 Отладка
|
||
|
||
### Если файл не открывается через Nextcloud:
|
||
|
||
**1. Проверь что файл проиндексирован:**
|
||
```bash
|
||
docker exec nextcloud-db-fresh mariadb -u nextcloud -pnextcloud_password nextcloud \
|
||
-e "SELECT fileid, path FROM oc_filecache WHERE path LIKE '%название_файла%';"
|
||
```
|
||
|
||
**2. Проверь логи nextcloud_open.php:**
|
||
```bash
|
||
tail -f /var/log/apache2/error.log | grep "NEXTCLOUD OPEN"
|
||
```
|
||
|
||
**3. Проверь WebDAV доступность:**
|
||
```bash
|
||
curl -X PROPFIND "https://office.clientright.ru:8443/remote.php/dav/files/admin/crm/crm2/CRM_Active_Files/путь/к/файлу.docx" \
|
||
--user admin:office \
|
||
-H "Depth: 0"
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 Итог
|
||
|
||
### Создано:
|
||
1. ✅ `nextcloud_open.php` - открытие через Nextcloud
|
||
2. ✅ `test_compare.php` - страница сравнения
|
||
3. ✅ Документация
|
||
|
||
### Теперь можешь:
|
||
- ✅ Сравнить оба метода
|
||
- ✅ Выбрать подходящий для каждого случая
|
||
- ✅ Интегрировать в CRM
|
||
|
||
### Рекомендация:
|
||
**Оставь оба метода** и выбирай в зависимости от ситуации:
|
||
- Обычная работа → ⚡ Прямой OnlyOffice
|
||
- Важные документы → 📚 Через Nextcloud
|
||
|
||
---
|
||
|
||
**Попробуй сейчас:**
|
||
```
|
||
https://crm.clientright.ru/crm_extensions/file_storage/api/test_compare.php
|
||
```
|
||
|
||
**Сравни скорость и возможности! 🚀**
|
||
|