Files
crm.clientright.ru/test_nextcloud_speed.html
Fedor f9484d6bc6 fix: Добавлены альтернативные варианты открытия файлов в Nextcloud
Проблема: Редакторы документов (OnlyOffice, Collabora) не установлены в Nextcloud
Решение: Добавлены дополнительные варианты открытия файлов

Изменения:
- crm_extensions/nextcloud_editor/js/nextcloud-editor.js:
  * Убран параметр editing=false для Files App
  * Добавлены варианты: download_direct, view_only
  * Улучшена логика fallback при ошибках

Добавлены тестовые страницы:
- test_nc_open.html - тест разных редакторов
- simple_test.html - простое модальное окно с вариантами

Варианты открытия:
1. Files App (показать файл в менеджере)
2. Прямое скачивание через WebDAV
3. Просмотр (если поддерживается браузером)

Теперь кнопка Nextcloud будет работать даже без установленных редакторов
2025-10-20 19:35:14 +03:00

130 lines
5.7 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Тест скорости Nextcloud</title>
<style>
body { font-family: Arial, sans-serif; padding: 20px; }
.test { margin: 20px 0; padding: 15px; border: 1px solid #ccc; }
.timing { color: #007bff; font-weight: bold; }
.error { color: red; }
.success { color: green; }
button { padding: 10px 20px; margin: 5px; cursor: pointer; }
</style>
</head>
<body>
<h1>🧪 Тест скорости открытия Nextcloud для документа 395695</h1>
<div class="test">
<h3>Вариант 1: Прямая ссылка на файл (Files App)</h3>
<button onclick="testDirect()">Открыть Files App</button>
<div id="direct-result"></div>
</div>
<div class="test">
<h3>Вариант 2: Через Collabora/Richdocuments</h3>
<button onclick="testCollabora()">Открыть Collabora</button>
<div id="collabora-result"></div>
</div>
<div class="test">
<h3>Вариант 3: Через OnlyOffice</h3>
<button onclick="testOnlyOffice()">Открыть OnlyOffice</button>
<div id="onlyoffice-result"></div>
</div>
<div class="test">
<h3>Вариант 4: Проверка существования файла</h3>
<button onclick="checkFile()">Проверить файл WebDAV</button>
<div id="check-result"></div>
</div>
<script>
const recordId = 395695;
const fileName = 'zayavlenie_proekt.docx';
const baseUrl = 'https://office.clientright.ru';
const ncPath = `/crm/crm2/CRM_Active_Files/Documents/${recordId}/${fileName}`;
function testDirect() {
const start = performance.now();
const url = `${baseUrl}/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/${recordId}&openfile=${encodeURIComponent(fileName)}`;
document.getElementById('direct-result').innerHTML = `
<p>⏱️ URL сформирован за ${(performance.now() - start).toFixed(2)} мс</p>
<p>🔗 <a href="${url}" target="_blank">${url}</a></p>
<p class="timing">Откройте ссылку и засеките время до открытия редактора</p>
`;
}
function testCollabora() {
const start = performance.now();
const url = `${baseUrl}/apps/richdocuments/open?path=${encodeURIComponent(ncPath)}`;
document.getElementById('collabora-result').innerHTML = `
<p>⏱️ URL сформирован за ${(performance.now() - start).toFixed(2)} мс</p>
<p>🔗 <a href="${url}" target="_blank">${url}</a></p>
<p class="timing">Откройте ссылку и засеките время до открытия редактора</p>
`;
}
function testOnlyOffice() {
const start = performance.now();
const url = `${baseUrl}/apps/onlyoffice/open?path=${encodeURIComponent(ncPath)}`;
document.getElementById('onlyoffice-result').innerHTML = `
<p>⏱️ URL сформирован за ${(performance.now() - start).toFixed(2)} мс</p>
<p>🔗 <a href="${url}" target="_blank">${url}</a></p>
<p class="timing">Откройте ссылку и засеките время до открытия редактора</p>
`;
}
function checkFile() {
const start = performance.now();
const resultDiv = document.getElementById('check-result');
resultDiv.innerHTML = '<p>⏳ Проверяем файл через WebDAV...</p>';
fetch(`${baseUrl}/remote.php/dav/files/admin${ncPath}`, {
method: 'HEAD',
credentials: 'include',
headers: {
'Authorization': 'Basic ' + btoa('admin:yft,fkjdj90')
}
})
.then(response => {
const elapsed = (performance.now() - start).toFixed(2);
if (response.ok) {
resultDiv.innerHTML = `
<p class="success">✅ Файл существует!</p>
<p class="timing">⏱️ Проверка заняла ${elapsed} мс</p>
<p>📊 Статус: ${response.status}</p>
<p>📦 Content-Type: ${response.headers.get('content-type')}</p>
<p>📏 Content-Length: ${response.headers.get('content-length')} байт</p>
`;
} else {
resultDiv.innerHTML = `
<p class="error">❌ Файл не найден!</p>
<p class="timing">⏱️ Проверка заняла ${elapsed} мс</p>
<p>📊 Статус: ${response.status}</p>
<p>Путь: ${ncPath}</p>
`;
}
})
.catch(error => {
const elapsed = (performance.now() - start).toFixed(2);
resultDiv.innerHTML = `
<p class="error">❌ Ошибка: ${error.message}</p>
<p class="timing">⏱️ Попытка заняла ${elapsed} мс</p>
`;
});
}
// Автоматическая проверка файла при загрузке
window.addEventListener('load', () => {
setTimeout(checkFile, 500);
});
</script>
</body>
</html>