Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
134 lines
8.5 KiB
PHP
134 lines
8.5 KiB
PHP
<?php
|
||
/**
|
||
* Анализ работы кнопки "Папка в Nextcloud"
|
||
*/
|
||
|
||
error_reporting(E_ALL);
|
||
ini_set('display_errors', 1);
|
||
|
||
echo "════════════════════════════════════════════════════════════════════════════════\n";
|
||
echo "🔍 АНАЛИЗ КНОПКИ 'ПАПКА В NEXTCLOUD'\n";
|
||
echo "════════════════════════════════════════════════════════════════════════════════\n\n";
|
||
|
||
// 1. Как работает кнопка
|
||
echo "1️⃣ КАК РАБОТАЕТ КНОПКА:\n";
|
||
echo "────────────────────────────────────────────────────────────────────────────\n";
|
||
|
||
echo " 📋 JavaScript функция: openProjectFolder() или openRecordFolder()\n";
|
||
echo " 📍 Файл: layouts/v7/lib/nextcloud-editor.js (строка 9)\n\n";
|
||
|
||
echo " 🔗 Формируемый URL:\n";
|
||
echo " https://office.clientright.ru:8443/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/Project/ИмяПроекта_123\n\n";
|
||
|
||
echo " ⚙️ Что происходит:\n";
|
||
echo " 1. JavaScript формирует URL с параметром dir=\n";
|
||
echo " 2. window.open() открывает этот URL в новом окне\n";
|
||
echo " 3. Nextcloud веб-интерфейс загружается\n";
|
||
echo " 4. Nextcloud делает запросы для получения списка файлов\n\n";
|
||
|
||
// 2. Что делает Nextcloud при открытии этого URL
|
||
echo "2️⃣ ЧТО ДЕЛАЕТ NEXTCLOUD ПРИ ОТКРЫТИИ:\n";
|
||
echo "────────────────────────────────────────────────────────────────────────────\n";
|
||
|
||
echo " 📊 Nextcloud веб-интерфейс использует СВОЙ внутренний API:\n\n";
|
||
|
||
echo " 🔍 Возможные запросы:\n";
|
||
echo " 1. /index.php/apps/files/ajax/list.php?dir=...\n";
|
||
echo " - Получение списка файлов\n";
|
||
echo " - Может делать PROPFIND к S3\n";
|
||
echo " - Проверяет кеш (oc_filecache)\n\n";
|
||
|
||
echo " 2. /index.php/apps/files/api/v1/files?dir=...\n";
|
||
echo " - REST API для списка файлов\n";
|
||
echo " - Возвращает JSON\n\n";
|
||
|
||
echo " 3. Дополнительные запросы:\n";
|
||
echo " - Метаданные файлов\n";
|
||
echo " - Права доступа\n";
|
||
echo " - Превью (если включены)\n";
|
||
echo " - Теги и комментарии\n\n";
|
||
|
||
// 3. Почему это медленно
|
||
echo "3️⃣ ПОЧЕМУ ЭТО МЕДЛЕННО:\n";
|
||
echo "────────────────────────────────────────────────────────────────────────────\n";
|
||
|
||
echo " ❌ ПРОБЛЕМА 1: Nextcloud проверяет кеш (oc_filecache)\n";
|
||
echo " - Если кеш устарел → сканирует S3\n";
|
||
echo " - filesystem_check_changes=0 должно помочь, но...\n";
|
||
echo " - При открытии через веб-интерфейс все равно проверяет!\n\n";
|
||
|
||
echo " ❌ ПРОБЛЕМА 2: Множественные запросы\n";
|
||
echo " - Не один запрос, а несколько\n";
|
||
echo " - Каждый запрос = задержка\n";
|
||
echo " - Особенно если файлов много\n\n";
|
||
|
||
echo " ❌ ПРОБЛЕМА 3: JavaScript загружает данные постепенно\n";
|
||
echo " - Сначала структура\n";
|
||
echo " - Потом метаданные\n";
|
||
echo " - Потом превью\n";
|
||
echo " - Каждый этап = задержка\n\n";
|
||
|
||
echo " ❌ ПРОБЛЕМА 4: Nextcloud может сканировать всю папку\n";
|
||
echo " - Даже если нужно показать только один уровень\n";
|
||
echo " - Проверяет все подпапки\n";
|
||
echo " - Особенно при filesystem_check_changes=1\n\n";
|
||
|
||
// 4. Проверяем реальный URL
|
||
echo "4️⃣ ПРОВЕРКА РЕАЛЬНОГО URL:\n";
|
||
echo "────────────────────────────────────────────────────────────────────────────\n";
|
||
|
||
$testUrl = 'https://office.clientright.ru:8443/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/Project';
|
||
echo " 🔗 Тестовый URL: $testUrl\n\n";
|
||
|
||
echo " ⚠️ Этот URL открывает ВЕБ-ИНТЕРФЕЙС Nextcloud\n";
|
||
echo " - Загружается весь JavaScript\n";
|
||
echo " - Делаются запросы к внутреннему API\n";
|
||
echo " - Рендерится интерфейс\n";
|
||
echo " - Это НЕ прямой WebDAV запрос!\n\n";
|
||
|
||
// 5. Разница с n8n
|
||
echo "5️⃣ РАЗНИЦА С n8n:\n";
|
||
echo "────────────────────────────────────────────────────────────────────────────\n";
|
||
|
||
echo " ✅ n8n использует:\n";
|
||
echo " /remote.php/dav/files/admin/crm/.../Project/...\n";
|
||
echo " - Прямой WebDAV PROPFIND запрос\n";
|
||
echo " - Один запрос = один ответ\n";
|
||
echo " - Быстро! ⚡\n\n";
|
||
|
||
echo " ❌ Кнопка использует:\n";
|
||
echo " /apps/files/?dir=/crm/.../Project/...\n";
|
||
echo " - Веб-интерфейс Nextcloud\n";
|
||
echo " - Множественные запросы\n";
|
||
echo " - Медленно! 🐌\n\n";
|
||
|
||
// 6. Решение
|
||
echo "6️⃣ РЕШЕНИЕ:\n";
|
||
echo "────────────────────────────────────────────────────────────────────────────\n";
|
||
|
||
echo " 💡 ВАРИАНТ 1: Использовать прямой WebDAV URL (как n8n)\n";
|
||
echo " Вместо: /apps/files/?dir=...\n";
|
||
echo " Использовать: /remote.php/dav/files/admin/...\n";
|
||
echo " Но это откроет XML, а не красивый интерфейс\n\n";
|
||
|
||
echo " 💡 ВАРИАНТ 2: Создать свой endpoint в CRM\n";
|
||
echo " - Делает PROPFIND запрос (как n8n)\n";
|
||
echo " - Парсит XML\n";
|
||
echo " - Возвращает JSON\n";
|
||
echo " - Показывает свой интерфейс (быстро!)\n\n";
|
||
|
||
echo " 💡 ВАРИАНТ 3: Использовать fileId из Redis\n";
|
||
echo " - Берем fileId папки из Redis индекса\n";
|
||
echo " - Открываем через: /apps/files/files/{fileId}\n";
|
||
echo " - Это может быть быстрее, чем через dir=\n\n";
|
||
|
||
echo " 💡 ВАРИАНТ 4: Кешировать результаты в Redis\n";
|
||
echo " - При открытии папки проверяем кеш\n";
|
||
echo " - Если есть - показываем сразу\n";
|
||
echo " - Если нет - делаем запрос, кешируем\n\n";
|
||
|
||
echo "════════════════════════════════════════════════════════════════════════════════\n";
|
||
echo "✅ ИТОГ: Кнопка открывает веб-интерфейс, который делает много запросов\n";
|
||
echo "💡 Решение: Использовать прямой WebDAV API или создать свой endpoint\n";
|
||
echo "════════════════════════════════════════════════════════════════════════════════\n";
|