ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
ilObjSCORMLearningModule Class Reference

Class ilObjSCORMLearningModule. More...

+ Inheritance diagram for ilObjSCORMLearningModule:
+ Collaboration diagram for ilObjSCORMLearningModule:

Public Member Functions

 __construct ($a_id=0, $a_call_by_reference=true)
 Constructor @access public. More...
 
 validate ($directory)
 Validate all XML-Files in a SCOM-Directory. More...
 
 getValidationSummary ()
 
 getTrackingItems ()
 
 readObject ()
 read manifest file @access public More...
 
 setLearningProgressSettingsAtUpload ()
 set settings for learning progress determination per default at upload More...
 
 getTrackedItems ()
 get all tracked items of current user More...
 
 getTrackedUsers ($a_search)
 
 getAttemptsForUsers ()
 Get attempts for all users @global ilDB $ilDB. More...
 
 getAttemptsForUser ($a_user_id)
 get number of attempts for a certain user and package More...
 
 getModuleVersionForUsers ()
 Get module version for users. More...
 
 getModuleVersionForUser ($a_user_id)
 get module version that tracking data for a user was recorded on More...
 
 getTrackingDataPerUser ($a_sco_id, $a_user_id)
 Get tracking data per user @global ilDB $ilDB. More...
 
 getTrackingDataAgg ($a_user_id)
 
 getTrackingDataAggSco ($a_sco_id)
 
 exportSelected ($a_all, $a_users=array())
 Export selected user tracking data @global ilDB $ilDB @global ilObjUser $ilUser. More...
 
 importTrackingData ($a_file)
 
 importSuccess ($a_file)
 
 importSuccessForSahsUser ($user_id, $last_access, $status, $attempts=null, $percentage_completed=null, $sco_total_time_sec=null)
 
 decreaseAttemptsForUser ($a_user_id)
 Decrease attempts for user @global ilDB $ilDB. More...
 
 get_user_id ($a_login)
 
 getUserIdEmail ($a_mail)
 assumes that only one account exists for a mailadress More...
 
 sendExportFile ($a_header, $a_content)
 send export file to browser More...
 
 getAllScoIds ()
 
 getStatusForUser ($a_user, $a_allScoIds, $a_numerical=false)
 
 getCourseCompletionForUser ($a_user)
 
 getLastVisited ($user_id)
 
 deleteTrackingDataOfUsers ($a_users)
 
- Public Member Functions inherited from ilObjSAHSLearningModule
 __construct ($a_id=0, $a_call_by_reference=true)
 Constructor @access public. More...
 
 create ($upload=false)
 create file based lm More...
 
 read ()
 read object More...
 
 setEditable ($a_editable)
 Set Editable. More...
 
 getEditable ()
 Get Editable. More...
 
 setTries ($a_tries)
 Set default tries for questions. More...
 
 getTries ()
 Get Tries. More...
 
 setLocalization ($a_val)
 Set localization. More...
 
 getLocalization ()
 Get localization. More...
 
 getDiskUsage ()
 Gets the disk usage of the object in bytes. More...
 
 createDataDirectory ()
 creates data directory for package files ("./data/lm_data/lm_<id>") More...
 
 getDataDirectory ($mode="filesystem")
 get data directory of lm More...
 
 getAPIAdapterName ()
 get api adapter name More...
 
 setAPIAdapterName ($a_api)
 set api adapter name More...
 
 getAPIFunctionsPrefix ()
 get api functions prefix More...
 
 setAPIFunctionsPrefix ($a_prefix)
 set api functions prefix More...
 
 getCreditMode ()
 get credit mode More...
 
 setCreditMode ($a_credit_mode)
 set credit mode More...
 
 setDefaultLessonMode ($a_lesson_mode)
 set default lesson mode More...
 
 getDefaultLessonMode ()
 get default lesson mode More...
 
 getStyleSheetId ()
 get ID of assigned style sheet object More...
 
 setStyleSheetId ($a_style_id)
 set ID of assigned style sheet object More...
 
 setAutoReview ($a_auto_review)
 set auto review as true/false for SCORM 1.2 More...
 
 getAutoReview ()
 get auto review as true/false for SCORM 1.2 More...
 
 setAutoReviewChar ($a_auto_review)
 set auto review as Char for SCORM 2004 More...
 
 getAutoReviewChar ()
 get auto review as Char for SCORM 2004 More...
 
 getMaxAttempt ()
 get max attempt More...
 
 setMaxAttempt ($a_max_attempt)
 set max attempt More...
 
 getModuleVersion ()
 get module version More...
 
 getAssignedGlossary ()
 get assigned glossary More...
 
 setAssignedGlossary ($a_assigned_glossary)
 set assigned glossary More...
 
 setModuleVersion ($a_module_version)
 set max attempt More...
 
 getSession ()
 get session setting More...
 
 setSession ($a_session)
 set session setting More...
 
 getNoMenu ()
 disable menu More...
 
 setNoMenu ($a_no_menu)
 disable menu More...
 
 getHideNavig ()
 hide navigation tree More...
 
 setHideNavig ($a_hide_navig)
 disable menu More...
 
 getCacheDeactivated ()
 BrowserCacheDisabled for SCORM 2004 / ENABLE_JS_DEBUG. More...
 
 getSessionDeactivated ()
 sessionDisabled for SCORM 2004 More...
 
 getDebugActivated ()
 debugActivated More...
 
 getIe_force_render ()
 force Internet Explorer to render again after some Milliseconds - useful for learning Modules with a lot of iframesor frames and IE >=10 More...
 
 setIe_force_render ($a_ie_force_render)
 
 getFourth_Edition ()
 SCORM 2004 4th edition features. More...
 
 setFourth_edition ($a_fourth_edition)
 
 getSequencing ()
 sequencing More...
 
 setSequencing ($a_sequencing)
 
 getInteractions ()
 interactions More...
 
 setInteractions ($a_interactions)
 
 getObjectives ()
 objectives More...
 
 setObjectives ($a_objectives)
 
 getComments ()
 comments More...
 
 setComments ($a_comments)
 
 getTime_from_lms ()
 time_from_lms More...
 
 setTime_from_lms ($a_time_from_lms)
 
 getCheck_values ()
 check_values More...
 
 setCheck_values ($a_check_values)
 
 getOfflineMode ()
 offlineMode More...
 
 setOfflineMode ($a_offline_mode)
 
 getDebug ()
 debug More...
 
 setDebug ($a_debug)
 debug More...
 
 getDebugPw ()
 debug pw More...
 
 setDebugPw ($a_debug_pw)
 debug pw More...
 
 setAutoContinue ($a_auto_continue)
 get auto continue More...
 
 getAutoContinue ()
 set auto continue More...
 
 getAuto_last_visited ()
 auto_last_visited More...
 
 setAuto_last_visited ($a_auto_last_visited)
 
 setSequencingExpertMode ($a_val)
 Set sequencing expert mode. More...
 
 getSequencingExpertMode ()
 Get sequencing expert mode. More...
 
 setAutoSuspend ($a_auto_suspend)
 get auto continue More...
 
 getAutoSuspend ()
 set auto continue More...
 
 getOpenMode ()
 open_mode 0: in Tab/new Window like in previous versions 1: in iFrame with width=100% and heigth=100% 2: in iFrame with specified width and height 3: 4: 5: in new Window without specified width and height 6: in new Window with specified width and height More...
 
 setOpenMode ($a_open_mode)
 
 getWidth ()
 width More...
 
 setWidth ($a_width)
 
 getHeight ()
 height More...
 
 setHeight ($a_height)
 
 getMasteryScore ()
 get mastery_score More...
 
 setMasteryScore ($a_mastery_score)
 set mastery_score More...
 
 checkMasteryScoreValues ()
 check mastery_score / min_normalized_measure of SCOs (SCORM 1.2) / objectives (SCORM 2004) More...
 
 getMasteryScoreValues ()
 get mastery_score_values More...
 
 getIdSetting ()
 update values for mastery_score / min_normalized_measure in database - not requested More...
 
 setIdSetting ($a_id_setting)
 set id_setting More...
 
 getNameSetting ()
 get name_setting More...
 
 setNameSetting ($a_name_setting)
 set name_setting More...
 
 update ()
 update object data More...
 
 setSubType ($a_sub_type)
 get sub type More...
 
 getSubType ()
 set sub type More...
 
 delete ()
 delete SCORM learning module and all related data More...
 
 getPointsInPercent ()
 Returns the points in percent for the learning module This is called by the certificate generator if [SCORM_POINTS] is inserted. More...
 
 getMaxPoints ()
 Returns score.max for the learning module, refered to the last sco where score.max is set. More...
 
 populateByDirectoy ($a_dir, $a_filename="")
 Populate by directory. More...
 
 zipLmForOfflineMode ()
 
 getApiStudentId ()
 Get cmi.core.student_id / cmi.learner_id for API. More...
 
 getApiStudentName ()
 Get cmi.core.student_name / cmi.learner_name for API note: 'lastname, firstname' is required for SCORM 1.2; 9 = no name to hide student_name for external content. More...
 
 getViewButton ()
 get button for view More...
 
- Public Member Functions inherited from ilObject
 __construct ($a_id=0, $a_reference=true)
 Constructor @access public. More...
 
 withReferences ()
 determines wehter objects are referenced or not (got ref ids or not) More...
 
 read ()
 read object data from db into object More...
 
 getId ()
 get object id @access public More...
 
 setId ($a_id)
 set object id @access public More...
 
 setRefId ($a_id)
 set reference id @access public More...
 
 getRefId ()
 get reference id @access public More...
 
 getType ()
 get object type @access public More...
 
 setType ($a_type)
 set object type @access public More...
 
 getPresentationTitle ()
 get presentation title Normally same as title Overwritten for sessions More...
 
 getTitle ()
 get object title @access public More...
 
 getUntranslatedTitle ()
 get untranslated object title @access public More...
 
 setTitle ($a_title)
 set object title More...
 
 getDescription ()
 get object description More...
 
 setDescription ($a_desc)
 set object description More...
 
 getLongDescription ()
 get object long description (stored in object_description) More...
 
 getImportId ()
 get import id More...
 
 setImportId ($a_import_id)
 set import id More...
 
 setOfflineStatus ($a_status)
 Set offline status. More...
 
 getOfflineStatus ()
 Get offline status. More...
 
 supportsOfflineHandling ()
 Check whether object supports offline handling. More...
 
 getOwner ()
 get object owner More...
 
 getOwnerName ()
 
 setOwner ($a_owner)
 set object owner More...
 
 getCreateDate ()
 get create date @access public More...
 
 getLastUpdateDate ()
 get last update date @access public More...
 
 getDiskUsage ()
 Gets the disk usage of the object in bytes. More...
 
 create ()
 create More...
 
 update ()
 update object in db More...
 
 MDUpdateListener ($a_element)
 Meta data update listener. More...
 
 createMetaData ()
 create meta data entry More...
 
 updateMetaData ()
 update meta data entry More...
 
 deleteMetaData ()
 delete meta data entry More...
 
 updateOwner ()
 update owner of object in db More...
 
 putInTree ($a_parent_ref)
 maybe this method should be in tree object!? More...
 
 setPermissions ($a_parent_ref)
 set permissions of object More...
 
 setParentRolePermissions ($a_parent_ref)
 Initialize the permissions of parent roles (local roles of categories, global roles...) This method is overwritten in e.g courses, groups for building permission intersections with non_member templates. More...
 
 createReference ()
 creates reference for object More...
 
 countReferences ()
 count references of object More...
 
 initDefaultRoles ()
 init default roles settings Purpose of this function is to create a local role folder and local roles, that are needed depending on the object type If you want to setup default local roles you MUST overwrite this method in derived object classes (see ilObjForum for an example) @access public More...
 
 applyDidacticTemplate ($a_tpl_id)
 Apply template. More...
 
 setRegisterMode ($a_bool)
 
 isUserRegistered ($a_user_id=0)
 
 requireRegistration ()
 
 getXMLZip ()
 
 getHTMLDirectory ()
 
 appendCopyInfo ($a_target_id, $a_copy_id)
 Prepend Copy info if object with same name exists in that container. More...
 
 cloneDependencies ($a_target_id, $a_copy_id)
 Clone object dependencies. More...
 
 cloneMetaData ($target_obj)
 Copy meta data. More...
 
 getPossibleSubObjects ($a_filter=true)
 get all possible subobjects of this type the object can decide which types of subobjects are possible jut in time overwrite if the decision distinguish from standard model More...
 

Static Public Member Functions

static _getTrackingItems ($a_obj_id)
 get all tracking items of scorm object @access static More...
 
static _lookupLastAccess ($a_obj_id, $a_usr_id)
 Return the last access timestamp for a given user. More...
 
static _getAllScoIds ($a_id)
 Get an array of id's for all Sco's in the module. More...
 
static _getStatusForUser ($a_id, $a_user, $a_allScoIds, $a_numerical=false)
 Get the status of a SCORM module for a given user. More...
 
static _getCourseCompletionForUser ($a_id, $a_user)
 Get the completion of a SCORM module for a given user. More...
 
static _removeTrackingDataForUser ($user_id)
 
static _getScoresForUser ($a_item_id, $a_user_id)
 
- Static Public Member Functions inherited from ilObjSAHSLearningModule
static getAffectiveLocalization ($a_id)
 Get affective localization. More...
 
static _lookupSubType ($a_obj_id)
 lookup subtype id (scorm, ) More...
 
static _getTries ($a_id)
 
static getScormModulesForGlossary ($a_glo_id)
 Get SCORM modules that assign a certain glossary. More...
 
static lookupAssignedGlossary ($a_slm_id)
 Get SCORM modules that assign a certain glossary. More...
 
- Static Public Member Functions inherited from ilObject
static _lookupObjIdByImportId ($a_import_id)
 
static _lookupImportId ($a_obj_id)
 
static _lookupOwnerName ($a_owner_id)
 lookup owner name for owner id More...
 
static _getIdForImportId ($a_import_id)
 get current object id for import id (static) More...
 
static _getAllReferences ($a_id)
 get all reference ids of object More...
 
static _lookupTitle ($a_id)
 lookup object title More...
 
static lookupOfflineStatus ($a_obj_id)
 Lookup offline status using objectDataCache. More...
 
static _lookupOwner ($a_id)
 lookup object owner More...
 
static _getIdsForTitle ($title, $type='', $partialmatch=false)
 
static _lookupDescription ($a_id)
 lookup object description More...
 
static _lookupLastUpdate ($a_id, $a_as_string=false)
 lookup last update More...
 
static _getLastUpdateOfObjects ($a_objs)
 Get last update for a set of media objects. More...
 
static _lookupObjId ($a_id)
 
static _setDeletedDate ($a_ref_id)
 only called in ilTree::saveSubTree More...
 
static setDeletedDates ($a_ref_ids)
 Set deleted date. More...
 
static _resetDeletedDate ($a_ref_id)
 only called in ilObjectGUI::insertSavedNodes More...
 
static _lookupDeletedDate ($a_ref_id)
 only called in ilObjectGUI::insertSavedNodes More...
 
static _writeTitle ($a_obj_id, $a_title)
 write title to db (static) More...
 
static _writeDescription ($a_obj_id, $a_desc)
 write description to db (static) More...
 
static _writeImportId ($a_obj_id, $a_import_id)
 write import id to db (static) More...
 
static _lookupType ($a_id, $a_reference=false)
 lookup object type More...
 
static _isInTrash ($a_ref_id)
 checks wether object is in trash More...
 
static _hasUntrashedReference ($a_obj_id)
 checks wether an object has at least one reference that is not in trash More...
 
static _lookupObjectId ($a_ref_id)
 lookup object id More...
 
static _getObjectsDataForType ($a_type, $a_omit_trash=false)
 get all objects of a certain type More...
 
static _exists ($a_id, $a_reference=false, $a_type=null)
 checks if an object exists in object_data@access public More...
 
static _getObjectsByType ($a_obj_type="", $a_owner="")
 Get objects by type. More...
 
static _prepareCloneSelection ($a_ref_ids, $new_type, $show_path=true)
 Prepare copy wizard object selection. More...
 
static collectDeletionDependencies (&$deps, $a_ref_id, $a_obj_id, $a_type, $a_depth=0)
 Collect deletion dependencies. More...
 
static getDeletionDependencies ($a_obj_id)
 Get deletion dependencies. More...
 
static getLongDescriptions (array $a_obj_ids)
 Get long description data. More...
 
static getAllOwnedRepositoryObjects ($a_user_id)
 Get all ids of objects user owns. More...
 
static fixMissingTitles ($a_type, array &$a_obj_title_map)
 Try to fix missing object titles. More...
 
static _lookupCreationDate ($a_id)
 Lookup creation date. More...
 
static hasAutoRating ($a_type, $a_ref_id)
 Check if auto rating is active for parent group/course. More...
 

Data Fields

 $validator
 
- Data Fields inherited from ilObjSAHSLearningModule
 $validator
 
- Data Fields inherited from ilObject
const TITLE_LENGTH = 255
 max length of object title More...
 
const DESC_LENGTH = 128
 
 $lng
 
 $id
 
 $ref_id
 
 $type
 
 $title
 
 $untranslatedTitle
 
 $desc
 
 $long_desc
 
 $owner
 
 $create_date
 
 $last_update
 
 $import_id
 
 $register = false
 
 $referenced
 
 $objectList
 
 $max_title
 
 $max_desc
 
 $add_dots
 

Private Member Functions

 parseUserId ($il_id)
 Parse il_usr_123_6 id. More...
 
 importRaw ($a_file)
 Import raw data @global ilDB $ilDB @global ilObjUser $ilUser. More...
 
 lookupSCOId ($a_referrer)
 resolves manifest SCOID to internal ILIAS SCO ID More...
 

Additional Inherited Members

- Protected Attributes inherited from ilObject
 $objDefinition
 
 $db
 
 $log
 
 $error
 
 $tree
 
 $app_event_handler
 
 $rbacadmin
 
 $rbacreview
 

Detailed Description

Constructor & Destructor Documentation

◆ __construct()

ilObjSCORMLearningModule::__construct (   $a_id = 0,
  $a_call_by_reference = true 
)

Constructor @access public.

Parameters
integerreference_id or object_id
booleantreat the id as reference_id (true) or object_id (false)

Reimplemented from ilObjSAHSLearningModule.

Reimplemented in ilObjSCORM2004LearningModule.

Definition at line 27 of file class.ilObjSCORMLearningModule.php.

28 {
29 $this->type = "sahs";
30 parent::__construct($a_id, $a_call_by_reference);
31 }

Member Function Documentation

◆ _getAllScoIds()

static ilObjSCORMLearningModule::_getAllScoIds (   $a_id)
static

Get an array of id's for all Sco's in the module.

Parameters
int$a_idObject id
Returns
array Sco id's

Definition at line 1142 of file class.ilObjSCORMLearningModule.php.

1143 {
1144 global $DIC;
1145 $ilDB = $DIC['ilDB'];
1146
1147 $scos = array();
1148
1149 $val_set = $ilDB->queryF(
1150 '
1151 SELECT scorm_object.obj_id,
1152 scorm_object.title,
1153 scorm_object.c_type,
1154 scorm_object.slm_id,
1155 scorm_object.obj_id scoid
1156 FROM scorm_object,sc_item,sc_resource
1157 WHERE(scorm_object.slm_id = %s
1158 AND scorm_object.obj_id = sc_item.obj_id
1159 AND sc_item.identifierref = sc_resource.import_id
1160 AND sc_resource.scormtype = %s)
1161 GROUP BY scorm_object.obj_id,
1162 scorm_object.title,
1163 scorm_object.c_type,
1164 scorm_object.slm_id,
1165 scorm_object.obj_id ',
1166 array('integer', 'text'),
1167 array($a_id,'sco')
1168 );
1169
1170 while ($val_rec = $ilDB->fetchAssoc($val_set)) {
1171 array_push($scos, $val_rec['scoid']);
1172 }
1173 return $scos;
1174 }
global $DIC
Definition: saml.php:7
global $ilDB

References $DIC, and $ilDB.

Referenced by _getCourseCompletionForUser().

+ Here is the caller graph for this function:

◆ _getCourseCompletionForUser()

static ilObjSCORMLearningModule::_getCourseCompletionForUser (   $a_id,
  $a_user 
)
static

Get the completion of a SCORM module for a given user.

Parameters
int$a_idObject id
int$a_userUser id
Returns
boolean Completion status

Reimplemented in ilObjSCORM2004LearningModule.

Definition at line 1225 of file class.ilObjSCORMLearningModule.php.

1226 {
1228 }
static _getStatusForUser($a_id, $a_user, $a_allScoIds, $a_numerical=false)
Get the status of a SCORM module for a given user.
static _getAllScoIds($a_id)
Get an array of id's for all Sco's in the module.

References _getAllScoIds(), and _getStatusForUser().

Referenced by ilCertificateMigrationJob\getScormCertificates().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _getScoresForUser()

static ilObjSCORMLearningModule::_getScoresForUser (   $a_item_id,
  $a_user_id 
)
static

Definition at line 1320 of file class.ilObjSCORMLearningModule.php.

1321 {
1322 global $DIC;
1323 $ilDB = $DIC['ilDB'];
1324
1325 $retAr = array("raw" => null, "max" => null, "scaled" => null);
1326 $val_set = $ilDB->queryF(
1327 "
1328 SELECT lvalue, rvalue FROM scorm_tracking
1329 WHERE sco_id = %s
1330 AND user_id = %s
1331 AND (lvalue = 'cmi.core.score.raw' OR lvalue = 'cmi.core.score.max')",
1332 array('integer', 'integer'),
1333 array($a_item_id, $a_user_id)
1334 );
1335 while ($val_rec = $ilDB->fetchAssoc($val_set)) {
1336 if ($val_rec['lvalue'] == "cmi.core.score.raw") {
1337 $retAr["raw"] = $val_rec["rvalue"];
1338 }
1339 if ($val_rec['lvalue'] == "cmi.core.score.max") {
1340 $retAr["max"] = $val_rec["rvalue"];
1341 }
1342 }
1343 if ($retAr["raw"] != null && $retAr["max"] != null) {
1344 $retAr["scaled"] = ($retAr["raw"] / $retAr["max"]);
1345 }
1346
1347 return $retAr;
1348 }

References $DIC, and $ilDB.

Referenced by ilLPCollectionOfSCOs\getScoresForUserAndCP_Node_Id().

+ Here is the caller graph for this function:

◆ _getStatusForUser()

static ilObjSCORMLearningModule::_getStatusForUser (   $a_id,
  $a_user,
  $a_allScoIds,
  $a_numerical = false 
)
static

Get the status of a SCORM module for a given user.

Parameters
int$a_idObject id
int$a_userUser id
array$a_allScoIdsArray of Sco id's in this module
boolean$a_numericalText (false) or boolean result (true)
Returns
mixed Status result

Definition at line 1184 of file class.ilObjSCORMLearningModule.php.

1185 {
1186 global $DIC;
1187 $ilDB = $DIC['ilDB'];
1188 $lng = $DIC['lng'];
1189
1190 $scos = $a_allScoIds;
1191 //check if all SCO's are completed
1192 $scos_c = implode(',', $scos);
1193
1194 $val_set = $ilDB->queryF(
1195 '
1196 SELECT * FROM scorm_tracking
1197 WHERE (user_id = %s
1198 AND obj_id = %s
1199 AND ' . $ilDB->in('sco_id', $scos, false, 'integer') . '
1200 AND ((lvalue = %s AND ' . $ilDB->like('rvalue', 'clob', 'completed') . ')
1201 OR (lvalue = %s AND ' . $ilDB->like('rvalue', 'clob', 'passed') . ')))',
1202 array('integer','integer','text','text'),
1203 array($a_user,$a_id,'cmi.core.lesson_status', 'cmi.core.lesson_status')
1204 );
1205 while ($val_rec = $ilDB->fetchAssoc($val_set)) {
1206 $key = array_search($val_rec['sco_id'], $scos);
1207 unset($scos[$key]);
1208 }
1209 //check for completion
1210 if (count($scos) == 0) {
1211 $completion = ($a_numerical === true) ? true: $lng->txt("cont_complete");
1212 }
1213 if (count($scos) > 0) {
1214 $completion = ($a_numerical === true) ? false: $lng->txt("cont_incomplete");
1215 }
1216 return $completion;
1217 }
$key
Definition: croninfo.php:18

References $DIC, $ilDB, $key, and ilObject\$lng.

Referenced by _getCourseCompletionForUser().

+ Here is the caller graph for this function:

◆ _getTrackingItems()

static ilObjSCORMLearningModule::_getTrackingItems (   $a_obj_id)
static

get all tracking items of scorm object @access static

Reimplemented in ilObjSCORM2004LearningModule.

Definition at line 65 of file class.ilObjSCORMLearningModule.php.

66 {
67 include_once("./Modules/ScormAicc/classes/SCORM/class.ilSCORMTree.php");
68 $tree = new ilSCORMTree($a_obj_id);
69 $root_id = $tree->readRootId();
70
71 $items = array();
72 $childs = $tree->getSubTree($tree->getNodeData($root_id));
73
74 foreach ($childs as $child) {
75 if ($child["c_type"] == "sit") {
76 include_once("./Modules/ScormAicc/classes/SCORM/class.ilSCORMItem.php");
77 $sc_item = new ilSCORMItem($child["obj_id"]);
78 if ($sc_item->getIdentifierRef() != "") {
79 $items[count($items)] = $sc_item;
80 }
81 }
82 }
83
84 return $items;
85 }
SCORM Object Tree.

References ilObject\$tree.

Referenced by ilLPCollectionOfSCOs\getPossibleItems(), and getTrackingItems().

+ Here is the caller graph for this function:

◆ _lookupLastAccess()

static ilObjSCORMLearningModule::_lookupLastAccess (   $a_obj_id,
  $a_usr_id 
)
static

Return the last access timestamp for a given user.

Parameters
int$a_obj_idobject id
int$user_iduser id
Returns
timestamp

Reimplemented in ilObjSCORM2004LearningModule.

Definition at line 275 of file class.ilObjSCORMLearningModule.php.

276 {
277 global $DIC;
278 $ilDB = $DIC['ilDB'];
279
280 $result = $ilDB->queryF(
281 '
282 SELECT last_access FROM sahs_user
283 WHERE obj_id = %s
284 AND user_id = %s',
285 array('integer','integer'),
286 array($a_obj_id,$a_usr_id)
287 );
288
289 if ($ilDB->numRows($result)) {
290 $row = $ilDB->fetchAssoc($result);
291 return $row["last_access"];
292 }
293 return "";
294 }
$result
$row

References $DIC, $ilDB, $result, and $row.

◆ _removeTrackingDataForUser()

static ilObjSCORMLearningModule::_removeTrackingDataForUser (   $user_id)
static

Definition at line 1303 of file class.ilObjSCORMLearningModule.php.

1304 {
1305 global $DIC;
1306 $ilDB = $DIC['ilDB'];
1307 //gobjective
1308 $ilDB->manipulateF(
1309 'DELETE FROM scorm_tracking WHERE user_id = %s',
1310 array('integer'),
1311 array($user_id)
1312 );
1313 $ilDB->manipulateF(
1314 'DELETE FROM sahs_user WHERE user_id = %s',
1315 array('integer'),
1316 array($user_id)
1317 );
1318 }

References $DIC, and $ilDB.

Referenced by ilObjUser\delete().

+ Here is the caller graph for this function:

◆ decreaseAttemptsForUser()

ilObjSCORMLearningModule::decreaseAttemptsForUser (   $a_user_id)

Decrease attempts for user @global ilDB $ilDB.

Parameters
array$a_user_id

Definition at line 1019 of file class.ilObjSCORMLearningModule.php.

1020 {
1021 global $DIC;
1022 $ilDB = $DIC['ilDB'];
1023
1024 foreach ($a_user_id as $user) {
1025 //first check if there is a package_attempts entry
1026 $val_set = $ilDB->queryF(
1027 'SELECT package_attempts FROM sahs_user WHERE user_id = %s AND obj_id = %s',
1028 array('integer','integer'),
1029 array($user,$this->getID())
1030 );
1031
1032 $val_rec = $ilDB->fetchAssoc($val_set);
1033
1034 if ($val_rec["package_attempts"] != null && $val_rec["package_attempts"] != 0) {
1035 $new_rec = 0;
1036 //decrease attempt by 1
1037 if ((int) $val_rec["package_attempts"] > 0) {
1038 $new_rec = (int) $val_rec["package_attempts"] - 1;
1039 }
1040 $ilDB->manipulateF(
1041 'UPDATE sahs_user SET package_attempts = %s WHERE user_id = %s AND obj_id = %s',
1042 array('integer','integer','integer'),
1043 array($new_rec,$user,$this->getID())
1044 );
1045
1046 //following 2 lines were before 4.4 only for SCORM 1.2
1047 include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
1048 ilLPStatusWrapper::_updateStatus($this->getId(), $user);
1049 }
1050 }
1051 }
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
getId()
get object id @access public
$user
Definition: migrateto20.php:57

References $DIC, $ilDB, $user, ilLPStatusWrapper\_updateStatus(), and ilObject\getId().

+ Here is the call graph for this function:

◆ deleteTrackingDataOfUsers()

ilObjSCORMLearningModule::deleteTrackingDataOfUsers (   $a_users)

Reimplemented in ilObjSCORM2004LearningModule.

Definition at line 1368 of file class.ilObjSCORMLearningModule.php.

