The prototype work for this can be found at - https://wiki.exphosted.com/doku.php/scorm_player_support.
The current status of the runtime API and data model implementation and the list of improvements that can be done - https://wiki.exphosted.com/doku.php/scorm_2004_runtime_api_and_data_model
To intetegrate scorm content to our system, we need to work on the following.
Scorm content is treated as another special type of content similar to quiz, web links etc. When a user creates a scorm content the data is saved similar to any other uploaded file and a record is created in scorm_packages table. A corresponding record is created in contents table with content_type as ScormPackage. The package is unpacked and the manifest is saved in the scorm_packages table.
The prototype mentioned above plays the content in a frame which is present inside a frameset. The activity navigation is shown in another frame which is present in the same frameset. We can have the content launched in either or both of the following ways.
1) As the course player is already a div, we cannot use frameset and we will use iframe and two frames inside it to hold navigation and content respectively. We shall hide the navigation of the course player when ever scorm content is being played.
Open question -
How to find when the content is unloaded ?
Generally we update the RTE with scores when we close the window in which the content is launched(onunload/ beforeunload) events. We need to find out if all the scorm contents can do this when launched like above. If we cannot do this, then we cannot launch it this way.
We need to proceed with the implementation to figure out if any issues occur with this kind of launching.
2) We can open a new window as soon as we click on the content and launch the scorm content inside it. This looks similar to flex paper fullscreen window. We need to try this implementation and see if any issues.
The progress tracking on each activity is done through the RTE calls and the data is updated in scorm_sessions table.
The overall tracking of scorm score % in a course is yet to be worked on.
1) Scorm gem limitations
2) Runtime API
Models -
ScormPackage - ScormPackage is extended from Document(which is extended from Asset) so that all the physically uploaded files would go to assets table and we resuse most of the code. We overwrite the paperclip settings and other methods for ScormPackage to suit the purpose.
ScormPackageDetail - This has the information of scorm content which is additional to any other asset. At present only manifest is saved here.
Tables -
Table name - scorm_package_deatils
This table stores the additional information of any scorm package which is not present for assets. At present we save manifest here.
| Column_name | type | Description |
|---|---|---|
| id | integer | primary key |
| scorm_package_id | integer | Id of scorm package to which this belongs to |
| manifest | longtext | The parsed manifest object which is used as the course structure |
* Note - The manifest column contains the ScormPackage::Manifest object which is generated after parsing the PIF.
Table name - scorm_sessions
This table saves the runtime data of any user who played this content. We track this based on enrollment_id because one scorm content may be present in more than one course. So, we need both course_id and the user_id when we need to track the progress of a user on a scorm package. Enrollment has both of these details. The number of attempts is stored in progress_scores table.
| Column_name | type | Description |
|---|---|---|
| id | integer | primary key |
| scorm_package_id | integer | foreign key to scorm packages table. The scorm package id corresponding to which this session is created |
| enrollment_id | integer | foreign key to the users table. User who has launched this package. |
| runtime_data | integer | This is a serialized hash containing all the runtime data of all activities. |
| created_at | date_time | created date |
| updated_at | date_time | updated date |