Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
125 lines
5.0 KiB
PHP
125 lines
5.0 KiB
PHP
<?php
|
||
/**
|
||
* Итоговая сводка по документу
|
||
*/
|
||
|
||
error_reporting(E_ALL);
|
||
ini_set('display_errors', 1);
|
||
|
||
require_once 'config.inc.php';
|
||
require_once 'include/database/PearDatabase.php';
|
||
|
||
global $adb;
|
||
if (!$adb) {
|
||
$adb = PearDatabase::getInstance();
|
||
}
|
||
|
||
$recordId = 397217;
|
||
|
||
echo "=== ИТОГОВАЯ СВОДКА ПО ДОКУМЕНТУ ID: $recordId ===\n\n";
|
||
|
||
// Получаем полную информацию
|
||
$query = "SELECT * FROM vtiger_notes WHERE notesid = ?";
|
||
$result = $adb->pquery($query, array($recordId));
|
||
$row = $adb->fetchByAssoc($result, -1, false);
|
||
|
||
if (!$row) {
|
||
echo "❌ Документ не найден в БД!\n";
|
||
exit(1);
|
||
}
|
||
|
||
echo "📄 ДОКУМЕНТ В БД:\n";
|
||
echo " ✅ Запись существует\n";
|
||
echo " - Title: " . ($row['title'] ?? 'N/A') . "\n";
|
||
echo " - Note No: " . ($row['note_no'] ?? 'N/A') . "\n";
|
||
echo " - Filename: " . ($row['filename'] ?? 'N/A') . "\n";
|
||
echo " - Filelocationtype: " . ($row['filelocationtype'] ?? 'N/A') . "\n";
|
||
echo " - Filesize: " . ($row['filesize'] ?? 'N/A') . " байт\n";
|
||
echo " - S3 Bucket: " . ($row['s3_bucket'] ?? 'N/A') . "\n";
|
||
echo " - S3 Key: " . ($row['s3_key'] ?? 'N/A') . "\n";
|
||
echo " - S3 ETag: " . ($row['s3_etag'] ?? 'N/A') . "\n";
|
||
echo " - Deleted: " . ($row['deleted'] ?? 'N/A') . "\n";
|
||
echo " - Filestatus: " . ($row['filestatus'] ?? 'N/A') . "\n\n";
|
||
|
||
// Проверяем S3
|
||
echo "📦 ПРОВЕРКА S3:\n";
|
||
if (!empty($row['s3_bucket']) && !empty($row['s3_key'])) {
|
||
require_once 'crm_extensions/file_storage/config.php';
|
||
require_once 'vendor/autoload.php';
|
||
|
||
$config = require 'crm_extensions/file_storage/config.php';
|
||
$awsClient = new Aws\S3\S3Client([
|
||
'version' => 'latest',
|
||
'region' => $config['s3']['region'],
|
||
'endpoint' => $config['s3']['endpoint'],
|
||
'use_path_style_endpoint' => $config['s3']['use_path_style_endpoint'],
|
||
'credentials' => [
|
||
'key' => $config['s3']['key'],
|
||
'secret' => $config['s3']['secret'],
|
||
],
|
||
]);
|
||
|
||
try {
|
||
$result = $awsClient->headObject([
|
||
'Bucket' => $row['s3_bucket'],
|
||
'Key' => $row['s3_key']
|
||
]);
|
||
echo " ✅ Файл существует в S3\n";
|
||
echo " - Size: " . ($result['ContentLength'] ?? 'N/A') . " байт\n";
|
||
} catch (Aws\S3\Exception\S3Exception $e) {
|
||
if ($e->getAwsErrorCode() == 'NoSuchKey' || $e->getAwsErrorCode() == 'NotFound') {
|
||
echo " ❌ Файл НЕ существует в S3 (404 Not Found)\n";
|
||
} else if ($e->getAwsErrorCode() == '403' || $e->getStatusCode() == 403) {
|
||
echo " ⚠️ Доступ запрещен (403 Forbidden)\n";
|
||
} else {
|
||
echo " ❌ Ошибка: " . $e->getAwsErrorCode() . "\n";
|
||
}
|
||
}
|
||
} else {
|
||
echo " ⚠️ S3 метаданные отсутствуют\n";
|
||
}
|
||
|
||
// Проверяем локальное хранилище
|
||
echo "\n💾 ПРОВЕРКА ЛОКАЛЬНОГО ХРАНИЛИЩА:\n";
|
||
$query2 = "SELECT a.* FROM vtiger_attachments a
|
||
INNER JOIN vtiger_seattachmentsrel sar ON sar.attachmentsid = a.attachmentsid
|
||
WHERE sar.crmid = ?";
|
||
$result2 = $adb->pquery($query2, array($recordId));
|
||
|
||
if ($adb->num_rows($result2) > 0) {
|
||
$row2 = $adb->fetchByAssoc($result2, -1, false);
|
||
$filePath = $row2['path'] . $row2['attachmentsid'] . '_' . $row2['storedname'];
|
||
|
||
if (file_exists($filePath)) {
|
||
echo " ✅ Файл существует локально\n";
|
||
echo " - Path: $filePath\n";
|
||
echo " - Size: " . filesize($filePath) . " байт\n";
|
||
} else {
|
||
echo " ❌ Файл НЕ существует локально\n";
|
||
echo " - Ожидаемый путь: $filePath\n";
|
||
}
|
||
} else {
|
||
echo " ⚠️ Запись о вложении отсутствует\n";
|
||
}
|
||
|
||
// Итоговый вывод
|
||
echo "\n📊 ИТОГ:\n";
|
||
$hasS3 = !empty($row['s3_bucket']) && !empty($row['s3_key']);
|
||
$hasLocal = $adb->num_rows($result2) > 0;
|
||
|
||
if (!$hasS3 && !$hasLocal) {
|
||
echo " ❌ КРИТИЧЕСКАЯ ПРОБЛЕМА: Файл отсутствует везде!\n";
|
||
echo " Документ существует в БД, но файл недоступен ни в S3, ни локально.\n\n";
|
||
echo " 💡 ВОЗМОЖНЫЕ РЕШЕНИЯ:\n";
|
||
echo " 1. Восстановить файл из бэкапа S3 (если есть)\n";
|
||
echo " 2. Удалить запись документа из БД\n";
|
||
echo " 3. Обновить запись, указав filelocationtype = NULL\n";
|
||
echo " 4. Если файл был перемещен, обновить s3_bucket и s3_key\n";
|
||
} else if ($hasS3) {
|
||
echo " ⚠️ Файл должен быть в S3, но недоступен\n";
|
||
} else if ($hasLocal) {
|
||
echo " ⚠️ Файл должен быть локально, но недоступен\n";
|
||
}
|
||
|
||
echo "\n=== Сводка завершена ===\n";
|