Исправление путей к папкам проектов в 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 теперь открывается по правильному пути!
This commit is contained in:
Fedor
2025-11-01 12:22:12 +03:00
parent 3a1635ec4d
commit 7e3f0dcede
117 changed files with 2520 additions and 2034 deletions

View File

@@ -22,8 +22,8 @@ function openProjectFolder(projectId, projectName) {
const encodedFolderName = encodeURIComponent(folderName);
const nextcloudUrl = 'https://office.clientright.ru:8443';
// URL для папки проекта в Nextcloud External Storage
const folderUrl = `${nextcloudUrl}/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/${encodedFolderName}`;
// URL для папки проекта в Nextcloud External Storage (со структурой Project/)
const folderUrl = `${nextcloudUrl}/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/Project/${encodedFolderName}`;
console.log('🔗 Folder URL:', folderUrl);
@@ -446,6 +446,82 @@ function editInNextcloud(recordId, fileName) {
return openNextcloudEditor(recordId, fileName);
}
/**
* Открытие файла через Nextcloud Files UI (с версионированием)
*/
function openViaNextcloud(recordId, fileName) {
console.log('📚 Opening via Nextcloud Files UI:', recordId, fileName);
// Открываем через nextcloud_open.php (PROPFIND → Nextcloud UI)
const redirectUrl = `/crm_extensions/file_storage/api/nextcloud_open.php?recordId=${recordId}&fileName=${encodeURIComponent(fileName)}&v=${Date.now()}`;
console.log('🎯 Opening via Nextcloud:', redirectUrl);
// Открываем в новом окне
const win = window.open(redirectUrl, 'nextcloud_files_' + Date.now(), 'width=1400,height=900,scrollbars=yes,resizable=yes');
if (win) {
console.log('✅ Nextcloud opened successfully');
} else {
console.log('❌ Failed to open window - popup blocked');
alert('❌ Не удалось открыть Nextcloud. Проверьте блокировку всплывающих окон.');
}
}
/**
* Создание нового файла в Nextcloud
* @param {string} module - Модуль CRM (Project, Contacts, Accounts и т.д.)
* @param {string} recordId - ID записи
* @param {string} recordName - Название записи (для имени папки)
* @param {string} fileType - Тип файла (docx, xlsx, pptx)
*/
function createFileInNextcloud(module, recordId, recordName, fileType) {
console.log('🆕 Creating file in Nextcloud:', { module, recordId, recordName, fileType });
// Формируем имя файла по умолчанию
const fileTypeNames = {
'docx': 'Документ',
'xlsx': 'Таблица',
'pptx': 'Презентация'
};
const defaultName = `${fileTypeNames[fileType]}_${new Date().toISOString().split('T')[0]}`;
// Запрашиваем имя файла у пользователя
const fileName = prompt(`Введите название файла (без расширения):`, defaultName);
if (!fileName) {
console.log('❌ File creation cancelled');
return;
}
// Показываем прогресс
if (typeof app !== 'undefined' && app.helper && app.helper.showProgress) {
app.helper.showProgress({
message: 'Создание файла в Nextcloud...'
});
}
// Вызываем скрипт создания
const createUrl = `/crm_extensions/file_storage/api/create_nextcloud_file.php?module=${module}&recordId=${recordId}&recordName=${encodeURIComponent(recordName)}&fileName=${encodeURIComponent(fileName)}&fileType=${fileType}`;
console.log('🎯 Creating file:', createUrl);
// Открываем в новом окне (скрипт создаст файл и откроет редактор)
const win = window.open(createUrl, 'nextcloud_create_' + Date.now(), 'width=1400,height=900,scrollbars=yes,resizable=yes');
// Скрываем прогресс
setTimeout(function() {
if (typeof app !== 'undefined' && app.helper && app.helper.hideProgress) {
app.helper.hideProgress();
}
}, 1000);
if (!win) {
alert('❌ Не удалось открыть Nextcloud. Проверьте блокировку всплывающих окон.');
}
}
// Автоматическое подключение при загрузке страницы
$(document).ready(function() {
console.log('Nextcloud Editor integration loaded');