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

6.2 KiB
Raw Blame History

Финальное исправление открытия файлов из CRM

Дата: 31 октября 2025
Проблема: Файлы из S3 External Storage не открывались — "Файл не найден"


🔍 Корневая причина

Nextcloud требует параметр dir для файлов из External Storage!

При открытии файла по fileId из external storage (S3), Nextcloud не может его найти без указания директории, в которой он находится.


Что было

$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


Что стало

// Извлекаем директорию из пути (убираем имя файла)
$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

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

Файл в базе

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:

// Извлекаем директорию из пути (убираем имя файла)
$dirPath = dirname($ncPath);

// Формируем URL для Nextcloud
// Для external storage нужно указывать dir с полным путём!
$redirectUrl = $nextcloudUrl . '/apps/files/files/' . $fileId . '?dir=' . urlencode($dirPath) . '&editing=true&openfile=true';

Проверка работоспособности

1. Локальный тест скрипта

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 в браузере

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 указывает на папку, а не на файл:

$dirPath = dirname($ncPath); // ✅ ПРАВИЛЬНО
$dirPath = $ncPath;           // ❌ НЕПРАВИЛЬНО

Проблема: Файл открывается, но не редактируется

Решение: Проверь настройки Collabora:

docker exec -u www-data nextcloud-fresh php occ richdocuments:activate-config

Проблема: Collabora не загружается

Решение: Проверь логи:

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 в браузере!