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

@@ -0,0 +1,92 @@
<?php
/**
* Исправление пути документа 397340 в проекте 396447
*
* Проблема: документ 397340 имеет путь с префиксом 'crm2/CRM_Active_Files/',
* а остальные документы проекта имеют путь БЕЗ этого префикса.
*
* Решение: убрать префикс 'crm2/CRM_Active_Files/' из s3_key для единообразия.
*/
require_once '/var/www/fastuser/data/www/crm.clientright.ru/config.inc.php';
$pdo = new PDO(
"mysql:host={$dbconfig['db_server']};port=3306;dbname={$dbconfig['db_name']};charset=utf8mb4",
$dbconfig['db_username'],
$dbconfig['db_password'],
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
$notesId = 397340;
$dryRun = false; // Изменить на false для реального исправления
echo "=== ИСПРАВЛЕНИЕ ПУТИ ДОКУМЕНТА 397340 ===\n\n";
// Получаем текущие данные документа
$sql = "SELECT notesid, title, s3_key, s3_bucket, filename FROM vtiger_notes WHERE notesid = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$notesId]);
$doc = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$doc) {
die("❌ Документ $notesId не найден!\n");
}
echo "📄 Документ: {$doc['title']}\n";
echo " ID: {$doc['notesid']}\n";
echo " Текущий s3_key: {$doc['s3_key']}\n\n";
// Проверяем, есть ли префикс
if (strpos($doc['s3_key'], 'crm2/CRM_Active_Files/') === 0) {
// Убираем префикс
$newS3Key = str_replace('crm2/CRM_Active_Files/', '', $doc['s3_key']);
echo "✅ Найден префикс 'crm2/CRM_Active_Files/'\n";
echo " Новый s3_key: $newS3Key\n\n";
// Проверяем остальные документы проекта для сравнения
$sql2 = "SELECT notesid, s3_key FROM vtiger_notes n
INNER JOIN vtiger_senotesrel snr ON snr.notesid = n.notesid
WHERE snr.crmid = 396447 AND n.notesid != ? AND n.s3_key IS NOT NULL
LIMIT 3";
$stmt2 = $pdo->prepare($sql2);
$stmt2->execute([$notesId]);
$others = $stmt2->fetchAll(PDO::FETCH_ASSOC);
echo "📊 Сравнение с другими документами проекта:\n";
foreach ($others as $other) {
echo " ID {$other['notesid']}: {$other['s3_key']}\n";
}
echo "\n";
// Обновляем filename тоже (если там есть полный URL)
$newFilename = $doc['filename'];
if (strpos($doc['filename'], 'crm2/CRM_Active_Files/') !== false) {
$newFilename = str_replace('crm2/CRM_Active_Files/', '', $doc['filename']);
// Если это полный URL, пересобираем его
if (strpos($newFilename, 'https://') === false && $doc['s3_bucket']) {
$newFilename = "https://s3.twcstorage.ru/{$doc['s3_bucket']}/" . rawurlencode($newS3Key);
}
}
if (!$dryRun) {
echo "🔧 ПРИМЕНЯЕМ ИСПРАВЛЕНИЕ...\n\n";
$updateSql = "UPDATE vtiger_notes SET s3_key = ?, filename = ? WHERE notesid = ?";
$updateStmt = $pdo->prepare($updateSql);
$updateStmt->execute([$newS3Key, $newFilename, $notesId]);
echo "✅ Документ обновлён!\n";
echo " Новый s3_key: $newS3Key\n";
echo " Новый filename: " . substr($newFilename, 0, 100) . "...\n";
} else {
echo "⚠️ РЕЖИМ ПРОВЕРКИ (dry-run)\n";
echo " Для применения изменений установите \$dryRun = false\n";
}
} else {
echo " Префикс 'crm2/CRM_Active_Files/' не найден в пути.\n";
echo " Документ уже в правильном формате.\n";
}
echo "\n=== ГОТОВО ===\n";