false, 'message' => 'Token de sécurité invalide']); exit; } require_once APP_ROOT . '/src/Database.php'; require_once APP_ROOT . '/src/SmtpRelay.php'; $db = Database::getInstance(); $requestId = isset($_POST['request_id']) ? (int)$_POST['request_id'] : 0; $action = $_POST['action'] ?? ''; $notes = $_POST['admin_notes'] ?? null; if ($requestId <= 0 || !in_array($action, ['approve', 'reject'], true)) { http_response_code(400); echo json_encode(['success' => false, 'message' => 'Données invalides']); exit; } try { $request = $db->getAccessRequestById($requestId); if (!$request) { http_response_code(404); echo json_encode(['success' => false, 'message' => 'Demande non trouvée']); exit; } if ($action === 'approve') { // Generate token $token = $db->approveAccessRequest($requestId); // Send access email to user $thesisTitle = $request['title']; $thesisAuthors = $request['authors'] ?? ''; $accessUrl = "https://{$_SERVER['HTTP_HOST']}/validate-access?token={$token}&thesis={$request['thesis_id']}"; $subject = "Accès accordé - TFE: {$thesisTitle}"; $body = buildApprovalEmail($thesisTitle, $thesisAuthors, $accessUrl, $notes); $plain = strip_tags($body); try { SmtpRelay::send($db, $request['email'], $subject, $body, $plain); App::flash('success', "Demande approuvée. Email envoyé à {$request['email']}."); } catch (SmtpSendException $e) { error_log('[access-request] Email delivery failed after approval: ' . $e->getMessage()); $smtpMsg = $e->isRecipientRejected() ? "Demande approuvée, mais l'email n'a pas pu être délivré : adresse inconnue ({$request['email']})." : "Demande approuvée, mais l'envoi de l'email a échoué (erreur SMTP). L'utilisateur devra relancer une demande."; App::flash('warning', $smtpMsg); } } elseif ($action === 'reject') { $db->rejectAccessRequest($requestId, $notes); // Optionally send rejection email (not implemented for now) App::flash('success', "Demande rejetée."); } header('Location: /admin/acces.php'); exit; } catch (Exception $e) { error_log('Access request action failed: ' . $e->getMessage()); http_response_code(500); echo json_encode(['success' => false, 'message' => 'Erreur lors du traitement']); } /** * Build approval notification email HTML */ function buildApprovalEmail(string $title, string $authors, string $accessUrl, ?string $adminNotes): string { $notesHtml = ''; if (!empty($adminNotes)) { $notesHtml = "
Note de l'administrateur :
" . htmlspecialchars($adminNotes) . "
Bonjour,
Votre demande d'accès au TFE suivant a été approuvée par un administrateur :
Pour accéder aux fichiers attachés, veuillez cliquer sur le lien ci-dessous :
Ce lien est valable 24 heures et à usage unique. L'accès sur votre appareil sera ensuite conservé 30 jours.
Cordialement,
L'équipe XAMXAM - ERG