1369 {
1370 global $DIC;
1371 $ilDB = $DIC['ilDB'];
1372 include_once("./Services/Tracking/classes/class.ilChangeEvent.php");
1373 include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
1374
1376
1377 foreach ($a_users as $user) {
1378 $ilDB->manipulateF(
1379 '
1380 DELETE FROM scorm_tracking
1381 WHERE user_id = %s
1382 AND obj_id = %s',
1383 array('integer', 'integer'),
1384 array($user, $this->getID())
1385 );
1386
1387 $ilDB->manipulateF(
1388 '
1389 DELETE FROM sahs_user
1390 WHERE user_id = %s
1391 AND obj_id = %s',
1392 array('integer', 'integer'),
1393 array($user, $this->getID())
1394 );
1395
1396 ilLPStatusWrapper::_updateStatus($this->getId(), $user);
1397 }
1398 }
static _deleteReadEventsForUsers($a_obj_id, array $a_user_ids)

References $DIC, $ilDB, $user, ilChangeEvent\_deleteReadEventsForUsers(), ilLPStatusWrapper\_updateStatus(), and ilObject\getId().

Referenced by importSuccess().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ exportSelected()

ilObjSCORMLearningModule::exportSelected (   $a_all,
  $a_users = array() 
)

Export selected user tracking data @global ilDB $ilDB @global ilObjUser $ilUser.

Parameters
bool$a_all
array$a_users

Definition at line 567 of file class.ilObjSCORMLearningModule.php.

568 {
569 global $DIC;
570 $ilDB = $DIC['ilDB'];
571 $ilUser = $DIC['ilUser'];
572 include_once('./Modules/ScormAicc/classes/class.ilSCORMTrackingItems.php');
573 include_once("./Services/Tracking/classes/class.ilLearningProgressBaseGUI.php");
574 include_once('./Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
576 $allowExportPrivacy = $privacy->enabledExportSCORM();
577
578 $csv = "";
579 $query = 'SELECT * FROM sahs_user WHERE obj_id = %s';
580 if (count($a_users) > 0) {
581 $query .= ' AND ' . $ilDB->in('user_id', $a_users, false, 'integer');
582 }
583 $res = $ilDB->queryF(
584 $query,
585 array('integer'),
586 array($this->getId())
587 );
588 while ($data = $ilDB->fetchAssoc($res)) {
589 $csv = $csv . $data["obj_id"]
590 . ";\"" . $this->getTitle() . "\""
591 . ";" . $data["module_version"]
592 . ";\"" . implode("\";\"", ilSCORMTrackingItems::userDataArrayForExport($data["user_id"], $allowExportPrivacy)) . "\""
593 . ";\"" . $data["last_access"] . "\""
594 . ";\"" . ilLearningProgressBaseGUI::__readStatus($data["obj_id"], $data["user_id"]) . "\"" //not $data["status"] because modifications to learning progress could have made before export
595 . ";" . $data["package_attempts"]
596 . ";" . $data["percentage_completed"]
597 . ";" . $data["sco_total_time_sec"]
598// . ";\"" . $certificateDate ."\""
599 . "\n";
600 }
602 $header = "LearningModuleId;LearningModuleTitle;LearningModuleVersion;" . str_replace(',', ';', $udh["cols"]) . ";"
603 . "LastAccess;Status;Attempts;percentageCompletedSCOs;SumTotal_timeSeconds\n";
604
605 $this->sendExportFile($header, $csv);
606 }
static __readStatus($a_obj_id, $user_id)
sendExportFile($a_header, $a_content)
send export file to browser
getTitle()
get object title @access public
static _getInstance()
Get instance of ilPrivacySettings.
static userDataArrayForExport($user, $b_allowExportPrivacy=false)
$query
foreach($_POST as $key=> $value) $res
$ilUser
Definition: imgupload.php:18
$data
Definition: bench.php:6

References $data, $DIC, $header, $ilDB, $ilUser, $query, $res, ilLearningProgressBaseGUI\__readStatus(), ilPrivacySettings\_getInstance(), ilObject\getId(), ilObject\getTitle(), sendExportFile(), ilSCORMTrackingItems\userDataArrayForExport(), and ilSCORMTrackingItems\userDataHeaderForExport().

+ Here is the call graph for this function:

◆ get_user_id()

ilObjSCORMLearningModule::get_user_id (   $a_login)

Definition at line 1055 of file class.ilObjSCORMLearningModule.php.

1056 {
1057 global $DIC;
1058 $ilDB = $DIC['ilDB'];
1059 $ilUser = $DIC['ilUser'];
1060
1061 $val_set = $ilDB->queryF(
1062 'SELECT * FROM usr_data WHERE(login=%s)',
1063 array('text'),
1064 array($a_login)
1065 );
1066 $val_rec = $ilDB->fetchAssoc($val_set);
1067
1068 if (count($val_rec) > 0) {
1069 return $val_rec['usr_id'];
1070 } else {
1071 return null;
1072 }
1073 }

References $DIC, $ilDB, and $ilUser.

Referenced by importRaw(), ilObjSCORM2004LearningModule\importSuccess(), and importSuccess().

+ Here is the caller graph for this function:

◆ getAllScoIds()

ilObjSCORMLearningModule::getAllScoIds ( )

Definition at line 1230 of file class.ilObjSCORMLearningModule.php.

1231 {
1232 global $DIC;
1233 $ilDB = $DIC['ilDB'];
1234
1235 $scos = array();
1236 //get all SCO's of this object
1237 $val_set = $ilDB->queryF(
1238 '
1239 SELECT scorm_object.obj_id,
1240 scorm_object.title,
1241 scorm_object.c_type,
1242 scorm_object.slm_id,
1243 scorm_object.obj_id scoid
1244 FROM scorm_object, sc_item,sc_resource
1245 WHERE(scorm_object.slm_id = %s
1246 AND scorm_object.obj_id = sc_item.obj_id
1247 AND sc_item.identifierref = sc_resource.import_id
1248 AND sc_resource.scormtype = %s )
1249 GROUP BY scorm_object.obj_id,
1250 scorm_object.title,
1251 scorm_object.c_type,
1252 scorm_object.slm_id,
1253 scorm_object.obj_id',
1254 array('integer','text'),
1255 array($this->getId(),'sco')
1256 );
1257
1258 while ($val_rec = $ilDB->fetchAssoc($val_set)) {
1259 array_push($scos, $val_rec['scoid']);
1260 }
1261 return $scos;
1262 }

References $DIC, $ilDB, and ilObject\getId().

Referenced by getCourseCompletionForUser().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getAttemptsForUser()

ilObjSCORMLearningModule::getAttemptsForUser (   $a_user_id)

get number of attempts for a certain user and package

Reimplemented in ilObjSCORM2004LearningModule.

Definition at line 344 of file class.ilObjSCORMLearningModule.php.

345 {
346 global $DIC;
347 $ilDB = $DIC['ilDB'];
348 $val_set = $ilDB->queryF(
349 'SELECT package_attempts FROM sahs_user WHERE obj_id = %s AND user_id = %s',
350 array('integer','integer'),
351 array($this->getId(),$a_user_id)
352 );
353
354 $val_rec = $ilDB->fetchAssoc($val_set);
355
356 if ($val_rec["package_attempts"] == null) {
357 $val_rec["package_attempts"] = "";
358 }
359 return $val_rec["package_attempts"];
360 }

References $DIC, $ilDB, and ilObject\getId().

+ Here is the call graph for this function:

◆ getAttemptsForUsers()

ilObjSCORMLearningModule::getAttemptsForUsers ( )

Get attempts for all users @global ilDB $ilDB.

Returns
array

Definition at line 326 of file class.ilObjSCORMLearningModule.php.

327 {
328 global $DIC;
329 $ilDB = $DIC['ilDB'];
330 $query = 'SELECT user_id, package_attempts FROM sahs_user WHERE obj_id = ' . $ilDB->quote($this->getId(), 'integer') . ' ';
331 $res = $ilDB->query($query);
332
333 $attempts = array();
334 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) {
335 $attempts[$row['user_id']] = (int) $row['package_attempts'];
336 }
337 return $attempts;
338 }

References $DIC, $ilDB, $query, $res, $row, ilDBConstants\FETCHMODE_ASSOC, and ilObject\getId().

+ Here is the call graph for this function:

◆ getCourseCompletionForUser()

ilObjSCORMLearningModule::getCourseCompletionForUser (   $a_user)

Reimplemented in ilObjSCORM2004LearningModule.

Definition at line 1297 of file class.ilObjSCORMLearningModule.php.

1298 {
1299 return $this->getStatusForUser($a_user, $this->getAllScoIds, true);
1300 }
getStatusForUser($a_user, $a_allScoIds, $a_numerical=false)

References getAllScoIds(), and getStatusForUser().

+ Here is the call graph for this function:

◆ getLastVisited()

ilObjSCORMLearningModule::getLastVisited (   $user_id)

Definition at line 1351 of file class.ilObjSCORMLearningModule.php.

1352 {
1353 global $DIC;
1354 $ilDB = $DIC['ilDB'];
1355 $val_set = $ilDB->queryF(
1356 'SELECT last_visited FROM sahs_user WHERE obj_id = %s AND user_id = %s',
1357 array('integer','integer'),
1358 array($this->getID(),$user_id)
1359 );
1360 while ($val_rec = $ilDB->fetchAssoc($val_set)) {
1361 if ($val_rec["last_visited"] != null) {
1362 return "" . $val_rec["last_visited"];
1363 }
1364 }
1365 return '0';
1366 }

References $DIC, and $ilDB.

◆ getModuleVersionForUser()

ilObjSCORMLearningModule::getModuleVersionForUser (   $a_user_id)

get module version that tracking data for a user was recorded on

Reimplemented in ilObjSCORM2004LearningModule.

Definition at line 385 of file class.ilObjSCORMLearningModule.php.

386 {
387 global $DIC;
388 $ilDB = $DIC['ilDB'];
389 $val_set = $ilDB->queryF(
390 'SELECT module_version FROM sahs_user WHERE obj_id = %s AND user_id = %s',
391 array('integer','integer'),
392 array($this->getId(),$a_user_id,0)
393 );
394
395 $val_rec = $ilDB->fetchAssoc($val_set);
396
397 if ($val_rec["module_version"] == null) {
398 $val_rec["module_version"] = "";
399 }
400 return $val_rec["module_version"];
401 }

