Files
crm.clientright.ru/crm_extensions/file_storage/check_dependencies.php

105 lines
4.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Проверка зависимостей для битых файлов
*/
require_once '/var/www/fastuser/data/www/crm.clientright.ru/config.inc.php';
$mysqli = new mysqli($dbconfig['db_server'], $dbconfig['db_username'], $dbconfig['db_password'], $dbconfig['db_name']);
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$mysqli->set_charset("utf8");
echo "=== ПРОВЕРКА ЗАВИСИМОСТЕЙ БИТЫХ ФАЙЛОВ ===\n\n";
// Получаем список всех битых файлов
$brokenQuery = "SELECT notesid FROM vtiger_notes
WHERE filelocationtype = 'I'
AND (s3_key IS NULL OR s3_key = '')";
$brokenResult = $mysqli->query($brokenQuery);
$brokenIds = [];
while ($row = $brokenResult->fetch_assoc()) {
$brokenIds[] = $row['notesid'];
}
echo "Всего битых файлов: " . count($brokenIds) . "\n\n";
if (count($brokenIds) == 0) {
echo "Нет битых файлов для проверки.\n";
exit;
}
// Проверяем vtiger_attachments
echo "Проверяем vtiger_attachments...\n";
$attachmentQuery = "SELECT COUNT(*) as count FROM vtiger_attachments WHERE notesid IN (" . implode(',', $brokenIds) . ")";
$attachmentResult = $mysqli->query($attachmentQuery);
$attachmentCount = $attachmentResult->fetch_assoc()['count'];
echo " Записи в vtiger_attachments: $attachmentCount\n";
// Проверяем vtiger_crmentity
echo "Проверяем vtiger_crmentity...\n";
$crmentityQuery = "SELECT COUNT(*) as count FROM vtiger_crmentity WHERE crmid IN (" . implode(',', $brokenIds) . ")";
$crmentityResult = $mysqli->query($crmentityQuery);
$crmentityCount = $crmentityResult->fetch_assoc()['count'];
echo " Записи в vtiger_crmentity: $crmentityCount\n";
// Проверяем связи с другими модулями
echo "Проверяем vtiger_crmentityrel...\n";
$relationsQuery = "SELECT COUNT(*) as count FROM vtiger_crmentityrel WHERE crmid IN (" . implode(',', $brokenIds) . ")";
$relationsResult = $mysqli->query($relationsQuery);
$relationsCount = $relationsResult->fetch_assoc()['count'];
echo " Связи в vtiger_crmentityrel: $relationsCount\n";
// Проверяем vtiger_seattachmentsrel
echo "Проверяем vtiger_seattachmentsrel...\n";
$seattachmentsQuery = "SELECT COUNT(*) as count FROM vtiger_seattachmentsrel WHERE attachmentsid IN (" . implode(',', $brokenIds) . ")";
$seattachmentsResult = $mysqli->query($seattachmentsQuery);
$seattachmentsCount = $seattachmentsResult->fetch_assoc()['count'];
echo " Связи в vtiger_seattachmentsrel: $seattachmentsCount\n";
echo "\n";
// Итоговый анализ
echo "=== ИТОГОВЫЙ АНАЛИЗ ===\n";
$totalDependencies = $attachmentCount + $crmentityCount + $relationsCount + $seattachmentsCount;
if ($totalDependencies == 0) {
echo "✅ БЕЗОПАСНО УДАЛЯТЬ: Нет зависимостей в других таблицах\n";
echo " Все " . count($brokenIds) . " битых файлов можно удалить без риска\n";
} else {
echo "⚠️ ТРЕБУЕТ ПРОВЕРКИ: $totalDependencies файлов имеют зависимости\n";
echo " Рекомендуется архивировать вместо удаления\n";
}
echo "\n";
// Показываем конкретные зависимости
if ($attachmentCount > 0) {
echo "Детали зависимостей в vtiger_attachments:\n";
$detailQuery = "SELECT notesid, attachmentsid FROM vtiger_attachments WHERE notesid IN (" . implode(',', $brokenIds) . ") LIMIT 10";
$detailResult = $mysqli->query($detailQuery);
while ($row = $detailResult->fetch_assoc()) {
echo " ID: {$row['notesid']}, Attachment ID: {$row['attachmentsid']}\n";
}
if ($attachmentCount > 10) {
echo " ... и еще " . ($attachmentCount - 10) . " записей\n";
}
echo "\n";
}
if ($crmentityCount > 0) {
echo "Детали зависимостей в vtiger_crmentity:\n";
$detailQuery = "SELECT crmid, setype FROM vtiger_crmentity WHERE crmid IN (" . implode(',', $brokenIds) . ") LIMIT 10";
$detailResult = $mysqli->query($detailQuery);
while ($row = $detailResult->fetch_assoc()) {
echo " ID: {$row['crmid']}, Type: {$row['setype']}\n";
}
if ($crmentityCount > 10) {
echo " ... и еще " . ($crmentityCount - 10) . " записей\n";
}
echo "\n";
}
$mysqli->close();
?>