I Was Here – PHP Student Attendance System (Free Download)

I Was Here is a simple PHP Student Attendance Management System. This is not a “we have a lot of features that you will never use” system, but a basic one to help smaller schools to get started quickly.

 

TABLE OF CONTENTS

 

 

DOWNLOAD & NOTES

First, here are the download links and a quick “setup guide” for the impatient folks who don’t have the patience to read through everything.

 

LICENSE & DOWNLOAD

I-Was-Here is released under the MIT License. You are free to use it for personal and commercial projects, and modify it as you see fit. On the condition that the software is provided “as-is”. There are no warranties provided and “no strings attached”. Code Boxx and the authors are not liable for any claims, damages, or liabilities.

Download I-Was-Here | GitHub | SourceForge

 

REQUIREMENTS

  • LAMP/WAMP/MAMP/XAMPP
  • Apache Mod Rewrite
  • PHP MYSQL PDO Extension
  • At least PHP 8.0

 

INSTALLATION

Just access http://your-site.com in your browser and walk through the installer.

 

 

HOW TO USE

So far so good? Let us now go through a quick crash course on how to use I Was Here.

 

PART 1) REGISTER TEACHERS & STUDENTS

  • Users > Click on the + button to create new users  > Either add them one by one, or mass import from a CSV file.
  • There are 4 “types” of users in the system:
    • Administrators (have full access to manage everything).
    • Teachers (can take and check attendance).
    • Students (can only check their own attendance and upcoming lessons).
    • Inactive (suspended).

 

PART 2) REGISTER COURSES

Next, register your available courses under “Courses” – Either add them one by one or upload a CSV file.

 

PART 3) ADD USERS TO COURSES

Once the courses are registered, click on the respective ⁞ button > Cohort > Assign students/teachers to the courses.

 

PART 4) REGISTER CLASSES

Now that all the necessary data is in, register the classes.

 

 

PART 5) TAKE ATTENDANCE

Lastly, teachers only need to log in and select the appropriate class in the portal – Take the attendance either manually, or by flashing a QR code for the students to scan.

 

I WAS HERE FAQ

I-Was-Here is “not working”? Here are a few of the common problems and how to “fix” them.

 

I DELETED ALL ADMIN ACCOUNTS

recover.php
require "lib/CORE-Go.php";
$_CORE->load("Users");
$_CORE->Users->save("NAME", "EMAIL", "PASSWORD", "A");

Just create an “account recovery” script to create a new account (or update an existing one). Run and delete this afterward.

 

CHANGED DOMAIN OR PATH

  • Update HOST_BASE in lib/CORE-Config.php. Make sure to include the path (with a trailing slash) if not deployed at the base URL. E.G. http://site.com/iwashere/
  • Delete the existing .htaccess file.
  • Create init.php.
    • require "lib/CORE-Go.php";
    • $_CORE->Route->init();
  • Access http://site.com/init.php, this will automatically regenerate the .htaccess file.
  • Delete init.php.
  • Clear the service worker and browser cache if you want to be “totally safe”.

 

PAGES ARE NOT RESOLVING OR SHOWING PROPERLY

  • Make sure that MOD_REWRITE is enabled in Apache.
  • Make sure that AllowOverride is set properly in Apache.
  • If using https://, make sure that your SSL cert and virtual host are properly set.
  • In Mac/Linux, make sure that Apache/PHP has permission to read the files and folders.

Here is a quick “working example” of a test site on my WAMP server:

httpd.conf OR httpd-vhosts.conf
<VirtualHost site.com:443>
  DocumentRoot "D:\http"
  ServerName site.com:443
  SSLEngine On
  SSLCertificateFile "C:/xampp/apache/conf/ssl.crt/server.crt"
  SSLCertificateKeyFile "C:/xampp/apache/conf/ssl.key/server.key"
  <Directory "D:\http">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

 

MANUAL INSTALLATION

  • Create a database and import all lib/SQL-*.sql in ascending order.
  • Open lib/CORE-Config.php, update the settings to your own.
    • The host settings.
    • Database settings.
    • If you want to develop mobile apps, consider enabling CORS.
    • Set your own JWT secret key, and the issuer to your domain or company name.
  • Run $_CORE->Route->init() to create .htaccess.
  • Create your own admin user. See “deleted all admin accounts” above.
  • Update index.php.
    • require __DIR__ . DIRECTORY_SEPARATOR . "lib" . DIRECTORY_SEPARATOR . "CORE-Go.php";
    • $_CORE->load("Route");
    • $_CORE->Route->run();

 

 

NOT WORKING. DON’T KNOW WHY.

Open the developer’s console, reload the page and see the error message.

 

QUICK REFERENCE

This section is for the developers, a quick walkthrough of the general system structures.

 

FOLDER STRUCTURE

  • assets/ Public images, Javascript, CSS, etc…
  • lib/ Core engine and library files.
    • API-AAA.php The API endpoints. Will be deployed at http://site.com/api/AAA/.
    • CORE-CCC.php Core engine files. Try not to mess with these.
    • LIB-LLL.php Library files.
    • SQL-SSS.php SQL database files. Can actually delete these after installation.
  • pages/ HTML pages and template.
    • A-AAA.php Admin pages.
    • T-TTT.php Teacher pages.
    • S-SSS.php Student pages.
    • PAGE-PPP.php General pages.
    • MAIL-MMM.php Email templates.
    • TEMPLATE-TTT.php HTML page template.

 

