Wednesday, July 16, 2025

#11 Unified Institutional Ranking Mechanism

Let's create a complete PHP/MySQL-based dashboard for computing UIRF (Unified Institutional Ranking Framework) scores.


✅ Features of the Tool

  • Admin login

  • Add/Edit institutions

  • Data capture for UIRF parameters

  • Auto calculation of UIRF scores (weighted)

  • Institution-wise view, search, and export

  • Bootstrap-styled responsive UI


๐Ÿ“ File Structure

uirf_dashboard/
├── config/
│   └── db.php                # Database connection
├── auth/
│   └── login.php             # Simple admin login
├── institutions/
│   ├── add.php               # Add/Edit form
│   ├── list.php              # View and calculate scores
├── includes/
│   ├── header.php
│   └── footer.php
├── uirf_logic.php            # Score calculation functions
└── index.php

1️⃣ config/db.php

<?php
$conn = new mysqli("localhost", "root", "", "uirf_db");
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
?>

2️⃣ uirf_logic.php – UIRF Score Calculation

<?php
function calculateUIRFScore($data) {
    $score = 0;
    $score += $data['academic_rep'] * 0.10;
    $score += $data['faculty_phd'] * 0.05;
    $score += $data['citations'] * 0.08;
    $score += $data['publications'] * 0.07;
    $score += $data['placements'] * 0.10;
    $score += $data['median_ctc'] * 0.10;
    $score += $data['diversity'] * 0.05;
    $score += $data['intl_students'] * 0.05;
    $score += $data['patents'] * 0.10;
    $score += $data['industry_collab'] * 0.10;
    $score += $data['startup_count'] * 0.10;
    $score += $data['mou_count'] * 0.10;
    return round($score, 2);
}
?>

3️⃣ institutions/add.php – Data Entry Form

<?php include '../config/db.php'; include '../includes/header.php'; ?>
<h2>Add Institutional Data</h2>
<form method="post">
    <?php
    $fields = ["academic_rep", "faculty_phd", "citations", "publications", "placements", "median_ctc",
               "diversity", "intl_students", "patents", "industry_collab", "startup_count", "mou_count"];
    foreach ($fields as $field) {
        echo "<label>" . ucfirst(str_replace("_", " ", $field)) . "</label>
              <input type='number' step='0.01' name='$field' required class='form-control mb-2'>";
    }
    ?>
    <input type="text" name="institution_name" placeholder="Institution Name" required class="form-control mb-2">
    <button type="submit" name="submit" class="btn btn-primary">Save</button>
</form>

<?php
if (isset($_POST['submit'])) {
    $data = $_POST;
    $score = include '../uirf_logic.php'; $score = calculateUIRFScore($data);
    $stmt = $conn->prepare("INSERT INTO institutions SET institution_name=?, academic_rep=?, faculty_phd=?, citations=?, publications=?, placements=?, median_ctc=?, diversity=?, intl_students=?, patents=?, industry_collab=?, startup_count=?, mou_count=?, uirf_score=?");
    $stmt->bind_param("sddddddddddddd", $data['institution_name'], $data['academic_rep'], $data['faculty_phd'], $data['citations'],
        $data['publications'], $data['placements'], $data['median_ctc'], $data['diversity'], $data['intl_students'],
        $data['patents'], $data['industry_collab'], $data['startup_count'], $data['mou_count'], $score);
    $stmt->execute();
    echo "<div class='alert alert-success mt-2'>Data saved with UIRF Score: $score</div>";
}
include '../includes/footer.php';
?>

4️⃣ institutions/list.php – View All Institutions

<?php include '../config/db.php'; include '../includes/header.php'; ?>
<h2>Institution Ranking List</h2>
<table class="table table-bordered table-striped">
    <thead>
        <tr><th>Name</th><th>UIRF Score</th></tr>
    </thead>
    <tbody>
    <?php
    $result = $conn->query("SELECT institution_name, uirf_score FROM institutions ORDER BY uirf_score DESC");
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>{$row['institution_name']}</td><td>{$row['uirf_score']}</td></tr>";
    }
    ?>
    </tbody>
</table>
<?php include '../includes/footer.php'; ?>

5️⃣ includes/header.php and footer.php

<!-- header.php -->
<!DOCTYPE html>
<html><head>
    <title>UIRF Dashboard</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head><body class="p-4"><div class="container">
<!-- footer.php -->
</div></body></html>

6️⃣ SQL: CREATE DATABASE and Table

CREATE DATABASE uirf_db;
USE uirf_db;

CREATE TABLE institutions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    institution_name VARCHAR(255),
    academic_rep FLOAT,
    faculty_phd FLOAT,
    citations FLOAT,
    publications FLOAT,
    placements FLOAT,
    median_ctc FLOAT,
    diversity FLOAT,
    intl_students FLOAT,
    patents FLOAT,
    industry_collab FLOAT,
    startup_count FLOAT,
    mou_count FLOAT,
    uirf_score FLOAT
);

