166 lines
6.3 KiB
PHP
166 lines
6.3 KiB
PHP
|
|
<?php
|
|||
|
|
/**
|
|||
|
|
* Перемещение файлов проекта 398027 в правильное место
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
error_reporting(E_ALL);
|
|||
|
|
ini_set('display_errors', 1);
|
|||
|
|
|
|||
|
|
require_once '/var/www/fastuser/data/www/crm.clientright.ru/vendor/autoload.php';
|
|||
|
|
$config = require '/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/config.php';
|
|||
|
|
|
|||
|
|
$projectId = 398027;
|
|||
|
|
$s3Bucket = $config['s3']['bucket'];
|
|||
|
|
$projectPrefix = 'crm2/CRM_Active_Files/Documents/Project/Храмов_ООО_НЕТОЛОГИЯ_398027/';
|
|||
|
|
|
|||
|
|
// Маппинг: текущий путь => правильный путь
|
|||
|
|
$filesToMove = [
|
|||
|
|
398030 => [
|
|||
|
|
'old' => 'crm2/CRM_Active_Files/Documents/398030/8_Договор_на_оказание_услуг_11-14-2025-16-00-51_Храмов_1_CTP#realfile.pdf',
|
|||
|
|
'new' => $projectPrefix . '8_Договор_на_оказание_услуг_398030.pdf',
|
|||
|
|
],
|
|||
|
|
398032 => [
|
|||
|
|
'old' => 'crm2/CRM_Active_Files/Documents/398032/9_Подтверждение_оплаты_по_договору_11-14-2025-16-00-03_Храмов_1_CTP#realfile.pdf',
|
|||
|
|
'new' => $projectPrefix . '9_Подтверждение_оплаты_по_договору_398032.pdf',
|
|||
|
|
],
|
|||
|
|
398034 => [
|
|||
|
|
'old' => 'crm2/CRM_Active_Files/Documents/398034/10_2_Скрин_личного_кабинета_Истца_и_программа_обучения_11-14-2025-15-47-26_Храмов_41_CTP#realfile.pdf',
|
|||
|
|
'new' => $projectPrefix . '10_2_Скрин_личного_кабинета_Истца_и_программа_обучения_398034.pdf',
|
|||
|
|
],
|
|||
|
|
398036 => [
|
|||
|
|
'old' => 'crm2/CRM_Active_Files/Documents/398036/10_1_Скрин_личного_кабинета_Истца_и_программа_обучения_11-14-2025-15-49-59_Храмов_1_CTP#realfile.pdf',
|
|||
|
|
'new' => $projectPrefix . '10_1_Скрин_личного_кабинета_Истца_и_программа_обучения_398036.pdf',
|
|||
|
|
],
|
|||
|
|
398038 => [
|
|||
|
|
'old' => 'crm2/CRM_Active_Files/Documents/398038/Прочие_документы_11-14-2025-16-06-07_Храмов_3_CTP#realfile.pdf',
|
|||
|
|
'new' => $projectPrefix . 'Прочие_документы_398038.pdf',
|
|||
|
|
],
|
|||
|
|
398040 => [
|
|||
|
|
'old' => 'crm2/CRM_Active_Files/Documents/398040/7_zayavlenie_potrebitelya_Hramov.pdf',
|
|||
|
|
'new' => $projectPrefix . '7_заявление_потребителя_398040.pdf',
|
|||
|
|
],
|
|||
|
|
398063 => [
|
|||
|
|
'old' => 'crm2/CRM_Active_Files/Documents/398063/napravleniya_pretenzii.pdf',
|
|||
|
|
'new' => $projectPrefix . 'Направление_претензии_398063.pdf',
|
|||
|
|
],
|
|||
|
|
399067 => [
|
|||
|
|
'old' => 'clientright/0/1763997676315.pdf',
|
|||
|
|
'new' => $projectPrefix . 'Документ_399067.pdf',
|
|||
|
|
],
|
|||
|
|
399068 => [
|
|||
|
|
'old' => 'clientright/0/1763997790309.pdf',
|
|||
|
|
'new' => $projectPrefix . 'Документ_399068.pdf',
|
|||
|
|
],
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
echo "=== ПЕРЕМЕЩЕНИЕ ФАЙЛОВ ПРОЕКТА {$projectId} ===\n";
|
|||
|
|
echo str_repeat("=", 80) . "\n\n";
|
|||
|
|
|
|||
|
|
$dryRun = isset($argv[1]) && $argv[1] === '--dry-run';
|
|||
|
|
|
|||
|
|
if ($dryRun) {
|
|||
|
|
echo "⚠️ РЕЖИМ ПРОВЕРКИ (dry-run)\n\n";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
$s3Client = new \Aws\S3\S3Client([
|
|||
|
|
'version' => 'latest',
|
|||
|
|
'region' => $config['s3']['region'],
|
|||
|
|
'endpoint' => $config['s3']['endpoint'],
|
|||
|
|
'use_path_style_endpoint' => true,
|
|||
|
|
'credentials' => [
|
|||
|
|
'key' => $config['s3']['key'],
|
|||
|
|
'secret' => $config['s3']['secret'],
|
|||
|
|
],
|
|||
|
|
'suppress_php_deprecation_warning' => true
|
|||
|
|
]);
|
|||
|
|
|
|||
|
|
$stats = [
|
|||
|
|
'total' => count($filesToMove),
|
|||
|
|
'moved' => 0,
|
|||
|
|
'skipped' => 0,
|
|||
|
|
'failed' => 0,
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
foreach ($filesToMove as $docId => $paths) {
|
|||
|
|
$oldPath = $paths['old'];
|
|||
|
|
$newPath = $paths['new'];
|
|||
|
|
$filename = basename($newPath);
|
|||
|
|
|
|||
|
|
echo "Документ ID: {$docId}\n";
|
|||
|
|
echo " Файл: {$filename}\n";
|
|||
|
|
echo " От: {$oldPath}\n";
|
|||
|
|
echo " К: {$newPath}\n";
|
|||
|
|
|
|||
|
|
// Проверяем существование старого файла
|
|||
|
|
if (!$s3Client->doesObjectExist($s3Bucket, $oldPath)) {
|
|||
|
|
echo " ⚠️ Старый файл не найден\n\n";
|
|||
|
|
$stats['skipped']++;
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Проверяем, не существует ли уже новый файл
|
|||
|
|
if ($s3Client->doesObjectExist($s3Bucket, $newPath)) {
|
|||
|
|
echo " ⚠️ Новый файл уже существует\n\n";
|
|||
|
|
$stats['skipped']++;
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$dryRun) {
|
|||
|
|
try {
|
|||
|
|
// Копируем файл
|
|||
|
|
$s3Client->copyObject([
|
|||
|
|
'Bucket' => $s3Bucket,
|
|||
|
|
'Key' => $newPath,
|
|||
|
|
'CopySource' => "{$s3Bucket}/{$oldPath}",
|
|||
|
|
]);
|
|||
|
|
echo " ✅ Скопирован\n";
|
|||
|
|
|
|||
|
|
// Удаляем старый
|
|||
|
|
$s3Client->deleteObject([
|
|||
|
|
'Bucket' => $s3Bucket,
|
|||
|
|
'Key' => $oldPath,
|
|||
|
|
]);
|
|||
|
|
echo " ✅ Старый удален\n";
|
|||
|
|
|
|||
|
|
$stats['moved']++;
|
|||
|
|
sleep(1);
|
|||
|
|
|
|||
|
|
} catch (Exception $e) {
|
|||
|
|
echo " ❌ Ошибка: " . $e->getMessage() . "\n";
|
|||
|
|
$stats['failed']++;
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
echo " ⏸️ Будет перемещен (dry-run)\n";
|
|||
|
|
$stats['moved']++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
echo "\n";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Итоги
|
|||
|
|
echo str_repeat("=", 80) . "\n";
|
|||
|
|
echo "ИТОГИ:\n";
|
|||
|
|
echo "Всего файлов: {$stats['total']}\n";
|
|||
|
|
|
|||
|
|
if (!$dryRun) {
|
|||
|
|
echo "Перемещено: {$stats['moved']}\n";
|
|||
|
|
echo "Пропущено: {$stats['skipped']}\n";
|
|||
|
|
echo "Ошибок: {$stats['failed']}\n";
|
|||
|
|
|
|||
|
|
if ($stats['moved'] > 0) {
|
|||
|
|
echo "\n⚠️ ВАЖНО: Обновите БД с правильными путями!\n";
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
echo "Будет перемещено: {$stats['moved']}\n";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
echo "\n=== ГОТОВО ===\n";
|
|||
|
|
|
|||
|
|
} catch (Exception $e) {
|
|||
|
|
echo "❌ Критическая ошибка: " . $e->getMessage() . "\n";
|
|||
|
|
exit(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|