148 lines
No EOL
7 KiB
PHP
148 lines
No EOL
7 KiB
PHP
<?php
|
|
// Modified status.php to work with local storage approach
|
|
include 'config.php';
|
|
include 'logger.php';
|
|
|
|
header('Content-Type: application/json');
|
|
|
|
logMessage("Received request to local_status.php");
|
|
|
|
if (isset($_GET['document_id']) && isset($_GET['document_key'])) {
|
|
$document_id = $_GET['document_id'];
|
|
$document_key = $_GET['document_key'];
|
|
|
|
logMessage("Checking status for Document ID: $document_id");
|
|
|
|
// Decode the document key to get details
|
|
$documentKeyData = json_decode($document_key, true);
|
|
if (json_last_error() !== JSON_ERROR_NONE) {
|
|
logMessage("Invalid document_key format", 'ERROR');
|
|
echo json_encode(['error' => 'Invalid document_key format']);
|
|
exit;
|
|
}
|
|
|
|
// Add polling timeout for performance
|
|
set_time_limit(30);
|
|
|
|
// Check batch translation status in Microsoft Translator API
|
|
$statusUrl = MS_API_ENDPOINT . "/translator/document/batches/$document_id?api-version=" . MS_API_VERSION;
|
|
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $statusUrl);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|
'Ocp-Apim-Subscription-Key: ' . MS_API_KEY,
|
|
'Ocp-Apim-Subscription-Region: ' . MS_API_REGION
|
|
]);
|
|
|
|
$response = curl_exec($ch);
|
|
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
curl_close($ch);
|
|
|
|
if ($response === false) {
|
|
$error = curl_error($ch);
|
|
logMessage("cURL Error: " . $error, 'ERROR');
|
|
echo json_encode(['error' => 'cURL error: ' . $error]);
|
|
} else {
|
|
logMessage("API Response Code: $httpCode");
|
|
logMessage("API Response: $response");
|
|
|
|
$msResponse = json_decode($response, true);
|
|
if (json_last_error() === JSON_ERROR_NONE) {
|
|
// Convert Microsoft's status format to match what our frontend expects
|
|
$status = 'in_progress';
|
|
$errorMessage = '';
|
|
|
|
// Check overall status
|
|
if (isset($msResponse['status'])) {
|
|
$msStatus = strtolower($msResponse['status']);
|
|
|
|
if ($msStatus === 'succeeded' || $msStatus === 'validated') {
|
|
$status = 'done';
|
|
|
|
// If succeeded, copy the file from Microsoft's expected location to our local storage
|
|
// This would normally happen via Azure Blob Storage notification
|
|
// For now, we'll just assume success and show a placeholder message
|
|
if ($msStatus === 'succeeded') {
|
|
logMessage("Translation succeeded - would download translated file here");
|
|
|
|
// In a real implementation, check if the translated file exists
|
|
// and if not, write a placeholder file
|
|
if (isset($documentKeyData['target_blob'])) {
|
|
$targetFileName = $documentKeyData['target_blob'];
|
|
$targetPath = dirname(__FILE__) . '/local_storage/translated-documents/' . $targetFileName;
|
|
|
|
// Create a placeholder file if it doesn't exist
|
|
if (!file_exists($targetPath)) {
|
|
$placeholderContent = "This is a placeholder for the translated content.\n";
|
|
$placeholderContent .= "In a real implementation, the Microsoft Translator service would store the translated file at this location.\n";
|
|
$placeholderContent .= "Status: Translation succeeded.";
|
|
|
|
file_put_contents($targetPath, $placeholderContent);
|
|
logMessage("Created placeholder translated file at: $targetPath");
|
|
}
|
|
}
|
|
}
|
|
} elseif ($msStatus === 'failed' || $msStatus === 'cancelled') {
|
|
$status = 'error';
|
|
|
|
// Extract error details for better debugging
|
|
if (isset($msResponse['error'])) {
|
|
$errorMessage = $msResponse['error']['code'] . ': ' . $msResponse['error']['message'];
|
|
|
|
// Log error details
|
|
logMessage("Translation error: " . $errorMessage, 'ERROR');
|
|
|
|
// If there's an inner error with more details, include it
|
|
if (isset($msResponse['error']['innerError'])) {
|
|
$innerError = $msResponse['error']['innerError']['code'] . ': ' . $msResponse['error']['innerError']['message'];
|
|
$errorMessage .= " (" . $innerError . ")";
|
|
logMessage("Inner error: " . $innerError, 'ERROR');
|
|
}
|
|
}
|
|
} elseif ($msStatus === 'validationfailed') {
|
|
$status = 'error';
|
|
$errorMessage = 'Validation failed: ';
|
|
|
|
// Extract error details
|
|
if (isset($msResponse['error'])) {
|
|
$errorMessage .= $msResponse['error']['code'] . ': ' . $msResponse['error']['message'];
|
|
|
|
// Log validation error
|
|
logMessage("Validation error: " . $errorMessage, 'ERROR');
|
|
|
|
// Include inner error if available
|
|
if (isset($msResponse['error']['innerError'])) {
|
|
$innerError = $msResponse['error']['innerError']['code'] . ': ' . $msResponse['error']['innerError']['message'];
|
|
$errorMessage .= " (" . $innerError . ")";
|
|
logMessage("Inner validation error: " . $innerError, 'ERROR');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Create a response that matches what the frontend expects
|
|
$statusResponse = [
|
|
'document_id' => $document_id,
|
|
'status' => $status,
|
|
'seconds_remaining' => isset($msResponse['summary']['estimatedTranslationTimeInSeconds'])
|
|
? $msResponse['summary']['estimatedTranslationTimeInSeconds']
|
|
: 0,
|
|
'ms_status' => isset($msResponse['status']) ? $msResponse['status'] : 'unknown',
|
|
'error_message' => $errorMessage
|
|
];
|
|
|
|
// Include the original Microsoft response for debugging
|
|
$statusResponse['ms_response'] = $msResponse;
|
|
|
|
echo json_encode($statusResponse);
|
|
} else {
|
|
logMessage("Invalid JSON response", 'ERROR');
|
|
echo json_encode(['error' => 'Invalid JSON response', 'raw_response' => $response]);
|
|
}
|
|
}
|
|
} else {
|
|
logMessage("Missing document_id or document_key", 'ERROR');
|
|
echo json_encode(['error' => 'Missing document_id or document_key']);
|
|
}
|
|
?>
|