Percolate is a Learning Management System with the following features:
-
Native course builder
-
Multi-tenancy (optional)
-
Discussions (comment boards)
-
Tag-based organization and creative use of tags
-
RESTful API with HATEOAS and JSON Web Token authentication
-
PDF certificate generation
Percolate uses the following technologies and libraries:
-
API "backend" written in PHP
-
Composer to manage 3rd-party libraries
-
HummingJay for REST API
-
PHP-JWT for JSON Web Token encoding/decoding
-
AWS SDK for PHP (optional) to use S3 storage and SES email
-
FPDF for PDF creation
-
-
UI "frontend" written in JavaScript
-
Relational database targets PostgreSQL
-
The "build" system is a simple shell script which "minifies" (with JSMin) and then concatenates the JavaScript UI into a bundle.js file.
See INSTALL.adoc.
Percolate aims to be flexible while using as few unique concepts as possible. Much of this is achieved with the pervasive use of tags.
The database contains a PostgreSQL 'schema' for each LMS tenant which gives complete isolation between tenants.
See db/master.sql.
Tenants are looked up by one or more hostnames (think "domain name": example.com, lms1.example.org, lms2.example.org, etc.).
If you prefer, you can create a single tenant and treat Percolate as a single instance, ignoring the multi-tenancy aspect entirely.
The database stores these basic elements:
-
file
-
person
-
content
-
enrollment rules (erules)
-
records
-
comments (for discussions)
-
config (tenant-specific system settings)
For the complete story, see db/tenant.sql.
There are four types of content:
-
SCORM - the standard e-learning package uploaded to the LMS in a .zip file
-
Content Builder or just "content" - the native content type in Percolate which is composed of pages containing images, videos, audio, quizzes, file attachments, etc.
-
Discussions - small forum-like discussion boards
-
Learning Paths - lists of other content put into specific order, may be nested
When a person launches a content item, a record is created or updated with the launch time, launch count, etc. All content types have the same basic records, even discussions. Other types such as SCORM and those made with the Content Builder can record much more information.
People may be grouped and organized by tags.
Percolate LMS Administrators are simply people with the special $admin system tag.
An initial administrator account is created for each new tenant.
Content is likewise organized by tags.
There are system tags for content such as $catalog and $certificate which can affect how the LMS treats the content.
Assignments are made by creating "enrollment rules" which may be one of these four types:
-
Person to Content
-
Person Tag to Content
-
Person to Content Tag
-
Person Tag to Content Tag
Bascially, an enrollment rule can be as simple as assigning one content item to one person or as complex as assigning an entire lesson plan to a group of people.
Because people in an organization can sometimes be part of overlapping groups, Percolate has a more advanced feature for creating logical combinations of tags called "metatags".
Metatags use boolean operators AND and OR to combine exactly two other tags (example: sales AND department-c).
After being created, metatags are automatically appended to any person who matches the rule (anyone who has both the sales and department-c tags in our example).