📄 scormlib.php
字号:
<?phpfunction scorm_get_resources($blocks) { $resources = array(); foreach ($blocks as $block) { if ($block['name'] == 'RESOURCES') { foreach ($block['children'] as $resource) { if ($resource['name'] == 'RESOURCE') { $resources[addslashes_js($resource['attrs']['IDENTIFIER'])] = $resource['attrs']; } } } } return $resources;}function scorm_get_manifest($blocks,$scoes) { static $parents = array(); static $resources; static $manifest; static $organization; if (count($blocks) > 0) { foreach ($blocks as $block) { switch ($block['name']) { case 'METADATA': if (isset($block['children'])) { foreach ($block['children'] as $metadata) { if ($metadata['name'] == 'SCHEMAVERSION') { if (empty($scoes->version)) { if (isset($metadata['tagData']) && (preg_match("/^(1\.2)$|^(CAM )?(1\.3)$/",$metadata['tagData'],$matches))) { $scoes->version = 'SCORM_'.$matches[count($matches)-1]; } else { if (isset($metadata['tagData']) && (preg_match("/^2004 3rd Edition$/",$metadata['tagData'],$matches))) { $scoes->version = 'SCORM_1.3'; } else { $scoes->version = 'SCORM_1.2'; } } } } } } break; case 'MANIFEST': $manifest = addslashes_js($block['attrs']['IDENTIFIER']); $organization = ''; $resources = array(); $resources = scorm_get_resources($block['children']); $scoes = scorm_get_manifest($block['children'],$scoes); if (count($scoes->elements) <= 0) { foreach ($resources as $item => $resource) { if (!empty($resource['HREF'])) { $sco = new stdClass(); $sco->identifier = $item; $sco->title = $item; $sco->parent = '/'; $sco->launch = addslashes_js($resource['HREF']); $sco->scormtype = addslashes_js($resource['ADLCP:SCORMTYPE']); $scoes->elements[$manifest][$organization][$item] = $sco; } } } break; case 'ORGANIZATIONS': if (!isset($scoes->defaultorg) && isset($block['attrs']['DEFAULT'])) { $scoes->defaultorg = addslashes_js($block['attrs']['DEFAULT']); } $scoes = scorm_get_manifest($block['children'],$scoes); break; case 'ORGANIZATION': $identifier = addslashes_js($block['attrs']['IDENTIFIER']); $organization = ''; $scoes->elements[$manifest][$organization][$identifier]->identifier = $identifier; $scoes->elements[$manifest][$organization][$identifier]->parent = '/'; $scoes->elements[$manifest][$organization][$identifier]->launch = ''; $scoes->elements[$manifest][$organization][$identifier]->scormtype = ''; $parents = array(); $parent = new stdClass(); $parent->identifier = $identifier; $parent->organization = $organization; array_push($parents, $parent); $organization = $identifier; $scoes = scorm_get_manifest($block['children'],$scoes); array_pop($parents); break; case 'ITEM': $parent = array_pop($parents); array_push($parents, $parent); $identifier = addslashes_js($block['attrs']['IDENTIFIER']); $scoes->elements[$manifest][$organization][$identifier]->identifier = $identifier; $scoes->elements[$manifest][$organization][$identifier]->parent = $parent->identifier; if (!isset($block['attrs']['ISVISIBLE'])) { $block['attrs']['ISVISIBLE'] = 'true'; } $scoes->elements[$manifest][$organization][$identifier]->isvisible = addslashes_js($block['attrs']['ISVISIBLE']); if (!isset($block['attrs']['PARAMETERS'])) { $block['attrs']['PARAMETERS'] = ''; } $scoes->elements[$manifest][$organization][$identifier]->parameters = addslashes_js($block['attrs']['PARAMETERS']); if (!isset($block['attrs']['IDENTIFIERREF'])) { $scoes->elements[$manifest][$organization][$identifier]->launch = ''; $scoes->elements[$manifest][$organization][$identifier]->scormtype = 'asset'; } else { $idref = addslashes_js($block['attrs']['IDENTIFIERREF']); $base = ''; if (isset($resources[$idref]['XML:BASE'])) { $base = $resources[$idref]['XML:BASE']; } $scoes->elements[$manifest][$organization][$identifier]->launch = addslashes_js($base.$resources[$idref]['HREF']); if (empty($resources[$idref]['ADLCP:SCORMTYPE'])) { $resources[$idref]['ADLCP:SCORMTYPE'] = 'asset'; } $scoes->elements[$manifest][$organization][$identifier]->scormtype = addslashes_js($resources[$idref]['ADLCP:SCORMTYPE']); } $parent = new stdClass(); $parent->identifier = $identifier; $parent->organization = $organization; array_push($parents, $parent); $scoes = scorm_get_manifest($block['children'],$scoes); array_pop($parents); break; case 'TITLE': $parent = array_pop($parents); array_push($parents, $parent); if (!isset($block['tagData'])) { $block['tagData'] = ''; } $scoes->elements[$manifest][$parent->organization][$parent->identifier]->title = addslashes_js($block['tagData']); break; case 'ADLCP:PREREQUISITES': if ($block['attrs']['TYPE'] == 'aicc_script') { $parent = array_pop($parents); array_push($parents, $parent); if (!isset($block['tagData'])) { $block['tagData'] = ''; } $scoes->elements[$manifest][$parent->organization][$parent->identifier]->prerequisites = addslashes_js($block['tagData']); } break; case 'ADLCP:MAXTIMEALLOWED': $parent = array_pop($parents); array_push($parents, $parent); if (!isset($block['tagData'])) { $block['tagData'] = ''; } $scoes->elements[$manifest][$parent->organization][$parent->identifier]->maxtimeallowed = addslashes_js($block['tagData']); break; case 'ADLCP:TIMELIMITACTION': $parent = array_pop($parents); array_push($parents, $parent); if (!isset($block['tagData'])) { $block['tagData'] = ''; } $scoes->elements[$manifest][$parent->organization][$parent->identifier]->timelimitaction = addslashes_js($block['tagData']); break; case 'ADLCP:DATAFROMLMS': $parent = array_pop($parents); array_push($parents, $parent); if (!isset($block['tagData'])) { $block['tagData'] = ''; } $scoes->elements[$manifest][$parent->organization][$parent->identifier]->datafromlms = addslashes_js($block['tagData']); break; case 'ADLCP:MASTERYSCORE': $parent = array_pop($parents); array_push($parents, $parent); if (!isset($block['tagData'])) { $block['tagData'] = ''; } $scoes->elements[$manifest][$parent->organization][$parent->identifier]->masteryscore = addslashes_js($block['tagData']); break; case 'ADLCP:COMPLETIONTHRESHOLD': $parent = array_pop($parents); array_push($parents, $parent); if (!isset($block['tagData'])) { $block['tagData'] = ''; } $scoes->elements[$manifest][$parent->organization][$parent->identifier]->threshold = addslashes_js($block['tagData']); break; case 'ADLNAV:PRESENTATION': $parent = array_pop($parents); array_push($parents, $parent); if (!empty($block['children'])) { foreach ($block['children'] as $adlnav) { if ($adlnav['name'] == 'ADLNAV:NAVIGATIONINTERFACE') { foreach ($adlnav['children'] as $adlnavInterface) { if ($adlnavInterface['name'] == 'ADLNAV:HIDELMSUI') { if ($adlnavInterface['tagData'] == 'continue') { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->hidecontinue = 1; } if ($adlnavInterface['tagData'] == 'previous') { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->hideprevious = 1; } if ($adlnavInterface['tagData'] == 'exit') { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->hideexit = 1; } if ($adlnavInterface['tagData'] == 'exitAll') { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->hideexitall = 1; } if ($adlnavInterface['tagData'] == 'abandon') { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->hideabandon = 1; } if ($adlnavInterface['tagData'] == 'abandonAll') { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->hideabandonall = 1; } if ($adlnavInterface['tagData'] == 'suspendAll') { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->hidesuspendall = 1; } } } } } } break; case 'IMSSS:SEQUENCING': $parent = array_pop($parents); array_push($parents, $parent); if (!empty($block['children'])) { foreach ($block['children'] as $sequencing) { if ($sequencing['name']=='IMSSS:CONTROLMODE') { if (isset($sequencing['attrs']['CHOICE'])) { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->choice = $sequencing['attrs']['CHOICE'] == 'true'?1:0; } if (isset($sequencing['attrs']['CHOICEEXIT'])) { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->choiceexit = $sequencing['attrs']['CHOICEEXIT'] == 'true'?1:0; } if (isset($sequencing['attrs']['FLOW'])) { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->flow = $sequencing['attrs']['FLOW'] == 'true'?1:0; } if (isset($sequencing['attrs']['FORWARDONLY'])) { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->forwardonly = $sequencing['attrs']['FORWARDONLY'] == 'true'?1:0; } if (isset($sequencing['attrs']['USECURRENTATTEMPTOBJECTINFO'])) { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->usecurrentattemptobjectinfo = $sequencing['attrs']['USECURRENTATTEMPTOBJECTINFO'] == 'true'?1:0; } if (isset($sequencing['attrs']['USECURRENTATTEMPTPROGRESSINFO'])) { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->usecurrentattemptprogressinfo = $sequencing['attrs']['USECURRENTATTEMPTPROGRESSINFO'] == 'true'?1:0; } } if ($sequencing['name']=='ADLSEQ:CONSTRAINEDCHOICECONSIDERATIONS') { if (isset($sequencing['attrs']['CONSTRAINCHOICE'])) { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->constrainChoice = $sequencing['attrs']['CONSTRAINCHOICE'] == 'true'?1:0; } if (isset($sequencing['attrs']['PREVENTACTIVATION'])) { $scoes->elements[$manifest][$parent->organization][$parent->identifier]->preventactivation = $sequencing['attrs']['PREVENTACTIVATION'] == 'true'?1:0; } } if ($sequencing['name']=='IMSSS:OBJECTIVES') { $objectives = array(); foreach ($sequencing['children'] as $objective) { $objectivedata = new stdClass(); $objectivedata->primaryobj = 0; switch ($objective['name']) { case 'IMSSS:PRIMARYOBJECTIVE': $objectivedata->primaryobj = 1; case 'IMSSS:OBJECTIVE': $objectivedata->satisfiedbymeasure = 0; if (isset($objective['attrs']['SATISFIEDBYMEASURE'])) { $objectivedata->satisfiedbymeasure = $objective['attrs']['SATISFIEDBYMEASURE']== 'true'?1:0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -