94 lines
3.1 KiB
JavaScript
94 lines
3.1 KiB
JavaScript
|
|
/**
|
|||
|
|
* Nextcloud Editor Integration v2 - SIMPLIFIED VERSION
|
|||
|
|
* Использует vtiger Actions вместо прямых PHP вызовов
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
console.log('🚀 Nextcloud Editor v2 integration loaded');
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Получение CSRF токена
|
|||
|
|
*/
|
|||
|
|
function getVtigerToken() {
|
|||
|
|
const name = window.csrfMagicName || '__vtrftk';
|
|||
|
|
const token = window.csrfMagicToken || '';
|
|||
|
|
return { name, token };
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Проверка поддерживаемых типов файлов
|
|||
|
|
*/
|
|||
|
|
function isOfficeFile(fileName = '') {
|
|||
|
|
const ext = fileName.split('.').pop().toLowerCase();
|
|||
|
|
return ['docx', 'xlsx', 'pptx'].includes(ext);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Основная функция для открытия файла в Nextcloud
|
|||
|
|
*/
|
|||
|
|
async function openInNextcloud(recordId, fileName) {
|
|||
|
|
console.log('🎯 V2 Opening file in Nextcloud:', recordId, fileName);
|
|||
|
|
|
|||
|
|
if (!isOfficeFile(fileName)) {
|
|||
|
|
console.warn('⚠️ File not editable:', fileName);
|
|||
|
|
alert('Файл ' + fileName + ' не поддерживается для редактирования. Поддерживаются: docx, xlsx, pptx');
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const { name, token } = getVtigerToken();
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
// Создаем FormData для POST запроса
|
|||
|
|
const formData = new FormData();
|
|||
|
|
formData.append('record', recordId);
|
|||
|
|
formData.append('fileName', fileName);
|
|||
|
|
formData.append(name, token);
|
|||
|
|
|
|||
|
|
console.log('📤 V2 Sending request to vtiger action...');
|
|||
|
|
|
|||
|
|
const response = await fetch('index.php?module=Documents&action=NcPrepareEdit', {
|
|||
|
|
method: 'POST',
|
|||
|
|
credentials: 'same-origin',
|
|||
|
|
body: formData
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
console.log('📥 V2 Response received:', response.status);
|
|||
|
|
|
|||
|
|
const json = await response.json().catch(() => ({
|
|||
|
|
success: false,
|
|||
|
|
error: 'Ошибка разбора JSON ответа'
|
|||
|
|
}));
|
|||
|
|
|
|||
|
|
console.log('📋 V2 JSON response:', json);
|
|||
|
|
|
|||
|
|
if (!response.ok || !json.success) {
|
|||
|
|
throw new Error(json.error || 'HTTP ' + response.status);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Получаем URL и перенаправляем пользователя
|
|||
|
|
const urls = json.data.urls;
|
|||
|
|
const recommendedUrl = urls.collabora_id || urls.onlyoffice_id;
|
|||
|
|
|
|||
|
|
if (recommendedUrl) {
|
|||
|
|
console.log('🎯 V2 Redirecting to:', recommendedUrl);
|
|||
|
|
|
|||
|
|
// ПРОСТО ПЕРЕНАПРАВЛЯЕМ - никаких pop-up!
|
|||
|
|
window.location.href = recommendedUrl;
|
|||
|
|
console.log('✅ V2 Editor opened successfully');
|
|||
|
|
} else {
|
|||
|
|
throw new Error('Не удалось получить URL для редактирования');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('❌ V2 Error:', error);
|
|||
|
|
alert('❌ Ошибка: ' + error.message);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Глобальная функция для вызова из HTML
|
|||
|
|
*/
|
|||
|
|
window.openNextcloudEditor = function(recordId, fileName) {
|
|||
|
|
console.log('🚀 NEXTCLOUD EDITOR v2: Function called!', recordId, fileName);
|
|||
|
|
openInNextcloud(recordId, fileName);
|
|||
|
|
};
|