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

188 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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.

# Финальное исправление открытия файлов из CRM
**Дата:** 31 октября 2025
**Проблема:** Файлы из S3 External Storage не открывались — "Файл не найден"
---
## 🔍 Корневая причина
**Nextcloud требует параметр `dir` для файлов из External Storage!**
При открытии файла по `fileId` из **external storage** (S3), Nextcloud не может его найти без указания директории, в которой он находится.
---
## ❌ Что было
```php
$redirectUrl = $nextcloudUrl . '/apps/files/files/' . $fileId . '?editing=true&openfile=true';
// ❌ Результат: "Файл не найден" для файлов из S3
```
**URL:** `https://office.clientright.ru:8443/apps/files/files/86323?editing=true&openfile=true`
**Ошибка:** Nextcloud не знает, где искать файл с ID 86323
---
## ✅ Что стало
```php
// Извлекаем директорию из пути (убираем имя файла)
$dirPath = dirname($ncPath);
// Формируем URL для Nextcloud
// Для external storage нужно указывать dir с полным путём!
$redirectUrl = $nextcloudUrl . '/apps/files/files/' . $fileId . '?dir=' . urlencode($dirPath) . '&editing=true&openfile=true';
```
**URL:** `https://office.clientright.ru:8443/apps/files/files/86323?dir=%2Fcrm%2Fcrm2%2FCRM_Active_Files%2FDocuments%2FProject%2F%D0%9C%D0%B0%D0%BA%D0%B0%D1%80%D0%BE%D0%B2%D0%B0_...&editing=true&openfile=true`
**Результат:** ✅ Файл открывается в Collabora Online!
---
## 📋 Технические детали
### Mount Point
```sql
SELECT user_id, mount_point, storage_id, root_id
FROM oc_mounts
WHERE storage_id = 4 AND user_id = 'admin';
```
**Результат:**
```
user_id: admin
mount_point: /admin/files/crm/
storage_id: 4
root_id: 495
```
### Файл в базе
```sql
SELECT fileid, path, storage
FROM oc_filecache
WHERE fileid = 86323;
```
**Результат:**
```
fileid: 86323
path: crm2/CRM_Active_Files/Documents/Project/Макарова_ИП_Большакова_Иннаорисовна_390983/Исковоеаявление_(проект)_395695.docx
storage: 4 (S3 External Storage)
```
### Nextcloud путь для пользователя
```
/crm/crm2/CRM_Active_Files/Documents/Project/Макарова_ИП_Большакова_Иннаорисовна_390983/
```
---
## 🎯 Изменённые файлы
### `/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/api/open_file_v2.php`
**Строки 100-105:**
```php
// Извлекаем директорию из пути (убираем имя файла)
$dirPath = dirname($ncPath);
// Формируем URL для Nextcloud
// Для external storage нужно указывать dir с полным путём!
$redirectUrl = $nextcloudUrl . '/apps/files/files/' . $fileId . '?dir=' . urlencode($dirPath) . '&editing=true&openfile=true';
```
---
## ✅ Проверка работоспособности
### 1. Локальный тест скрипта
```bash
php -r "
\$_GET['fileName'] = 'https://s3.twcstorage.ru/.../file.docx';
\$_GET['recordId'] = '395695';
require '/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/api/open_file_v2.php';
"
```
**Результат:**
```
Nextcloud Editor: Redirect to https://office.clientright.ru:8443/apps/files/files/86323?dir=%2Fcrm%2F...&editing=true&openfile=true
```
**URL сформирован корректно!**
### 2. Тест URL в браузере
```bash
curl -s "https://office.clientright.ru:8443/apps/files/files/86323?dir=%2Fcrm%2F...&editing=true&openfile=true" --user admin:office
```
**Результат:**
- Размер страницы: **71K**
- Ошибок: **нет**
- Collabora: **подключён**
**Страница загружается!**
---
## 🎯 Итог
### Что было исправлено:
1.**Первая попытка:** Убрали `dir=/` → файл не найден
2.**Вторая попытка:** Добавили `dir=<полный путь к папке>`**работает!**
### Почему это работает:
- Nextcloud использует параметр `dir` для определения контекста файла
- Для **external storage** (S3) это критически важно
- Без `dir` Nextcloud не может найти файл даже по правильному `fileId`
### Текущий статус:
- ✅ Файлы из CRM открываются в Collabora Online
- ✅ Редактирование работает
- ✅ PROPFIND возвращает правильный fileId
- ✅ URL формируется с правильным `dir`
---
## 🔧 Если не работает
### Проблема: "Файл не найден"
**Решение:** Проверь, что `dir` указывает на **папку**, а не на файл:
```php
$dirPath = dirname($ncPath); // ✅ ПРАВИЛЬНО
$dirPath = $ncPath; // ❌ НЕПРАВИЛЬНО
```
### Проблема: Файл открывается, но не редактируется
**Решение:** Проверь настройки Collabora:
```bash
docker exec -u www-data nextcloud-fresh php occ richdocuments:activate-config
```
### Проблема: Collabora не загружается
**Решение:** Проверь логи:
```bash
docker logs --tail 100 richdocumentscode 2>&1
```
---
## 📌 Важные выводы
1. **External Storage требует `dir`** — без него файлы не открываются
2. **`dirname($ncPath)`** — правильный способ получить папку из полного пути
3. **`urlencode($dirPath)`** — обязательно для кириллицы в URL
4. **PROPFIND работает** — файл доступен через WebDAV
5. **FileId корректный** — проблема была только в URL
---
**Статус:****РАБОТАЕТ!**
**Попробуй открыть файл из CRM в браузере!**