Path : /home/vishqocm/pcib.in/admin/ajax/
File Upload :
Current File : /home/vishqocm//pcib.in/admin/ajax/verify_document.php

<?php
session_start();
include_once('../../config/db_config.php');

// Check if admin is logged in
if (!isset($_SESSION['user_id']) || ($_SESSION['role'] !== 'admin' && $_SESSION['role'] !== 'director')) {
    echo json_encode([
        'success' => false,
        'message' => 'Unauthorized access'
    ]);
    exit();
}

// Validate request
if ($_SERVER['REQUEST_METHOD'] !== 'POST' || 
    !isset($_POST['document_id']) || empty($_POST['document_id']) ||
    !isset($_POST['status']) || empty($_POST['status'])) {
    
    echo json_encode([
        'success' => false,
        'message' => 'Invalid request parameters'
    ]);
    exit();
}

$documentId = (int)$_POST['document_id'];
$status = $_POST['status'];
$adminNotes = isset($_POST['admin_notes']) ? $_POST['admin_notes'] : null;

// Validate status
$allowedStatuses = ['pending', 'verified', 'rejected'];
if (!in_array($status, $allowedStatuses)) {
    echo json_encode([
        'success' => false,
        'message' => 'Invalid status value'
    ]);
    exit();
}

try {
    // Begin transaction
    $conn->begin_transaction();
    
    // Update document status
    $query = "
        UPDATE student_documents
        SET status = ?, 
            admin_notes = ?
        WHERE id = ?
    ";
    
    $stmt = $conn->prepare($query);
    $stmt->bind_param("ssi", $status, $adminNotes, $documentId);
    $stmt->execute();
    
    if ($stmt->affected_rows === 0) {
        throw new Exception('Failed to update document status');
    }
    
    // Get document details for notification
    $query = "
        SELECT 
            d.user_id, 
            d.document_type,
            u.email,
            u.first_name,
            u.last_name
        FROM 
            student_documents d
        JOIN 
            users u ON d.user_id = u.id
        WHERE 
            d.id = ?
    ";
    
    $stmt = $conn->prepare($query);
    $stmt->bind_param("i", $documentId);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($result->num_rows === 0) {
        throw new Exception('Document not found after update');
    }
    
    $document = $result->fetch_assoc();
    
    // Log the activity
    $adminUserId = $_SESSION['user_id'];
    $activityDescription = "Document verification status updated to '$status' for document #$documentId";
    
    $logQuery = "
        INSERT INTO activities (
            user_id, 
            user_type, 
            activity_type, 
            activity_description, 
            ip_address, 
            created_at
        ) VALUES (
            ?, 
            'admin', 
            'document_verification', 
            ?, 
            ?, 
            NOW()
        )
    ";
    
    $ipAddress = $_SERVER['REMOTE_ADDR'] ?? null;
    
    $stmt = $conn->prepare($logQuery);
    $stmt->bind_param("iss", $adminUserId, $activityDescription, $ipAddress);
    $stmt->execute();
    
    // Commit the transaction
    $conn->commit();
    
    // Prepare notification data
    $studentName = $document['first_name'] . ' ' . $document['last_name'];
    $documentTypes = [
        'id_proof' => 'ID Proof',
        'address_proof' => 'Address Proof',
        'educational_certificate' => 'Educational Certificate',
        'photograph' => 'Passport Size Photo'
    ];
    
    $documentType = isset($documentTypes[$document['document_type']]) 
        ? $documentTypes[$document['document_type']] 
        : ucfirst(str_replace('_', ' ', $document['document_type']));
    
    $statusText = ucfirst($status);
    
    echo json_encode([
        'success' => true,
        'message' => "Document status updated to $statusText successfully",
        'student_name' => $studentName,
        'document_type' => $documentType,
        'status' => $status
    ]);
    
} catch (Exception $e) {
    // Rollback the transaction
    if (isset($conn) && $conn->ping()) {
        $conn->rollback();
    }
    
    echo json_encode([
        'success' => false,
        'message' => 'Error: ' . $e->getMessage()
    ]);
}
?>