- Создан API create_document_with_text.php для создания DOCX/XLSX/PPTX с текстом от AI - Поддержка Markdown форматирования (заголовки, жирный, курсив, списки, код) - Установлен PHPWord для красивого форматирования документов - Исправлены пути сохранения (crm2/CRM_Active_Files/... без /crm/ в начале) - Замена пробелов на подчеркивания в именах папок - Создана документация для AI и разработчиков - Добавлены API для работы с шаблонами Nextcloud
129 lines
3.9 KiB
PHP
129 lines
3.9 KiB
PHP
<?php
|
||
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=utf8",
|
||
$dbconfig['db_username'],
|
||
$dbconfig['db_password'],
|
||
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
|
||
);
|
||
|
||
$projectId = 396447;
|
||
|
||
// Получаем информацию о проекте
|
||
$sqlProject = "SELECT projectid, projectname, projectstatus FROM vtiger_project WHERE projectid = ?";
|
||
$stmtProject = $pdo->prepare($sqlProject);
|
||
$stmtProject->execute([$projectId]);
|
||
$project = $stmtProject->fetch(PDO::FETCH_ASSOC);
|
||
|
||
if (!$project) {
|
||
die("❌ Проект $projectId не найден!\n");
|
||
}
|
||
|
||
echo "📋 ПРОЕКТ: {$project['projectname']}\n";
|
||
echo " ID: {$project['projectid']}\n";
|
||
echo " Статус: {$project['projectstatus']}\n";
|
||
echo "\n" . str_repeat("=", 80) . "\n\n";
|
||
|
||
// Получаем документы проекта
|
||
$sql = "SELECT
|
||
n.notesid,
|
||
n.title,
|
||
n.filename,
|
||
n.filelocationtype,
|
||
n.foldername,
|
||
n.s3_key,
|
||
n.nc_path,
|
||
n.filesize,
|
||
e.createdtime,
|
||
e.modifiedtime,
|
||
u.user_name,
|
||
e.deleted
|
||
FROM vtiger_notes n
|
||
INNER JOIN vtiger_crmentity e ON e.crmid = n.notesid
|
||
INNER JOIN vtiger_senotesrel snr ON snr.notesid = n.notesid
|
||
LEFT JOIN vtiger_users u ON u.id = e.smownerid
|
||
WHERE snr.crmid = ? AND e.deleted = 0
|
||
ORDER BY e.createdtime DESC";
|
||
|
||
$stmt = $pdo->prepare($sql);
|
||
$stmt->execute([$projectId]);
|
||
$documents = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||
|
||
$count = count($documents);
|
||
echo "📄 НАЙДЕНО ДОКУМЕНТОВ: $count\n\n";
|
||
|
||
if ($count == 0) {
|
||
echo "⚠️ Документы не найдены!\n";
|
||
exit;
|
||
}
|
||
|
||
$totalSize = 0;
|
||
$s3Count = 0;
|
||
$localCount = 0;
|
||
$brokenCount = 0;
|
||
|
||
foreach ($documents as $i => $doc) {
|
||
$num = $i + 1;
|
||
echo "[$num] ID: " . ($doc['notesid'] ?? 'N/A') . "\n";
|
||
echo " Название: " . ($doc['title'] ?? 'не указано') . "\n";
|
||
echo " Файл: " . ($doc['filename'] ?? 'не указано') . "\n";
|
||
echo " Расположение: " . ($doc['filelocationtype'] ?: 'не указано') . "\n";
|
||
|
||
if (!empty($doc['s3_key'])) {
|
||
echo " S3 Key: " . $doc['s3_key'] . "\n";
|
||
$s3Count++;
|
||
}
|
||
|
||
if (!empty($doc['nc_path'])) {
|
||
echo " Nextcloud Path: " . $doc['nc_path'] . "\n";
|
||
}
|
||
|
||
if (!empty($doc['foldername'])) {
|
||
echo " Папка CRM: " . $doc['foldername'] . "\n";
|
||
}
|
||
|
||
if (!empty($doc['filesize']) && $doc['filesize'] > 0) {
|
||
$sizeKB = round($doc['filesize'] / 1024, 2);
|
||
$sizeMB = round($doc['filesize'] / 1024 / 1024, 2);
|
||
if ($sizeMB >= 1) {
|
||
echo " Размер: {$sizeMB} MB\n";
|
||
} else {
|
||
echo " Размер: {$sizeKB} KB\n";
|
||
}
|
||
$totalSize += $doc['filesize'];
|
||
} else {
|
||
echo " Размер: не указан\n";
|
||
}
|
||
|
||
echo " Создан: " . ($doc['createdtime'] ?? 'не указано') . "\n";
|
||
echo " Изменён: " . ($doc['modifiedtime'] ?? 'не указано') . "\n";
|
||
|
||
if (!empty($doc['user_name'])) {
|
||
echo " Владелец: " . $doc['user_name'] . "\n";
|
||
}
|
||
|
||
// Проверка на битые файлы
|
||
if (empty($doc['filename']) && empty($doc['s3_key'])) {
|
||
echo " ВНИМАНИЕ: Файл без имени и пути!\n";
|
||
$brokenCount++;
|
||
}
|
||
|
||
echo "\n";
|
||
}
|
||
|
||
echo str_repeat("=", 80) . "\n";
|
||
echo "📊 СТАТИСТИКА:\n";
|
||
echo " Всего документов: $count\n";
|
||
echo " В S3: $s3Count\n";
|
||
echo " Локальных: " . ($count - $s3Count) . "\n";
|
||
if ($brokenCount > 0) {
|
||
echo " ⚠️ Битых (без файла): $brokenCount\n";
|
||
}
|
||
if ($totalSize > 0) {
|
||
$totalMB = round($totalSize / 1024 / 1024, 2);
|
||
echo " Общий размер: {$totalMB} MB\n";
|
||
}
|
||
echo "\n";
|
||
|