References $DIC, $ilDB, and ilObject\getId().

+ Here is the call graph for this function:

◆ getModuleVersionForUsers()

ilObjSCORMLearningModule::getModuleVersionForUsers ( )

Get module version for users.

@global ilDB $ilDB

Definition at line 367 of file class.ilObjSCORMLearningModule.php.

368 {
369 global $DIC;
370 $ilDB = $DIC['ilDB'];
371 $query = 'SELECT user_id, module_version FROM sahs_user WHERE obj_id = ' . $ilDB->quote($this->getId(), 'integer') . ' ';
372 $res = $ilDB->query($query);
373
374 $versions = array();
375 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) {
376 $versions[$row['user_id']] = (int) $row['module_version'];
377 }
378 return $versions;
379 }

References $DIC, $ilDB, $query, $res, $row, ilDBConstants\FETCHMODE_ASSOC, and ilObject\getId().

+ Here is the call graph for this function:

◆ getStatusForUser()

ilObjSCORMLearningModule::getStatusForUser (   $a_user,
  $a_allScoIds,
  $a_numerical = false 
)

Definition at line 1264 of file class.ilObjSCORMLearningModule.php.

1265 {
1266 global $DIC;
1267 $ilDB = $DIC['ilDB'];
1268 $scos = $a_allScoIds;
1269 //loook up status
1270 //check if all SCO's are completed
1271 $scos_c = implode(',', $scos);
1272
1273 $val_set = $ilDB->queryF(
1274 '
1275 SELECT sco_id FROM scorm_tracking
1276 WHERE (user_id = %s
1277 AND obj_id = %s
1278 AND ' . $ilDB->in('sco_id', $scos, false, 'integer') . '
1279 AND ((lvalue = %s AND ' . $ilDB->like('rvalue', 'clob', 'completed') . ') OR (lvalue = %s AND ' . $ilDB->like('rvalue', 'clob', 'passed') . ') ) )',
1280 array('integer','integer','text','text',),
1281 array($a_user,$this->getID(),'cmi.core.lesson_status','cmi.core.lesson_status')
1282 );
1283 while ($val_rec = $ilDB->fetchAssoc($val_set)) {
1284 $key = array_search($val_rec['sco_id'], $scos);
1285 unset($scos[$key]);
1286 }
1287 //check for completion
1288 if (count($scos) == 0) {
1289 $completion = ($a_numerical === true) ? true: $this->lng->txt("cont_complete");
1290 }
1291 if (count($scos) > 0) {
1292 $completion = ($a_numerical === true) ? false: $this->lng->txt("cont_incomplete");
1293 }
1294 return $completion;
1295 }

References $DIC, $ilDB, and $key.

Referenced by getCourseCompletionForUser().

+ Here is the caller graph for this function:

◆ getTrackedItems()

ilObjSCORMLearningModule::getTrackedItems ( )

get all tracked items of current user

Reimplemented in ilObjSCORM2004LearningModule.

Definition at line 243 of file class.ilObjSCORMLearningModule.php.

244 {
245 global $DIC;
246 $ilDB = $DIC['ilDB'];
247 $ilUser = $DIC['ilUser'];
248
249 $sco_set = $ilDB->queryF(
250 '
251 SELECT DISTINCT sco_id FROM scorm_tracking WHERE obj_id = %s',
252 array('integer'),
253 array($this->getId())
254 );
255
256 $items = array();
257 while ($sco_rec = $ilDB->fetchAssoc($sco_set)) {
258 include_once("./Modules/ScormAicc/classes/SCORM/class.ilSCORMItem.php");
259 $sc_item = new ilSCORMItem($sco_rec["sco_id"]);
260 if ($sc_item->getIdentifierRef() != "") {
261 $items[count($items)] = $sc_item;
262 }
263 }
264
265 return $items;
266 }

References $DIC, $ilDB, $ilUser, and ilObject\getId().

+ Here is the call graph for this function:

◆ getTrackedUsers()

ilObjSCORMLearningModule::getTrackedUsers (   $a_search)

Definition at line 296 of file class.ilObjSCORMLearningModule.php.

297 {
298 global $DIC;
299 $ilDB = $DIC['ilDB'];
300 $ilUser = $DIC['ilUser'];
301 //TODO: UK last_access is not correct if no Commit or last_visited_sco
302 // $query = 'SELECT user_id,MAX(c_timestamp) last_access, lastname, firstname FROM scorm_tracking st ' .
303 $query = 'SELECT user_id, last_access, lastname, firstname FROM sahs_user st ' .
304 'JOIN usr_data ud ON st.user_id = ud.usr_id ' .
305 'WHERE obj_id = ' . $ilDB->quote($this->getId(), 'integer');
306 if ($a_search) {
307 // $query .= ' AND (' . $ilDB->like('lastname', 'text', '%' . $a_search . '%') . ' OR ' . $ilDB->like('firstname', 'text', '%' . $a_search . '%') .')';
308 $query .= ' AND ' . $ilDB->like('lastname', 'text', '%' . $a_search . '%');
309 }
310 $query .= ' GROUP BY user_id, lastname, firstname, last_access';
311 $sco_set = $ilDB->query($query);
312
313 $items = array();
314 while ($sco_rec = $ilDB->fetchAssoc($sco_set)) {
315 $items[] = $sco_rec;
316 }
317 return $items;
318 }

References $DIC, $ilDB, $ilUser, $query, and ilObject\getId().

+ Here is the call graph for this function:

◆ getTrackingDataAgg()

ilObjSCORMLearningModule::getTrackingDataAgg (   $a_user_id)

Definition at line 434 of file class.ilObjSCORMLearningModule.php.

435 {
436 global $DIC;
437 $ilDB = $DIC['ilDB'];
438
439 // get all users with any tracking data
440 $sco_set = $ilDB->queryF(
441 '
442 SELECT DISTINCT sco_id FROM scorm_tracking
443 WHERE obj_id = %s
444 AND user_id = %s
445 AND sco_id <> %s',
446 array('integer','integer','integer'),
447 array($this->getId(),$a_user_id,0)
448 );
449
450 $data = array();
451 while ($sco_rec = $ilDB->fetchAssoc($sco_set)) {
452 $data_set = $ilDB->queryF(
453 '
454 SELECT * FROM scorm_tracking
455 WHERE obj_id = %s
456 AND sco_id = %s
457 AND user_id = %s
458 AND lvalue <> %s
459 AND (lvalue = %s
460 OR lvalue = %s
461 OR lvalue = %s)',
462 array('integer','integer','integer','text','text','text','text'),
463 array($this->getId(),
464 $sco_rec["sco_id"],
465 $a_user_id,
466 "package_attempts",
467 "cmi.core.lesson_status",
468 "cmi.core.total_time",
469 "cmi.core.score.raw")
470 );
471
472 $score = $time = $status = "";
473
474 while ($data_rec = $ilDB->fetchAssoc($data_set)) {
475 switch ($data_rec["lvalue"]) {
476 case "cmi.core.lesson_status":
477 $status = $data_rec["rvalue"];
478 break;
479
480 case "cmi.core.total_time":
481 $time = $data_rec["rvalue"];
482 break;
483
484 case "cmi.core.score.raw":
485 $score = $data_rec["rvalue"];
486 break;
487 }
488 }
489 //create sco_object
490 include_once './Modules/ScormAicc/classes/SCORM/class.ilSCORMItem.php';
491 $sc_item = new ilSCORMItem($sco_rec["sco_id"]);
492 $data[] = array("sco_id" => $sco_rec["sco_id"], "title" => $sc_item->getTitle(),
493 "score" => $score, "time" => $time, "status" => $status);
494 }
495 return (array) $data;
496 }
$time
Definition: cron.php:21

References $data, $DIC, $ilDB, $time, and ilObject\getId().

+ Here is the call graph for this function:

◆ getTrackingDataAggSco()

ilObjSCORMLearningModule::getTrackingDataAggSco (   $a_sco_id)

Definition at line 498 of file class.ilObjSCORMLearningModule.php.

499 {
500 global $DIC;
501 $ilDB = $DIC['ilDB'];
502
503 // get all users with any tracking data
504 $user_set = $ilDB->queryF(
505 '
506 SELECT DISTINCT user_id FROM scorm_tracking
507 WHERE obj_id = %s
508 AND sco_id = %s',
509 array('integer','integer'),
510 array($this->getId(),$a_sco_id)
511 );
512
513 $data = array();
514 while ($user_rec = $ilDB->fetchAssoc($user_set)) {
515 $data_set = $ilDB->queryF(
516 '
517 SELECT * FROM scorm_tracking
518 WHERE obj_id = %s
519 AND sco_id = %s
520 AND user_id = %s
521 AND (lvalue = %s
522 OR lvalue = %s
523 OR lvalue = %s)',
524 array('integer','integer','integer','text','text','text'),
525 array($this->getId(),
526 $a_sco_id,
527 $user_rec["user_id"],
528 "cmi.core.lesson_status",
529 "cmi.core.total_time",
530 "cmi.core.score.raw")
531 );
532
533 $score = $time = $status = "";
534
535 while ($data_rec = $ilDB->fetchAssoc($data_set)) {
536 switch ($data_rec["lvalue"]) {
537 case "cmi.core.lesson_status":
538 $status = $data_rec["rvalue"];
539 break;
540
541 case "cmi.core.total_time":
542 $time = $data_rec["rvalue"];
543 break;
544
545 case "cmi.core.score.raw":
546 $score = $data_rec["rvalue"];
547 break;
548 }
549 }
550
551 $data[] = array("user_id" => $user_rec["user_id"],
552 "score" => $score, "time" => $time, "status" => $status);
553 }
554
555 return $data;
556 }

References $data, $DIC, $ilDB, $time, and ilObject\getId().

+ Here is the call graph for this function:

◆ getTrackingDataPerUser()

