Gibbon Documentation

Server Requirements

  1. Apache 2 (with mod_rewrite)
  2. PHP 7.0 or above (with PDO, gettext, CURL, GD, ZIP. Recommended to turn display_errors off.)
  3. MySQL 5 (collation set to utf8_general_ci)

Manual Installation

After download and unzipping:

  1. Copy all files to your server, choosing either the root directory or a sub-folder within it.
  2. Navigate your browser to the folder on your server where Gibbon has been located.
  3. Follow the on-screen instructions in Gibbon’s new installer.
  4. Check out the Getting Started With Gibbon page for more information.

Note: If you want to help test and develop Gibbon, you can select the Cutting Edge Code option in the installer. This allows you to run the latest code from our GitHub repo. This is not recommended for production environments.

Looking for a quick install? Download Gibbon via Softaculous.

Softaculous Installation

If you are using a web hosting company that provides Softaculous via CPanel, you can follow the instructions in the video below to install Gibbon:

Post-Install & Server Config

  1. Set permissions of all Gibbon files so they are not publicly writeable (e.g. chmod -Rv 755).
  2. Create folder /uploads and set file permissions for to allow writing by web server (avoid chmod 777 for security reasons).
  3. To improve security and reliability, magic_quotes_gpc should be turned off in php.ini. This is supposed to be deprecated in PHP 5.3, but experience shows sometimes it is better to turn it off anyway.
  4. Turn PHP register_globals off. On shared host, use .htaccess php_flag register_globals off to do this
  5. Set PHP to allow <? as well as <?php. Turn short_open_tag on. (This is not required for running the Core as of v8.0.00 or greater. Update your additional modules to the latest version.)
  6. Turn folder browsing off. On shared host, use .htaccess Options -Indexes
  7. Set PHP’s max_file_uploads to at least the number of students in a class.
  8. Set PHP’s error to be error_reporting = E_ALL & ~E_NOTICE or less aggressive
  9. Set PHP to allow URLs as files (otherwise Calendar overlay in TT will not work). allow_url_fopen=On
  10. Set PHP’s max_input_vars setting to 5,000 (otherwise Manage Permissions breaks)
  11. On systems that use selinux make sure to run setsebool -P httpd_can_sendmail 1 to enable Gibbon to send mail.


Gibbon is released in two different ways, according to our release cycle and road map:

  • Stable Code - these are official releases, published through our mailing list. They may be major releases (e.g. v10.0.0) or minor releases (e.g. v10.0.01), depending on a variety of circumstances. Stable releases are available via our Download page. Stable code enforces a much slower update cycle.
  • Cutting Edge Code - these are our latest code cuts, and so are not as well tested or refined as stable releases. They are not recommended for production, but do give access to the latest features, via an update cycle that is as fast as you like (or as we commit). Cutting edge code can be downloaded via the dev branches on our GitHub repo.


During installation, your Gibbon code will check its version against our servers, and determine whether it is stable or cutting edge code. You cannot change this choice through the interface (and it is not recommended to change it via Inspect Element or some other means).


The update procedure for stable and cutting edge code is the same: the only variable is where you download the software from.


An installation of Pop!_OS was used to write this documentation, however, installation will be the same on most popular versions. Bear in mind that this guide will refer to the generic pacakages for each requirement. This will generally be fine as popular Linux distros such as Ubuntu and Debian will ship with stable versions of these packages, however it does help to be aware of the implications of this.

General Package Installation/Setup

Firstly, be aware these will need to be run as root so sudo/su - appropriately!

apt install apache2 php mysql-server php-gd php-mysql php-zip php-curl php-gettext php-pdo

The relevant packages will be installed, however, you still need to enable mod_rewrite on Apache.

a2enmod rewrite

Next, restart Apache!

systemctl restart apache2


  1. Copy the default configuration from /etc/apache2/sites-available/000-default.conf to /etc/apache2/sites-available/gibbon.local.conf. Symlink /etc/apache2/sites-enabled/gibbon.local.conf to the copied file so it’s enabled.

    cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/gibbon.local.conf
    ln -s ../sites-available/gibbon.local.conf /etc/apache2/sites-enabled/gibbon.local.conf
  2. Amend the configuration to your taste. In a VirtualHosts environment, change the ServerName and DocumentRoot at least. I used /var/www/gibbon.local/ as my DocumentRoot. If you’re not sure what to put there, consult the Apache documentation.

  3. Go to the document root and copy the Gibbon files in. The download link can be found at . Copy the download URL then wget the URL. Unzip the file (You may need to apt install unzip to do so)

  4. In your /etc/apache2/envvars file, you’ll find the apache user/group. Allow the extracted files to be accessible to this user. In my case, I amended these to be apache and www respectively, therefore:

    chown apache:www -R /var/www/gibbon.local/
    chmod 755 -R /var/www/gibbon.local/

    There’s no need to set uploads to anything else in this case.

  5. Next, we need to setup mysql:

    create database gibbon;
    create user 'gibbon'@'localhost' identified by '*password*';
    grant all on gibbon.* to 'gibbon'@'localhost';
    flush privileges;
  6. A couple of PHP variables need to be set. All of the below are found in /etc/php/version/apache2/php.ini . Firstly, the max_file_uploads variable must be higher than the number of students in a class. magic_quotes_gpc and register_globals should be off short_open_tag and allow_url_fopen should be on. max_input_vars should be more than 5000 to allow manage permissions to work. You may wish to edit the error reporting value to make this less aggressive in production.

  7. Go to your Gibbon URL, as configured in step 2. If you are using an invalid URL like I was, you may need to add a reference to your /etc/hosts file. If you are using Chrome to view the page, you’ll also need to specify the protocol otherwise Chrome will search for the URL. You should see the Gibbon installation page and if you followed the steps before correctly, all requirements should be satisfied.

If your school uses GSuite (Formerly Google Apps), you can enable single sign on and calendar integration via Gibbon. This process makes use of Google APIs, including OAuth, and allows a user to access Gibbon without a username and password, provided that their listed email address is a Google account to which they have access

1. Log in to the Google developer console. This requires that you have an account with administrative privileges on your G Suite domain.

2. Once logged in you need to create a new project by clicking the Create Project button:

3. In the new project set-up dialog, give your project a name. Click the Create button:

4.Click on the Credentials tab:

5. Then click Create credentials:

6. Click Choose OAuth2 Client ID:

7. If you have not already configured the consent screen, at this point you will be required to do so:

8. Fill in the details for the Product Name and click Save.

9. In the new client ID window, do the following:

  • Choose Web Application.
  • Set Authorised Javascript origins to the url of gibbon on your server.
  • Set Authorised Redirect URI to http://www.your-gibbon-install/lib/google/index.php. The googleOAuth folder is in the in the lib folder of Gibbon v14.0.00 and above on your server.
  • Click create client ID:

10. After this is complete, the client id details will be given to you: (Save the client ID and client secret for step 14.)

11. Create an API key:

12. Save the API Key for step 14:

13. Leave the Key Restriction blank:

14. Everything is now set up on the Google side, so you can enter your details into Gibbon by going to Home > System Admin > Third Party Settings. The details you need to enter into are as follows.

  • Google Developers Client Name
  • Google Developers Redirect URI (See step 9 above)

Use details from steps 7-8 or click on the Credentials tab: For the following use: Google Developers Client ID = Yellow Google Developers Client Secret = Red Google Developers Client Name = Blue Google Developers Redirect Url = Green API Key:

15. Gibbon requires a single Google API, the Calendar API, which can be turned on via the Google Developer Console.

16. On the Gibbon home page, you should now see a Sign In With Google button, which allows users to enter the system without their Gibbon username and password.

17. When a user logs in using Google, their personal calendar, if not yet set, will be set to their primary Google Calendar.

18. In additional, the school can specify a Google Calendar for all users to have in their timetable. To set this up, go to Home > System Admin > Third Party Settings and set the School Google Calendar ID School Google Calendar ID field to the ID of a shared Google Calendar.

The Gibbon school platform requires the PHP programming language and the MySQL database. The industry standard is to use the Linux operating system which runs most publicly facing web sites. However there are packages (or stacks) of software designed to make it easy to run under Microsoft Windows. Two of these are XAMPP and WAMPP. Note that both of these packages are aimed at making it easy to set up and experiment with on a local machine rather than for production use. Because of this they are designed to ignore security issues and so should not be used to run live sites. For example the default installation would allow a person with passing knowledge to login to your setup and delete all databases. So please do not use on live sites. In this tutorial, we will look at setting up XAMPP, in order to be ready to install Gibbon. Download XAMPP from the Apache Friends website There are several different versions of the install, the one used here was called xampp-win32-5.6.3-0-VC11-installer.exe When you run it you will probably get an alert similar to the following XAMPP install first page Don’t worry, it is part of the standard install process. You may then get a message that says


Again, don’t worry this is standard. Next you should see this xampp_install_3 Click the next button to display the following


Click the next button and you will see a screen like the following


I recommend accepting the default, even though installing directly off the [c:](file:///c:/) root may seem a little odd. On the next screen uncheck the button after “Learn more about Bitnami for XAMPP” (otherwise it will fire up your browser and take you to the web site explaining how you install many other free web applications)


The installer is now ready to go


Now might be a good time to put the kettle on as it may take a while to unpack and install all the files depending on the speed of your computer. At the end of the install process you should see a screen similar to the following:


You do want to see the control panel so click Finish and you should see something like the following. By the way, if you ever need to run it from the file explorer the control panel program is called xampp-control.exe. XMPP_control_panel

Click the Apache and MySQL start buttons and the start labels should turn into stop buttons as in the following screen shot. XMPP_control_panel_running

If either Apache or MySQL do not start you will need to do some web searches and trouble shooting as Gibbon cannot work without both running. To check that XAMPP really is working point your browser to http://localhost If you see a page like the following then things are going well xampp_start_page

You can now follow the Installing Gibbon guide, using C:/xampp/htdocs/ (aka the XAMPP document root) as the location into which you place the Gibbon files.

Gibbon aims to cater to all sorts of schools, and the back end has a correspondingly large assortment of options. This can be overwhelming to start with, so this page aims to highlight the most important options when first setting up a school. The video below gives a quick start guide, with the following text going into more detail:

Demo Data

Integrated into the Gibbon installer, opt to include demo data when you configure your database to see what Gibbon looks like in a fully operational school.

System Settings

Before setting up the structure of your school, complete as many of the settings as possible in Admin > System Admin > System Settings. This will help ensure that you have access to as much of the system’s functionality as possible.

School Structure

Use the following options in the right-hand menu under Admin > School Admin to set up basic structures in your school.

Years, Days & Times

  1. Manage School Years - almost all of Gibbon’s functionality is reliant on the concept of a school or academic year: this helps you see only the information that is relevant in many views. To function your system needs a “Current” school year, and can have any number of “Past” and “Upcoming” years. Each school year has a unique “sequence number”, which shows how it is ordered in relation to other years.
  2. Manage Days of the Week - here you can turn on or off individual days in the week, as well as setting start and end times for your various school days.
  3. Manage Terms - if your school year is divided into terms of semesters, you should create one entry here for each term. Otherwise, just create a single term the same length as your school year.
  4. Manage Special Days - here you can specify public holidays, mid-term breaks and other school closures. This is important as it helps determine whether things like school attendance should be enabled on any given day.


  1. Manage Year Groups- year groups represent the way that schools divides students on the basis of age. By default, Gibbon ships with Years 7-13 preset. Use this area to add, edit and delete school years. Each year group has a unique “sequence number”, which shows how it is ordered in relation to other year groups.
  2. Manage Roll Group - roll groups (aka tutor groups, home room, form groups) are the groups in which students have their attendance taken and/or receive pastoral care. Roll groups can contain students from a single year group, or can be mixed across years.
  3. Manage Departments - departments, which can be either learning areas or administrative, represent staff groupings. These are mainly used in the Planner, Departments and Library modules. To make use of this area, you will most likely want to added staff to your school (see below).


  1. Manage Spaces - spaces are any areas in your school that you might want to use in the timetable, including classrooms, labs, offices, sports facilities, etc.

The other settings in School Admin are not so fundamental to the running of a school, and so will not be covered here. Mostly, these are used to control the functioning of single module (e.g. Manage Student Settings).


Most users of Gibbon will fit into three main categories: staff, student, parents. Gibbon uses roles, actions and permissions to control access to various parts of the system. Use the following options in the right-hand menu under Admin > User Admin to set up users and access.

User Management - Access

  1. Manage Roles - roles in Gibbon are groupings based on what a user can do within the system. Gibbon ships with the following default roles: Administrator (that’s you), Parent, Student, Support Staff and Teacher. Add new roles according to the way you want to allow access to the system. For example, if you have some students with extended system privileges, create a new role called something like “Student Ext”.
  2. Manage Permissions - permissions turn individual module actions on or off for selected roles, allowing you to control who can do what to a relatively fine-grained level. Gibbon ships with sensible, common defaults, but it is worth auditing this area thoroughly to avoid nasty surprises in behaviour. For example, you probably would not want to give parents access to full student profiles, preferring instead to stick with brief profiles for parents, and full for staff.

User Management - Users

  1. Manage Users - with your access rights ready, you can now start adding users, and the Manage Users area lets you do this by hand. There is also an Import from File option in System Admin which allows you to upload users in bulk using CSV-formatted spreadsheets. Later on, come back to Manage Users to reset passwords, assign new roles and much more. Note that users can be assigned multiple roles, and can use the Role Switcher on their homepage sidebar to access them. If you would like users to update their own information, this can be achieved under People > Data Updater.
  2. Student Enrolment - students much be enrolled in the current school year if they are to appear in most areas of the system. On enrolment, students are placed into year and role groups. When the end of year arrives, use Rollover under the Admissions sub-menu to automate enrolment for the following year.
  3. Manage Families - staff, students and parents can all exist within families, which act as the basic mechanism for granting parent users access to information on student users.
  4. Manage Staff - all staff users should be registered as staff in order that they can be used in various areas of the system.


  1. Application Form Settings - if you are looking to reduce paper work and data entry, set up your Application Form parameters and make sure public applications are enabled. Your admissions officer (specified in System Settings above) will receive emails when new applications arrive, and can then manage these under Manage Applications.


Enabling and configuring a timetable improves staff efficiency in many of the other areas of the system (such as the planner). This is covered in more detail in the Timetabling section.

Gibbon allows you to use a variety of spreadsheet files (including CSV) to import data, including users, other systems and sources. As of v17, there is a unified import tool, which can be accessed under Admin > System Admin in the main menu, and then Import From File in the module menu.

This new tool allows you to export a file structure, which can then be populated and imported.

Gibbon is designed on the idea that every school is different, and hopes to provide tools to meet a wide range of needs. The approach to customizing Gibbon to your school needs depends on the scope of change you’re looking to make.

1) String Replacement

Gibbon has an internal String replacement system under Admin > System Admin > String Replacement, which helps with a lot of the minor cosmetic changes and differences in terminology between one school and another.

2) User Custom Fields

The built-in User Custom Fields feature under Admin > User Admin > Manage User Custom Fields allows a fair amount of flexibility to add data a school needs.

3) Module System

Beyond the built-in tools, Gibbon’s Module system allows you to extend the system quite considerably. A module can be anything from a few pages to a whole new set of tools and table data (the Free Learning module is a great example of a single module that can transform how Gibbon is used). There are also a few hooks that can be used by modules to insert content in specific places such as the dashboard: for more info view our [Module Development page](). Check out available modules on our Extend page.

4) Fork Gibbon Source Code

With Gibbon being open-source and available through Github it’s also possible to make modifications to a forked copy and merge new versions back into it. With each new version (generally twice a year) one would merge the new version back into their Github fork and manually handle any conflicts between the two. This direction likely requires the most programming knowledge, but is certainly one option to maintain a set of changes from one version to another. As with anything open-source, if it’s a change that the developer feels could benefit other schools they can try contributing it back to the core as a pull request.

5) Feature Request System

If there is an area that many schools may be needing to customize and there is a lot of interest in it, such features can be put forward in the Feature Request category of our forum. If you try something and find it’s working well for your school be sure to share your findings on our forum.


Gibbon includes the ability to create and use custom fields for users. Once created, these fields are available for use within Admin > User Admin > Manage Users, and can be enabled to also work in the Application Form and Data Updater modules. Fields can be enabled be role category: student, staff, parent, other.

Getting Started

To create new fields, go to Admin > User Admin > Manage User Custom Fields. Click on the Add button to create a new field, which will give you the following options: Screen Shot 2015-08-27 at 8.11.57 am

Core Updates

  1. The system will alert you of new updates to the core, when you visit System Admin.
  2. Use the Update action in System Admin for semi-automatic updates to the core, as follows:

    1. Backup your database and installation files.
    2. Download and unzip the latest version of Gibbon.
    3. Login to your Gibbon installation and got to Admin > System Admin > Update.
    4. Update your install base with the newly downloaded files, taking care not to overwrite any additional modules and themes you have installed.
    5. Refresh the Update page, and it should show there are some database updates to be run. Run these by pressing the Submit button.
    6. If the new version includes a lot of theme changes, you may need to refresh your page a few times to see things correctly.
    7. In some cases you might need to log out and back in for all changes to be effective.

    Tips for updating via the command line

    For step 4: Supposing you have installed Gibbon in /var/www/html/c/ you could run the following commands on your system:

    The above commands are for upgrading to v18. You will need to get the URL for the version to which you are upgrading here: . Also, your Gibbon install may use a different directory than “c” in the rsync command. Remember to run the database update from Gibbon’s Home > System Admin > Update page.

Module Updates

  1. Use the Update function in System Admin > Manage Modules for semi-automatic module updates, as follows:
    1. Backup your database and installation files.
    2. Download and unzip the latest version of the module in question.
    3. Login to your Gibbon installation and got to Admin > Manage Modules and press the Update icon for the relevant module.
    4. Update your install base with the newly module downloaded files.
    5. Press the Submit page to update the module.

Theme Updates

  1. Use the Update function in System Admin > Manage Themes for semi-automatic theme updates, as follows:
    1. Backup your database and installation files.
    2. Download and unzip the latest version of the theme in question.
    3. Login to your Gibbon installation and got to Admin > Manage Modules.
    4. Update your install base with the newly downloaded theme files.
    5. Reload the Manage Module page (all themes are then checked and updated in one go)

With Gibbon up and running, you will want to protect your installation in case of disaster, allowing yourself to recover. Our recommendation is to use a shell script (example here for *nix servers) to copy all important files and database data to an external drive, which should be rotated to maintain online and offline copies of your data. On *nix servers, you can use cron to schedule the script to run on a regular basis (e.g. every night at 01:00):

0 1 * * * cd /home/user/ ;

Gibbon supports storing and rendering of timetables using a non-grid-restrained approach. The timetable is created in a systematic, interactive procedure that is easy to achieve and understand. Before you proceed:

  1. You should have created the school year(s) and the term(s).
  2. You should have a list of all the days the school is active
  3. You should have a list of all the activities the school does in all days the school is on.
  4. This should be in terms of the periods, the times and the activities of a particular time set.

Creating A Timetable

  1. Go to Admin > Timetable Admin
  2. Use Manage Courses & Classes to create courses, and within these establish necessary classes.
  3. Use Course Enrollment to assign teachers and students to classes.
  4. Use Manage Columns to create time structures for distinct day structure you have in your timetable cycle (e.g. if Monday, Wednesday and Friday follow one set of times, and Tuesday and Thursday follow one set of times, you will need two columns).
  5. Use Manage Timetables to create as many timetables as you need in a given school year. Most schools will require one timetable, but some schools (e.g. through schools) may require more. Each timetable in each school year can only be connected to one year group (e.g. you can have a timetable for Years 7-11 and a separate one for Years 12-13). In each timetable you can specify an entry for each day in your cycle. Each of these days is tied to a column (see step 4.), which gives it timing structure. Once the column is assigned, you can associate classes with a period in a day.
  6. The final step is to assign timetable days to calendar days, which is done using Tie Days To Dates.


  • Timetabling is always tricky. Gibbon’s approach is a little tedious at times, but gives great flexibility. If you have any questions, check out our support forum.

The Rollover is Gibbon’s tool for moving your installation from one school year to another, updating various records in one go.

  • To access the rollover, go to Admin > User Admin in the main menu, and then Rollover in the module menu.
  • Before attempting the rollover, backup your database as a precaution against unexpected behaviour. Without a backup, there is no way to undo this process.
  • The rollover consists of the following 3 steps:
    1. Warning - make sure you have backed up.
    2. Getting Ready - this step presents the following options, which allow you to control how the rollover proceeds:
      1. Add Year Following Current School Year - only displays if there are no Upcoming years succeeding the Current year.
      2. Set Expected Users To Full - this step primes newcomers who have status set to “Expected” to be enroled as students or added as staff (see below).
      3. Enrol New Students (Status Expected) - take students who are marked expected and enrol them. All parents of new students who are enroled below will have their status set to “Full”. If a student is not enroled, they will be set to “Left”.
      4. Enrol New Students (Status Full) - take new students who are already set as full, but who were not enroled last year, and enrol them. These students probably came through the Online Application form, and may already be enroled in next year: if this is the case, their enrolment will be preset automatically. All parents of new students who are enroled below will have their status set to “Full”. If a student is not enroled, they will be set to “Left”.
      5. Re-Enrol Other Students - any students who are not re-enroled will have their status set to “Left”. Students who are already enroled will have their enrolment updated.
      6. Set Final Year Students To Left - students in the last year of school will be set to left, unless set otherwise (e.g. to repeat a year).
      7. Register New Staff - Any staff who are not registered will have their status set to “Left”.
    3. Go - when Submit is pressed on Step 2, the school year will be incremented, and the actions specified above will be processed. Users (except the user running the rollover process) will need to log out and log back in to be in the new year. Feedback on each action will be given on screen as Step 3 is processed.
  • In order to have less work to do during the rollover, you can do the following in advance. When you run the roll group, the values set will automatically appear as form group choices for students in Step 5 above.
    • Form Groups - in the current years’ form groups, specify a form group for students to move into in the coming year. You can do this in Admin > School Admin > Manage Form Groups (a.k.a. Manage Roll Groups in US English).
    • Individual Students - if form group progression is not so straight forward, you can set individual student form groups by enroling students ahead of time. To do this go to Admin > User Admin > Student Enrolment and use the Next Year link to jump forward a year. Then add enrolment records for the relevant students, setting their form groups.

Gibbon features command line tools that allow you to automate certain tasks using cron, including the following:

Weekly Parent Email Summary of Homework & Behaviour

This script generates emails to contact priority 1 parents of each student, outlining their homework deadlines and giving a behaviour summary for the last week. It can be set to run on any day, but is best run after school on the last day of the week (e.g. Friday afternoon for many schools). Parents can use a link in the email to confirm that they have received and read the email. Form tutors can use a report (still being developed) to show which parents have read the reports for a given week. To run this script, run the following commands, or put them within cron on a *nix machine:

cd [absolutePath]/cli php planner_parentWeeklyEmailSummary.php

User Management

This script:

  • Finds users who are ‘Expected’ and have reached or exceeded their start date, and sets their status to ‘Full’.
  • Finds users who are ‘Full’ and have exceeded their end date, and sets status to ‘Left’.
  • Finds parents of students of have have exceeded their end date, have no other active children in school and are not staff members, and sets their status to ‘Left’.

To run this script, run the following commands, or put them within cron on a *nix machine:

cd [absolutePath]/cli php userAdmin_statusCheckAndFix.php

Incomplete Attendance Email

This script checks attendance taking for the current day, and emails those tutors who have not taken attendance. The report is also sent to the system administrator. To run this script, run the following commands, or put them within cron on a *nix machine:

cd [absolutePath]/cli php attendance_dailyIncompleteEmail.php

Behaviour Letters

This script works to automatically send letters to parents of children who have reached certain threshold levels of negative behaviour. The script uses a variety of settings, which can be accessed via Admin > School Admin in the main menu and then Manage Behaviour Settings in the module menu. To run this script, run the following commands, or put them within cron on a *nix machine:

cd [absolutePath]/cli php behaviour_letters.php

Overdue Library Loan Items

This script works to automatically notify the person responsible for each overdue loan item in the Library. To run this script, run the following commands, or put them within cron on a *nix machine:

cd [absolutePath]/cli php library_overdueNotification.php

Using Cron

Cron is different on different *nix systems, but the following should generally get the User Management script above to run at 1am each day:

0 1 * * * cd /var/www/gibbon/cli/ ; php userAdmin_statusCheckAndFix.php

By using the Gibbon module “Moodle” you can use Gibbon to populate Moodle with users and courses. To do this you will need to install the module (see Extend) and then configure 2 areas of Moodle with the settings shown below:

  • Home > Site administration > Plugins > Authentication > External database (click on the image for more detail)

Moodle Users

  • Home > Site administration > Plugins > Enrolments > External database (click on the image for more detail)

Moodle Enrolment

Beyond this, follow the Moodle instructions for using cron to periodically pull data across from Gibbon to Moodle.


Gibbon v8.0.00 was the first version of Gibbon to be translatable, and thanks to some great volunteers, it is now available in several different languages. If you would like to help translate Gibbon, please email Your help would be most appreciated!


The most common cause of Gibbon’s multilingual features not working is the server’s OS not having the correct locales installed. This is usually fairly trivial to solve, as shown in the example below, which installs the Great Britain locale for use with English, under Ubuntu: sudo locale-gen en_GB There is plenty of guidance online for the equivalent commands for other languages and platforms.


Gibbon has the ability to sound an alarm to all users currently logged in with a role whose category is Staff. Alarms can be one of three types: general, lockdown, custom. Staff receiving the alert are asked to click to confirm their receipt, and those users with alarm-sounding privileges are presented with a report of who has and has not confirmed the alarm.

Sounding An Alarm

  • To sound an Alarm either go to Admin > School Admin in the main menu, followed by Sound Alarm in the module menu:

Sounding An Alarm_1 Sounding An Alarm_2

  • Or search for “Sound Alarm” or “Sound Lockdown” in Fast Finder:

Sounding An Alarm_3

  • Once in the Sound Alarm screen, choose the alarm type and press the Submit button:

Sounding An Alarm_4

Managing An Alarm

  • Once an alarm is activated, all users who have alarm-sounding permission will see the alarm, along with the alarm report. Users who do not manually confirm their receipt can be contacted by phone, and ticked off by hand using the icons under the Action column.

Sounding An Alarm_5

  • Other staff users will see the alarm, and need to click on the confirm link in order to be checked off the report.

Sounding An Alarm_6

  • Once a staff user has clicked the link, it will be confirmed, and they will be updated on the confirmation report for alarm sounders. The alarm will continue to sound, and will reappear even if closed: this will occur until the alarm is no longer actuated.

Sounding An Alarm_7

  • Once the alarming situation is over, the alarm sounder can disable the alarm using the “Turn Alarm Off” link at the top right of the alarm screen.

The following SQL statements can be run on a Gibbon installation in order to extract the specified data. Use of a mySQL client (such as phpMyAdmin) is be required to run these commands.

Markbook Entries for Year Group

This example is for students in Year 11, but its effectiveness depends on your standard for naming courses (e.g. having “11” in your course name).

SELECT gibbonCourse.nameShort,, surname, preferredName, attainmentValue, effortValue FROM gibbonMarkbookColumn JOIN gibbonCourseClass ON ( gibbonMarkbookColumn.gibbonCourseClassID = gibbonCourseClass.gibbonCourseClassID ) JOIN gibbonCourse ON ( gibbonCourseClass.gibbonCourseID = gibbonCourse.gibbonCourseID ) JOIN gibbonMarkbookEntry ON ( gibbonMarkbookEntry.gibbonMarkbookColumnID = gibbonMarkbookColumn.gibbonMarkbookColumnID ) JOIN gibbonPerson ON ( gibbonMarkbookEntry.gibbonPersonIDStudent = gibbonPerson.gibbonPersonID ) WHERE gibbonSchoolYearID =(SELECT gibbonSchoolYearID FROM gibbonSchoolYear WHERE status='Current') AND gibbonCourse.nameShort LIKE '%11' AND gibbonPerson.status='Full' ORDER BY gibbonCourse.nameShort,, surname, preferredName;

Subject Selections for Year Group

This example is for students in Year 12, but its effectiveness depends on your standard for naming courses (e.g. having “12” in your course name).

SELECT gibbonCourse.nameShort, gibbonCourseClass.nameShort, surname, preferredName FROM gibbonCourse JOIN gibbonCourseClass ON (gibbonCourseClass.gibbonCourseID=gibbonCourse.gibbonCourseID) JOIN gibbonCourseClassPerson ON (gibbonCourseClassPerson.gibbonCourseClassID=gibbonCourseClass.gibbonCourseClassID) JOIN gibbonPerson ON (gibbonCourseClassPerson.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE role='Student' AND status='Full' AND LIKE '%12%' AND gibbonSchoolYearID=(SELECT gibbonSchoolYearID FROM gibbonSchoolYear WHERE status='Current') ;

Applications in Current Year

SELECT surname, preferredName, dob, gender, schoolName1, schoolDate1, schoolName2, schoolDate2, languageHome, languageFirst, address1, address1District, address1Country, parent1surname, parent1preferredName, parent1phone1CountryCode, parent1phone1Type, parent1phone1, parent2surname, parent2preferredName, parent2phone1CountryCode, parent2phone1Type, parent2phone1, timestamp as dateSubmission FROM gibbonApplicationForm WHERE gibbonSchoolYearIDEntry=(SELECT gibbonSchoolYearID FROM gibbonSchoolYear WHERE status='Current') ORDER by surname, preferredName

Applications By DOB

SELECT * FROM gibbonApplicationForm ORDER BY dob DESC

Parent Contact Details by Student in Current Year

SELECT student.surname AS studentSurname, student.preferredName AS studentpreferredName, as family, homeAddress, homeAddressDistrict, homeAddressCountry, as rollGroup, student.officialName AS studentOfficialName, student.nameInCharacters AS studentChineseName, student.studentID AS studentID, AS studentEmail, student.phone1 AS studentPhone1, student.phone2 AS studentPhone2, parent1.title AS parent1Title, parent1.surname AS parent1Surname, parent1.preferredName AS parent1PreferredName, parent1.gender AS parent1Gender, AS parent1Email, CONCAT(parent1.phone1Type,' ',parent1.phone1CountryCode,' ', parent1.phone1) AS phone1, CONCAT(parent1.phone2Type,' ',parent1.phone2CountryCode,' ', parent1.phone2) AS phone2, CONCAT(parent1.phone3Type,' ',parent1.phone3CountryCode,' ', parent1.phone3) AS phone3, CONCAT(parent1.phone4Type,' ',parent1.phone4CountryCode,' ', parent1.phone4) AS phone4, parent1.address1 AS parent1Address, parent1.address1District AS parent1AddressDistrict, parent1.address1Country AS parent1AddressCountry, parent1.vehicleRegistration AS parent1VehicleRegistration, parent1Fam.contactCall, parent1Fam.contactSMS, parent1Fam.contactEmail, parent1Fam.contactMail, parent1Fam.contactPriority, parent2.title AS parent2Title, parent2.surname AS parent2Surname, parent2.preferredName AS parent2PreferredName, parent2.gender AS parent2Gender, AS parent2Email, CONCAT(parent2.phone1Type,' ',parent2.phone1CountryCode,' ', parent2.phone1) AS phone1, CONCAT(parent2.phone2Type,' ',parent2.phone2CountryCode,' ', parent2.phone2) AS phone2, CONCAT(parent2.phone3Type,' ',parent2.phone3CountryCode,' ', parent2.phone3) AS phone3, CONCAT(parent2.phone4Type,' ',parent2.phone4CountryCode,' ', parent2.phone4) AS phone4, parent2.address1 AS parent2Address, parent2.address1District AS parent2AddressDistrict, parent2.address1Country AS parent2AddressCountry, parent2.vehicleRegistration AS parent2VehicleRegistration, parent2Fam.contactCall, parent2Fam.contactSMS, parent2Fam.contactEmail, parent2Fam.contactMail, parent2Fam.contactPriority FROM gibbonPerson AS student JOIN gibbonStudentEnrolment ON (student.gibbonPersonID=gibbonStudentEnrolment.gibbonPersonID) JOIN gibbonRollGroup ON (gibbonRollGroup.gibbonRollGroupID=gibbonStudentEnrolment.gibbonRollGroupID) LEFT JOIN gibbonFamilyChild ON (gibbonFamilyChild.gibbonPersonID=student.gibbonPersonID) LEFT JOIN gibbonFamily ON (gibbonFamilyChild.gibbonFamilyID=gibbonFamily.gibbonFamilyID) LEFT JOIN gibbonFamilyAdult AS parent1Fam ON (parent1Fam.gibbonFamilyID=gibbonFamily.gibbonFamilyID AND parent1Fam.contactPriority=1) LEFT JOIN gibbonPerson AS parent1 ON (parent1Fam.gibbonPersonID=parent1.gibbonPersonID AND parent1.status='Full') LEFT JOIN gibbonFamilyAdult AS parent2Fam ON (parent2Fam.gibbonFamilyID=gibbonFamily.gibbonFamilyID AND parent2Fam.contactPriority=2) LEFT JOIN gibbonPerson AS parent2 ON (parent2Fam.gibbonPersonID=parent2.gibbonPersonID AND parent2.status='Full') WHERE gibbonStudentEnrolment.gibbonSchoolYearID=(SELECT gibbonSchoolYearID FROM gibbonSchoolYear WHERE status='Current') AND student.status='Full' AND NOT (parent2.surname IS NULL AND parent2Fam.contactPriority IS NOT NULL) AND NOT (parent1.surname IS NULL AND parent1Fam.contactPriority IS NOT NULL);

Sibling List In Current Year

SELECT gibbonFamily.gibbonFamilyID AS familyKey, student.surname AS studentSurname, student.preferredName AS studentpreferredName, as family, homeAddress, homeAddressDistrict, homeAddressCountry, as rollGroup, ((SELECT COUNT(gibbonFamilyID) FROM gibbonFamilyChild JOIN gibbonPerson ON (gibbonFamilyChild.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE gibbonFamilyChild.gibbonFamilyID=familyKey AND status='Full' GROUP BY gibbonFamilyID)-1) AS siblings FROM gibbonPerson AS student JOIN gibbonStudentEnrolment ON (student.gibbonPersonID=gibbonStudentEnrolment.gibbonPersonID) JOIN gibbonRollGroup ON (gibbonRollGroup.gibbonRollGroupID=gibbonStudentEnrolment.gibbonRollGroupID) LEFT JOIN gibbonFamilyChild ON (gibbonFamilyChild.gibbonPersonID=student.gibbonPersonID) LEFT JOIN gibbonFamily ON (gibbonFamilyChild.gibbonFamilyID=gibbonFamily.gibbonFamilyID) WHERE gibbonStudentEnrolment.gibbonSchoolYearID=(SELECT gibbonSchoolYearID FROM gibbonSchoolYear WHERE status='Current') AND student.status='Full' HAVING siblings>0 ORDER BY family, rollGroup DESC;

Students With No Family

SELECT student.surname AS studentSurname, student.preferredName AS studentpreferredName, AS studentEmail, student.phone1 AS studentPhone1, student.phone2 AS studentPhone2 FROM gibbonPerson AS student JOIN gibbonStudentEnrolment ON (student.gibbonPersonID=gibbonStudentEnrolment.gibbonPersonID) JOIN gibbonRollGroup ON (gibbonRollGroup.gibbonRollGroupID=gibbonStudentEnrolment.gibbonRollGroupID) LEFT JOIN gibbonFamilyChild ON (gibbonFamilyChild.gibbonPersonID=student.gibbonPersonID) LEFT JOIN gibbonFamily ON (gibbonFamilyChild.gibbonFamilyID=gibbonFamily.gibbonFamilyID) WHERE gibbonStudentEnrolment.gibbonSchoolYearID=(SELECT gibbonSchoolYearID FROM gibbonSchoolYear WHERE status='Current') AND student.status='Full' AND gibbonFamily.gibbonFamilyID IS NULL;

Citizenship Frequency

SELECT citizenship1, count(*) FROM gibbonPerson JOIN gibbonStudentEnrolment ON (gibbonStudentEnrolment.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE gibbonSchoolYearID=019 AND status='Full' GROUP BY citizenship1 ORDER BY citizenship1 LIMIT 0, 440

Activity Choices in Current Year

SELECT surname, preferredName, AS Main, main.type AS mainType, gibbonActivityStudent.status AS mainStatus, AS BACKUP , backup.type AS backupType, transport, AS roll FROM gibbonActivityStudent JOIN gibbonPerson ON ( gibbonActivityStudent.gibbonPersonID = gibbonPerson.gibbonPersonID ) JOIN gibbonStudentEnrolment ON ( gibbonStudentEnrolment.gibbonPersonID = gibbonPerson.gibbonPersonID ) JOIN gibbonRollGroup ON ( gibbonStudentEnrolment.gibbonRollGroupID = gibbonRollGroup.gibbonRollGroupID ) JOIN gibbonActivity AS main ON ( gibbonActivityStudent.gibbonActivityID = main.gibbonActivityID ) LEFT JOIN gibbonActivity AS BACKUP ON ( gibbonActivityStudent.gibbonActivityIDBackup = backup.gibbonActivityID ) WHERE gibbonStudentEnrolment.gibbonSchoolYearID = (SELECT gibbonSchoolYearID FROM gibbonSchoolYear WHERE STATUS = 'Current' ) AND main.gibbonSchoolYearID = (SELECT gibbonSchoolYearID FROM gibbonSchoolYear WHERE STATUS = 'Current' ) ORDER BY surname, preferredName

All Staff

SELECT surname, preferredName, email, type, gibbonStaff.jobTitle, dob, CONCAT(phone1Type,' ',phone1CountryCode,' ', phone1) AS phone1, CONCAT(phone2Type,' ',phone2CountryCode,' ', phone2) AS phone2, CONCAT(phone3Type,' ',phone3CountryCode,' ', phone3) AS phone3, CONCAT(phone4Type,' ',phone4CountryCode,' ', phone4) AS phone4, address1, address1District, address1Country, firstAidQualified, firstAidExpiry, vehicleRegistration FROM gibbonPerson JOIN gibbonStaff ON (gibbonStaff.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE status='Full' ORDER BY surname, preferredName

Number of Years Students Have Been In School

SELECT count(gibbonPerson.gibbonPersonID) AS years, surname, preferredName, username FROM gibbonPerson LEFT JOIN gibbonStudentEnrolment ON (gibbonStudentEnrolment.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE gibbonRoleIDPrimary=3 AND status='Full' GROUP BY gibbonPerson.gibbonPersonID ORDER BY years, surname, preferredName

Hong Kong Education Bureau Survey

SELECT surname, preferredName, AS Year, AS rollGroup, gender, dob, citizenship1, citizenship2, ethnicity, languageHome, languageFirst, homeAddressDistrict, residencyStatus FROM gibbonPerson JOIN gibbonStudentEnrolment ON ( gibbonStudentEnrolment.gibbonPersonID = gibbonPerson.gibbonPersonID) JOIN gibbonYearGroup ON (gibbonStudentEnrolment.gibbonYearGroupID=gibbonYearGroup.gibbonYearGroupID) JOIN gibbonRollGroup ON (gibbonStudentEnrolment.gibbonRollGroupID=gibbonRollGroup.gibbonRollGroupID) JOIN gibbonFamilyChild ON (gibbonFamilyChild.gibbonPersonID=gibbonPerson.gibbonPersonID) JOIN gibbonFamily ON (gibbonFamilyChild.gibbonFamilyID=gibbonFamily.gibbonFamilyID) WHERE gibbonPerson.status = 'Full' AND gibbonStudentEnrolment.gibbonSchoolYearID=(SELECT gibbonSchoolYearID FROM gibbonSchoolYear WHERE status='Current') ORDER BY rollGroup, surname, preferredName;