Files
crm.clientright.ru/find_file_391075.php
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

156 lines
5.9 KiB
PHP

<?php
/**
* Поиск файла 391075 в S3 архиве
*/
require_once 'crm_extensions/shared/EnvLoader.php';
// Загружаем переменные окружения
EnvLoader::load();
// S3 настройки
$s3Endpoint = EnvLoader::get('S3_ENDPOINT');
$s3Bucket = EnvLoader::get('S3_BUCKET');
$s3AccessKey = EnvLoader::get('S3_ACCESS_KEY');
$s3SecretKey = EnvLoader::get('S3_SECRET_KEY');
echo "=== Поиск файла 391075 в S3 архиве ===\n\n";
// Данные файла из БД
$fileName = '722fb330f1bcbfa6dc3975013fbf9b4a.docx';
$originalPath = 'storage/2025/August/week5/';
echo "Ищем файл: {$fileName}\n";
echo "Оригинальный путь: {$originalPath}\n";
echo "S3 Bucket: {$s3Bucket}\n\n";
// Возможные пути в архиве
$possiblePaths = [
"backups/{$originalPath}{$fileName}",
"backups/storage/2025/August/week5/{$fileName}",
"backups/{$fileName}",
"storage/2025/August/week5/{$fileName}",
"{$fileName}",
"archive/{$originalPath}{$fileName}",
"archive/storage/2025/August/week5/{$fileName}",
];
echo "Проверяем возможные пути:\n";
foreach ($possiblePaths as $path) {
$s3Url = "{$s3Endpoint}/{$s3Bucket}/{$path}";
echo "Проверяем: {$path}\n";
// Создаем подписанный URL (простой подход)
$timestamp = time();
$expires = $timestamp + 3600; // 1 час
// Простая проверка существования через HEAD запрос
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $s3Url,
CURLOPT_CUSTOMREQUEST => 'HEAD',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_NOBODY => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => [
'Authorization: AWS ' . $s3AccessKey . ':' . $s3SecretKey,
'Date: ' . gmdate('D, d M Y H:i:s T', $timestamp),
]
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
echo " ❌ cURL error: {$error}\n";
} else {
echo " HTTP Code: {$httpCode}\n";
if ($httpCode == 200) {
echo " ✅ ФАЙЛ НАЙДЕН!\n";
echo " URL: {$s3Url}\n\n";
// Пробуем скачать файл
echo "Скачиваем файл...\n";
$downloadUrl = $s3Url;
$tempFile = '/tmp/restored_' . $fileName;
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $downloadUrl,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [
'Authorization: AWS ' . $s3AccessKey . ':' . $s3SecretKey,
'Date: ' . gmdate('D, d M Y H:i:s T', $timestamp),
]
]);
$fileContent = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
echo " ❌ Ошибка скачивания: {$error}\n";
} elseif ($httpCode == 200 && !empty($fileContent)) {
file_put_contents($tempFile, $fileContent);
echo " ✅ Файл скачан: {$tempFile}\n";
echo " Размер: " . strlen($fileContent) . " байт\n";
// Восстанавливаем в локальное хранилище
$restorePath = "/var/www/fastuser/data/www/crm.clientright.ru/storage/2025/August/week5/";
if (!is_dir($restorePath)) {
mkdir($restorePath, 0755, true);
echo " Создана папка: {$restorePath}\n";
}
$finalPath = $restorePath . $fileName;
copy($tempFile, $finalPath);
unlink($tempFile);
echo " ✅ Файл восстановлен: {$finalPath}\n";
echo " Размер: " . filesize($finalPath) . " байт\n";
// Обновляем БД
echo "\nОбновляем базу данных...\n";
include_once 'config.inc.php';
$mysqli = new mysqli($dbconfig['db_server'], $dbconfig['db_username'], $dbconfig['db_password'], $dbconfig['db_name']);
if ($mysqli->connect_error) {
echo "❌ Ошибка подключения к БД: " . $mysqli->connect_error . "\n";
} else {
$stmt = $mysqli->prepare("UPDATE vtiger_attachments SET path = ? WHERE attachmentsid = 391075");
$stmt->bind_param("s", $restorePath);
if ($stmt->execute()) {
echo "✅ База данных обновлена\n";
} else {
echo "❌ Ошибка обновления БД: " . $stmt->error . "\n";
}
$stmt->close();
$mysqli->close();
}
echo "\n🎉 ФАЙЛ 391075 УСПЕШНО ВОССТАНОВЛЕН!\n";
exit(0);
} else {
echo " ❌ Ошибка скачивания, HTTP: {$httpCode}\n";
}
} else {
echo " ❌ Файл не найден\n";
}
}
echo "\n";
}
echo "❌ Файл не найден ни по одному из путей\n";
echo "Проверьте архивы вручную или обратитесь к администратору\n";
?>