THE FRAMEWORKS

I Was Here is built:

 

DATABASE TABLES

USERS & PASSWORD

users
Field Description
user_id Primary key, auto-increment.
user_name Full name.
user_email Email, unique.
user_role Admin, Teacher, Student, Inactive.
user_password Password, encrypted.
password_reset
Field Description
user_id Primary and foreign key.
reset_hash Automated password reset security hash.
reset_time The time when the reset request is made.

 

SYSTEM

settings
Field Description
setting_name Primary key.
setting_description Description of the setting.
setting_value The value of the setting.
setting_group Setting group.

  • 0 – “Hidden” system settings and definitions.
  • 1 – User changeable settings.

 

 

COURSES

courses
Field Description
course_id Primary key, auto-increment.
course_code Course code, unique.
course_name Name of the course.
course_desc A short description of the course.
course_start Course start date.
course_end Course end date.
courses_users
Field Description
course_id Primary and foreign key.
user_id Primary and foreign key.

 

CLASSES & ATTENDANCE

classes
Field Description
class_id Primary key, auto-increment.
user_id Teacher-in-charge. Foreign key.
couse_id Course ID. Foreign key.
class_date Date and time of the class.
class_desc Short description of the class.
attendance
Field Description
class_id Primary and foreign key.
user_id Primary and foreign key.
sign_date Timestamp, when the attendance is taken.

 

DEVELOPING “I WAS HERE”

As simple as it may be, going through the entire system is still going to take some time. So instead of “explaining line-by-line”, here is a condensed version of “how to quickly customize and upgrade”.

 

CORE BOXX LIBRARY REFERENCE

For most of the core modules, you can refer to the Core Boxx reference library.

 

STEP 1) CREATE/MODIFY DATABASE TABLES

Add new tables or views. Modify the existing ones as required.

 

 

STEP 2) ADD/UPDATE SYSTEM MODULE

lib/LIB-Report.php
class Report extends Core {
  function getStudentAttend ($id) {
    return $this->DB->fetchAll(
      "SELECT * FROM `attendence` WHERE `user_id`=? ORDER BY `sign_date` DESC",
      [$id]
    );
  }
}

To add a new module:

  • Create lib/LIB-Module.php.
  • Define class Module extends Core.
  • Add functions inside.

In this example, we added a new report module – lib/LIB-Report.php and class Report extends Core. That’s all. This new module can now be loaded via $_CORE->load("Report") and the function can be accessed via $_CORE->Report->getStudentAttend().

 

STEP 3) ADD/UPDATE API ENDPOINT (OPTIONAL)

lib/API-Report.php
// (A) ADMIN ONLY
if (!isset($_SESS["user"]) || $_SESS["user"]["user_role"]!="A") {
  $_CORE->respond(0, "No permission or session expired", null, null, 403);
}

switch ($_REQ) {
  // (B) INVALID REQUEST
  default:
    $_CORE->respond(0, "Invalid request", null, null, 400);
    break;
 
  // (B) GET STUDENT ATTENDANCE
  case "getStudentAttend":
    $_CORE->autoGETAPI("Reports", "getStudentAttend");
    break;
}}

To add an API endpoint:

  • Core Boxx has an API structure of http://site.com/api/MODULE/REQUEST.
  • lib/API-report.php will create an API endpoint at http://site.com/api/report.
  • $_REQ is the requested service REQUEST segment of the URL.

So for this example, we can send $_POST["id"] = 123 to http://site.com/report/getStudentAttend/ to get the attendance report for student 123. The API will reply with a JSON encoded string.

 

STEP 4) ADD/UPDATE HTML CSS JAVASCRIPT

  • Add your new pages in pages/.
    • For admin pages, add pages/A-name.php.
    • For teacher pages, add pages/T-name.php.
    • For student pages, add pages/S-name.php.
    • For example, pages/A-report.php can only be accessed by administrators from http://site.com/a/report.

That’s about it. Just reverse engineer and copy from the existing libraries, API, and pages… You will see the development pattern here.

34 thoughts on “I Was Here – PHP Student Attendance System (Free Download)”

  1. 1. How do I leave the camera facing backwards by default when starting reading, and not the camera facing forward.

    2. Where do I translate camera names, front and back? I couldn’t get the file

      1. I need to be precise, when the student logs in, instead of being redirected to /s, redirected to /s/homepage which is a page that creates

      2. if ($_SESS["user"]["user_role"]=="S") { $_CORE->redirect("/s/homepage"); }
        else { $_CORE->redirect(strtolower($_SESS["user"]["user_role"])); }

        Sorry, I cannot provide free consultation for your personal project beyond this. Good luck – https://code-boxx.com/faq/#help “Help on a deeper level”

Leave a Comment

Your email address will not be published. Required fields are marked *