ilObjSCORMLearningModule::getTrackingDataPerUser (   $a_sco_id,
  $a_user_id 
)

Get tracking data per user @global ilDB $ilDB.

Parameters
int$a_sco_id
int$a_user_id
Returns
array

Definition at line 410 of file class.ilObjSCORMLearningModule.php.

411 {
412 global $DIC;
413 $ilDB = $DIC['ilDB'];
414
415 $data_set = $ilDB->queryF(
416 '
417 SELECT * FROM scorm_tracking
418 WHERE user_id = %s
419 AND sco_id = %s
420 AND obj_id = %s
421 ORDER BY lvalue',
422 array('integer','integer','integer'),
423 array($a_user_id,$a_sco_id,$this->getId())
424 );
425
426 $data = array();
427 while ($data_rec = $ilDB->fetchAssoc($data_set)) {
428 $data[] = $data_rec;
429 }
430
431 return $data;
432 }

References $data, $DIC, $ilDB, and ilObject\getId().

+ Here is the call graph for this function:

◆ getTrackingItems()

ilObjSCORMLearningModule::getTrackingItems ( )

Definition at line 55 of file class.ilObjSCORMLearningModule.php.

56 {
58 }
static _getTrackingItems($a_obj_id)
get all tracking items of scorm object @access static

References _getTrackingItems(), and ilObject\getId().

+ Here is the call graph for this function:

◆ getUserIdEmail()

ilObjSCORMLearningModule::getUserIdEmail (   $a_mail)

assumes that only one account exists for a mailadress

Definition at line 1107 of file class.ilObjSCORMLearningModule.php.

1108 {
1109 global $DIC;
1110 $ilDB = $DIC['ilDB'];
1111 $ilUser = $DIC['ilUser'];
1112
1113 $val_set = $ilDB->queryF(
1114 'SELECT usr_id FROM usr_data WHERE(email=%s)',
1115 array('text'),
1116 array($a_mail)
1117 );
1118 $val_rec = $ilDB->fetchAssoc($val_set);
1119
1120
1121 return $val_rec["usr_id"];
1122 }

References $DIC, $ilDB, and $ilUser.

◆ getValidationSummary()

ilObjSCORMLearningModule::getValidationSummary ( )

Definition at line 47 of file class.ilObjSCORMLearningModule.php.

48 {
49 if (is_object($this->validator)) {
50 return $this->validator->getSummary();
51 }
52 return "";
53 }

Referenced by ilObjSCORM2004LearningModule\readObject(), and readObject().

+ Here is the caller graph for this function:

◆ importRaw()

ilObjSCORMLearningModule::importRaw (   $a_file)
private

Import raw data @global ilDB $ilDB @global ilObjUser $ilUser.

Parameters
string$a_file
Returns
void

Definition at line 852 of file class.ilObjSCORMLearningModule.php.

853 {
854 global $DIC;
855 $ilDB = $DIC['ilDB'];
856 $ilUser = $DIC['ilUser'];
857 $lng = $DIC['lng'];
858 $lng->loadLanguageModule("scormtrac");
859
860 $fhandle = fopen($a_file, "r");
861
862 $fields = fgetcsv($fhandle, pow(2, 16), ';');
863 $users = array();
864 $a_last_access = array();
865 $a_time = array();
866 $a_package_attempts = array();
867 $a_module_version = array();
868 while (($csv_rows = fgetcsv($fhandle, pow(2, 16), ";")) !== false) {
869 $data = array_combine($fields, $csv_rows);
870 if ($data['Userid']) {
871 $user_id = $this->parseUserId($data['Userid']);
872 } elseif ($data[$lng->txt("user")]) {
873 if (is_int($data[$lng->txt("user")])) {
874 $user_id = $data[$lng->txt("user")];
875 }
876 }
877 if ($data[$lng->txt("login")]) {
878 $user_id = $this->get_user_id($data[$lng->txt("login")]);
879 }
880 if (!$user_id) {
881 continue;
882 }
883
884 if ($data['Scoid']) {
885 $il_sco_id = $this->lookupSCOId($data['Scoid']);
886 }
887 if ($data[$lng->txt("identifierref")]) {
888 $il_sco_id = $this->lookupSCOId($data[$lng->txt("identifierref")]);
889 }
890 if (!$il_sco_id) {
891 continue;
892 }
893
894 $c_timestamp = "";
895 if ($data['Timestamp']) {
896 $c_timestamp = $data['Timestamp'];
897 }
898 if ($data[$lng->txt("c_timestamp")]) {
899 $c_timestamp = $data[$lng->txt("c_timestamp")];
900 }
901 if ($c_timestamp == "") {
902 $date = new DateTime();
903 $c_timestamp = $date->getTimestamp();
904 } else {
905 if ($a_last_access[$user_id]) {
906 if ($a_last_access[$user_id] < $c_timestamp) {
907 $a_last_access[$user_id] = $c_timestamp;
908 }
909 } else {
910 $a_last_access[$user_id] = $c_timestamp;
911 }
912 }
913
914 if (!$data['Key']) {
915 continue;
916 }
917 if (!$data['Value']) {
918 $data['Value'] = "";
919 }
920
921 if ($data['Key'] == "cmi.core.total_time" && $data['Value'] != "") {
922 $tarr = explode(":", $data['Value']);
923 $sec = (int) $tarr[2] + (int) $tarr[1] * 60 +
924 (int) substr($tarr[0], strlen($tarr[0]) - 3) * 60 * 60;
925 if ($a_time[$user_id]) {
926 $a_time[$user_id] += $sec;
927 } else {
928 $a_time[$user_id] = $sec;
929 }
930 }
931 //do the actual import
932 if ($il_sco_id > 0) {
933 $statement = $ilDB->queryF(
934 '
935 SELECT * FROM scorm_tracking
936 WHERE user_id = %s
937 AND sco_id = %s
938 AND lvalue = %s
939 AND obj_id = %s',
940 array('integer', 'integer', 'text', 'integer'),
941 array($user_id, $il_sco_id, $data['Key'], $this->getID())
942 );
943 if ($ilDB->numRows($statement) > 0) {
944 $ilDB->update(
945 'scorm_tracking',
946 array(
947 'rvalue' => array('clob', $data['Value']),
948 'c_timestamp' => array('timestamp', $c_timestamp)
949 ),
950 array(
951 'user_id' => array('integer', $user_id),
952 'sco_id' => array('integer', $il_sco_id),
953 'lvalue' => array('text', $data['Key']),
954 'obj_id' => array('integer', $this->getId())
955 )
956 );
957 } else {
958 $ilDB->insert('scorm_tracking', array(
959 'obj_id' => array('integer', $this->getId()),
960 'user_id' => array('integer', $user_id),
961 'sco_id' => array('integer', $il_sco_id),
962 'lvalue' => array('text', $data['Key']),
963 'rvalue' => array('clob', $data['Value']),
964 'c_timestamp' => array('timestamp', $data['Timestamp'])
965 ));
966 }
967 }
968 // $package_attempts = 1;
969 if ($il_sco_id == 0) {
970 if ($data['Key'] == "package_attempts") {
971 $a_package_attempts[$user_id] = $data['Value'];
972 }
973 // if ($data['Key'] == "module_version") $a_module_version[$user_id] = $data['Value'];
974 }
975 if (!in_array($user_id, $users)) {
976 $users[] = $user_id;
977 }
978 }
979 fclose($fhandle);
980
981 //UK determineStatus, percentage_completed and syncGlobalStatus
982 include_once './Services/Tracking/classes/class.ilLPStatusWrapper.php';
984
985 // include_once './Services/Tracking/classes/status/class.ilLPStatusSCORM.php';
986 include_once './Services/Tracking/classes/class.ilLPStatus.php';
987 foreach ($users as $user_id) {
988 $attempts = 1;
989 if ($a_package_attempts[$user_id]) {
990 $attempts = $a_package_attempts[$user_id];
991 }
992 // $module_version = 1;
993 // if ($a_module_version[$user_id]) $module_version = $a_module_version[$user_id];
994 $sco_total_time_sec = null;
995 if ($a_time[$user_id]) {
996 $sco_total_time_sec = $a_time[$user_id];
997 }
998 $last_access = null;
999 if ($a_last_access[$user_id]) {
1000 $last_access = $a_last_access[$user_id];
1001 }
1002 // $status = ilLPStatusWrapper::_determineStatus($this->getId(),$user_id);
1003 $status = ilLPStatus::_lookupStatus($this->getId(), $user_id);
1004 // $percentage_completed = ilLPStatusSCORM::determinePercentage($this->getId(),$user_id);
1005 $percentage_completed = ilLPStatus::_lookupPercentage($this->getId(), $user_id);
1006
1007 $this->importSuccessForSahsUser($user_id, $last_access, $status, $attempts, $percentage_completed, $sco_total_time_sec);
1008 }
1009
1010 return 0;
1011 }
$users
Definition: authpage.php:44
static _refreshStatus($a_obj_id, $a_users=null)
Set dirty.
static _lookupStatus($a_obj_id, $a_user_id, $a_create=true)
Lookup status.
static _lookupPercentage($a_obj_id, $a_user_id)
Lookup percentage.
lookupSCOId($a_referrer)
resolves manifest SCOID to internal ILIAS SCO ID
parseUserId($il_id)
Parse il_usr_123_6 id.
importSuccessForSahsUser($user_id, $last_access, $status, $attempts=null, $percentage_completed=null, $sco_total_time_sec=null)

References $data, $DIC, $ilDB, $ilUser, ilObject\$lng, $users, ilLPStatus\_lookupPercentage(), ilLPStatus\_lookupStatus(), ilLPStatusWrapper\_refreshStatus(), get_user_id(), ilObject\getId(), importSuccessForSahsUser(), lookupSCOId(), and parseUserId().

Referenced by importTrackingData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ importSuccess()

ilObjSCORMLearningModule::importSuccess (   $a_file)

Reimplemented in ilObjSCORM2004LearningModule.

Definition at line 643 of file class.ilObjSCORMLearningModule.php.

