File "read.php"

Full path: /home2/santhos2/public_html/bharath-coe.firstmatrix.in.net/api/halls/read.php
File size: 3.31 KiB (3394 bytes)
MIME-type: text/x-php
Charset: utf-8

Download   Open   Back

<?php
require_once '../../config/config.php';
header('Content-Type: application/json');

try {
    // DataTables parameters
    $isExport = isset($_GET['isExport']) && $_GET['isExport'] === 'true';
    $limit = isset($_GET['length']) ? (int)$_GET['length'] : 10;
    $offset = isset($_GET['start']) ? (int)$_GET['start'] : 0;
    $orderColumnIndex = isset($_GET['order'][0]['column']) ? (int)$_GET['order'][0]['column'] : 0;
    $orderDir = isset($_GET['order'][0]['dir']) && in_array(strtolower($_GET['order'][0]['dir']), ['asc', 'desc'])
        ? $_GET['order'][0]['dir']
        : 'asc';
    $searchValue = isset($_GET['search']['value']) ? trim($_GET['search']['value']) : '';

    // Column mapping for ordering (index -> column)
    $columns = ['h.hall_id', 'h.hall_name', 'h.block_name', 'h.capacity', 'c.college_name'];
    $orderBy = isset($columns[$orderColumnIndex]) ? $columns[$orderColumnIndex] : 'h.hall_id';

    // WHERE clause for global search
    $whereClause = '';
    $bindings = [];
    if ($searchValue !== '') {
        $whereClause = "WHERE h.hall_name LIKE :search OR h.block_name LIKE :search OR c.college_name LIKE :search OR h.capacity LIKE :search";
        $bindings[':search'] = "%$searchValue%";
    }

    // Base SELECT
    $baseSelect = "SELECT h.hall_id, h.hall_name, h.block_name, h.capacity, c.college_name
                   FROM halls h
                   JOIN colleges c ON h.college_id = c.college_id";

    // Data query
    $sqlData = "$baseSelect $whereClause ORDER BY $orderBy $orderDir";
    if (!$isExport) {
        $sqlData .= " LIMIT :limit OFFSET :offset";
        $bindings[':limit'] = $limit;
        $bindings[':offset'] = $offset;
    }

    $stmt = $pdo->prepare($sqlData);
    foreach ($bindings as $key => $value) {
        $stmt->bindValue($key, $value, is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR);
    }
    $stmt->execute();
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Total records (without filtering)
    $totalRecords = (int)$pdo->query("SELECT COUNT(*) FROM halls")->fetchColumn();

    // Total filtered records
    $sqlFiltered = "SELECT COUNT(*) FROM halls h JOIN colleges c ON h.college_id = c.college_id $whereClause";
    $stmtFiltered = $pdo->prepare($sqlFiltered);
    foreach ($bindings as $key => $value) {
        if ($key !== ':limit' && $key !== ':offset') {
            $stmtFiltered->bindValue($key, $value, PDO::PARAM_STR);
        }
    }
    $stmtFiltered->execute();
    $totalFilteredRecords = (int)$stmtFiltered->fetchColumn();

    if ($isExport) {
        echo json_encode([
            'data' => $data,
            'export' => true,
        ]);
    } else {
        echo json_encode([
            'draw' => isset($_GET['draw']) ? (int)$_GET['draw'] : 0,
            'recordsTotal' => $totalRecords,
            'recordsFiltered' => $totalFilteredRecords,
            'data' => $data,
        ]);
    }
} catch (PDOException $e) {
    http_response_code(500);
    echo json_encode(['error' => 'Database error: ' . $e->getMessage()]);
    error_log('Database error: ' . $e->getMessage());
    exit;
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['error' => 'An unexpected error occurred: ' . $e->getMessage()]);
    error_log('Error: ' . $e->getMessage());
    exit;
}
?>

PHP File Manager