Added Events table.

Added creatorID and createTime to Primary* objects.

Renamed Feedback to Comments.

Separated enum()-like fields into tables: PositionTypes, EventTypes, TermSemesters.
This allows easier future expansion of these fields, and the ability to
add fields about these.

Added the Configurations table. The class that uses this will read only
the latest version. It is typed configuration settings for the whole app.

Added several fields to Users to support password reset and email
verification.

Sessions can now be freely applied to Courses and Positions.

*Primary objects are: Users, Terms, Courses, Positions, Applications, Comments, Events, Configurations.
Secondary objects: Sessions, PositionSessions, CourseSessions, Teaches, Places, subclasses and enums.
This concept was used in my E/R model to figure out how event logging will behave.
Primary objects have a creator and a createTime their creation must be
paired with an Event.
Secondary objects are created when a primary object needs them.
For example, when a staff member imports a Term object, it will have a
list of Course objects and those will have a list of Position objects.
The required Sessions, CourseSessions, PositionSessions, and Teaches
rows will be made, but may also already exist in that form and may only
need to be referenced. These operations don't need to be logged.

These changes led to me making a more finalized (except for the users tables) test SQL script.
Event object DAL
Error class to TarsException. Properly extends Exception,

and the API for it is less odd.
signup.php submission using TarsException
Users.creatorID is null if created by self.
rename insertUser -> insertUserSelfCreated

This will be in constrast to created by a Staff or Admin when implemented.
STUDENT_SEARCH event, error checking fix, Term object new fields
Changes to database structure:

Rename Courses to Sections

Added secondary Courses table to hold common dept., course number, course title relations.

Rename EventSubscriberTemplates to a much better name NotificationTemplates.
Notifications may get their own table, tbd.

Changed all instances of computer-stored datetimes to timestamps (i.e. createTime). Instances of datetime that represent user-set times (i.e. session times) will stay datetime, date, time, or year, depending on required value.

Fixed types of several other fields.
Use the word "semester" to consistantly refer to TermSemesters.

Session is the object representing time, day, and place of Sections.

TermSemester is the object representing the time/part of year of a Term.
Handle connection errors and log to error_log() (goes to PHP/Apache error.log or www-error.log) on event logging failure.

Term object updated.
GPAs have 3 digits of precision (see Blackboard)
Student set profile callback and email-in-use callback updated.
signup and student/profile forms made consistant with each other.

Set the for attribute in <label> to the id attribute in <input>. Do not put <input> inside <label>. Keep the name attribute in <input> for the POST.

Adds the universityID field to Edit Profile.
Use consistant order for Student fields:

Class Year, Major, GPA, University ID, Qualifications/About Me.
Begin fixing GetApplications functions.

Added a semesterIndex field to TermSemesters. Allows the TermSemesters
to be orderable by time in the future.
Use getFILName() consistantly.
Update Section and Term objects. Make Course and TermSemesters secondary objects to these.
Switching more things to Sections.
Added many debug events for retrieving data.

These events are referenced when an error occurs getting that data.

Renamed SERVER_PDOERR to SERVER_DBERROR.

Updated all student and professor viewable pages and staff payroll page to use Events for errors.

Updated all student and some professor callback pages to always return JSON and use Events for errors.

Changes to Payroll page to allow changing of term.

Use Configuration::CURRENT_TERM, removing CURRENT_TERM constant.
Configuration will be updated when term importing is added, and possibly for Admin access.
Don't call me