Files
crm.clientright.ru/СРАВНЕНИЕ_МЕТОДОВ_ОТКРЫТИЯ_ФАЙЛОВ.md
Fedor 7e3f0dcede Исправление путей к папкам проектов в Nextcloud + создание файлов из CRM
🔧 Исправления:
- Исправлены пути к папкам проектов: теперь /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 теперь открывается по правильному пути!
2025-11-01 12:22:12 +03:00

337 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Сравнение методов открытия файлов
**Дата:** 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
```
**Сравни скорость и возможности! 🚀**