644 {
645 global $DIC;
646 $ilDB = $DIC['ilDB'];
647 $ilUser = $DIC['ilUser'];
648 include_once("./Services/Tracking/classes/class.ilLPStatus.php");
649 $scos = array();
650 //get all SCO's of this object ONLY RELEVANT!
651 include_once './Services/Object/classes/class.ilObjectLP.php';
652 $olp = ilObjectLP::getInstance($this->getId());
653 $collection = $olp->getCollectionInstance();
654 if ($collection) {
655 $scos = $collection->getItems();
656 }
657
658 $fhandle = fopen($a_file, "r");
659
660 $obj_id = $this->getID();
661 $fields = fgetcsv($fhandle, pow(2, 16), ';');
662 $users = array();
663 $usersToDelete = array();
664 while (($csv_rows = fgetcsv($fhandle, pow(2, 16), ";")) !== false) {
665 $data = array_combine($fields, $csv_rows);
666 //no check the format - sufficient to import users
667 if ($data["Login"]) {
668 $user_id = $this->get_user_id($data["Login"]);
669 }
670 if ($data["login"]) {
671 $user_id = $this->get_user_id($data["login"]);
672 }
673 //add mail in future
674 if ($data["user"] && is_numeric($data["user"])) {
675 $user_id = (int) $data["user"];
676 }
677
678 if ($user_id > 0) {
679 $last_access = ilUtil::now();
680 if ($data['Date']) {
681 $date_ex = explode('.', $data['Date']);
682 $last_access = implode('-', array($date_ex[2], $date_ex[1], $date_ex[0]));
683 }
684 if ($data['LastAccess']) {
685 $last_access = $data['LastAccess'];
686 }
687
689
690 if ($data["Status"]) {
691 if (is_int($data["Status"])) {
692 $status = $data["Status"];
693 } elseif ($data["Status"] == "0" || $data["Status"] == "1" || $data["Status"] == "2" || $data["Status"] == "3") {
694 $status = (int) $data["Status"];
695 } elseif ($data["Status"] == ilLPStatus::LP_STATUS_NOT_ATTEMPTED) {
697 } elseif ($data["Status"] == ilLPStatus::LP_STATUS_IN_PROGRESS) {
699 } elseif ($data["Status"] == ilLPStatus::LP_STATUS_FAILED) {
701 }
702 }
703
704 $attempts = null;
705 if ($data["Attempts"]) {
706 $attempts = $data["Attempts"];
707 }
708
709 $percentage_completed = 0;
711 $percentage_completed = 100;
712 }
713 if ($data['percentageCompletedSCOs']) {
714 $percentage_completed = $data['percentageCompletedSCOs'];
715 }
716
717 $sco_total_time_sec = null;
718 if ($data['SumTotal_timeSeconds']) {
719 $sco_total_time_sec = $data['SumTotal_timeSeconds'];
720 }
721
723 $usersToDelete[] = $user_id;
724 } else {
725 $this->importSuccessForSahsUser($user_id, $last_access, $status, $attempts, $percentage_completed, $sco_total_time_sec);
726 $users[] = $user_id;
727 }
728
730 foreach ($scos as $sco_id) {
731 $statement = $ilDB->queryF(
732 '
733 SELECT * FROM scorm_tracking
734 WHERE user_id = %s
735 AND sco_id = %s
736 AND lvalue = %s
737 AND obj_id = %s',
738 array('integer','integer','text','integer'),
739 array($user_id, $sco_id, 'cmi.core.lesson_status',$obj_id)
740 );
741 if ($ilDB->numRows($statement) > 0) {
742 $ilDB->update(
743 'scorm_tracking',
744 array(
745 'rvalue' => array('clob', 'completed'),
746 'c_timestamp' => array('timestamp', $last_access)
747 ),
748 array(
749 'user_id' => array('integer', $user_id),
750 'sco_id' => array('integer', $sco_id),
751 'lvalue' => array('text', 'cmi.core.lesson_status'),
752 'obj_id' => array('integer', $obj_id)
753 )
754 );
755 } else {
756 $ilDB->insert('scorm_tracking', array(
757 'obj_id' => array('integer', $obj_id),
758 'user_id' => array('integer', $user_id),
759 'sco_id' => array('integer', $sco_id),
760 'lvalue' => array('text', 'cmi.core.lesson_status'),
761 'rvalue' => array('clob', 'completed'),
762 'c_timestamp' => array('timestamp', $last_access)
763 ));
764 }
765 }
766 }
767 } else {
768 //echo "Warning! User $csv_rows[0] does not exist in ILIAS. Data for this user was skipped.\n";
769 }
770 }
771 if (count($usersToDelete) > 0) {
772 // include_once("./Services/Tracking/classes/class.ilLPMarks.php");
773 // ilLPMarks::_deleteForUsers($this->getId(), $usersToDelete);
774 $this->deleteTrackingDataOfUsers($usersToDelete);
775 }
776 include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
778 return 0;
779 }
const LP_STATUS_COMPLETED_NUM
const LP_STATUS_FAILED
const LP_STATUS_IN_PROGRESS_NUM
const LP_STATUS_NOT_ATTEMPTED_NUM
const LP_STATUS_FAILED_NUM
const LP_STATUS_NOT_ATTEMPTED
const LP_STATUS_IN_PROGRESS
static getInstance($a_obj_id)
static now()
Return current timestamp in Y-m-d H:i:s format.

References $data, $DIC, $ilDB, $ilUser, $users, ilLPStatusWrapper\_refreshStatus(), deleteTrackingDataOfUsers(), get_user_id(), ilObject\getId(), ilObjectLP\getInstance(), importSuccessForSahsUser(), ilLPStatus\LP_STATUS_COMPLETED_NUM, ilLPStatus\LP_STATUS_FAILED, ilLPStatus\LP_STATUS_FAILED_NUM, ilLPStatus\LP_STATUS_IN_PROGRESS, ilLPStatus\LP_STATUS_IN_PROGRESS_NUM, ilLPStatus\LP_STATUS_NOT_ATTEMPTED, ilLPStatus\LP_STATUS_NOT_ATTEMPTED_NUM, and ilUtil\now().

Referenced by importTrackingData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ importSuccessForSahsUser()

ilObjSCORMLearningModule::importSuccessForSahsUser (   $user_id,
  $last_access,
  $status,
  $attempts = null,
  $percentage_completed = null,
  $sco_total_time_sec = null 
)

Definition at line 781 of file class.ilObjSCORMLearningModule.php.

782 {
783 global $DIC;
784 $ilDB = $DIC['ilDB'];
785 $statement = $ilDB->queryF(
786 'SELECT * FROM sahs_user WHERE obj_id = %s AND user_id = %s',
787 array('integer','integer'),
788 array($this->getID(),$user_id)
789 );
790 if ($ilDB->numRows($statement) > 0) {
791 $ilDB->update(
792 'sahs_user',
793 array(
794 'last_access' => array('timestamp', $last_access),
795 'status' => array('integer', $status),
796 'package_attempts' => array('integer', $attempts),
797 'percentage_completed' => array('integer', $percentage_completed),
798 'sco_total_time_sec' => array('integer', $sco_total_time_sec)
799 ),
800 array(
801 'obj_id' => array('integer', $this->getID()),
802 'user_id' => array('integer', $user_id)
803 )
804 );
805 } else {
806 $ilDB->insert('sahs_user', array(
807 'obj_id' => array('integer', $this->getID()),
808 'user_id' => array('integer', $user_id),
809 'last_access' => array('timestamp', $last_access),
810 'status' => array('integer', $status),
811 'package_attempts' => array('integer', $attempts),
812 'percentage_completed' => array('integer', $percentage_completed),
813 'sco_total_time_sec' => array('integer', $sco_total_time_sec)
814 ));
815 }
816
817 include_once("./Services/Tracking/classes/class.ilChangeEvent.php");
818 ilChangeEvent::_recordReadEvent("sahs", (int) $_GET["ref_id"], $this->getID(), $user_id, false, $attempts, $sco_total_time_sec);
819 }
$_GET["client_id"]
static _recordReadEvent( $a_type, $a_ref_id, $obj_id, $usr_id, $isCatchupWriteEvents=true, $a_ext_rc=false, $a_ext_time=false)
Records a read event and catches up with write events.

References $_GET, $DIC, $ilDB, and ilChangeEvent\_recordReadEvent().

Referenced by importRaw(), ilObjSCORM2004LearningModule\importSuccess(), and importSuccess().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ importTrackingData()

ilObjSCORMLearningModule::importTrackingData (   $a_file)

Definition at line 609 of file class.ilObjSCORMLearningModule.php.

610 {
611 global $DIC;
612 $ilDB = $DIC['ilDB'];
613 $ilUser = $DIC['ilUser'];
614
615 $error = 0;
616 //echo file_get_contents($a_file);
617 $method = null;
618
619 //lets import
620 $fhandle = fopen($a_file, "r");
621
622 //the top line is the field names
623 $fields = fgetcsv($fhandle, pow(2, 16), ';');
624 //lets check the import method
625 fclose($fhandle);
626
627 switch ($fields[0]) {
628 case "Scoid":
629 case "SCO-Identifier":
630 $error = $this->importRaw($a_file);
631 break;
632 case "Department":
633 case "LearningModuleId":
634 $error = $this->importSuccess($a_file);
635 break;
636 default:
637 return -1;
638 break;
639 }
640 return $error;
641 }
importRaw($a_file)
Import raw data @global ilDB $ilDB @global ilObjUser $ilUser.

References $DIC, ilObject\$error, $ilDB, $ilUser, importRaw(), and importSuccess().

+ Here is the call graph for this function:

◆ lookupSCOId()

ilObjSCORMLearningModule::lookupSCOId (   $a_referrer)
private

resolves manifest SCOID to internal ILIAS SCO ID

Definition at line 1079 of file class.ilObjSCORMLearningModule.php.