๐Ÿงช Run Locally

  1. Save files under uirf_dashboard/

  2. Import the SQL schema

  3. Run php -S localhost:8000 inside the folder

  4. Access via http://localhost:8000/institutions/add.php to add data
    or http://localhost:8000/institutions/list.php to view rankings


Here’s a fully upgraded version of the UIRF Ranking Dashboard with:

  1. Role-based login system (Admin and Institution)

  2. ๐Ÿ“Š Chart.js Integration to display UIRF score visualizations


๐Ÿ” 1. DATABASE STRUCTURE ADDITION: users TABLE

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(100) UNIQUE,
    password VARCHAR(255),
    role ENUM('admin', 'institution') NOT NULL
);

๐Ÿ”‘ Example admin user:

INSERT INTO users (username, password, role) VALUES
('admin', MD5('admin123'), 'admin'),
('inst1', MD5('instpass'), 'institution');

๐Ÿง  2. auth/login.php – Role-Based Login Page

<?php
session_start();
include '../config/db.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST["username"];
    $password = md5($_POST["password"]);

    $stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
    $stmt->bind_param("ss", $username, $password);
    $stmt->execute();
    $res = $stmt->get_result();
    if ($res->num_rows == 1) {
        $user = $res->fetch_assoc();
        $_SESSION["username"] = $user["username"];
        $_SESSION["role"] = $user["role"];
        header("Location: ../index.php");
    } else {
        $error = "Invalid Login";
    }
}
?>

<form method="post" class="container mt-5">
    <h3>Login</h3>
    <?php if (isset($error)) echo "<div class='alert alert-danger'>$error</div>"; ?>
    <input type="text" name="username" required class="form-control mb-2" placeholder="Username">
    <input type="password" name="password" required class="form-control mb-2" placeholder="Password">
    <button type="submit" class="btn btn-primary">Login</button>
</form>

๐Ÿ” 3. index.php – Role Based Redirect

<?php
session_start();
if (!isset($_SESSION['role'])) {
    header("Location: auth/login.php");
    exit;
}
$role = $_SESSION['role'];
if ($role == 'admin') {
    header("Location: institutions/list.php");
} else {
    header("Location: institutions/add.php");
}

๐Ÿ”’ 4. Restrict add.php and list.php Access

๐Ÿ”ธ Add this to top of both files:

session_start();
if (!isset($_SESSION['role'])) {
    header("Location: ../auth/login.php");
    exit;
}
if ($_SESSION['role'] != 'admin' && basename(__FILE__) == 'list.php') {
    die("Access denied. Only admin can view rankings.");
}

๐Ÿ“Š 5. Chart: Visualize UIRF Scores in list.php

Add inside list.php below table:

➕ Include Chart.js

<canvas id="uirfChart" height="100"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
    const ctx = document.getElementById('uirfChart').getContext('2d');
    const chartData = {
        labels: [<?php
            $res = $conn->query("SELECT institution_name FROM institutions ORDER BY uirf_score DESC");
            while($r = $res->fetch_assoc()) echo "'".$r['institution_name']."',";
        ?>],
        datasets: [{
            label: 'UIRF Score',
            data: [<?php
                $res = $conn->query("SELECT uirf_score FROM institutions ORDER BY uirf_score DESC");
                while($r = $res->fetch_assoc()) echo $r['uirf_score'].",";
            ?>],
            backgroundColor: 'rgba(54, 162, 235, 0.6)',
            borderColor: 'rgba(54, 162, 235, 1)',
            borderWidth: 1
        }]
    };

    new Chart(ctx, {
        type: 'bar',
        data: chartData,
        options: {
            responsive: true,
            scales: {
                y: {
                    beginAtZero: true,
                    title: { display: true, text: 'Score' }
                },
                x: {
                    ticks: { autoSkip: false }
                }
            }
        }
    });
</script>

✅ 6. Optional: Logout Script

auth/logout.php:

<?php
session_start();
session_destroy();
header("Location: login.php");
?>

Add in header:

<a href="../auth/logout.php" class="btn btn-sm btn-danger float-end">Logout</a>

✅ Final Notes

  • Admin sees ranking list with Chart.js bar graph

  • Institutions can only add their data

  • Extend later with:

    • User management UI

    • Export to Excel/PDF

    • Score breakdown per dimension



No comments:

Post a Comment

UPI #1 Metrics Matrix: E-Governance Student Online Services

Excel file to calculate e-Governance ( Digi Ready Score for Campus % )  This metrics matrix transforms qualitative and selection-based ...