Files
crm.clientright.ru/modules/Documents/actions/SaveWithLogging.php

99 lines
4.0 KiB
PHP
Raw Normal View History

<?php
class Documents_SaveWithLogging_Action extends Vtiger_Save_Action {
private function logToFile($message, $data = null) {
$logFile = '/var/www/fastuser/data/www/crm.clientright.ru/logs/documents_upload_debug.log';
$timestamp = date('Y-m-d H:i:s');
$logEntry = "[$timestamp] $message";
if ($data !== null) {
$logEntry .= "\nData: " . print_r($data, true);
}
$logEntry .= "\n" . str_repeat('-', 80) . "\n";
file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
}
public function process(Vtiger_Request $request) {
// Логируем начало процесса
$this->logToFile("=== Documents Upload Started ===");
$this->logToFile("REQUEST_URI: " . $_SERVER['REQUEST_URI']);
$this->logToFile("REQUEST_METHOD: " . $_SERVER['REQUEST_METHOD']);
$this->logToFile("Content-Type: " . ($_SERVER['CONTENT_TYPE'] ?? 'not set'));
// Логируем данные запроса
$this->logToFile("FILES data:", $_FILES);
$this->logToFile("POST data:", $_POST);
$this->logToFile("REQUEST data:", $request->getAll());
// Проверяем PHP настройки
$this->logToFile("PHP Settings:", [
'upload_max_filesize' => ini_get('upload_max_filesize'),
'post_max_size' => ini_get('post_max_size'),
'max_file_uploads' => ini_get('max_file_uploads'),
'file_uploads' => ini_get('file_uploads') ? 'On' : 'Off',
'max_execution_time' => ini_get('max_execution_time'),
'memory_limit' => ini_get('memory_limit')
]);
// Проверяем права доступа к папкам
$storagePath = '/var/www/fastuser/data/www/crm.clientright.ru/storage';
$this->logToFile("Storage permissions:", [
'storage_exists' => file_exists($storagePath),
'storage_readable' => is_readable($storagePath),
'storage_writable' => is_writable($storagePath),
'storage_permissions' => substr(sprintf('%o', fileperms($storagePath)), -4)
]);
try {
// Вызываем родительский метод
$this->logToFile("Calling parent::process()");
parent::process($request);
// Если дошли сюда, значит все прошло успешно
$this->logToFile("=== Documents Upload Completed Successfully ===");
} catch (Throwable $e) {
$this->logToFile("=== Documents Upload Error ===");
$this->logToFile("Error: " . $e->getMessage());
$this->logToFile("File: " . $e->getFile() . " Line: " . $e->getLine());
$this->logToFile("Trace: " . $e->getTraceAsString());
// Всегда возвращаем JSON при ошибке
header('Content-Type: application/json; charset=utf-8');
http_response_code(500);
echo json_encode([
'success' => false,
'error' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
'timestamp' => date('Y-m-d H:i:s')
], JSON_UNESCAPED_UNICODE);
exit;
}
}
public function checkPermission(Vtiger_Request $request) {
$this->logToFile("Checking permissions");
return parent::checkPermission($request);
}
protected function saveRecord($request) {
$this->logToFile("Starting saveRecord");
try {
$recordModel = parent::saveRecord($request);
$this->logToFile("Record saved successfully", [
'record_id' => $recordModel->getId(),
'module' => $recordModel->getModuleName()
]);
return $recordModel;
} catch (Exception $e) {
$this->logToFile("Error in saveRecord: " . $e->getMessage());
throw $e;
}
}
}
?>