Проблема: Редакторы документов (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 будет работать даже без установленных редакторов
130 lines
5.7 KiB
HTML
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>
|
|
|
|
|