Introducing the gnlms plugin: A WordPress shell implementation of the SCORM runtime environment

When we developed the SCORM compliant  Express Connect course for Summit Healthcare, Summit also required an environment to host it — managing access, registration and tracking user performance. At the time, available free LMS systems (e.g. Moodle) were stand-alone and included extraneous functionality that was not needed. For our client’s purposes, we needed a SCORM compliant runtime environment (RTE) for the course, and a flexible content management system for the surrounding infrastructure.

WordPress is the #1 CMS in use today, so we decided to create a plugin to provide the needed “LMS functions” as a simple add-on to the existing first class content management functions.

Coder’s corner:

Toward that end, we developed shell LMS code to interact with the course and save the course SCORM data in WordPress’s MySQL database as a serialized JSON string. The nice thing about this approach is that the data is already in a browser-native format. You just retrieve the JSON from the database, parse it, and you’re ready to go. Serialization is easily done client-side with the JSON.stringify() method (or this jQuery implementation). Also, starting with version 5.2, PHP supports JSON parsing and serializing with its json_decode() and json_encode() functions, so you can easily examine the SCORM data on the server side to do anything that’s required there.

With the basic course data saving and retrieving in place, we added code to track user-course interactions (e.g. registering for, starting, accessing and completing a course), and added reports for administration. We also implemented a system to automatically send email notifications of various user/course events to site administrators.

We’ve extracted the essentials into a stand-alone WordPress plugin, and added the capability to upload course files in ZIP archives through the WordPress administrative back end.

The plugin code is available on GitHub here:

We’ve found this code useful for a number of projects, however it is just a shell and does not implement a fully SCORM compliant RTE.  In the next few months, we plan to implement SCORM type checking and a number of other functions which will enable the plugin to pass the SCORM RTE self-test.