📄 sequencinglib.php
字号:
} return $act;}function scorm_seq_rule_check ($sco, $rule){ $bag = Array(); $cond = ''; $ruleconds = get_records('scorm_seq_rulecond','scoid',$sco->id,'ruleconditionsid',$rule->id); foreach ($ruleconds as $rulecond){ if ($rulecond->operator = 'not') { if ($rulecond->cond != 'unknown' ){ $rulecond->cond = 'not'.$rulecond; } } $bag [$rule->id] = $rulecond->cond; } if (empty($bag)){ $cond = 'unknown'; return $cond; } $size= sizeof($bag); $i=0; if ($rule->conditioncombination = 'all'){ foreach ($bag as $con){ $cond = $cond.' and '.$con; } } else{ foreach ($bag as $con){ $cond = $cond.' or '.$con; } } return $cond;}function scorm_seq_overall_rollup($sco,$userid){//Carlos if ($ancestors = scorm_get_ancestors($sco)) { foreach ($ancestors as $ancestor) { if(!scorm_is_leaf($ancestor)){ scorm_seq_measure_rollup($sco,$userid); } scorm_seq_objective_rollup($sco,$userid); scorm_seq_activity_progress_rollup($sco,$userid); } } }/* For this next function I have defined measure weight and measure status as records with the attempt = 0 on the scorm_scoes_track table. According to the page 89 of the SeqNav.pdf those datas give us some information about the progress of the objective*/function scorm_seq_measure_rollup($sco,$userid){ $totalmeasure = 0; //Check if there is something similar in the database $valid = false;//Same as in the last line $countedmeasures = 0;//Same too $targetobjective = null; $readable = true;//to check if status and measure weight are readable $objectives = get_records('scorm_seq_objective','scoid',$sco->id); foreach ($objective as $objective){ if ($objective->primaryobj == true){//Objective contributes to rollup I'm using primaryobj field, but not $targetobjective = $objective; break; } } if ($targetobjective != null){ $children = scorm_get_children($sco); foreach ($children as $child){ $child = scorm_get_sco ($child); if (!isset($child->tracked) || ($child->tracked == 1)){ $rolledupobjective = null;// we set the rolled up activity to undefined $objectives = get_records('scorm_seq_objective','scoid',$child->id); foreach ($objective as $objective){ if ($objective->primaryobj == true){//Objective contributes to rollup I'm using primaryobj field, but not $rolledupobjective = $objective; break; } } if ($rolledupobjective != null){ $child = scorm_get_sco($child->id); $countedmeasures = $countedmeasures + ($child->measureweight); if (!scorm_seq_is('objectivemeasurestatus',$sco->id,$userid)) { $normalizedmeasure = get_record('scorm_scoes_track','scoid',$child->id,'userid',$userid,'element','objectivenormalizedmeasure'); $totalmeasure = $totalmeasure + (($normalizedmeasure->value) * ($child->measureweight)); $valid = true; } } } } if(!$valid){ scorm_seq_set('objectivemeasurestatus',$sco->id,$userid,false); } else{ if($countedmeasures>0){ scorm_seq_set('objectivemeasurestatus',$sco->id,$userid); $val=$totalmeasure/$countedmeasure; scorm_seq_set('objectivenormalizedmeasure',$sco->id,$userid,$val); } else{ scorm_seq_set('objectivemeasurestatus',$sco->id,$userid,false); } } } }function scorm_seq_objective_rollup($sco,$userid){ scorm_seq_objective_rollup_measure($sco,$userid); scorm_seq_objective_rollup_rules($sco,$userid); scorm_seq_objective_rollup_default($sco,$userid);/* if($targetobjective->satisfiedbymeasure){ scorm_seq_objective_rollup_measure($sco,$userid); } else{ if ((scorm_seq_rollup_rule_check($sco,$userid,'incomplete'))|| (scorm_seq_rollup_rule_check($sco,$userid,'completed'))){ scorm_seq_objective_rollup_rules($sco,$userid); } else{ $rolluprules = get_record('scorm_seq_rolluprule','scoid',$sco->id,'userid',$userid); foreach($rolluprules as $rolluprule){ $rollupruleconds = get_records('scorm_seq_rolluprulecond','rollupruleid',$rolluprule->id); foreach($rollupruleconds as $rolluprulecond){ switch ($rolluprulecond->cond!='satisfied' && $rolluprulecond->cond!='completed' && $rolluprulecond->cond!='attempted'){ scorm_seq_set('objectivesatisfiedstatus',$sco->id,$userid, false); break; } } } }*/ }function scorm_seq_objective_rollup_measure($sco,$userid){ $targetobjective = null; $objectives = get_records('scorm_seq_objective','scoid',$sco->id); foreach ($objectives as $objective){ if ($objective->primaryobj == true){ $targetobjective = $objective; break; } } if ($targetobjective != null){ if($targetobjective->satisfiedbymeasure){ if (!scorm_seq_is('objectiveprogressstatus',$sco->id,$userid)) { scorm_seq_set('objectiveprogressstatus',$sco->id,$userid,false); } else{ if (scorm_seq_is('active',$sco->id,$userid)) { $isactive = true; } else{ $isactive = false; } $normalizedmeasure = get_record('scorm_scoes_track','scoid',$sco->id,'userid',$userid,'element','objectivenormalizedmeasure'); $sco = scorm_get_sco ($sco->id); if (!$isactive || ($isactive && (!isset($sco->measuresatisfactionifactive) || $sco->measuresatisfactionifactive == true))){ if($normalizedmeasure->value >= $targetobjective->minnormalizedmeasure){ scorm_seq_set('objectiveprogressstatus',$sco->id,$userid); scorm_seq_set('objectivesatisfiedstatus',$sco->id,$userid); } else{ scorm_seq_set('objectiveprogressstatus',$sco->id,$userid); scorm_seq_set('objectivesatisfiedstatus',$sco->id,$userid,false); } } else{ scorm_seq_set('objectiveprogressstatus',$sco->id,$userid,false); } } } }}function scorm_seq_objective_rollup_default($sco,$userid){ if (!(scorm_seq_rollup_rule_check($sco,$userid,'incomplete')) && !(scorm_seq_rollup_rule_check($sco,$userid,'completed'))){ $rolluprules = get_record('scorm_seq_rolluprule','scoid',$sco->id,'userid',$userid); foreach($rolluprules as $rolluprule){ $rollupruleconds = get_records('scorm_seq_rolluprulecond','rollupruleid',$rolluprule->id); foreach($rollupruleconds as $rolluprulecond){ if ($rolluprulecond->cond!='satisfied' && $rolluprulecond->cond!='completed' && $rolluprulecond->cond!='attempted'){ scorm_seq_set('objectivesatisfiedstatus',$sco->id,$userid, false); break; } } } } }function scorm_seq_objective_rollup_rules($sco,$userid){ $targetobjective = null; $objectives = get_records('scorm_seq_objective','scoid',$sco->id); foreach ($objective as $objective){ if ($objective->primaryobj == true){//Objective contributes to rollup I'm using primaryobj field, but not $targetobjective = $objective; break; } } if ($targetobjective != null){ if(scorm_seq_rollup_rule_check($sco,$userid,'notsatisfied')){//with not satisfied rollup for the activity scorm_seq_set('objectiveprogressstatus',$sco->id,$userid); scorm_seq_set('objectivesatisfiedstatus',$sco->id,$userid,false); } if(scorm_seq_rollup_rule_check($sco,$userid,'satisfied')){//with satisfied rollup for the activity scorm_seq_set('objectiveprogressstatus',$sco->id,$userid); scorm_seq_set('objectivesatisfiedstatus',$sco->id,$userid); } }}function scorm_seq_activity_progress_rollup ($sco, $userid){ if(scorm_seq_rollup_rule_check($sco,$userid,'incomplete')){ //incomplete rollup action scorm_seq_set('attemptcompletionstatus',$sco->id,$userid,false,$seq->attempt); scorm_seq_set('attemptprogressstatus',$sco->id,$userid,true,$seq->attempt); } if(scorm_seq_rollup_rule_check($sco,$userid,'completed')){ //incomplete rollup action scorm_seq_set('attemptcompletionstatus',$sco->id,true,$userid); scorm_seq_set('attemptprogressstatus',$sco->id,true,$userid); }}function scorm_seq_rollup_rule_check ($sco,$userid,$action){ if($rolluprules = get_record('scorm_seq_rolluprule','scoid',$sco->id,'userid',$userid,'action',$action)){ $childrenbag = Array (); $children = scorm_get_children ($sco); foreach($rolluprules as $rolluprule){ foreach ($children as $child){ /*$tracked = get_records('scorm_scoes_track','scoid',$child->id,'userid',$userid); if($tracked && $tracked->attemp != 0){*/ $child = scorm_get_sco ($child); if (!isset($child->tracked) || ($child->tracked == 1)){ if(scorm_seq_check_child ($child,$action,$userid)){ $rollupruleconds = get_records('scorm_seq_rolluprulecond','rollupruleid',$rolluprule->id); $evaluate = scorm_seq_evaluate_rollupcond($child,$rolluprule->conditioncombination,$rollupruleconds,$userid); if ($evaluate=='unknown'){ array_push($childrenbag,'unknown'); } else{ if($evaluate == true){ array_push($childrenbag,true); } else{ array_push($childrenbag,false); } } } } } $change = false; switch ($rolluprule->childactivityset){ case 'all': if((array_search(false,$childrenbag)===false)&&(array_search('unknown',$childrenbag)===false)){//I think I can use this condition instead equivalent to OR $change = true; } break; case 'any': if(array_search(true,$childrenbag)!==false){//I think I can use this condition instead equivalent to OR $change = true; } break; case 'none': if((array_search(true,$childrenbag)===false)&&(array_search('unknown',$childrenbag)===false)){//I think I can use this condition instead equivalent to OR $change = true; } break; case 'atleastcount': foreach ($childrenbag as $itm){//I think I can use this condition instead equivalent to OR $cont = 0; if($itm === true){ $cont++; } if($cont >= $roullprule->minimumcount){ $change = true; } } break; case 'atleastcount': foreach ($childrenbag as $itm){//I think I can use this condition instead equivalent to OR $cont = 0; if($itm === true){ $cont++; } if($cont >= $roullprule->minimumcount){ $change = true; } } break; case 'atleastpercent': foreach ($childrenbag as $itm){//I think I can use this condition instead equivalent to OR $cont = 0; if($itm === true){ $cont++; } if(($cont/sizeof($childrenbag)) >= $roullprule->minimumcount){ $change = true; } } break; } if ($change==true){ return true; } } } return false;}function scorm_seq_evaluate_rollupcond($sco,$conditioncombination,$rollupruleconds,$userid){ $bag = Array(); $con = ""; $val = false; $unk = false; foreach($rollupruleconds as $rolluprulecond){ $condit = scorm_evaluate_cond($rolluprulecond,$sco,$userid); if($rule->operator=='not'){// If operator is not, negate the condition if ($rule->cond != 'unknown'){ if ($condit){ $condit = false; } else{ $condit = true; } } else{ $condit = 'unknown'; } array_push($childrenbag,$condit); } } if (empty($bag)){ return 'unknown'; } else{ $i = 0; foreach ($bag as $b){ if ($rolluprule->conditioncombination == 'all'){ $val = true; if($b == 'unknown'){ $unk = true; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -