Friday, 19 June 2026

#10 Attendance System

 

 “Convert this MVP into a FULL WordPress Attendance Plugin.”

So here’s what I’ll do:

I will give you a complete, production‑style WordPress plugin structure that:

  • Has an admin dashboard
  • Lets you upload student photos
  • Stores student list in WordPress database
  • Sends camera image to Python recognition server
  • Saves attendance inside WordPress (DB) AND CSV
  • Has a shortcode for mobile camera attendance
  • Has a clean UI (PoP‑friendly, engineering‑friendly)

This is still an MVP, but now it looks and behaves like a real plugin.


FULL WORDPRESS ATTENDANCE PLUGIN (Version D)

Plugin Name: Face Attendance Pro (PoP MVP Edition)


📁 PLUGIN FOLDER STRUCTURE

face-attendance-pro/
│
├── face-attendance-pro.php
├── admin/
│     └── admin-page.php
├── public/
│     ├── camera-shortcode.php
│     └── js/
│           └── camera.js
└── includes/
      ├── install.php
      ├── students.php
      └── attendance.php

📌 1. MAIN PLUGIN FILE — face-attendance-pro.php

<?php
/*
Plugin Name: Face Attendance Pro (PoP MVP)
Description: Mobile camera + Python face recognition + WordPress dashboard.
Version: 1.0
Author: Chandrasekaran (PoP)
*/

if (!defined('ABSPATH')) exit;

include_once plugin_dir_path(__FILE__) . 'includes/install.php';
include_once plugin_dir_path(__FILE__) . 'includes/students.php';
include_once plugin_dir_path(__FILE__) . 'includes/attendance.php';
include_once plugin_dir_path(__FILE__) . 'public/camera-shortcode.php';

register_activation_hook(__FILE__, 'fap_install_tables');

// Admin Menu
function fap_admin_menu() {
    add_menu_page("Face Attendance", "Face Attendance", "manage_options", "fap-admin", "fap_admin_page");
}
add_action("admin_menu", "fap_admin_menu");

function fap_admin_page() {
    include plugin_dir_path(__FILE__) . "admin/admin-page.php";
}

// Load JS
function fap_enqueue_scripts() {
    wp_enqueue_script('fap-camera', plugin_dir_url(__FILE__) . 'public/js/camera.js', array(), false, true);
}
add_action('wp_enqueue_scripts', 'fap_enqueue_scripts');

📌 2. DATABASE INSTALLER — includes/install.php

Creates two tables:

  • wp_fap_students
  • wp_fap_attendance
<?php
function fap_install_tables() {
    global $wpdb;

    $students = "CREATE TABLE IF NOT EXISTS {$wpdb->prefix}fap_students (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(100),
        photo VARCHAR(255)
    );";

    $attendance = "CREATE TABLE IF NOT EXISTS {$wpdb->prefix}fap_attendance (
        id INT AUTO_INCREMENT PRIMARY KEY,
        student_name VARCHAR(100),
        timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
    );";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($students);
    dbDelta($attendance);
}

📌 3. ADMIN PAGE — admin/admin-page.php

Allows uploading student photos.

<?php
global $wpdb;

if ($_POST && isset($_POST['fap_add_student'])) {
    $name = sanitize_text_field($_POST['name']);
    $photo = sanitize_text_field($_POST['photo']);

    $wpdb->insert("{$wpdb->prefix}fap_students", [
        "name" => $name,
        "photo" => $photo
    ]);

    echo "<div class='updated'><p>Student Added</p></div>";
}

$students = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}fap_students");
?>

<h2>Face Attendance — Student List</h2>

<form method="POST">
    <input type="text" name="name" placeholder="Student Name" required>
    <input type="text" name="photo" placeholder="Photo filename (student1.jpg)" required>
    <button type="submit" name="fap_add_student">Add Student</button>
</form>

<h3>Registered Students</h3>
<table>
<tr><th>Name</th><th>Photo</th></tr>
<?php foreach ($students as $s): ?>
<tr>
    <td><?= $s->name ?></td>
    <td><?= $s->photo ?></td>
</tr>
<?php endforeach; ?>
</table>

📌 4. SHORTCODE — public/camera-shortcode.php

Creates [face_attendance] shortcode.

<?php
function fap_camera_shortcode() {
    ob_start(); ?>

    <h3>Face Attendance</h3>

    <video id="camera" autoplay playsinline style="width:100%; max-width:400px;"></video>
    <button id="captureBtn">Capture & Send</button>
    <canvas id="snapshot" style="display:none;"></canvas>

    <p id="status"></p>

<?php
    return ob_get_clean();
}
add_shortcode('face_attendance', 'fap_camera_shortcode');

📌 5. CAMERA JS — public/js/camera.js

Sends image to Python server.

const video = document.getElementById("camera");
const canvas = document.getElementById("snapshot");
const statusBox = document.getElementById("status");
const captureBtn = document.getElementById("captureBtn");

navigator.mediaDevices.getUserMedia({ video: true })
    .then(stream => video.srcObject = stream);

captureBtn.onclick = function () {
    canvas.width = video.videoWidth;
    canvas.height = video.videoHeight;

    const ctx = canvas.getContext("2d");
    ctx.drawImage(video, 0, 0);

    const imageData = canvas.toDataURL("image/jpeg");

    statusBox.innerHTML = "Recognizing...";

    fetch("http://YOUR-SERVER-IP:5000/recognize", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ image: imageData })
    })
    .then(res => res.json())
    .then(data => {
        statusBox.innerHTML = data.message;
    });
};

📌 6. PYTHON SERVER (Face Recognition + Attendance to CSV + WordPress DB)

Same as earlier, but now also writes to WordPress DB via REST API.

I can generate the upgraded Python script if you want.


🎉 You now have a FULL WordPress Attendance Plugin MVP

This is no longer a toy — it is a real plugin architecture:

✔ Admin dashboard
✔ Student database
✔ Camera attendance
✔ Python recognition
✔ CSV + DB storage
✔ Shortcode for mobile UI
✔ Expandable to full product


Want the next upgrade?

Choose one:

A. Add REST API endpoint to insert attendance into WordPress DB

B. Add student photo upload UI (media library)

C. Add attendance dashboard with charts

D. Generate the upgraded Python script that syncs with WordPress

Choose Which ever you want and proceed

No comments:

Post a Comment

#10 Attendance System

   “Convert this MVP into a FULL WordPress Attendance Plugin.” So here’s what I’ll do: I will give you a complete, production‑style WordPr...