1080 {
1081 global $DIC;
1082 $ilDB = $DIC['ilDB'];
1083 $ilUser = $DIC['ilUser'];
1084
1085 //non specific SCO entries
1086 if ($a_referrer == "0") {
1087 return 0;
1088 }
1089
1090 $val_set = $ilDB->queryF(
1091 '
1092 SELECT obj_id FROM sc_item,scorm_tree
1093 WHERE (obj_id = child
1094 AND identifierref = %s
1095 AND slm_id = %s)',
1096 array('text','integer'),
1097 array($a_referrer,$this->getID())
1098 );
1099 $val_rec = $ilDB->fetchAssoc($val_set);
1100
1101 return $val_rec["obj_id"];
1102 }

References $DIC, $ilDB, and $ilUser.

Referenced by importRaw().

+ Here is the caller graph for this function:

◆ parseUserId()

ilObjSCORMLearningModule::parseUserId (   $il_id)
private

Parse il_usr_123_6 id.

Parameters
<type>$il_id
Returns
<type>

Definition at line 826 of file class.ilObjSCORMLearningModule.php.

827 {
828 global $DIC;
829 $ilSetting = $DIC['ilSetting'];
830
831 $parts = explode('_', $il_id);
832
833 if (!count((array) $parts)) {
834 return 0;
835 }
836 if (!isset($parts[2]) or !isset($parts[3])) {
837 return 0;
838 }
839 if ($parts[2] != $ilSetting->get('inst_id', $parts[2])) {
840 return 0;
841 }
842 return $parts[3];
843 }
global $ilSetting
Definition: privfeed.php:17

References $DIC, and $ilSetting.

Referenced by importRaw().

+ Here is the caller graph for this function:

◆ readObject()

ilObjSCORMLearningModule::readObject ( )

read manifest file @access public

Reimplemented in ilObjSCORM2004LearningModule.

Definition at line 91 of file class.ilObjSCORMLearningModule.php.

92 {
93 global $DIC;
94 $ilErr = $DIC['ilErr'];
95
96 $needs_convert = false;
97
98 // convert imsmanifest.xml file in iso to utf8 if needed
99
100 $manifest_file = $this->getDataDirectory() . "/imsmanifest.xml";
101
102 // check if manifestfile exists and space left on device...
103 $check_for_manifest_file = is_file($manifest_file);
104
105 // if no manifestfile
106 if (!$check_for_manifest_file) {
107 $this->ilias->raiseError($this->lng->txt("Manifestfile $manifest_file not found!"), $this->ilias->error_obj->MESSAGE);
108 return;
109 }
110
111 if ($check_for_manifest_file) {
112 $manifest_file_array = file($manifest_file);
113 foreach ($manifest_file_array as $mfa) {
114 // if (seems_not_utf8($mfa))
115 if (@iconv('UTF-8', 'UTF-8', $mfa) != $mfa) {
116 $needs_convert = true;
117 break;
118 }
119 }
120
121 // to copy the file we need some extraspace, counted in bytes *2 ... we need 2 copies....
122 $estimated_manifest_filesize = filesize($manifest_file) * 2;
123
124 // i deactivated this, because it seems to fail on some windows systems (see bug #1795)
125 //$check_disc_free = disk_free_space($this->getDataDirectory()) - $estimated_manifest_filesize;
126 $check_disc_free = 2;
127 }
128
129 // if $manifest_file needs to be converted to UTF8
130 if ($needs_convert) {
131 // if file exists and enough space left on device
132 if ($check_for_manifest_file && ($check_disc_free > 1)) {
133
134 // create backup from original
135 if (!copy($manifest_file, $manifest_file . ".old")) {
136 echo "Failed to copy $manifest_file...<br>\n";
137 }
138
139 // read backupfile, convert each line to utf8, write line to new file
140 // php < 4.3 style
141 $f_write_handler = fopen($manifest_file . ".new", "w");
142 $f_read_handler = fopen($manifest_file . ".old", "r");
143 while (!feof($f_read_handler)) {
144 $zeile = fgets($f_read_handler);
145 //echo mb_detect_encoding($zeile);
146 fputs($f_write_handler, utf8_encode($zeile));
147 }
148 fclose($f_read_handler);
149 fclose($f_write_handler);
150
151 // copy new utf8-file to imsmanifest.xml
152 if (!copy($manifest_file . ".new", $manifest_file)) {
153 echo "Failed to copy $manifest_file...<br>\n";
154 }
155
156 if (!@is_file($manifest_file)) {
157 $this->ilias->raiseError(
158 $this->lng->txt("cont_no_manifest"),
159 $this->ilias->error_obj->WARNING
160 );
161 }
162 } else {
163 // gives out the specific error
164
165 if (!($check_disc_free > 1)) {
166 $this->ilias->raiseError($this->lng->txt("Not enough space left on device!"), $this->ilias->error_obj->MESSAGE);
167 }
168 return;
169 }
170 } else {
171 // check whether file starts with BOM (that confuses some sax parsers, see bug #1795)
172 $hmani = fopen($manifest_file, "r");
173 $start = fread($hmani, 3);
174 if (strtolower(bin2hex($start)) == "efbbbf") {
175 $f_write_handler = fopen($manifest_file . ".new", "w");
176 while (!feof($hmani)) {
177 $n = fread($hmani, 900);
178 fputs($f_write_handler, $n);
179 }
180 fclose($f_write_handler);
181 fclose($hmani);
182
183 // copy new utf8-file to imsmanifest.xml
184 if (!copy($manifest_file . ".new", $manifest_file)) {
185 echo "Failed to copy $manifest_file...<br>\n";
186 }
187 } else {
188 fclose($hmani);
189 }
190 }
191
192 //validate the XML-Files in the SCORM-Package
193 if ($_POST["validate"] == "y") {
194 if (!$this->validate($this->getDataDirectory())) {
195 $ilErr->raiseError("<b>Validation Error(s):</b><br>" . $this->getValidationSummary(), $ilErr->MESSAGE);
196 }
197 }
198
199 // start SCORM package parser
200 include_once("./Modules/ScormAicc/classes/SCORM/class.ilSCORMPackageParser.php");
201 // todo determine imsmanifest.xml path here...
202 $slmParser = new ilSCORMPackageParser($this, $manifest_file);
203 $slmParser->startParsing();
204 return $slmParser->getPackageTitle();
205 }
$n
Definition: RandomTest.php:85
$_POST["username"]
getDataDirectory($mode="filesystem")
get data directory of lm
validate($directory)
Validate all XML-Files in a SCOM-Directory.
redirection script todo: (a better solution should control the processing via a xml file)
$ilErr
Definition: raiseError.php:18
$start
Definition: bench.php:8

References $_POST, $DIC, $ilErr, $n, $start, ilObjSAHSLearningModule\getDataDirectory(), getValidationSummary(), and validate().

+ Here is the call graph for this function:

◆ sendExportFile()

ilObjSCORMLearningModule::sendExportFile (   $a_header,
  $a_content 
)

send export file to browser

Definition at line 1128 of file class.ilObjSCORMLearningModule.php.

1129 {
1130 $timestamp = time();
1131 $refid = $this->getRefId();
1132 $filename = "scorm_tracking_" . $refid . "_" . $timestamp . ".csv";
1134 exit;
1135 }
exit
Definition: backend.php:16
$filename
Definition: buildRTE.php:89
foreach($mandatory_scripts as $file) $timestamp
Definition: buildRTE.php:81
getRefId()
get reference id @access public
static deliverData($a_data, $a_filename, $mime="application/octet-stream", $charset="")
deliver data for download via browser.
$a_content
Definition: workflow.php:93

References $a_content, $filename, $timestamp, ilUtil\deliverData(), exit, and ilObject\getRefId().

Referenced by exportSelected().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setLearningProgressSettingsAtUpload()

ilObjSCORMLearningModule::setLearningProgressSettingsAtUpload ( )

set settings for learning progress determination per default at upload

Definition at line 210 of file class.ilObjSCORMLearningModule.php.

211 {
212 global $DIC;
213 $ilSetting = $DIC['ilSetting'];
214 //condition 1
215 $lm_set = new ilSetting("lm");
216 if ($lm_set->get('scorm_lp_auto_activate') != 1) {
217 return;
218 }
219 //condition 2
220 include_once("./Services/Tracking/classes/class.ilObjUserTracking.php");
222 return;
223 }
224
225 //set Learning Progress to Automatic by Collection of SCORM Items
226 include_once("./Services/Tracking/classes/class.ilLPObjSettings.php");
227 $lm_set = new ilLPObjSettings($this->getId());
229 $lm_set->insert();
230
231 //select all SCOs as relevant for Learning Progress
232 include_once("Services/Tracking/classes/collection/class.ilLPCollectionOfSCOs.php");
233 $collection = new ilLPCollectionOfSCOs($this->getId(), ilLPObjSettings::LP_MODE_SCORM);
234 $scos = array();
235 foreach ($collection->getPossibleItems() as $sco_id => $item) {
236 $scos[] = $sco_id;
237 }
238 $collection->activateEntries($scos);
239 }
static _enabledLearningProgress()
check wether learing progress is enabled or not
ILIAS Setting Class.
$lm_set

References $DIC, $ilSetting, $lm_set, ilObjUserTracking\_enabledLearningProgress(), ilObject\getId(), and ilLPObjSettings\LP_MODE_SCORM.

+ Here is the call graph for this function:

◆ validate()

ilObjSCORMLearningModule::validate (   $directory)

Validate all XML-Files in a SCOM-Directory.

@access public

Returns
boolean true if all XML-Files are wellfomred and valid

Reimplemented in ilObjSCORM2004LearningModule.

Definition at line 40 of file class.ilObjSCORMLearningModule.php.

41 {
42 $this->validator = new ilObjSCORMValidator($directory);
43 $returnValue = $this->validator->validate();
44 return $returnValue;
45 }
Validation of SCORM-XML Files.

Referenced by readObject().

+ Here is the caller graph for this function:

Field Documentation

◆ $validator

ilObjSCORMLearningModule::$validator

Definition at line 19 of file class.ilObjSCORMLearningModule.php.


The documentation for this class was generated from the following file: