Gibbon: the flexible, open school platform
Founded by Ross Parker at ICHK Secondary. Built by Ross Parker, Sandra Kuipers and the Gibbon community (https://gibbonedu.org/about/)
Copyright © 2010, Gibbon Foundation
Gibbon™, Gibbon Education Ltd. (Hong Kong)

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

CHANGELOG
=========

v30.0.00
--------

    Headlines
        Added a new Calendar module to manage events and participants
        Updated the timetable to display Calendar events and custom layer ordering
        Added a new Student Alerts module to manage automatic and manual alerts
        Added the option to create custom Student Alerts in School Admin
        Catalan, Japanese and Portuguese are now available interface languages

    Security
        Library: fixed handling of user input in SQL queries (CVE-2025-56573)

    Changes With Important Notices
        Added a Pastoral heading to the main menu and moved Behaviour, Attendance and Individual Needs
        The Impersonate User action must be manually enabled in the config.php file

    Tweaks & Additions
        System: added the option for administrators to impersonate other user accounts
        System: added a backup table to store person images from previous years
        System: added Balochi as a spoken language option for user data
        System: set Catalan, Japanese and Portugese as active languages
        System: switched interface strings from Value Added License to Catalyst License
        System: updated SpreadsheetRenderer to support exporting data from multiple DataTables
        Activities: added a description field to the cost section for activities
        Activities: added student tags on the Manage Enrolment page
        Activities: added the option for parents to register their children in activities
        Activities: fixed Generate Enrolments to not show pre-enrolled students in the unassigned column
        Activities: fixed staff on inactive activities not showing up in the Manage Staffing page
        Activities: included the photos in the new copy when an activity is duplicated
        Behaviour: added Add Multiple button to Behaviour tab of student profile
        Calendar: added notifyStaff feature as a background process
        Calendar: added the feature to cross-check student future absences from Event Participants list
        Formal Assessment: added a Year Group filter option to Manage External Assessment
        Individual Needs: enabled viewing IN records for past students as read-only
        Library: added a new type called Digital Publication
        Library: added the option to send an email to parents when lending a library item
        Messenger: added clarifying text to Applicants target which only includes Accepted applications
        Messenger: enabled resending to any recipient when read receipts are off in Send Report
        Messenger: enabled users with Manage Messages_all access to see shareable link in Send Report
        Planner: added a button to access Linked Markbook from Edit Lesson Plan page
        Planner: added a highlight for Off Timetable Lessons in the "Year Overview" mode
        Planner: added a highlight for Off Timetable students in View Lesson Plan attendance list
        Planner: added an Online Lesson option in the planner to display a video call link
        Planner: added shortcut buttons to access the Unit Planner and Lesson Planner from each other
        Planner: added the option to use smart block names as lesson names in Deploy Lessons
        Planner: added the total student count to the attendance list in the lesson Planner sidebar
        Planner: restricted visibility of user photos in Lesson Plans based on planner access permissions
        Reports: added a way for tracking and displaying who last edited an asset
        Reports: prevented deletion of template assets that are not set to inactive
        Reports: updated Attendance data source to handle Off Timetable days where no attendance is taken
        School Admin: added the option to cancel Staff Duty and cancel Bookings for Special Days
        Staff: added an option to accept a Staff Application without creating an account
        Staff: added an option to separate the Staff Duty page into tabs by duty type
        Staff: limited Add Staff list to users who are not already staff but have a staff role
        Students: added a drop-down filter to the Student Transport report
        System Admin: added an attendance importer for Future Absences
        System Admin: added an HTTPS check to the installer and system check
        System Admin: added new loaned items import for Library
        System Admin: added the option to upload user photos in jpeg format
        Timetable Admin: added the ability to manage exceptions using the timetable in Class Enrolment by Person
        Timetable Admin: increased the default short name length for both courses and classes with a warning
        Timetable: added a Calendar drop-down to the timetable and a Only Show My Events option
        Timetable: added a search field in 'Manage Bookings' and 'Mange Facility Changes'
        Timetable: added coverage details for staff duty and activities on the timetable
        Timetable: added the option for users to customize the order of layers in their timetable
        User Admin: added a backup table to store person images from previous years
        User Admin: added a None option for the Note Creation Notification in Student Settings
        User Admin: added an option to view User Image of previous years
        User Admin: added Prof. as an option in Title select
        User Admin: added Sibling as option to Emergency Relationship select
        User Admin: increased the username field length to 40 characters

    Bug Fixes
        System: fixed toggle field direction for right-to-left languages
        System: fixed uninitialized variable PHP warnings on Parent Dashboard
        System: fixed login options not working when using SSO button
        System: fixed login redirect after public registration
        System: fixed redirect logic in Payment class causing unnecessary error logs
        System: fixed TinyMCE editor not saving content when form is submitted with HTML editor open
        Activities: fixed Manage Enrolment when participants are part of more than one activity
        Activities: fixed the Activities tab on the parent dashboard to work with new activities system
        Activities: removed activities with registration turned off from sign up list
        Admissions: increased the memory limit for the Accept process in Manage Applications
        Attendance: fixed Student History display when all seven weekdays are set as school days
        Data Updater: fixed attachments being cleared when new data updates are submitted
        Library: fixed handling of SQL values in Library Browse page
        Markbook: fixed the bug preventing to display user inputs and allow decimal inputs
        Messenger: fixed missing From address on emails when using the Add Recipient action in Send Report
        Planner: fixed access to class list in Edit Unit when viewing past and upcoming years
        Planner: fixed Teacher Notes in smart blocks not visible when using the Show Confidential Data toggle
        Rubrics: fixed the bug preventing to view ATL Rubrics table on mobile devices
        Staff: fixed coverage longer than one week not including staff duty and activity cover
        Staff: fixed missing staff name for general coverage in Daily Coverage Planner
        Staff: fixed order of Staff Directory to honour the biographicalGroupingOrder setting
        Students: fixed sidebar links for custom modules when viewing Student Profiles for left students
        Students: updated default value for longTermMedication to N for new medical records
        System Admin: fixed adding custom fields for different role categories in Form Builder
        System Admin: fixed the label disappearing for Long Text fields in Form Builder
        System Admin: fixed unable to add multiple generic fields with the same name in Form Builder
        System Admin: fixed unable to delete How Did You Hear in Form Builder
        Timetable Admin: fixed bug to allow timetable deletion
        Timetable Admin: fixed missing Manage Exceptions button on the timetable in Course Enrolment by Person
        Timetable Admin: fixed the issue of setting white as the default color for both background and font
        Timetable: fixed multiple instances of the same TT day in a week not showing up
        User Admin: fixed uneditable fields for new Personal Documents in Manage Users

    Deprecations
        Removed all functions in functions.php flagged for deprecation since v25

v29.0.00
--------

    Headlines
        A new mobile-responsive Timetable UI with layer visibility toggles
        An improved library borrowing page in Student Profile with tabs and quick lending actions
        An option to add new recipients to existing messages in Messenger
        A color-coded Markbook option for easier visual identification
        A simple Petty Cash system in Finance for tracking small expenses

    Security
        System: added nonce and CSRF token handling to all POST forms

    Tweaks & Additions
        System: removed Date of Birth field from Public Registration when no minimum registration age is set
        System: improved the colour picker to add a pre-set colour palette
        System: added IDD country codes to all countries in the database
        System: added a log entry for resetting password through 'Forgot Password"
        System: updated jQuery UI library to v1.14.1
        Activities: added form group name next to student name in Activity Attendance list
        Admissions: added the ability to re-send the submission email from the Process tab in Edit Application
        Admissions: added the option to display customised success message when student applications are successfully submitted
        Admissions: added Emergency Contacts for students as an option in the Form Builder
        Attendance: updated Student History view to display Off Timetable days
        Behaviour: added an 'Observation' type to track neutral records
        Behaviour: added the delete action to the behaviour list in the Student Profile for users with manage access
        Department: added student "Not Reportable" flag to class participant listing
        Library: improved the Library Borrowing page on student profiles
        Library: improved the Lending & Activity Log workflow when scanning in IDs from barcodes
        Library: enabled students to access the Library Borrowing page on their profile
        Markbook: added an option to color-code markbook columns in the teacher view
        Markbook: implemented default grade from Manage Grade Scales in Markbook data entry view
        Markbook: enabled filtering by term even if Group Columns by Term is off
        Messenger: added the ability to add new recipients to a sent message and enable easier re-sending
        Messenger: added the feature to warn and remove [confirmLink] tag from the message body if read receipts are not turned on
        Messenger: added the ability to customise the From address for users with school-wide sending permissions
        Planner: added an attendance indicator to the Today's Lessons list for teachers
        Reports: updated Template Builder to select mPDF renderer by default
        Reports: added the option to archive unused assets and templates intead of deleting them
        Reports: added search to the Manage Assets page, moved Manage Fonts to a separate page
        School Admin: updated various template settings to use Rich Text editors
        Staff: added the ability to override staff availability when manually adding coverage
        Students: added Name in Characters to the Emergency Data Summary
        Students: added the option for parents and students to see activities in the view profile page
        School Admin: added prefilled times when creating timing changes in Add Special Day
        School Admin: added the option to edit whether a facility is bookable or not
        System Admin: added autocomplete with available strings to Add String in String Replacement
        System Admin: adjusted action access for Column Rows import
        System Admin: added new imports for Columns and Tie Days to Dates in timetable
        System Admin: added new Units import for Unit Planner
        System Admin: added columnColor to Markbook Column import, enabled color field checking in ImportType class
        Timetable: removed the display of declined events from Google Calendar on the timetable
        Timetable Admin: added an Edit Timetable by Class button to Course Enrolment by Class
        User Admin: improved the image uploader in Manage Users, detect invalid images
        User Admin: added Name in Characters to searchable fields
        User Admin: added the ability to add Custom Fields to Family records
    
    Bug Fixes
        System: fixed issue with search terms containing a : full colon (special character) 
        System: fixed max and min limits to Number values in forms
        System: improved the input detection in the MultiSelect search box for non-standard input sources
        System: fixed searching unicode characters within stored JSON data
        System: fixed access of inactive modules through direct URLs
        Activities: fixed activity missing from the timetable if it doesn't have a category
        Activities: fixed missing registration button for parents on View Activities page
        Activities: fixed new sign-up system to honour the registration Y/N setting per activity
        Activities: fixed the delete action not allowing duplicate enrolments to be deleted in Manage Enrolments
        Activities: fixed duplicate term names on Activity Choices By Student report
        Activities: fixed error on Activities Overview when changing Category filter after Activity filter
        Activities: fixed max length on search filter in View Activities
        Admissions: fixed default tab selection after saving a form in Edit Application
        Attendance: fixed unable to add new partial future absence if a future future absence exists
        Attendance: removed non-Full teachers from Form Groups Not Registered reports
        Attendance: fixed duplicate classes in Classes Not Registered report
        Attendance: fixed invalid date formatting in Attendance Summary by Date
        Attendance: fixed order of days in Student History when first day of the week is Saturday
        Finance: fixed missing Ad Hoc fee names in bulk-action Export spreadsheet data
        Finance: fixed bulk action selection and print action on Manage Expenses table
        Finance: fixed online payment for invoices with a Paid - Partial status
        Finance: fixed spreadsheet error when exporting invoices with Pending status
        Finance: fixed missing budget cycle name from Print page in Manage Expenses
        Individual Needs: fixed search filters on teacher view of Manage Investigations page
        Library: fixed Advanced Search not searching items by type in Browse Library
        Markbook: fixed attainment percentage values now updating from raw attainment values
        Messenger: fixed required members field when editing a Messenger Group
        Planner: fixed Visual and HTML tabs not working in newly created Smart Blocks 
        Planner: fixed empty sections displaying below the advanced options in Add Unit Plan
        Planner: fixed untranslated Role field in lesson planner participant list
        Reports: fixed missing iframe support for template preview windows
        Reports: fixed comment character count not updating when writing reports
        Reports: fixed missing progress bar colour in Proofreading and My Reporting pages
        Reports: fixed progress bar count for left students in My Reporting page
        Staff: fixed the horizontal scroll container on the Staff Duty page
        Students: fixed missing Emergency Contact Number 2 on student profile
        System Admin: fixed field validation for Student Default Email in Form Builder
        System Admin: fixed uniqueness check when editing a page in Form Builder
        System Admin: fixed importer not allowing short-form school year names (eg: 2024-25)
        System Admin: fixed missing module name for newly created logs in View Log
        Timetable Admin: fixed support staff not editable in Course Enrolment by Person
        Timetable Admin: fixed vertical spacing of date names in Tie Days to Dates
        User Admin: fixed unique username check when values already exist

    Deprecations
        Removed sendNotificationsAsBcc method from NotificationSender

v28.0.01
--------

    Tweaks & Additions
        System: added Chilean Peso (CLP $) as an available currency
        System: temporarily disabled MFA toggle in Preferences page
        Attendance: prevent setting partial future absence if a full-day absence already exists
        Behaviour: added level and descriptor details to behaviour notification events
        Messenger: updated the check-all option in Send Report to only select required recipients
        Staff: updated the Active filter for job openings to include the open date
        System Admin: added the option to define custom API scopes in Third Party Settings > Edit SSO Settings
    
    Bug Fixes
        System: fixed string format errors in Spanish and Hebrew translation files
        System: fixed the invalid character check when uploading files
        Attendance: removed Left teachers from Classes Not Registered report
        Behaviour: fixed behaviour fields hidden on Edit Behaviour Record screen
        Behaviour: fixed users with Manage Behaviour Records_my unable to add follow up comments
        Messenger: fixed Submit button missing from New Message when only posting to message wall
        Messenger: fixed the PHP 7.4 syntax error in MessageTargets when sending a new message
        Messenger: fixed the appearance of the Message Wall widget in the sidebar, removed auto scrolling
        Planner: fixed planner actions to return to Year Overview page if they originated there
        Planner: fixed the Add action missing for teachers on empty dates in the Year Overview
        Planner: fixed access to Unit Planner for users who are not part of a department with classes
        Reports: fixed status message visual glitch on Write Reports page
        Staff: fixed All Staff setting not persisting on the Substitute Availability weekly view
        Timetable: fixed Date Unenrolled to be cleared when re-enrolling students in the same class
        User Admin: fixed email validation on the Student Default Email setting

v28.0.00
--------

    Headlines
        An exciting front-end refresh powered by HTMX and Alpine.js
        Updated icons, menus, alerts and navigation elements
        Improved forms with a quick-save shortcut and better validation
        A new Activity registration system with a visual Explore Activities page
        A Mailing List feature in Messenger to collect external email recipients

    Changes With Important Notices
        Additional modules may need updated to v28 compatible versions

    Security
        User Admin: applied input and output filtering to all email address fields

    Tweaks & Additions
        System: set Greek as an active language
        System: added Putonghua as a language option in dropdown menus
        System: added IDD codes for Republic of Korea and Democratic People's Republic of Korea
        System: added Nicaraguan Córdoba C$ as a currency option
        System: refactored the Fast Finder using HTMX and Alpine
        System: updated Core modules to have Gibbon Foundation as author
        System: updates the timetable navigation to use AJAX reloading rather than page refresh
        System: moved the login form to the bottom of the page when viewing subpages and not logged in
        System: added a password strength checker and improved password policy display
        System: updated all Date fields to use the browser native date picker
        Attendance: added an index to the attendance log to help speed up attendance pages
        Attendance: added an indicator to Student Not Present/Onsite when attendance logs conflict
        Activities: updated Activity Attendance to always count participants for dates in the past
        Behaviour: added a permission for students to view their own Behaviour Records (off by default)
        Formal Assessment: allowed users with edit access to edit grouped Internal Assessment columns
        Markbook: updated markbook columns to grey out students who joined after the Go Live date
        Messenger: limited the individual message target to a maximum of 50 people
        Messenger: updated preferences to ensure signatures are displayed on a white background
        Planner: improved default selected course in Unit Planner sidebar menu
        Planner: added an Add Block to All option in Deploy Working Copy
        Reports: added a Progress by Department report for viewing class criteria progress
        Rubrics: updated Edit Rubric page to allow HTML in rubric cells
        Staff: updated Manage Staff to override required custom fields when manually editing a staff member
        Staff: updated family page on Staff Profile to exclude personal details and addresses
        Staff: added the option to exclude staff from internal coverage or set a coverage priority
        Staff: updated the weightings in the Daily Coverage Planner to include overall weekly teaching load
        Students: added a notification event when student notes are edited
        Students: removed birthday icon from student view of class lists
        User Admin: added the names of users who made changes to the User Status Log
        User Admin: updated Manage Users to override required custom fields when manually editing a user
        User Admin: updated Personal Documents to enable required Residency/Visa dropdown

    Bug Fixes
        Admissions: fixed the search results on the Manage Application page to include json data
        Admissions: fixed missing Previous Schools section in Application Form view and print pages
        Admissions: fixed custom field validation for second parent in Application Form
        Behaviour: fixed users notified of behaviour records unable to add follow up
        Finance: fixed bulk exporting invoice fees for Pending invoices
        Form Groups: fixed Year Group Summary list when looking at non-current school years
        Individual Needs: fixed an error on the IN Archive page that prevented access to it
        Markbook: fixed SQL error in Markbook when using external assessments for a baseline
        Planner: fixed next lesson plan date not auto populating in Add Lesson Plan
        Reports: fixed Send Report option to enable sending to students without needing parent details
        Reports: fixed Scan Asset Directories not working on Windows servers 
        Reports: fixed Scan Asset Directories failing to create template folder if it does not exist
        Timetable: fixed permission checking before displaying user status info in View Timetables list
        System Admin: fixed the sanitization rules for application form fields to allow HTML

    Deprecations
        System: replaced the legacy Thickbox library with an AJAX-based modal window
        System: replaced the legacy LiveValidation library with Alpine.js validation
        System: replaced the legacy jQuery tooltip with Alpine.js
    
v27.0.01
--------

    Bug Fixes
        Admissions: fixed submission emails and acceptance emails not sending as expected 
        Admissions: fixed required field logic checking in Form Builder
        Admissions: fixed "Do not include a second parent" being accidentally checked by default
        Admissions: fixed username and password missing from re-sent Acceptance Email
        Attendance: fixed handling of Count Class as School setting in Students Not Onsite/Students Not Present reports
        Messenger: fixed error redirect for New Message sending users to a non-existing page

v27.0.00
--------

    Headlines
        A fresh UI update for the Library module with customisable shelves
        Added an auto-save system when creating new lesson plans

    Changes With Important Notices
        System: updated Google OAuth Client SSO to handle granular permissions (required by Google for June 17, 2024)
        System: if you use Gmail SMTP relay, be sure to update your settings to use an App Password (before June 17, 2024)
        System: updated JQuery(2.2.4 -> 3.7.1) and JQuery Migrate(1.4.1 -> 3.4.0) files to latest versions
        System: updated date localisation to use the PHP Intl library, removed deprecated strftime

    Security
        System: improved the input sanitization and output encoding of URLs

    Tweaks & Additions
        System: automatically hyperlink any urls included in Custom Field descriptions
        System: removed raw exception message output from the interface
        System: added facilities as one of the searchable options with the fast finder
        System: added departments as one of the searchable options with the fast finder
        System: improved randomness of password salt generation
        System: added an IP address to failed login attempt notifications
        System: added additional filtering for invalid characters in uploaded files
        Activities: added notification events for activity enrolment changes
        Activities: added a Left status to activity enrolment, to retain a history of previous enrolments
        Activities: added bulk actions to the activity enrolment page
        Admissions: added a notification event for student form group changes
        Behaviour: added notifications for positive behaviour records
        Behaviour: added the ability to view other students involved in multiple behaviour records
        Behaviour: updated the view so that followups are displayed as conversational logs and stored in a separate table
        Behaviour: added the ability to able to link a behaviour record to some other existing behaviour record
        Behaviour: added positive behaviour records to the Daily Behaviour Summary CLI script
        Behaviour: added a my_permission so that teachers are restricted to only view behaviours created by them
        Departments: added an Edit Enrolment link to the Department Class page for users with enrolment access
        Finance: added a fees list and notes column to the Export option in Manage Invoices
        Library: added ui changes to Library module browsing through library shelves and improved search page
        Library: added automatic shelf generation by search term, automatic shelf updates, and auto-shuffling
        Library: added autocomplete to the Vendor and Location Detail fields in Add/Edit under Manage Catalogue
        Library: updated child records to use the same Vendor field as parent records in Manage Catalogue
        Markbook: removed non-numeric entries from cumulative totals
        Messenger: added search form and school year navigator to Manage Groups page for quicker group browsing
        Messenger: added an index to the Message Target table to speed up the recipients query
        Messenger: added the ability to post a Wall Message between a start date and an end date
        Messenger: added the ability to optionally share a Send Report link with other users
        Messenger: added the ability to detect and remove emojis from the message body
        Reports: updated report writing to also show left class enrolments with the Show Left Students tool
        Reports: added uploadable Image as a field type in Manage Criteria Types
        Reports: added a check for the correct .twig.html extension in Manage Assets
        School Admin: added the ability to toggle facilities between active and inactive
        Staff: added anchor links for Job Openings page, enabling easier external linking
        Staff: added status filter to Staff Absence and Coverage Summaries to display only Full staff by default
        Staff: added a notification to inform staff of first aid qualification that are expiring soon
        Staff: added the ability for staff members to cancel an absence before it occurs
        Students: added an Upcoming Students option to the Students by House report
        Students: added year group next to form group name in student history details
        Timetable: added activities to the timetable in View Timetable by Facility 
        Timetable: added basic information table to the View Timetable by Facility report
        Timetable: added timetable iCal Export buttons to staff and student profiles
        Timetable: enabled facilities for Off Timetable classes to be re-booked in Manage Facility Bookings
        User Admin: added an option to disable the display of privacy options, so they can be managed internally
        User Admin: increased the field length for Departure Reason to 100 characters
        System Admin: enabled Generic OAuth to specify the scopes and username field requested
        System Admin: added an option to Upload Photos & Files to not delete existing files
        System Admin: added an importer for Behaviour Records

    Bug Fixes
        System: fixed PHP 8+ compatibility in CustomFieldIDs migration file
        System: fixed input serialization of form data in Import from File page
        System: fixed the file uploader to handle exif image rotation from mobile devices
        System: fixed login access required message to always display the login form
        System: fixed the bug so that staff and student name are displayed in messages
        System: fixed bug in FileUploader that did not allow Chinese and Latin characters
        System: fixed incorrect directory separator character in XAMPP installation
        System: fixed Ivory Coast name and country code in list of countries
        Activities: fixed highlight colour for Waiting List activities in View Activities
        Activities: fixed missing Waiting List option when adding activity enrolment
        Admissions: fixed Form Group at Entry field when not using it as Office Only
        Admissions: ensure form submission email goes to the admissions account email address rather than parent1
        Admissions: fixed the tense of the notification string when a student withdraws from the school
        Attendance: fixed handling of double periods in Set Future Absence tool
        Attendance: fixed timestamp of attendance taken for double periods in Take Attendance by Class
        Attendance: fixed onsite school absences not showing blue in Attendance by Form Group
        Attendance: fixed Consecutive Absences report not returning any results
        Attendance: fixed checklist names for existing absences in Set Future Attendance
        Attendance: fixed the attendance counts in Attendance Summary by Date when grouping by Form Group 
        Behaviour: fixed descriptor dropdown for Positive types in Find Behaviour Patterns
        Planner: fixed incorrect To Do list highlight when both teacher and student recorded homework exist
        Planner: fixed missing homeworkTimeCap field when duplicating a lesson plan
        Planner: fixed year group filter in View Resources
        Markbook: fixed the Markbook Entry importer so that it supports username, email or student ID
        Markbook: fixed the Term Added field in the Markbook Column importer
        Messenger: fixed blank read receipt text when editing a draft message
        Messenger: fixed visual bug when messages are wider than the message wall
        Reports: fixed missing sequenceNumber in duplicated Reporting Cycles
        Reports: fixed students from non-reporting-cycle year groups displaying in Write Reports
        School Admin: fixed missing Public Application Form setting in Admissions Settings page
        Staff: fixed My Coverage page showing coverage from past years
        Students: fixed the view all option in the Students by Form Group report
        System Admin: fixed category and module for Student Enrolment importer
        User Admin: fixed HTML being removed from Language Options blurb in Student Application Form

    Deprecations
        System: replaced session call through $gibbon->session to $session. "$gibbon->session" is now deprecated
        System: removed fetchFromString from View class, added a Sandbox class for rendering template data

v26.0.00
--------

    Headlines
        System: transferred copyright from Ross Parker to the Gibbon Foundation

    Changes With Important Notices
        System: raised the minimum PHP version requirement to 7.4
        System: raised the minimum MySQL version requirement to 5.7
        System: added the PHP intl extension to the System Check list

    Tweaks & Additions
        System: added Return to top link to bottom right of each page
        System: added Botswana Pula as currency option
        System: added IDD country code for Laos
        System: added .lock and .json files to htaccess denied list
        System: added additional sanitization to GET variables and alerts
        System: added module name to notification email subject line
        System: added a system log when passwords are manually changed in User Admin
        System: added output sanitization to message wall and planner discussion
        System: improved consistency of remote CLI execution
        System: added new Remove Stale Notifications CLI script to remove notifications over 3 months old
        System: added index to gibbonNotification table to improve performance
        Attendance: added the name of attendance last taken to Form Groups Not Registered
        Activities: updated View Activities to highlight waiting list registrations in orange
        Activities: added a warning message to Activity Registration when a timing conflict would occur
        Activities: added student date of birth to the Participants by Activity Report
        Admissions: added a warning to Edit Application when required values are missing
        Behaviour: added a list of failed email addresses to behaviour letter CLI script
        Behaviour: added a notification event for receiving behaviour notifications about IN students
        Data Updater: made email addresses in Family Data Updater copy-and-pasteable
        Library: added the option to attach copies of library items to a main record
        Library: added a confirmation step to replace the name of books using Google Book Data
        Library: enabled the borrowing record page to be used with all users
        Library: updated the Library Print Record import to enable connecting copies to parent records
        Library: added an option to search location detail and all fields in Manage Catalog
        Library: added department and type filters to View Overdue Items report
        Library: added an On Order status for books that are not yet borrowable
        Markbook: added Term filter to parent view, when Group Columns by Term enabled
        Markbook: adjusted Term filter in teacher view to default to current term
        Messenger: updated message copies sent to sender to include an example confirm link
        Messenger: added a setting to customise the signature used in messages
        Messenger: moved message signatures to a checkbox rather than in the message body
        Messenger: restored SMS credit balance to New Message screen
        Messenger: made Duplicate With Members the top bulk action in Manage Groups
        Messenger: moved Read Receipt links to the top of messages by default
        Messenger: updated Message Wall to show most recent posts first
        Planner: enabled users with viewAll permission to see the online submissions list
        Reports: added a filter to view Pending Edits on Proof Read page, pre-selected filter in notifications
        Reports: added the name of who wrote the comment to CourseCriteria data source
        Rubrics: updated visualize and historical data views so teachers can see unpublished results
        Staff: combined absence and coverage requests into the same form
        Staff: improved handling of Off Timetable days when checking staff availability 
        Staff: added an option to set coverage as Not Required or assign to an unavailable teacher
        Staff: added First Aid Qualified to the main overview on Staff Profile
        Staff: improved the coverage time calculation for timetable coverage
        Students: added First Aid as a sub page on the Student Profile
        Students: added a Follow Up Contacts section with email addresses under Emergency Contacts
        Students: added a setting for additional Follow Up Contacts under Student Settings
        Students: added a separate view-only permission for First Aid records
        Students: added Term filter to Markbook view in Student Profile, when Group Columns by Term enabled
        Students: updated First Aid records to be listed by school year
        System Admin: added settings for notification interval for staff and other users
        Timetable: made the +1 indicator for timetable clashes a link to Manage Exceptions
        Timetable: highlighted absent non-covered classes on the timetable in a different colour
        Timetable: set timetable to preselect in View Available Teachers and View Available Facilities, when only one timetable exists
        Timetable: updated facility bookings to display even on Off Timetable days
        Timetable Admin: added Reportable Yes/No option to bulk action in Course Enrolment by Person
        User Admin: added Single to marital status options in Manage Family
        User Admin: enabled Student role category access to facility bookings (off by default)

    Bug Fixes
        System: fixed date formatting error when Intl extension is not available
        System: fixed PHP value-type error in sidebar message wall posts
        System: fixed PHP regex error decoding dates from search filter text
        System: fixed collapsable comment show/hide bug in nested data tables
        System: fixed the fix for disabled status in toggle visibility for radios
        System: fixed missing line breaks in code error alerts
        System: fixed Language and Country selects to sort based on locale
        System: fixed checkboxes in Custom Blocks not preloading data correctly
        Admissions: fixed incorrect parent field names in application submission email
        Admissions: fixed application form prefill logic
        Admissions: fixed Second Parent not being created on application acceptance
        Admissions: fixed Second Parent checkbox showing the wrong state in Edit Application
        Admissions: fixed Required Documents not displaying in Documents view of Edit Application
        Admissions: fixed orphaned Required Documents when document name is changed
        Attendance: fixed incorrect class count in the Daily Incomplete Attendance by Class admin summary email
        Admissions: fixed phone number in application form causing validation error when required
        Behaviour: fixed error from missing function in behaviour letter CLI script
        Behaviour: fixed Add Multiple form submittable without selecting students
        Crowd Assessment: fixed profile access checking for student name link
        Data Updater: fixed medical updates creating a notification when no data has changed
        Form Groups: fixed Left staff showing in View Form Groups list
        Finance: fixed edge case causing receipts to be sent along with reminders
        Library: fixed empty timestamp field in gibbonLibraryItem that caused errors on update
        Markbook: increased Name field length to 40 characters in Add Multiple
        Markbook: fixed class average row height when there is no data
        Markbook: adjusted student view to ensure that cummulative average honours term filter
        Markbook: fixed term-related PHP exception in teacher view
        Markbook: fixed the Term Added field to connect to the correct term in the Markbook Column importer
        Markbook: fixed no columns showing up when using the All Term selector
        Markbook: fixed weighted column average errors when adding non string values
        Messenger: fixed invalid input error when editing a wall message that also contains an email receipt
        Messenger: fixed Applicants target bug impacting parents not already in gibbonUser 
        Messenger: fixed Individual Naming option not adding student names to new messages
        Messenger: fixed signature removal from SMS messages
        Planner: fixed duplicate lessons in Year Overview for multiple timetables
        Planner: fixed input sanitization of resource quick-add values
        Planner: fixed students with timetable exceptions showing up in submission list
        Planner: fixed Parent Weekly Planner CLI sending between school years
        Planner: removed Left users from lesson plan Guest select 
        Planner: fixed Lesson Details Template populating in the homework description
        Reports: fixed handling of class vs school attendance in AttendanceByCycle data source
        Reports: fixed html entity decoding in MpdfRenderer
        Reports: fixed footers on last page during bulk generation with mPDFRenderer
        Reports: fixed validation of duplicated template path in Manage Assets
        Rubrics: fixed input sanitization of visualization images
        Rubrics: fixed previous years data showing up in Historical data
        Reports: fixed archive download access for Full parents of Left students
        Staff: fixed activities outside the current term showing up in New Coverage Request
        Staff: fixed substitute availability check not including timetable exclusions
        Staff: fixed error when deleting ad hoc coverage that is not attached to a class
        Staff: fixed approved absence with user-selected coverage not re-broadcasting substitute requests
        Staff: fixed requested coverage not actionable by substitute after approval
        Staff: fixed approved absences with coverage not notifying custom recipients
        Staff: fixed Add Staff user select to only include Full and Expected users
        Students: fixed visibility of student status details on View Student Profiles
        System Admin: fixed line break on long values in Server Info
        Timetable: fixed period showing absent in classes with multiple teachers when one is absent
        Timetable: fixed PHP deprecation issue relating to $roleCategory
        Timetable: fixed staff absence display issue on timetable with multiple teachers in a class
        Timetable Admin: fixed null coalesce array error when managing enrolment
        Timetable Admin: fixed Edit Timetable by Class to only include classes in years associated with the timetable
        User Admin: fixed disallowed permissions not showing as disabled in Manage Permissions
        User Admin: fixed an error in Rollover when duplicate enrolments exist
        User Admin: fixed Rollover not pre-selecting correct next year group for existing students

v25.0.01
--------

    Changes With Important Notices
        System: domains used in iFrames must now be approved via Security & Privacy Settings

    Security
        System: added .lock and .json files to htaccess denied list
        System: improved the sanitization of URL parameters and alerts
        System: prevented XSS though GET variables in search forms
        System: improved illegal address detection for non-php files
        System: added an iFrame allowlist for filtering safe domains
        System: added output sanitization to message wall and planner discussion

    Bug Fixes
        System: fixed date formatting error when Intl extension is not available
        System: fixed PHP value-type error in sidebar message wall posts
        System: fixed PHP regex error decoding dates from search filter text
        System: fixed collapsible comment show/hide bug in nested data tables
        System: fixed DOMDocument sanitization loop in Validator class
        Admissions: fixed incorrect parent field names in application submission email
        Admissions: fixed application form prefill logic for continuing users
        Admissions: fixed second parent not being created on application acceptance
        Admissions: fixed second parent checkbox showing the wrong state in Edit Application
        Admissions: fixed Required Documents not displaying in Documents view of Edit Application
        Admissions: fixed orphaned Required Documents when document name is changed
        Behaviour: fixed error from missing function in behaviour letter CLI script
        Form Groups: fixed Left staff showing in View Form Groups list
        Finance: fixed edge case causing receipts to be sent along with reminders
        Markbook: fixed class average row height when there is no data
        Messenger: fixed invalid input error when editing a wall message that also contains an email receipt
        Messenger: fixed Applicants target bug impacting parents without an existing user 
        Planner: fixed display of duplicate lessons in Year Overview for multiple timetables
        Planner: fixed input sanitization of resource quick-add values
        Reports: fixed handling of class vs school attendance in AttendanceByCycle data source
        Reports: fixed html entity decoding in MpdfRenderer
        Reports: fixed footers on last page during bulk generation with mPDFRenderer
        Reports: fixed validation of duplicated template path in Manage Assets
        Rubrics: fixed input sanitization of visualization images
        Staff: fixed activities outside the current term showing up in New Coverage Request
        Staff: fixed substitute availability check not including timetable exclusions
        Staff: fixed error when deleting ad hoc coverage that is not attached to a class
        Staff: fixed potential division by zero error when adding ad hoc staff coverage
        Staff: added honeypot field to Staff application form
        Timetable: fixed period showing absent in classes with multiple teachers when one is absent
        Timetable: fixed PHP deprecation issue relating to $roleCategory
        User Admin: fixed disallowed permissions not showing as disabled in Manage Permissions
        User Admin: fixed an error in Rollover when duplicate enrolments exist
        
v25.0.00
--------

    Headlines
        Messages can now be saved as a draft and previewed before sending
        Activities, staff duty and coverage now display on the timetable
        The new admissions system is turned on by default and is no longer in beta
        Staff coverage can now be requested for timetabled classes, activities or duty
        New visual tools have been added to help assign and manage coverage internally

    Significant Changes
        System: activated the lt_LT Lietuvių Kalba - Lithuanian locale
        Attendance: added the option to take future attendance for ad hoc groups
        School Admin: added an Off Timetable option for special days
        Staff: added a drag-drop interface for creating and managing a duty schedule

    Changes With Important Notices
        Timetable Admin: changed Participant counts to Student counts in Course Enrolment by Class, adding minimum and maximum enrolment controls to courses
        System: added additional sanitization to GET variables and alerts

    Tweaks & Additions
        System: improved the access error message for non-logged in users
        System: updated Parent Weekly Summary CLI to not send if date is outside school year
        System: improved right-to-left support in Default theme
        System: added new hooks for Staff Profile and Lesson Planner
        System: added Malawian Kwacha, Algerian Dinar, Uganda Shilling, Zimbabwean Dollar as currency options
        Activities: display current school attendance when taking activity attendance
        Admissions: added custom field support to Student Enrolment
        Attendance: enabled taking Future attendance on the current date
        Data Updater: added a search option to all Manage Update pages
        Data Updater: updated Family Data Updater History to order parents by contact priority
        Finance: added Outstanding Amount total to payment log for partial paid invoices
        Form Groups: removed website column from View Form Groups page
        Individual Needs: add a notification event for New Investigation
        Messenger: added the ability to send confidential messages which are not viewable by other users
        Messenger: updated the Transport target to be able to handle comma-separated transport values
        Messenger: improved the success message for confirmed read receipts
        Messenger: added form group name to students in Individual target list
        Messenger: added the option to determine confirmation type in Send Report
        Markbook: added Term filter to student view, when Group Columns by Term enabled
        Markbook: increased maxlength of Name field to 40 characters
        Planner: improved the error message when unable to access classes in Unit Planner
        Planner: update Add Lesson Plan to suggest dates based on existing lesson sequence
        Planner: updated Work Summary by Form Group to account for student start date
        Planner: updated Manage Resources to clean up unused tags after editing a resource
        Planner: added a message to homework that was assigned before enrolling in the class
        Planner: enabled custom fields for Lesson Plans
        Resources: differentiated the upload button from the sticky submit button
        Reports: improved the UTF8 character set for DroidSansFallback to include wider CJK support
        Reports: added a school year switcher to the Generate Reports page
        Reports: updated Attendance template to enable displaying present attendance counts
        School Admin: added an option to cancel activities in Special Days
        School Admin: added custom field support to Departments
        Staff: enabled editing the Cover Required field in Manage Absences
        Staff: improved the visibility of absences requiring coverage in lists
        Students: added a permission check for Family Adult comments in Student Profile
        Students: added the ability to search students by first name
        System Admin: added filename to Import History in Import From File page
        System Admin: added the option to configure phone number fields in Form Builder
        System Admin: removed anonymous sessions from the Active Sessions page
        System Admin: added the option to set default values for Form Builder fields
        Timetable: enabled View Available Facilities for non-lesson periods
        Timetable: enabled booking facilities for other users with Manage Facility Bookings_all permission
        Timetable: added an option to add a reason when booking facilities
        Timetable: added an Edit Timetable by Class tool to Manage Timetables
        Timetable: added class teacher names to timetable hover-over information
        Timetable: added a simple Print option to student and facility timetables
        User Admin: added last login timestamp and IP address to password troubleshooting page
        User Admin: added the ability to search users by first name
        User Admin: updated Manage Permissions to require filtering by either module or role

    Bug Fixes
        System: improved exception handling for transactions in Connection class
        System: removed unused medical fields from gibbon.sql
        System: fixed Form Group link under student photos on Parent Dashboard
        System: fixed missing translations for module strings in dashboard tabs
        System: fixed incorrect student count with multiple form groups on Staff Dashboard
        System: fixed broken View All links in Staff Dashboard Enrolment tab
        System: fixed My Classes list including Left classes in DatabaseFormFactory
        System: fixed links opening in new tab when using Url object in Format class
        System: fixed lesson plans not showing up on Staff Dashboard for multiple classes with a TT exception
        System: fixed dashboard hooks displaying when modules are inactive
        Activities: fixed activities not viewable from profile after listing end date
        Activities: fixed activity attendance tables overlapping the page
        Admissions: fixed application username check to include other applications
        Admissions: fixed database error when using Add Application to create a blank application form
        Admissions: fixed missing Introduction and Post Script on application form
        Attendance: fixed duplicate entries in Students Not Present and Students Not Onsite
        Attendance: fixed Students Not Onsite reports not displaying student name on mobile
        Attendance: fixed Attendance Summary by Date to use end-of-day status for school-wide attendance
        Attendance: removed print option from Attendance Summary by Date until the form is refactored
        Attendance: fixed numerical indicator on Student History for days with partial attendance
        Attendance: fixed non-attendance classes showing up for partial absence in Set Future Absence
        Data Updater: fixed incorrect top links on Edit Request pages
        Data Updater: removed parent emails from Family Data Updater History when contact email is No
        Data Updater: fixed unable to remove all privacy settings via data update
        Data Updater: fixed Family Data Updates not checking student start and end dates
        Library: fixed the Get Book Data From Google button in Manage Catalog
        Library: fixed js issue in QR code scanner on Manage Catalogue
        Markbook: fixed Left teachers showing up in "Class taught by" list
        Markbook: fixed View Markbook breadcrumb when class name is blank
        Planner: fixed selected course resetting when navigating between school years
        Planner: fixed CLI scripts attempting to users who are Left or have no email address
        Planner: fixed incorrect homework status when both teacher and student recorded homework are used
        Planner: fixed homework checkboxes not visible on students mobile view
        Planner: fixed Concepts & Keywords tag counts in Add Unit and Edit Unit
        Planner: fixed error message after duplicating a lesson into future year
        Reports: fixed error when milestones are empty in Manage Reporting Cycles
        Reports: fixed batch report bulk-action missing the two-sided option
        Reports: fixed HTML being removed from Rich Text template sections
        Reports: fixed file upload not working in Template Builder
        Reports: fixed json_decode error for hooks in Write Reports By Student
        Reports: fixed unable to re-send acceptance email from Edit Application page
        School Admin: fixed error in Add Attendance Code when no roles specified
        School Admin: fixed possible duplicate values using Copy All To Next Year in Manage Form Groups
        Staff: fixed staff absences not showing up if outside school year dates
        System Admin: fixed Form Builder submission error when subheading is the first item on a page
        System Admin: fixed calendar feed cleared when saving Third Party Settings
        System Admin: fixed untranslated fields in Form Builder when viewing a form
        Timetable Admin: adjusted column uniqueness interface string
        Timetable Admin: fixed Copy All To Next Year to copy custom fields and prevent duplicate values
        Timetable: fixed class student counts in Manage Student Enrolment
        Timetable: fixed display of room number for short periods
        Timetable: fixed the position of the Add Lesson Plan tooltip
        Timetable: fixed long-running periods not displaying information on the timetable
        Timetable: fixed making facility bookings on another person's behalf
        Tracking: fixed Data Points export MySQL error
        User Admin: fixed black user photos when using non-jpg image format

v24.0.00
--------

    Headlines
        New Admissions module for managing student enrolment and application forms
        Added Form Builder functionality, for creating flexible application forms
        Added more Email Templates to enable customizing admissions emails
        Added optional Multi-Factor Authentication in user preferences

    Significant Changes
        Timetable: added an option to export timetables to iCal format
        System Admin: added an Upload Photos & Files page, replacing the old User Photo Upload

    Changes With Important Notices
        System: removed upgrade path for v19.0.00 and earlier
        System: removed deprecated functions no longer used in core and additional modules
            - printPagination

    Tweaks & Additions
        System: added pagebreak and columnbreak tags to the allowableHTML list
        System: ensured PayPal payments default to the system locale
        System: updated the robots.txt to enable index access, for noindex meta tag
        System: improved display of IDD country codes in phone number entry field
        System: further refactoring of linkTop divs
        System: added indexes to the gibbonDiscussion table to improve performance
        System: added user status log entry on successful public registration
        System: removed session-duration caching of index_custom.php
        Behaviour: improved style consistency of View Behaviour Letters filter
        Finance: improved style consistency of Manage Billing Schedules filter
        Finance: refactored Manage Billing Schedules table
        Formal Assessment: improved style consistency of View External Assessment filter
        Formal Assessment: improved style consistency of View Internal Assessment filter
        Individual Needs: improved style consistency of Individual Needs filter
        Markbook: updated the export to include term grades, if available
        Messenger: updated the Message Wall to order messages chronologically
        Planner: added Create Markbook Column option when editing a lesson plan
        Planner: made time cap obvious to teachers in Lesson Planner view
        Planner: enabled staff with Future Years access to plan lessons for Upcoming years in the Unit Planner
        Planner: enabled adding teachers with exceptions as guests of their own classes
        Reports: added filters to the report proof reading view
        Reports: enabled including Student - Left enrolments in the Course Criteria data source
        Reports: clarified the My Reporting progress count for left students
        Staff: added staff house name to Staff Profile if a house has been set
        Students: added honey-pot fields to applications and public registration to reduce spam
        Students: adjusted table label in View Student Profiles
        System Admin: increased the length of string translations to 255 characters
        System Admin: enabled using custom fields with additional modules
        System Admin: adjusted "you are up to date" string in System Admin to reduce cutesiness
        System Admin: added a Code field type to Custom Fields to allow raw HTML
        System Admin: improved the error reporting of the SMS test feature
        System Admin: improved field label for IP Address in View Logs
        Timetable: improved the error message on the timetable when multiple lessons exist
        Timetable: added a visual indicator of clashes with multiple classes in the same period
        Timetable Admin: enabled enrolling and syncing classes for Expected students
        User Admin: added selectFamiliesByAdult method to FamilyGateway

    Bug Fixes
        System: fixed user's personal language and theme not set after login
        System: fixed the logo link on the Oh No! error page
        System: fixed missing password reset link in plain-text copy of emails
        Activities: fixed sidebar disappearing when opening View Details window
        Attendance: fixed the Available to Roles setting in Attendance Codes
        Attendance: fixed attendance for classes timetabled multiple times on the same day
        Finance: fixed online payment option not available on invoice print page
        Finance: fixed reminder emails not handling comma separated company email addresses
        Library: fixed missing cost field when duplicating library item
        Library: fixed items showing as overdue on the same date as the expected return
        Messenger: fixed Applicant target excluding Expected parents of edited application forms
        Planner: fixed invalid values in homeworkSubmissionDrafts in PHP 8+
        Reports: fixed AttendanceByCycle data source mixing up reporting cycle dates
        Reports: fixed missing dropdown selectors on the Write Reports pages
        Reports: fixed dates in templates to use i18n system date
        Reports: fixed reporting cycle count in AttendanceByCycle data source
        Rubrics: fixed row and column colours missing when duplicating a rubric
        Reports: fixed second-pass proof reading not updating the person & timestamp
        Staff: fixed visual display of phone numbers on staff profiles
        Staff: fixed non-school-day check in New Absence not properly counting days
        Staff: fixed absence total in Manage Absences to include partial days
        Students: fixed H4 headings in application forms with custom fields
        Students: fixed missing data in Personal Document Summary report
        System Admin: fixed un-unserializable logs not showing up
        System Admin: fixed missing fields in Custom Fields import
        Tracking: fixed typo are message type in Graphing
        User Admin: fixed Force Password Reset not redirecting users
        User Admin: fixed users able to change roles for Student username format

v24.0.01
--------
    Security
        System: fixed character encoding conversion when sanitizing input from rich text fields

v23.0.02
--------

    Security
        System: fixed a session-related vulnerability and improved session defaults

    Bug Fixes
        System: fixed Google OAuth not correctly handling empty refresh tokens
        System: fixed SQL errors in the User Status Check & Fix CLI script
        System: fixed text field autocomplete issue caused by use of " in existing values
        System: fixed column order of Export to Excel option on Staff Dashboard
        Attendance: fixed non-attendance classes showing up in Set Future Absence
        Finance: fixed HTML being removed from notes on invoices
        Markbook: fixed rubrics not displaying for large classes in Enter Data page
        Messenger: fixed PHP 8+ error when sending messages to Class target
        Planner: fixed PHP 8 related error messages when editing units
        Reports: fixed error loading PDF previews of report templates
        Reports: fixed issue in Report creation when no reporting cycles exist
        Reports: fixed reports with only one page not displaying first page header
        Reports: fixed date handling in Internal Assessments by Course template
        Timetable: fixed bookings not displaying on timetable when calendars not in use
        Timetable: fixed TT opacity for short periods causing visual misalignment
        Tracking: fixed the Chart.js library on the Graphing page
        System Admin: fixed error message when exec function does not exist
        System Admin: fixed import error on Step 4 when using Update & Insert option

v23.0.01
--------

    Significant Changes
        System: activated the es_DO Español - República Dominicana locale

    Tweaks & Additions
        System Admin: added an import for School Year Terms
        System Admin: improved the reliability of the uploads folder check
        System Admin: improved login logs to include login method and user id

    Bug Fixes
        System: fixed user's personal language and theme not set after login
        System: fixed string replacements with {} placeholders not working
        Finance: fixed error when issuing an invoice to a Company invoicee
        System Admin: fixed HTML being stripped out of the privacy policy
        System Admin: fixed invalid password field in user imports in Import From File
        System Admin: fixed custom field headings not working for non-english locales
        System Admin: fixed blank User column for logins listed in View Logs
        Students: fixed student ID not working on main page of student profile
        Reports: fixed error in Scan Asset Directories when asset folder is missing

v23.0.00
--------
    Headlines
        Added support for Microsoft SSO and OAuth2-standard SSO
        Added support for database-driven sessions and encrypted session data
        Improved payment gateway including Stripe payment support
        Refactored the installer and improved install error handling

    Security
        System: important improvements to sanitization and encoding of input data

    Significant Changes
        System: improved session timeout when using multiple tabs or windows
        System: added ability to run CLI scripts remotely, with secure key
        System: removed deprecated functions no longer used in core and additional modules
            - addressFormat
            - dateConvert
            - dateConvertBack
            - dateConvertToTimestamp
            - formatName
            - formatPhone
            - getAge
            - getGibbonMailer
            - getModuleEntry
            - getSettingByScope
            - getUserPhoto
            - printUserPhoto
            - returnProcess
            - setLog
            - setNotification
            - tinymceStyleStripTags
            - ynExpander
        Activities: added the ability to configure activity types individually
        User Admin: added a user status log to track dates and reasons for status changes
        System Admin: added a Maintenance Mode which restricts login access to admin only
        System Admin: added an Active Sessions page to see who is currently logged in

    Changes With Important Notices
        Running the database updater will log out all users except the current admin user
        The allowableHTML setting has been updated, schools who have changed this value will want to check it

    Tweaks & Additions
        System: updated table actions to enable additional modules to use their own icon paths
        System: improved the appearance of the fatal error message page
        System: adjusted new student order in Staff Dashboard Enrolment tab
        System: in forms, update the current country phone code to always display first
        System: fixed typo in Public Registration notification
        System: updated the mobile responsive view to display alerts above the login form
        System: refactored all $_SESSION calls across the system
        System: changed force password reset information in Preferences from error to message
        System: updated the chart.js javascript library to v3.6.0
        System: adjusted Excel export to format integers as numbers
        System: added CSS ID myClasses to sidebar
        Attendance: added the ability to Take Ad Hoc Attendance
        Attendance: added birthday icons to Take Attendance pages
        Behaviour: enabled Find Behaviour Patterns to filter Positive behaviour
        Departments: updated participant view so it does not require other modules
        Departments: highlight department coordinator, add hover text
        Finance: added ability to invoice students by class enrolment
        Library: added student Form Group to View Overdue Items report
        Messenger: updated New Message process to send SMS messages before emails
        Messenger: improved mobile responsive size of inserted images
        Planner: added facility name to Year Overview and Edit Working Copy pages, if available
        Planner: added explicit links to daily and weekly summary emails
        Reports: added default value for Yes/No criteria
        Rubrics: enabled visualization to use custom colours, if unique row colours are used
        School Admin: Changing the school year start date now deletes days that are no longer within the school year
        Staff: added a link to view coverage details on the Open Requests page
        Students: updated student enrolment dropdown to include students with Expected status
        System Admin: enabled creating multiple different email templates per type
        System Admin: added link to Import History at the top of Import from File
        System Admin: updated the alarm to mute after 10 continuous seconds of sound
        System Admin: added an uploads folder status check to system overview
        Timetable: added an option to click for more information in View Available Facilities/Teachers reports
        Timetable: added timetable day heading colours to View Timetable by Facility
        Timetable: added an ajax check for availability when making a facility change
        Timetable: redirect back to View Timetable by Facility when making a space change
        Timetable Admin: adjusted interface strings in timetable import

    Bug Fixes
        System: fixed the Validator class so sanitizeHTML is multibyte safe
        System: fixed phone number format for numbers 10 digits or greater
        System: added Markbook and Planner permissions to Parent and Student Dashboard
        System: fixed space before file extension causing failed file uploads
        System: fixed comma key clearing fast finder inputs
        System: fixed internal urls opening new tab in the nameLinked function
        Activities: fixed duplicate entries in Activity Choices by Student
        Activities: fixed modal view in Activity Choices by Student
        Attendance: fixed table header nomenclature in Classes Not Registered report
        Finance: fixed incorrect column placement in Export Invoices
        Messenger: fixed duplicate student names when using Individual Naming
        Messenger: changed New Quick Wall Message information from warning to message
        Planner: fixed school closure checks when bumping lessons forward and backward
        Planner: fixed smart block deletion not working in Edit Lesson Plan
        Planner: fixed planner deadlines page not filtering by class
        Planner: fixed outcomes dropdown in Lesson Planner when an outcome has no category
        Reports: fixed Student Info template borders when no image is present
        Reports: fixed bug when viewing uploaded reports from past years
        Rubrics: fixed rubric data before the go live date visible in Historical Data
        School Admin: fixed phone numbers not formatting in Manage Facilities
        Staff: fixed substitute unavailability showing previous school years
        Staff: fixed manually adding/editing absences on non-school days
        Staff: fixed Print action in Edit Application Form not opening in new tab
        Staff: fixed Edit User link on Manage Substitutes > Edit Substitute page
        Students: fixed missing Official Name fields for parents in Student Application import
        Students: fixed pagination in student view of View Student Profiles page
        System Admin: fixed PHP notice in importer when skipping serialized fields
        System Admin: fixed numeric field imports failing in MySQL 8.0.17 and above
        System Admin: fixed alarm system to indicate if staff have been marked absent
        Timetable: fixed timetable misalignment of times below transparent timetable blocks
        Timetable: fixed bug in View Available Facilities filter causing some spaces to appear available
        Timetable: fixed calendar options not persisting when using timetable switcher
        Timetable Admin: fixed class enrolment sync when courses belong to more than one year group
        User Admin: fixed return message for image upload failure

v22.0.01
--------
    Security
        Messenger: fixed sanitization of text when creating new messages

    Bug Fixes
        System: fixed lesson plan content in demo data
        System: fixed checks for existing fields in database migrations
        System: fixed cookie consent message to not redirect to the dashboard
        System: fixed parent dashboard hooks missing access to session object
        System: removed unused package file from session timeout library
        Data Updater: fixed data updates with only file uploads in personal documents auto-accepting
        Data Updater: fixed personal documents date bug
        Data Updater: fixed personal documents to only use nationality list for passport and ID documents
        Data Updater: fixed submit button on data updates with no changes
        Departments: fixed Left student role appearing in class list export
        Individual Needs: fixed some IN columns not visible on small screens
        Reports: fixed Left students showing up in the Archive by Student list
        Reports: fixed missing data in CustomFields template data source
        Reports: fixed error with empty milestones when creating a Reporting Cycle
        Reports: fixed issue where re-sending a report will break existing report download links
        Reports: fixed file uploads not working in Template Builder
        Students: fixed ID card background image alignment
        System Admin: fixed importing custom fields failing when existing fields value is null
        System Admin: fixed importing custom fields that have spaces around the values
        User Admin: fixed missing document enum data in migrated personal documents

    Deprecations:
        System: replaced tinymceStyleStripTags function with Validation::sanitizeRichText

v22.0.00
--------
    Headlines
        New core theme for Gibbon's 2021 look and feel
        Ability to manage and customize personal documents
        Improved custom fields system with new field types
        Enabled custom fields in many different areas of the system
        PHP 8 compatibility

    Significant Changes
        System Admin: improved support for custom themes
        System Admin: added the option to select a theme colour in Display Settings
        System: added an Enrolment tab to the Staff Dashboard
        System: added help buttons to the top of pages linking to documentation, when available
        System: renamed the old theme to Legacy, which is not installed by default
        Staff: addded a Staff Data Updater to enable requests for updates to staff records

    Changes With Important Notices
        System: changed interface strings from Roll Group to Form Group
        System: changed custom fields to store data as JSON rather than serialized data (as of v21.0.00)
        System: migrated all personal document data from gibbonPerson into gibbonPersonalDocument
        System: removed the vendor folder for Cutting Edge Code installations
        System: renamed the gibbonPersonField table to gibbonCustomField
        Students: migrated Blood Type and Tetanus fields from Medical Form into Custom Fields

    Tweaks & Additions
        System: added the Getting Started info to the post-install page
        System: added an Update All option to the Manage Languages page
        System: updated text to use darker colours for printable report pages
        System: added South Sudan as a country option
        System: added Mozambique Metical as currency option
        System: added hyperlinkAll method to Format class
        System: added Somali as language option in dropdown menus
        System: updated chart.js to v2.9.4
        System: added Zulu as language option in dropdown menus
        System: adjusted Public Registration to notify even when account is set to Full immediately
        System: refactored non-function-based session variable calls in all core modules
        System: replaced all usage of deprecated PHPExcel library with PHPSpreadsheet
        Students: added logging for partial failures in application form accept
        Crowd Assessment: improved the view of comments in discussion threads
        Finance: removed student DOB and Gender from Export Invoices
        Formal Assessment: added attainment and effort descriptor as title to Internal Assessment view
        Formal Assessment: expanded name column in Internal Assessment to 30 chars
        Individual Needs: no longer require cognition field in IN investigations
        Library: added new Telephone type, with matching import
        Library: migrated fields to internally use JSON data
        Library: added new Rack-Mounted Server form factor type under Computer type
        Messenger: updated the send report to list any emails that failed to send
        Messenger: updated the send report to use the formatted email template when resending emails
        Planner: moved class chooser to the top of the sidebar
        Planner: removed the calendar from the sidebar, which is already available through the date picker
        Reports: added a help tool with Data Source information to Edit Component page
        Reports: added an option to delete report files from Generate Reports page
        Reports: clear report cache when editing template assets in Production
        Reports: added a download option to the student list of the View by Report page
        Reports: added a duplicate action in Template Builder
        Reports: added pagination to the Proof Reading page
        Reports: updated so Assistance with reportable access can write reports
        Reports: added names of teachers to the Proof Reading Edits notification
        Reports: added a Student Name Conflicts tool to check for other student names in report comments
        Reports: updated report writing overview to clarify class teacher vs editor
        School Admin: added ability to disable staff, student and parent dashboards
        Students: added Medical Form custom fields to student profile
        Students: updated Medical Data Summary to include medical custom fields
        Students: adjusted student select in Student Enrolment Add to only show unenrolled students
        Students: automatically add Student Note on form group change
        Students: added a Personal Document Summary report
        Students: added departure reason to student status text when Left/Leaving
        Students: added Next School to Student Withdraw process page
        System Admin: added option to manually invalidate front end cache for Cutting Edge installs
        System Admin: added a Reporting Values by Roll Group import option
        System Admin: updated user-related imports to enable importing by username or email address
        System Admin: added file uploader for choosing logo and background images in System Settings
        System Admin: prevent installing or updating a module that requires a newer core version
        System Admin: added Student Application Form import
        User Admin: added an option to restrict Public Registration to a list of allowed domains
        User Admin: added ability to enrol student when adding a new user with student primary role category
        User Admin: added setting to include Alternate Email in Public Registration form
        Tests: migrated test suite to GitHub actions, updated testing libraries to recent versions
        Timetable Admin: added an option to overwrite existing TT dates in Tie Days to Dates
        Timetable: added green cell background, and day colour highlight, to dates with days tied in Tie Days to Dates
        Timetable: added This Week button to View Timetable by Facility
        Timetable: enabled editing timetable spaces and adding facility changes from View Timetable by Facility
        Timetable: tweaked timetable to highlight the current period in green, even if there is no lesson

    Bug Fixes
        System: disabled context menu in TinyMCE which interferes with right clicking
        System: fixed personal language in Preferences not resetting to system default when blank
        System: fixed double error message when viewing Notifications page and not logged in
        System: fixed translation issue in hooked Dashboard tabs
        System: fixed validation of the username field in Public Registration
        System: fixed installer not running migrations for cutting edge code
        System: fixed blank IDs and blank date fields in the database
        Attendance: fixed non-prefillable logic for Take Attendance by Roll Group
        Attendance: fixed student attendance history when first weekday is Saturday
        Formal Assessment: fixed courses with multiple year groups causing duplicate Internal Assessment columns
        Markbook: fixed visual error in markbook comment expandable row
        Planner: fixed teachers not showing up in attendance with timetable exceptions in multiple classes on the same day
        Planner: fixed issue where sidebar calendar showed the wrong dates
        Planner: fixed suggested date when adding a new lesson plan to exclude school closures
        Reports: fixed error in mPdfRenderer due to missing getPageNumber method
        Reports: fixed error causing duplicate values when students move classes
        Staff: fixed pagination not working on Grid and Card view of Staff Directory
        Students: fixed pre-existing comments visible on student profile Markbook page after turning off comments
        Students: fixed emergency contacts not displaying family adults when more than one family exists
        System Admin: fixed cache not clearing when switching themes
        System Admin: fixed InnoDB update failing when code already up to date
        Timetable: fixed error adding class enrolment when one exists already
        Timetable: fixed View Available Spaces not working when room conflicts exist

    Deprecations
        Messenger: removed the pop-up Messenger bubbles
        Students: removed the extendedBriefProfile setting from student profiles
        System: deprecated the returnProcess function

v21.0.01
--------
    Tweaks & Additions
        System Admin: added post_max_size and upload_max_filesize PHP settings to System Check
        System Admin: updated Manage Languages to use i18n main branch instead of master

    Bug Fixes
        System: fixed import error for non-nullable numeric values
        Attendance: fixed missing attendance in Not Present and Not Onside reports
        Attendance: fixed non-prefillable class attendance overwriting First Class as School Attendance logs
        Planner: fixed smart block summary from replacing existing summary text in Edit Lesson
        Staff: fixed weekdays incorrect on Sundays in Weekly Absences report
        System Admin: fixed clear cache button in Cache Manager not using custom cache path

v21.0.00
--------
    Headlines
        Visual improvements to forms and menus
        New Data Retention and Data Privacy functionality
        New System Overview page showcasing available support options
        Improved tools and information for System Administrators
        Afrikaans and Ukrainian are now available as installable languages
        MySQL 8 compatibility

    Significant Changes
        System Admin: added Security & Privacy Settings and optional cookie consent banner
        System Admin: added a Manage Services page to view gibbonedu.com licenses and services
        System Admin: added an Email Templates section to customize emails sent by Gibbon
        Data Updater: data updates with no changes will now be automatically accepted
        Planner: added a setting to customize what homework is called throughout the planner
        Reports: added a Send Reports tool to bulk-send templated emails with download links
        Roll Groups: added new grouped action to restrict parent viewing to their own children's roll groups
        School Admin: added Email Summary Settings to manage daily and weekly email CLI scripts
        Students: added an optional application processing fee that can be sent manually by staff
        Students: added My Student History, offering a visual overview of all students ever taught
        Students: added Reports subpage to student profile for users with View by Student permissions
        Timetable Admin: added ability to duplicate Timetable Columns and Days

    Changes With Important Notices
        System: the new cookie consent message is enabled by default and will display for all users
        System: renamed CLI script planner_parentWeeklyEmailSummary.php to schoolAdmin_parentWeeklyEmailSummary.php
        Staff: removed roles-as-type in Manage Staff, reducing option to Teaching and Support and setting all non-Teaching users to Support

    Security
        Updated TinyMCE Editor to version 5.6.2

    Tweaks & Additions
        System: added Romanian Leu as currency option
        System: updated complete homework to display in green on the Parent Dashboard
        System: added text labels to Print and Export options on report pages
        System: removed the unused gibbonPersonMedicalSymptoms table
        System: improved the error page when the database connection fails
        System: improved the update process and added a migration system to handle complex updates
        System: improved consistency in storage of colors in the database
        System: added ability to set first day of week to Saturday
        System: lengthened module Category field to 12 characters
        System: added a fallback to translateN for systems that don't have gettext
        System: added a server-side hard limit for session durations
        System: adjusted robots meta tag to dissuade Google from indexing Gibbon installs
        System: moved Public Registration link into a homepage tile
        Attendance: added an Offsite - Late option for attendance codes
        Crowd Assessment: changed error to message in conversation view
        Departments: improved course/class naming in Class view
        Data Updater: enabled address fields to be read only or hidden in Data Updater Settings
        Data Updater: adjusted language in user messages to focus on process not approval
        Finance: added a setting to customize Payment Type options
        Finance: added error logging to the email reminder process
        Finance: improved the layout of invoice emails, reminders and receipts
        Formal Assessment: added a bulk action for External Assessment Data
        Individual Needs: removed Notes & Review from parent view of individual needs information
        Library: added ID column to View Overdue Items report
        Library: enabled printing and exporting the Manage Catalog table
        Library: replaced borrowable column with responsible user in Manage Catalog
        Markbook: added error logging for failed file uploads on Enter Data page
        Markbook: enabled users with Edit Markbook_multiple and Edit Markbook_everything to edit grouped columns
        Messenger: tied messages to school year, added gibbonSchoolYearID for existing messages
        Messenger: added code to convery copy-pasted divs to paragraphs in New Quick Wall Message
        Messenger: messages sent by role or role category will honour user start and end dates
        Planner: updated the attendance list to exclude students with a timetable exception
        Planner: added smart block clarification to the Edit Working Copy page
        Planner: added a common template for all Upcoming Deadlines sections
        Planner: refactored the All Homework tables and added row colouring
        Planner: refactored the Parent Weekly Email Summary to match homework colouring
        Planner: replaced "Compulsory" with "Required" in relation to homework
        Planner: removed lessons with timetable exceptions from Today's Lessons on the dashboard
        Planner: adjusted the display of homework lists to account for class enrolment dates
        Planner: enabled homework to be submitted for lessons that already exist during a school closure
        Planner: brought student birthday icon display into line with class and form group view
        Planner: any staff can take attendance in the planner if they have Attendance by Class permission
        Planner: added the ability to set a time cap for homework
        Planner: changed error alert to message alert colour in chat view
        Reports: updated batch PDFs to display the download link once completed
        Reports: added full course name to the report writing page
        Reports: added a bulk delete action in the Edit Reporting Scopes page
        Reports: enabled plain text and numeric fields in Criteria Types
        Reports: removed Reports Available notification, replaced by Send Reports action
        Rubrics: added an option to colour rubric column and row headings
        School Admin: added Manage Medical Conditions action
        School Admin: added optional introductory text setting for the Medical Conditions section
        School Admin: added color picker to Manage Alert Levels page
        School Admin: updated library background colour selection to use colour picker
        Staff: removed the display of addresses in the Staff Profile
        Staff: restricted access to Emergency Contacts to users with Manage Staff_confidential
        Staff: added first aid information to Personal sub-page of staff profile
        Staff: added an optional First Aid Qualification field
        Staff: changed staff application email sender from System Administrator to HR Officer
        Students: updated application acceptance message to reflect automatically created medical record
        Students: added uniqueness checks for Student ID field
        Students: send notifications for student notes to the Head of Year, if available
        Students: adjusted the font size to scale down for names on Student ID cards
        Students: removed Student ID from View Student Profile_brief
        Students: added optional attachments to the medical condition section
        Students: added notifications for High and Medium medical conditions
        Students: added notifications for accepted applications with SEN/Medical needs
        Students: application forms accepted to upcoming years will set students to Expected
        Students: added Official Name to Left Students and New Students reports
        Students: improved the layout of Student Application acceptance emails
        School Admin: added optional descriptions for medical conditions
        System Admin: added a Cache Manager page to configure and clear template cache
        System Admin: added a Server Info page to view server configuration values
        System Admin: adjusted View Log to show only current year's log entries
        System Admin: added a Purge Logs action to the View Logs page
        System Admin: added a flag to import types to enable updating non-unique rows
        System Admin: moved Not Installed modules list before Installed modules
        Timetable: improved role ordering in class tables
        Timetable Admin: added a dateEnrolled and dateUnenrolled to class enrollments
        Timetable Admin: hide teachers listed as non-reportable from teacher lists
        Timetable Admin: added color picker to Edit Timetable Day section
        User Admin: added Guardian and Grandmother/Grandfather to emergency relationships
        User Admin: improved the layout of the Rollover form
        User Admin: moved Day Type Options from User Settings to Student Settings

    Bug Fixes
        System: fixed missing organization name on welcome page
        System: fixed date picker not using the First Day of the Week setting
        System: fixed validation not working for paginated bulk action forms
        System: fixed wrapping of long summaries in Today's Lessons
        System: fixed public registration failing for non-unique email when uniqueEmailAddress is not active
        System: fixed theme names with spaces from breaking background image
        Attendance: fixed sortable Class column in Student Not In Class report
        Data Updater: fixed passport expiry fields not properly hiding
        Departments: fixed attendance link not prefilling the current date
        Finance: fixed invoicee ordering bug in Add Invoice
        Finance: fixed table width in invoice email formatting
        Formal Assessment: removed Back link from delete modal
        Individual Needs: fixed description of Reason field in Manage Investigations
        Library: fixed broken delete function in Manage Catalog
        Markbook: fixed rubric data not visible for students set to Left in a class
        Messenger: fixed SMTP debug settings in New Message process page
        Messenger: fixed copy-pasted div/paragraph replacement in sender's copy of emails
        Messenger: fixed issue where read receipts weren't clickable until all messages sent
        Reports: fixed AttendanceByCycle data source counting school attendance as class attendance
        Reports: fixed MpdfRenderer not resetting headers when generating batch single files
        Reports: fixed Reporting Cycle Duplicate copying criteria from year to year
        Reports: fixed AttendanceByCycle incorrectly calculating with countClassAsSchool turned on
        Reports: fixed reporting cycle selection missing from Add Report
        Planner: fixed Outcomes by Course for courses with multiple year groups
        Planner: fixed alignment of birthday icon in attendance on Lesson page
        Planner: fixed empty My Class drop down in Deadlines for parents
        Staff: fixed alternate email address causing an error on Personal subpage
        Staff: fixed pagination for Grid and Card views of Staff Directory
        Staff: fixed SQL error submitting application form when logged in
        Students: fixed parent support link in application acceptance email
        Students: fixed students able to see other students in class lists
        Students: fixed issue preventing timetable edit link from working with Left students and allStudent flag
        Students: fixed missing alert bar in Markbook and Internal Assessment sub-pages in student profile
        System Admin: fixed PHP deprecation errors in CSV importer
        System Admin: fixed empty numeric values importing as 0 rather than null
        Timetable: fixed View Available Facilities not counting bookings on Fridays
        Timetable: fixed last week/next week links for facilities involved in multiple TTs
        Tracking: fixed Data Points export when internal or external data points set, but not both
        Tests: added fallback environment variables if .env is not defining DB details
        Tests: fixed HTTP to HTTPs, so SSL enabled environments don't fail
        Tests: fixed install suite admin username and password to be compliant with the default password requirements

v20.0.00
--------
    Headlines
        Messenger emails now send faster by using a background process
        View Logs feature to browse Gibbon event logs
        Added Español - Mexico as an available locale
        Compatible with PHP 7.4

    Significant Changes
        Students: added a Withdraw Student page with the option to notify staff
        Reports: added an option to bulk upload existing report PDFs

    Tweaks & Additions
        System: added Argentine Peso and Ukrainian Hryvna as currency options
        System: updated Tailwind 1.2.0 dependencies via npm
        System: updated SessionTimeout with translation support and jQuery/jQuery UI dependency removed
        System: added target option to Alert Bar
        System: added a DetailsView table for displaying data
        System: updated the pre-login homepage to use a card layout
        System: added a comment editor and code editor to the Form library
        System: improved translation support in forms and tables throughout the system
        Departments: added drag-drop ordering to Departments in School Admin
        Finance: added Student ID, where set, to invoices and receipts
        Finance: applied email template to invoices, receipts, and reminders
        Messenger: added Parent and Student options to Applicants target in New Message
        Planner: enhanced Smart Block display in Lesson Planner
        Planner: removed bold from Chat comment in lesson plan view
        Reports: added a Proof Read by Form Group option
        Reports: added an option to select the PDF rendering library in Template Builder
        Reports: added hooks for custom criteria types in the report writing screen
        Reports: added the ability to select fonts in Template Builder
        Reports: added the option to generate single reports for Left students
        Reports: added alerts to student details in Write Reports
        Reports: added auto resize to comment text boxes in Write Reports
        Reports: changed criteria status to Locked/Unlocked for better clarity
        Reports: added a progress bar to the sidebar in Write Reports
        Reports: added himself/herself to the pronoun checker
        Reports: added a live-reload to report generating progress bar
        School Admin: changed names in Edit Attendance Code to readonly
        Staff: added an option to edit or delete staff coverage dates
        Staff: added Family and Activities subpages to Staff Profile
        Staff: added notificaton events for New and Left staff
        Students: added an Exclude Left Students checkbox to Student Enrolment Trends, off by default
        Students: added option allowing the referee email field in the Application Form to be set to option
        Students: added a grid view of student's teachers to Student Profile
        Timetable: added Bookings into View Available Facilities report
        User Admin: added rich text editors to the Application Form Settings
        User Admin: added an option to enter a departure reason for final year students in Rollover
        User Admin: added an option to create a linked staff record for new users
        User Admin: added no record warning to View Role
        User Admin: switched from warning to message in Edit User

    Bug Fixes
        System: fixed module uninstall to also remove notification events
        System: fixed Quick File Upload trimming filename by first period
        System: fixed paragraph spacing in copy-pasted Messenger emails
        System: fixed hourly cache refresh for pinned messages
        System: fixed the first and last day of the selected school year
        Activities: fixed Attendance History by Activity table scroll
        Attendance: fixed Attendance Summary by Date displaying "no results" before form submitted
        Finance: fixed fee name bug in issued Invoices where fee name changed
        Finance: fixed invoices not viewable by student
        Planner: changed spelling of Publically to Publicly
        Planner: removed debug code from homework submission
        Planner: removed ability for students and parents to be granted Lesson Planner_viewAllEditMyClasses
        Staff: fixed Left staff appearing in Weekly Absences report
        Staff: fixed Staff Directory only exporting first 50 staff members
        Staff: fixed staff directory export when viewing grid or card view
        Students: fixed emergency data report not showing parents column
        Students: fixed Tutors and EAs set to Left showing on Student Profile
        Students: fixed past enrolments showing up in Students by Form Group
        Students: adjusted Add Student Enrolment to allow Full and Expected students to be selected and enroled
        Students: ensure alert bar in Student Profile does not display for Parents or Students
        Reports: fixed Course scope Per Group criteria not saving per-class
        Reports: suppressed TCPDF deprecation messages when generating PDFs
        Reports: fixed pronoun switching not applied globally in some browsers
        Reports: fixed Student Info template to omit empty student photos
        Reports: fixed AttendanceByCycle data source and updated it to apply countClassAsSchool setting
        Reports: fixed grade scale drown-downs for Per Group reporting criteria
        Reports: fixed bug in Internal Assessment data source
        Reports: adjusted student lists to honour Reportable flag
        Reports: applied gibbonCourseClassPerson reportable flag to queries
        Reports: fixed uniqueness check in Manage Reports to include school year
        Reports: fixed stylesheet missing when generating batch PDFs
        Roll Groups: fixed link to print action from Roll Group details page
        System Admin: fixed File Permission display issue in System Check
        System Admin: fixed issue causing string replacement preventing update highlighting in Manage Modules
        Timetable: escaped calendar event names in timetable tooltips
        Timetable: incremented gibbonTTImport course and class name field lengths
        Timetable Admin: implemented bulk Tie Days to Dates duplicate checking
        Timetable Admin: fixed Course Enrolment by Class unable to delete duplicate entries
        Timetable Admin: fixed missing Back to Search links in course enrolment pages

v19.0.00
--------
    Headlines
        Reports module enables users to write reports, proof read comments, generate PDFs, and view report archives
        Individual Needs Investigations functionality allows data gathering around students with individual needs
        Messages can now be pinned to the top of the message wall, and optionally displayed above the dashboard
        Expanded Staff Directory replaces View Staff Profiles
        Activated German as an available language

    Changes With Important Notices
        System: added a redirect to the Update page when database updates are required
        System: split Daily Attendance CLI into separate form group and class scripts
        System: upgrade path limited to v14.0.00 and higher

    Significant Changes
        System: added Year Switcher to staff homepage sidebar
        Planner: added "View Only" sub-action to Lesson Planner
        User Admin: added a View Role page in Manage Roles to display all actions and users per role

    Tweaks & Additions
        System: added Maldivian Rufiyaa and Malagasy Ariary as a currency options
        System: updated DatePicker to use gibboni18n date format
        System: updated SpreadsheetRenderer to write cell contents as plain text
        System: updated TinyMCE allowable HTML to include details, summary and code blocks
        System: improved the display of checkbox and radio list items in forms
        System: added Malagasy and Maldivian as selectable languages
        System: added a sticky header to refactored data tables
        System: refactored the Sound Alarm system
        System: added a setting to toggle background processing
        System: added a general-purpose DiscussionGateway class
        Activities: added a Year Group filter in Manage Activities
        Attendance: added an option to record the first class attendance in a day as school-wide attendance
        Attendance: added an option to disable prefilling by attendance code, applied to Present - Late by default
        Attendance: added Consecutive Absence report to list all students who have been absent for the last N school days
        Attendance: updated Student History to still display class attendance when countClassAsSchool in N
        Attendance: added a Students Not In Class report
        Behaviour: added a Copy To Notes feature
        Behaviour: added settings to toggle notifications for Tutors and Education Assistants
        Form Groups: added staff-only summary of Year Groups after Form Group listing
        Messenger: added a Copy to Next Year bulk-option for Manage Groups
        Messenger: eliminated non-recipient siblings from Send Report
        Messenger: addition of student name(s) to emails sent to parents
        Messenger: adjusted the default sending options for non-staff users
        Messenger: low SMS credit notification when fewer than 1,000 credits remain
        Messenger: added ability to pin messages to the top of the message wall
        Messenger: added a setting to display pinned messages above the dashboard
        Messenger: allow access to View Message Wall for roles with category Other
        School Admin: renamed IN Settings to Individual Needs Settings
        School Admin: removed the prefix Manage from settings pages
        Staff: added a Weekly View and Daily View to Substitute Availability report
        Staff: added a Substitute Information setting for displaying text on My Coverage page
        Staff: added a Staff Coverage Summary report with total days covered per substitute
        Staff: added template setting for Absence Comment field
        Students: improved display of Teachers' emails in student profile
        Students: added extra permission allowing editing and deleting of all Notes
        Students: adjusted Privacy options to display even if blurb is not set
        Students: adjusted Application Form to allow showing of Language Selection blurb without fields
        Students: added template setting for Description field in First Aid Record
        Students: turned First Aid Record Followup into a non-editable log
        Timetable Admin: included student reportable flag in student enrolment
        Timetable Admin: enabled users who can search All Users to also see Left students
        User Admin: increased Student ID field max length to 15
        User Admin: added Citizenship 1 and Citizenship 2 Passport Expiry date fields
        User Admin: added a Login Troubleshooting section to Reset Password page

    Bug Fixes
        System: fixed installer bug where passwords are unnecessarily encoded
        System: fixed date picker validation error for Polish language
        System: fixed Notification Events to only send to users who have status Full
        System: adjusted date formats for German language
        System: fixed translatability issue of Public Registration text
        System: fixed pagination setting so it correctly controls table size
        System: fixed Dashboard error for users with role category Other
        System: fixed Fast Finder bug on mobile when entering search text
        Activities: improved interface string advising users of disabled external activity registration
        Activities: fixed bug preventing viewing activity details in Activity Choices by Student when listing closed
        Activities: fixed permission error for View action in Activity Choices By Student and Student Profile
        Attendance: fixed missing data in printable view of Student History
        Attendance: fixed Set Future Absence to only allow future dates
        Departments: fixed permission check causing Export to Excel to fail
        Departments: fixed Export to Excel to work on iOS devices
        Finance: fixed missing payment info in invoice receipt email for multiple partial payments
        Finance: fixed missing Other category for installs with no demo data
        Finance: fixed Manage Invoices bulk actions not refreshing after changing filters
        Finance: fixed inactive fees showing up in dropdown lists
        Library: set Bookable to No by default on Add record screen
        Library: fixed Status field not being set when not borrowable
        Markbook: implemented unit ordering and date ordering for unit and lesson fields
        Messenger: fixed bug when sending parent and student SMS for Attendance status
        Messenger: fixed bug where users could create a message with no available delivery options
        Planner: fixed non-functional Smart Block Template setting
        Planner: fixed Unit Planner bug causing actions to appear in Classes table for newly created units
        Planner: implemented unit ordering field in Lesson Planner
        Rubrics: fixed bug where non-english locales displayed rubric visualization as gray
        School Admin: fixed Browse Library BG Image field length bug
        School Admin: fixed typo to use instead instead of isntead
        Staff: fixed Cancel Coverage button not available for future coverage
        Staff: fixed Delete Staff Absence to also delete any related coverage
        Staff: limited open coverage requests to the type of sub requested
        Staff: fixed staff coverage date not removed when deleting absence date
        Staff: fixed multi-day coverage only showing one day on the timetable
        Staff: fixed View Absences to only show the current year by default
        Staff: fixed Left staff not accessible from View Staff Profiles page
        Students: adjusted official name size in ID card for long-named students
        Students: fixed timetable chooser not working on student profile pages

    Deprecations
        System: removed Smart Workflow Help feature

v18.0.01
--------
    Bug Fixes
        System: fixed installer bug causing 'A database connection couldn't be established' error

v18.0.00
--------
    Headlines
        Mobile responsive layouts and improved navigation on all screen sizes
        Responsive HTML email templates for outgoing notifications and messages
        New staff absence tracking feature, including approval and reports
        New tools for booking substitute coverage and notifying users
        Activated Urdu and Croatian as available languages
        Added Burmese as a development language

    Changes With Important Notices
        System: removed Likes/Stars feature
        Messenger: messages targeted to Applicants now only go to Accepted

    Significant Changes
        System: added Tailwind CSS and a webpack-based build process
        Attendance: replaced the attendance pre-fill settings with Count Class Attendance as School Attendance
        Attendance: updated the Student History page to be responsive, added tooltip information
        Data Updater: allow fields to be required, read-only or hidden based on role in Data Updater Settings
        Rubrics: added ability to export Visualise chart to PNG

    Tweaks & Additions
        System: added an option to select SMTP encryption in Third Party Settings
        System: added Omani Rial, Albanian Lek & Zambian Kwacha as a currency option
        System: added a nicer Arabic font, improved RTL layouts
        System: improved the form validation highlighting of invalid fields
        System: improved translation of data table columns and date/time values
        System: made disabled checkboxes more visible
        System: refactored all breadcrumb navigation links
        System: updated Google login scopes to remove plus.me, based on Google API changes
        System: updated the Google login button to be responsive and translatable
        Attendance: added ability to set future absence for multiple students
        Attendance: updated Take Attendance by Person logs to separate class and school wide attendance
        Form Groups: hide student count from non-staff in View Form Groups
        Individual Needs: added an Individual Needs Overview report with chart
        Markbook: added a Reset Order button in View Markbook
        Planner: improved icon consistency to Concept Explorer
        School Admin: increased field lengths for Roll Group name and nameShort
        School Admin: updated action categories Assessment to Assess
        School Admin: updated action categories Teaching & Learning to Learn
        Students: added link from student profile to Individual Needs edit screen
        System Admin: added a clear cache option under System Check
        System Admin: updated importer to add Skip Non-Required Fields option when importing partial data
        Timetable: updated View Timetable by Person to access Expected users when All Users filter is enabled
        User Admin: added staff absence and coverage settings to Manage Staff Settings
        User Admin: moved Manage Student Settings into User Admin module
        User Admin: updated username validation to allow latin and CJK characters

    Bug Fixes
        System: fixed errant HTML issue in Smart Workflow on Deadlines page
        System: fixed index_custom.php content not loading on first login
        System: fixed issue leading to no theme on login if a personal theme has been removed from the system
        System: fixed missing globals in custom index scripts
        System: fixed non-rendering HTML issue in Welcome text on logged-out index
        System: fixed PHP fatal error when gettext not installed
        System: fixed SQL key integer length in database tables to ensure referential integrity
        System: fixed template cache to automatically disable when upgrading the core
        System: fixed typos and improved interface string consistency
        Finance: fixed spelling error in Manage Invoices
        Library: fixed bug leading to loss of main user/owner field value in item edit
        Library: removed lending icon for items that are not borrowable
        Markbook: fixed bug preventing parents and students from viewing the markbook with work submitted to a lesson plan
        Markbook: fixed column order not persisting when more than 25 columns
        Markbook: fixed column title showing term's name when the term filter is applied in View Markbook
        Markbook: fixed column widths when modified assessment is enabled
        Staff: fixed staff photo not displaying on Facilities sub-page in staff profile
        Staff: fixed translation of facilities table in Staff profile
        System Admin: fixed typo in Google integration settings
        Timetable Admin: fixed Course Enrolment by Class to count students before their start date as Expected
        Timetable Admin: fixed malformed translatable interface strings
        Timetable: fixed some staff not showing up in View Timetable by Person
        User Admin: fixed issue preventing action names from being translated in Manage Permissions

    Deprecations
        Planner: removed Unit embed
        Planner: removed Smart Block to Lesson outcome mapping
        Planner: removed Unit hook
        Planner: removed Star Block

v17.0.00
--------
    Headlines
        Added data visualisation to Rubrics through the Markbook View
        Added an improved set of file import options to System Admin
        Languages can now be installed and updated through Manage Languages in System Admin
        Activated Hebrew and Turkish as available languages
        Improved the display of right-to-left languages
        Added ability to select an SMS gateway: OneWaySMS, Twilio, Nexmo, Clockwork, TextLocal, and Mail to SMS

    Changes With Important Notices
        System: increased minimum PHP version to 7.0
        System: added the Twig templating engine as part of our ongoing refactoring for the core
        System: moved PHP elements of /lib to /vendor
        System: moved files in /assets to /resources/assets

    Significant Changes
        System: refactored many of the tables and reports, which now support pagination, sorting and filtering
        System: removed upgrade path for v11.0.00 and below

    Tweaks & Additions
        System: added ability to set background image
        System: added country code and correct spelling of Vietnam and Russia
        System: added Eastern Caribbean Dollars and Guatemalan Quetzal as currencies
        System: added Sinhala to list of languages
        System: added Sri Lankan Rupee as a currency option
        System: added the ability to set the current language with an i18n URL parameter
        System: added the option to display all records in a paginated table
        System: increased the max email length to 75 chars for all forms
        System: updated robots.txt to disallow all indexing
        System: updated vis.js library to v4.21.0
        Behaviour: added a notification event for Updated Behaviour Record
        Data Updater: added a Family Data Updater History report
        Data Updater: added parent email to Family Data Updater History
        Data Updater: added school year navigation to Manage Updates
        Data Updater: implemented cutoff date prefill in Personal Updater History report
        Departments: added Student ID field to class participants export
        Finance: added default check to Company email checkbox when editing an invoice
        Finance: adjusted email checkbox list in Edit Invoice to only show parents with status of Full
        Finance: adjusted Student filter in Manage Invoices to show Left students
        Markbook: added a search option to the filters in Markbook View
        Markbook: added school wide-option allowing teachers to specify "Modified Assessment" for student with individual needs
        Messenger: added an option in Messenger Settings to bcc all messenger emails to a set of recipients
        Messenger: added cache refresh on success in New Message and New Quick Wall Message
        Messenger: added missing Group target information into Manage Messages view
        Messenger: added row colouring to By Roll Group report, and made it default view
        Messenger: amended default confirmLink text in New Message
        Messenger: updated the Year Group target for Staff to only include tutors and teachers of courses in the same year group
        Planner: added SMTP persistence to weekly summary CLI script
        Planner: improved accessibility of link from Scope & Sequence to Dump Unit
        Planner: improved field labelling in Lesson Planner Add and Edit screens
        Planner: improved link logic in lesson plan participant grid
        Roll Groups: improved link logic in roll group grid
        Staff: added a Mark as Left bulk action to Manage Staff
        Students: added the option to enter a username and student ID in the For Office Use section of the Application Form
        Students: adjusted Student Enrolment/course enrolment sync logic to mark students as left instead of deleting them
        Students: updated how the Privacy section is displayed in application and data updater forms
        Timetable Admin: increase length of Course Short Name and Class Name and Short Name fields
        Timetable: added a facility booking button to the timetable in View Timetable by Facility
        User Admin: added a separate permission for Manage Users without the ability to delete user data
        User Admin: added ability to include custom fields in public registration form
        User Admin: added an option in Manage Roles to toggle login access for all users of a particular role
        User Admin: added missing custom field description into OOified forms
        User Admin: added the ability to change usernames which will check to ensure it's still unique

    Bug Fixes
        System: fixed an issue with hidden fields in bulk action forms after pagination
        System: fixed demo data issue causing FL07 demo unit not to show in Unit Planner
        System: fixed IE incompatibility with javascript and select inputs
        System: fixed incorrect return value in Public Registration when user is below the minimum age
        System: fixed term date issue in gibbon.sql
        Activities: fixed incorrect count in Registered column in Activity Enrolment Summary
        Activities: post-OOification fix to include All Users in Staff selection for in Manage Activities
        Attendance: fixed an error in the parent view of Student History for PHP 7.1+
        Attendance: fixed bug which breaks table count in Students Not Onsite and Students Not Present report print view
        Attendance: fixed date links in View Daily Attendance opening a new tab
        Attendance: fixed error message text for attendance taken in the future
        Crowd Assessment: fixed bug preventing student seeing their own work when Submitter is only student option selected
        Data Updater: fixed comment bug in Medical Updates
        Data Updater: fixed country-specific field label bug in Manage Personal Data Updates
        Data Updater: fixed dashboard issue on servers with sql_mode=only_full_group_by
        Data Updater: fixed gibbonMedicalConditionID as name bug in medical conditions and updates
        Data Updater: fixed interface string issue in Data Update request screens
        Data Updater: fixed non-compliance indicator bug in Updater History reports
        Departments: fixed bug displaying Left classes under My Classes in sidebar
        Finance: fixed inability to comment on an expense request for users with Write access
        Finance: fixed Left parents displaying in invoices and receipts
        Finance: fixed the bug that prevented saving the value of the field "status" in the table "gibbonFinanceBudgetCycle" when the current Gibbon language is other than English
        Formal Assessment: fixed unclickable link in View Internal Assessments
        Individual Needs: removed Submit button when viewing and archived IEP
        Markbook: fixed bug in handling personalised attainment targets when using scales other than class scale
        Markbook: fixed inconsistent naming of class teachers
        Markbook: fixed shifted table cells in Markbook View class average when cumulative averages are enabled
        Messenger: fixed a PHP error in Edit Message related to message targets permissions
        Messenger: fixed empty target type in gibbonMessengerReceipt when Group target is used
        Messenger: fixed messages not displaying on Message Wall for Transport and Group targets
        Messenger: fixed minor post-OOification bug causing unnecssary display of Parent 2 resent checkbox in send report
        Messenger: removed Body column from Canned Response table
        Messenger: restricted Manage Groups view to display groups from the current school year only
        Planner: fixed multibyte string issue when dumping unit resources
        Planner: fixed no records error message in Parent view of planner
        Planner: fixed row stripping in Access Control field in Add and Edit
        Planner: fixed school year name on Edit Unit page
        Planner: supressed autocomplete in Lesson Planner date fields
        School Admin: increased School Year name field length to 15 characters
        Students: fixed displayed name of First Aider in Edit First Aid Record
        Students: fixed pre-select of Student when adding medical form from Student Profile
        Students: fixed searching by parent email address in View Student Profile
        Students: removed non-students from New Students report, when Ignore Status in use
        System Admin: fixed bug which turned custom alarm into general alarm
        Timetable Admin: fixed course sync for courses with multiple year groups
        Timetable: fixed logic to correctly display Back To Search Results for parents in View Timetable by Person
        Timetable: fixed unable to turn Bookings checkbox off in View Timetable by Person
        Timetable: removed All Users filter option for non-Staff in View Timetable by Person
        User Admin: fixed bug preventing correct display of existing Privacy and Student Agreement options in user edit
        User Admin: fixed name display bug in Enrol New Students (Status Full) section of Rollover

    Deprecations
        System: deprecated getGibbonMailer function, replaced with Mailer wrapper
        Markbook: removed WordPress Comment Push functionality

v16.0.01
--------
    Tweaks & Bug Fixes
        System: fix PHP5.5 incompatibility in FormatResolver class

v16.0.00
--------
    Headlines
        Activated Simplified Chinese and Polish as available languages
        Added Croatian and Estonian as development languages
        Added a My Data Updates overview and settings to redirect users to Data Updater on login
        New Messenger Groups action for custom mailing lists
        Added new object-oriented table API, and implemented across 30% of the system

    Changes With Important Notices
        System: added tool for InnoDB database table storage engine migration: if you are already running InnoDB remove lines 906 and 907 from CHANGEDB.php before upgrading
        System: fixed Cutting Edge detect/set issue in installer, impacting Cutting Edge installs from v15-16 (which may need to be reinstalled)

    Tweaks & Bug Fixes
        System: improved IP address handling in setLog function
        System: added United Arab Emirates Dirham, Colombian Peso, Fijian Dollar and West African Francs as currencies
        System: adjusted notifications icon so it is clickable even when there are no notifications
        System: fixed error with deleting a record when multiple tabs are open for the same session
        System: moved Russian Ruble from PayPal to Other section in currency listing
        System: added Afaan Oromo as development language
        System: made translation credits in footer fairer
        System: simplified UI text in Parent Dashboard
        System: fixed a user photo upload issue involving usernames with a dot in them
        System: fixed issue preventing timezone string field description from being translated
        System: added timezones strings to translatable string list
        System: improved timezone selection process by using select instead of text field
        System: moved footer logo style into theme CSS
        System: restored Cutting Edge status message to installer
        System: added setting of HELO value when sending mail with SMTP
        System: improved selection mechanism in Module Menu when sidebar is hidden
        Activities: added notifications when students are bumped up into an activity on self unenrolment
        Activities: added logging of student activity changes in order to track sign up history
        Activities: added Activity Choices by Roll Group for ease of looking up student's activity times
        Activities: added Media bar to Description field in add and edit screens
        Activities: fixed bug causing non-students enroled in activities to go missing from Manage Enrolment view
        Attendance: added option for redirect to message wall after self registration has been taken
        Attendance: added year group selectors to reports for not present and not onsite
        Attendance: added ability for students to view their own attendance data for the current year
        Attendance: added ability to delete attendance with Manage Attendance Logs permission in Attendance by Person
        Attendance: fixed date format for links in View Daily Attendance
        Data Updater: added links to Manage Update pages to easily find and edit the associated records
        Finance: added logging for failed bulk email sends
        Finance: add a Mark as Paid bulk action in Manage Invoices
        Finance: add Credit Card payment type to gibbonPayment table
        Finance: added ability to issue reminders (individually and in bulk) for invocies with status Paid - Partial
        Form Groups: added link to print listing of students in form group detail view
        Form Groups: fixed bug offering non-permissioned users the opportunity to print
        Formal Assessment: fixed PHP Notice and interface string issues
        Library: simplified interface for Duplicate in Manage Catalog
        Library: fixed PHP warning in Library's type-specific fields AJAX script
        Markbook: fixed multi-byte string length issue causing automatic comment expansion in Markbook view
        Markbook: fixed parent/student access issues when viewing markbook columns
        Messenger: added the ability to resend in By Roll Group view in View Send Report
        Messenger: added ability for uses with Manage Messages_all to resend on behalf of others
        Messenger: fixed bug causing non-Accepted applicant names to display with an error in Send Report
        Messenger: added SMS send logging to allow missing messages to be tracked
        Messenger: improvement to protection against big/slow email sends
        Messenger: removed caching for messanger count on homepage, so count is always accurate
        Messenger: added email send failure logging to allow missing emails to be tracked
        Messenger: added connection persistence to SMTP sending
        Planner: added "Notify" feature to lesson creating and editing
        Planner: fixed module name substitution in links in Lesson Planner
        Planner: added Smart Blocks tab to Unit Overview in Lesson Planner
        Planner: added indexes to gibbonLike database table to improve performance
        Planner: fixed translatable string error in Lesson Planner
        Staff: fixed bug in parameter passing in Add in Manage Staff
        Students: added sibling and family information to Letters Home by Roll Group
        Students: added Comment field to medical form, linked to student application form.
        Students: added View option to Students by Form Group report, allowing Basic or Extended view
        Students: changed School Attendance sub page to Attendance to improve UI consistency
        Students: adjusted logic in student enrolment visualisation to include students who are not 'Full'
        Students: adjusted layout of Uploaded Response link in Markbook in Student Profile view
        School Admin: updated Finance Settings email to default to organisation email if blank
        School Admin: extend length of name field in Manage Houses to 30 chars
        School Admin: added Head of Year to Manage Year Groups and integrated into Students
        School Admin: fixed breadcrumb text issue in Manage Finance Settings
        System Admin: fixed bug causing theme names with spaces to break the theme installer
        System Admin: fixed spelling error in Department settings
        System Admin: fixed typo in Third Party Settings
        Timetable: added This Week link to timetable date navigation in Timetable by Person
        Timetable: added highlight to the current day column in Timetable by Person and Facility
        Timetable: fixed error is specification of gibbonTT database table
        Timetable: added index on gibbonPersonID for table gibbonCourseClassPerson
        Timetable: added the special day name to the timetable for school closures
        Timetable Admin: added school year selector to Sync Course Enrolment
        Timetable Admin: made search persistent on return from course delete
        User Admin: fixed Child's Name list in Edit Family to include all students
        User Admin: fixed bug preventing some family links from showing up in Manage Users
        User Admin: removed Back link from child and adult delete modals in Manage Families
        User Admin: tweaked user CLI to better handle parents in multiple families
        User Admin: added staff import feature
        User Admin: added an alphanumeric requirement for usernames in Add User
        User Admin: added fix to prevent the logged in user from deleting themselves.
        User Admin: fixed typo in description for Day-Type Text setting
        User Admin: fixed gibbonPersonID int length in gibbonFamilyAdult and gibbonFamilyChild

v15.0.01
--------
    Security
        Fixed privacy-related issue in Student Profile permissions

v15.0.00
--------
    Headlines
        Code base refactoring of all interface forms
        Timetable Admin: added ability to map classes to Roll Group, sync enrolments, and auto-enrol new students
        Activated Brazilian Portuguese as complete languages

    Changes With Important Notices
        Planner: integrated Resources into the Planner module (/modules/Resources needs to be manually removed)

    Security
        System: fixed security vulnerability in the installer
        System: added validation and output escaping to Personal Background URL in Preferences

    Tweaks & Bug Fixes
        System: fixed erroneous Georgian language code
        System: added Greek and Amharic as development languages
        System: added South African Rand, Trinidad & Tobago Dollar, Swedish Krona, Chinese Renminbi and Russian Ruble as currencies
        System: fixed missing form validation for dropdowns created with User Custom Fields
        System: updated Google OAuth library to latest version (v2.2.0)
        System: fixed Sign In With Google to fix missing token refresh issue
        System: fixed timezone not being set in CLI scripts
        System: fixed bug preventing activity day from being correctly shown in Parent Dashboard
        System: added login options to Login with Google button
        System: added mbstring extension to the system requirements list
        System: fixed text alginment in module menu
        System: fixed long-string and large image issue causing content to bleed under sidebar
        System: fixed bug causing two entries in a module menu to be highlighted as active in some cases
        System: added Enable Smart Workflow Help option to Preferences
        System: removed personal settings form from Preferences when force reset in effect
        System: adjusted Today's Classes in Student and Parent dashboard to show on non-school days
        System: shortened abbreviation of core system roles
        Activities: added new payment fields to activities (cost type and cost status)
        Activities: fixed database field length issue in gibbonActivityStaff
        Activities: fixed minor display issue in Terms column in View Activities
        Activities: fixed term display bug in Manage Activities
        Attendance: fixed GROUP BY issue in moduleFunctions.php when MySQL is using only_full_group_by
        Attendance: adjusted attendance checking CLI script to only include lessons whose start time has already passed
        Attendance: show staff dashboard link to attendance only if user has access to Form Group attendance
        Attendance: added count column to Students Not Present and Students Not Onsite reports
        Attendance: granted like to those students who successfully self register
        Attendance: added selective auto-redirect to move students to self-registration page under certain conditions
        Attendance: added a warning to Attendance by Class when not currently timetabled for the selected date
        Behaviour: fixed typo in three settings
        Behaviour: fixed broken link to Edit in Step 2 of adding a behaviour record in Manage Behaviour
        Departments: fixed bug preventing students from seeing other students in a class
        Departments: fixed sidebar heading size issue
        Finance: set name of outgoing email to school name, not user's name
        Finance: fixed missing email address issue in Company invoices and receipts
        Individual Needs: added ability to record educational assistants for a student
        Library: added Optical Media as item type
        Library: added replacement fields to import
        Markbook: fixed multibyte character error in comment summary
        Messenger: fixed multibyte substring issue in homepage widget
        Messenger: added username to Individual select, to distinguish people with the same name
        Planner: updated attendance to only hide the reason and comment fields if Present is the default attendance
        Planner: added optional Markbook section (off by default) to weekly planner summary email
        Planner: fixed bug preventing Add icon from appearing for teachers under date view in Lesson Planner
        Roll Groups: fixed bug preventing alerts from showing
        Rubrics: reduced wait time on rubric load for schools with lots of rubric data
        School Admin: updated Manage School Years to prevent removing or unsetting the current School Year
        School Admin: added an Assign Houses tool to bulk assign students to houses by Year Group
        Staff: fixed entryURL for full version of View Staff
        Students: fixed School History section in Student Profile to exclude upcoming years
        Students: fixed Application Form for logged in users not selecting a family by default (if one exists)
        Students: fixed interface string issue in student details screen
        Students: fixed display of Other Fields heading for parents in Application Form
        Students: added a notification event for Application Form Accepted
        Students: added an option for logged-in users to link new Application Forms to an existing user or family
        Students: added ability to delete files and upload multiple files in Edit Application Form
        Students: amended Academic alert to account only for data in the last 60 days
        Students: when Timetable is disabled, View Student Details now displays list of classes in Overview
        Students: adjusted Application Form acceptance emails to students and parents to come from admissions administrator, not system administrator
        System Admin: increased length of Absolute URL and Absolute Path to 100 characters
        System Admin: updated version check to handle semantic version numbers
        Timetable: added ability to set and display text and background colour for timetable day headers
        Timetable: adjusted font size for shorter lessons to allow display or facility name
        Timetable: adjusted timetable on homepage to show next week if today is a Sunday with no school
        Timetable: fixed rendering issue when week starts Sunday but Sunday is not a school day (and similar cases)
        Timetable Admin: added link from course view in Manage Courses & Classes to edit class enrolment
        Timetable Admin: updated Course Enrolment Rollover to prevent duplicates and not copy users set to Left
        Timetable Admin: fixed Course Enrolment by Person to allow staff category without All Users checked
        Timetable Admin: removed Left users from class participant count in edit view in Manage Courses
        User Admin: improved usability of feedback in Step 3 of the rollover
        User Admin: made Pending Approval option in Status in edit User appear only if Public Registration is enabled
        User Admin: updated Add User and Edit User to allow PDF files for ID documents
        User Admin: added ability to set username formats by role in User Settings
        User Admin: added a button to generate usernames in Add User
        User Admin: added an Available Years of Entry setting to select which years are available in the student application
        User Admin: added a setting to require a user's primary email address to be unique
        User Admin: added a settings to adjust the formatting of staff names in Manage Staff Settings

v14.0.01
--------
    Security
        Fixed role switcher privilege escalation issue

v14.0.00
--------
    Headlines
        Object oriented form API
        Added the ability to manage system notifications and send specific notices to different users
        Activated Albanian, Thai and Vietnamese as complete languages

    Changes With Important Notices
        Attendance: fixed default reason from Pending to blank, reset all reasons for existing Present, Pending logs
        Attendance: dropped legacy tables gibbonPlannerEntryAttendance, gibbonPlannerEntryAttendanceLog

    Significant Changes
        System: added unit and acceptance testing environments for Gibbon developers

    Security
        System: fixed PHP code execution vulnerability
        System: fixed infinite nested index reload bug
        System: tightened rules for valid elements in TinyMCE text fields
        System: removed Allowable HTML from System Settings interface
        System: updated PHPMailer to latest version
        System: removed all code samples from /lib libraries
        System: fixed SVG code execution vulnerability
        System: added input sanitization to public forms

    Tweaks & Bug Fixes
        System: improved Fast Finder student search permissions
        System: added Albanian and Thai as development languages
        System: added Moroccan dirham as a currency option
        System: upgraded jQuery to v2.2.4 and jQuery Migrate to v1.4.1
        System: fixed bug preventing jQuery Chained from working properly
        System: allow user login with either username or email, if email is unique
        System: added Myanmar, Burmese, Filipino to list of languages, fixed Croatian, Ukrainian, Swedish spelling
        System: added logging to Google OAuth login
        System: fixed broken Credits link in footer
        System: removed Media plugin from tinyMCE
        System: added timestamp update when incrementing notification count
        System: fixed error messages and failed login redirect on Google login page
        System: added ability to set mysql port through config.php
        System: moved registration link from main panel to sidebar
        System: fixed issue preventing Excel export from root level files
        System: fixed PHP notice for undefined default staff dashboard tab
        System: fixed string issue in Behaviour section of Staff Dashboard
        Activities: added optional permission for activity organisers to manage their activities enrolment
        Activities: fixed PHP Notice error (repeated many times) in activity add and edit interfaces
        Activities: added optional permission for activity organisers to take attendance only within their activities
        Activities: added term filter to manage view
        Activities: fixed PHP warnings in Edit Activity Enrolment when access via My Activities.
        Activities: added upper limit to number of columns in Printable Attendance Sheet
        Activities: fixed total attendance counts to exclude left students
        Activities: fixed PHP notice in Manage Enrolment
        Activities: fixed PHP notice on status field in Activity Spread by Roll Group
        Attendance: added ability (off by default) for students to register themselves as Present, when within a set of IP addresses
        Attendance: added explicitly stored context recording where attendance was taken
        Attendance: added settings to determine pre-filling of attendance in different contexts
        Attendance: added settings to determine default type in different contexts
        Attendance: added dynamic legend for Student History report
        Attendance: added extra role to allow form group attendance to be restricted to own form group
        Attendance: updated Take Attendance by Class to exclude students with timetable exceptions
        Attendance: fixed pre-filled attendance to always display the most recent attendance log
        Attendance: updated pre-filled class attendance to not pre-fill for another class
        Crowd Assessment: fixed parent role determination error
        Data Updater: made various fields optional when user has _any privileges
        Data Updater: fixed PHP notice for empty array in Student Data Updater History
        Data Updater: fixed PHP notice for address country fields in Personal Data Updater
        Finance: added ability to bulk issue invoices without sending email
        Finance: tweaked interface for display of payment log to make it more usable
        Finance: added ability to view and print receipts for refunded invoices
        Finance: fixed bug preventing reminder emails from being sent
        Finance: fixed bug leading to invoice values changing (in print view only) after issue
        Finance: added reminder number to Email Reminder section header in overdue invoice edit view
        Finance: removed incorrectly applied currency label from expense export
        Finance: fixed PHP notices for unset IDs in Manage Expenses and My Expense Requests
        Formal Assessment: improved layout of Internal Assessment view
        Formal Assessment: fixed incorrect string wrapping for translation in Internal Assessment import
        Formal Assessment: fixed visual issue in column header of Write view in Internal Assessment
        Library: added new type to store Audio/Visual equipment
        Library: fixed button label in Edit view in Lending & Activity Log
        Library: fixed empty Link field when in Edit view in Manage Catalog
        Markbook: added a class average row to the bottom of markbook views (when Weighting is enabled)
        Markbook: fixed order for first markbook column not saving properly
        Markbook: allow decimal values for markbook column attainment raw max
        Markbook: fixed custom Attainment label for Total Mark field
        Markbook: added a markbook setting to enable display of cumulative marks on View Markbook and Student Profile pages
        Markbook: added a permission for teachers to only view their own markbook information
        Messenger: fixed issue leaking custom Messenger bubble background onto screen
        Messenger: fixed duplicate course names for message target
        Messenger: removed call to isSMTP in message process when not using SMTP
        Planner: adjusted permissions to allow teachers with Planner_viewAllEditMyClasses rights to view Unit Overview for classes they don't teach
        Planner: fixed bug causing incorrect Satisfactory count in Work Summary by Form Group report
        Planner: fixed PHP notice issue when listing lessons with unit that no longer exists
        Planner: added resources from unit outline to the resources tab in Unit Dump
        Planner: fixed PHP notice on completion checkbox in Planner Deadlines
        School Admin: fixed timezone issue in display of dates in Special Days view
        School Admin: fixed bug in Manage School Days involving active days not having timings set
        Staff: fixed PHP notice in Application Form edit Status field
        Students: added ability to store internal documents against student application forms
        Students: fixed bug preventing upload of application form documents when cookies disabled
        Students: fixed bug preventing some application form language/citizenship fields from not being saved
        Students: added settable thresholds for issuing academic alerts
        Students: added settable thresholds for issuing behaviour alerts
        Students: added extra action to allow deleting of application forms to be disabled
        Students: added optional permission for students to only view their profile
        Students: added data visualisation for student enrolment over time
        Students: fixed auto-assign houses potentially failing on Application Form acceptance if houses are empty
        Students: fixed PHP notice for gibbonPersonID in Add Medical Form
        Students: fixed link to Add Medical Form in Student Profile
        Students: updated Edit Application Form to handle spaces in privacy options csv
        Timetable: fixed TT not being navigable if user is not involved in any timetable
        Timetable Admin: fix bulk checking bug in Tie Days to Dates
        Timetable Admin: widened listing of staff in Course Enrolment by Person to include all staff (not just Teaching staff)
        Timetable: added option to display either Day Of The Week or Timetable Day Short Name in column header of timetables
        Timetable: added name of person making a facility booking to timetable view by Person
        Timetable: added optional permission for users to only view their own timetable
        Timetable: added optional permission for parents to only view their children's timetables
        Timetable: increased list of students in Manage Student Enrolment to include all current students
        Timetable: fixed PHP notice in renderTTDay module function
        Tracking: fixed bugs leading to repeated and mixed display of columns
        User Admin: fixed bug preventing some custom fields appearing when individual had multiple categories in multiple roles
        User Admin: fixed PHP Notice error caused when no additional roles chosen in user edit
        User Admin: added ability to restrict which roles can be assigned in Manage Users
        User Admin: reduced Transport auto suggest to students enroled in the current year
        User Admin: added settings to enable/disable scholarships, payment and SEN sections in Application Form
        User Admin: fixed issue preventing inactive students from showing up when family link is clicked
        User Admin: added row highlighting in Manage Permissions

v13.0.02 and earlier
--------
Removed to reduce file size
