====== Scorm Content Integration (In Progress) ====== 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. - Uploading and unpacking the content - Integration with course player - Progress tracking ====== Uploading and unpacking the content ====== 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. ====== Integration with course player ====== 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. ====== Progress tracking ====== 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. ====== Known Issues ====== 1) __Scorm gem limitations__ - Cannot read inside the and tags of manifest file.(Only manifests with multiple s would require this metadata.) It is a regular practice that a scorm content always has one . So, support for this is not required immediately. But this should be added some time in future. - Cannot parse sequencing related tags in the manifest. 2) __Runtime API__ - At present only most important runtime data is handled. This should be good for now. We can add support for other data model elements down the line. - Runtime API does not handle sequencing and objectives at this point of time. ====== Model and Table design ====== **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 | ====== SCORM 1.2 Support ======