feat: Добавлен инструмент генерации документов для AI Ассистента

- Создан API create_document_with_text.php для создания DOCX/XLSX/PPTX с текстом от AI
- Поддержка Markdown форматирования (заголовки, жирный, курсив, списки, код)
- Установлен PHPWord для красивого форматирования документов
- Исправлены пути сохранения (crm2/CRM_Active_Files/... без /crm/ в начале)
- Замена пробелов на подчеркивания в именах папок
- Создана документация для AI и разработчиков
- Добавлены API для работы с шаблонами Nextcloud
This commit is contained in:
Fedor
2025-11-12 19:46:06 +03:00
parent 75912e5cfb
commit cd90b0d58a
307 changed files with 17246 additions and 417 deletions

View File

@@ -448,24 +448,37 @@ function editInNextcloud(recordId, fileName) {
/**
* Открытие файла через Nextcloud Files UI (с версионированием)
* Использует Redis индекс для быстрого получения FileID
*/
function openViaNextcloud(recordId, fileName) {
console.log('📚 Opening via Nextcloud Files UI:', recordId, fileName);
console.log('📚 Opening via Nextcloud Files UI:', recordId);
// Открываем через 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. Проверьте блокировку всплывающих окон.');
}
// Получаем FileID и redirect URL из API
fetch(`/crm_extensions/file_storage/api/nextcloud_open.php?recordId=${recordId}&v=${Date.now()}`)
.then(response => response.json())
.then(data => {
if (data.success) {
console.log('✅ FileID получен:', data.fileId);
console.log('🔗 Redirect URL:', data.redirectUrl);
// Открываем Nextcloud в новом окне
const win = window.open(data.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. Проверьте блокировку всплывающих окон.');
}
} else {
console.error('❌ API error:', data);
alert('❌ Ошибка получения FileID: ' + (data.error || 'Unknown error'));
}
})
.catch(error => {
console.error('❌ Fetch error:', error);
alert('❌ Ошибка подключения к API');
});
}
/**

View File

@@ -57,7 +57,7 @@
</div>
{* Подключаем Nextcloud Editor JS *}
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js"></script>
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js?v=20251102c"></script>
<div class="info-row">
<i class="fa fa-map-marker"></i>&nbsp;

View File

@@ -67,7 +67,7 @@
</div>
{* Подключаем Nextcloud Editor JS *}
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js"></script>
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js?v=20251102c"></script>
<div class="info-row">
<i class="fa fa-map-marker"></i>&nbsp;

View File

@@ -47,7 +47,7 @@
</div>
{* Подключаем Nextcloud Editor JS *}
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js"></script>
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js?v=20251102c"></script>
{*
{assign var=PRIORITY value=$RECORD->get('ticketpriorities')}

View File

@@ -57,7 +57,7 @@
</div>
{* Подключаем Nextcloud Editor JS *}
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js"></script>
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js?v=20251102c"></script>
{*
<div class="row info-row">

View File

@@ -62,7 +62,7 @@
</div>
{* Подключаем Nextcloud Editor JS *}
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js"></script>
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js?v=20251102c"></script>
{*
<div class="info-row row">

View File

@@ -49,7 +49,7 @@
</div>
{* Подключаем Nextcloud Editor JS *}
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js"></script>
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js?v=20251102c"></script>
{*
{assign var=RELATED_TO value=$RECORD->get('related_to')}

View File

@@ -47,7 +47,7 @@
</div>
{* Подключаем Nextcloud Editor JS *}
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js"></script>
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js?v=20251102c"></script>
{*
{assign var=RELATED_TO value=$RECORD->get('linktoaccountscontacts')}

View File

@@ -57,7 +57,7 @@
</div>
{* Подключаем Nextcloud Editor JS *}
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js"></script>
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js?v=20251102c"></script>
{*
<div class="info-row row">

View File

@@ -57,7 +57,7 @@
</div>
{* Подключаем Nextcloud Editor JS *}
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js"></script>
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js?v=20251102c"></script>
{*
<div class="row info-row">

View File

@@ -57,7 +57,7 @@
</div>
{* Подключаем Nextcloud Editor JS *}
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js"></script>
<script type="text/javascript" src="crm_extensions/nextcloud_editor/js/nextcloud-editor.js?v=20251102c"></script>
{*
<div class="row info-row">