⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sequencinglib.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 5 页
字号:
		            return $seq;				}			}		}		break;	}	if (array_search ($ancestors, $comancestor)!== false){		$ancestorscurrent = scorm_get_ancestors($seq->currentactivity);		$commonpos = scorm_find_common_ancestor($ancestors,$sco);		$curcommon = array_slice($ancestorscurrent,0,$commonpos-1);		if(empty($curcommon)){			$seq->delivery = null;		    $seq->exception = 'SB.2.9-5';		    return $seq;		}		$constrained = null;		foreach ($curcommon as $acti){			$acti = scorm_get_sco($acti->id);			if ( isset($acti->choiceexit) && ($acti->choiceexit == false)){					$seq->delivery = null;		            $seq->exception = 'SB.2.9-7';		            return $seq;			}			if ($constrained == null){				if($acti->constrainchoice == true){					$constrained = $acti;				}			}		}		if ($constrained != null){            $fwdir = scorm_get_preorder($constrained);		    if(array_search ($fwdir, $sco)!== false){				$traverse = 'forward';			}			else{				$traverse = 'backward';			}			$seq = scorm_seq_choice_flow ($constrained, $traverse, $seq);			$actconsider = $seq->identifiedactivity;			$avdescendents = Array();			$avdescendents= scorm_get_available_descendents ($actconsider);			if (array_search ($avdescendents, $sco) !== false && $sco->id != $actconsider->id && $constrained->id != $sco->id ){				$seq->delivery = null;		        $seq->exception = 'SB.2.9-8';		        return $seq;			}//CONTINUE 11.5.5		}		$commonpos = scorm_find_common_ancestor($ancestors,$seq->currentactivity);		$comtarget = array_slice($ancestors, 1,$commonpos-1);//path from the common ancestor to the target activity		$comtarget = array_reverse($comtarget);		if (empty($comtarget)){			$seq->delivery = null;		    $seq->exception = 'SB.2.9-5';		    return $seq;		}		$fwdir = scorm_get_preorder($seq->currentactivity);		if(array_search ($fwdir, $sco)!== false){		    foreach ($comtarget as $act){			    $seq = scorm_seq_choice_activity_traversal($act,$userid,$seq,'forward');		        if(!$seq->reachable){			        $seq->delivery = null;			        return $seq;		        }                $act = scorm_get_sco($act->id);			    if(scorm_seq_is('active',$act->id,$userid) && ($act->id != $comancestor->id && ($act->preventactivation == true))){				    $seq->delivery = null;		            $seq->exception = 'SB.2.9-6';		            return $seq;			    }		    }		}		else{			foreach ($comtarget as $act){				$act = scorm_get_sco($act->id);			    if(scorm_seq_is('active',$act->id,$userid) && ($act->id != $comancestor->id && ($act->preventactivation==true))){				    $seq->delivery = null;		            $seq->exception = 'SB.2.9-6';		            return $seq;			    }		    }		}	    break;		}	if(scorm_is_leaf ($sco)){		$seq->delivery = $sco;		$seq->exception = 'SB.2.9-6';		return $seq;	}    $seq = scorm_seq_flow ($sco,'forward',$seq,true,$userid);    if ($seq->deliverable == false){		scorm_terminate_descendent_attempts($comancestor,$userid,$seq);		scorm_seq_end_attempt($comancestor,$userid,$seq->attempt);		$seq->currentactivity = $sco;		$seq->delivery = null;		$seq->exception = 'SB.2.9-9';		return $seq;	}	else{		return $seq;	}  }function scorm_seq_choice_flow ($constrained, $traverse, $seq){	$seq = scorm_seq_choice_flow_tree ($constrained, $traverse, $seq);	if ($seq->identifiedactivity == null){        $seq->identifiedactivity = $constrained;		return $seq;	}	else{		return $seq;	}}function scorm_seq_choice_flow_tree ($constrained, $traverse, $seq){	$islast = false;	$parent = scorm_get_parent ($constrained);	if ($traverse== 'forward'){		$preord = scorm_get_preorder ($constrained);		if (sizeof($preorder) == 0 || (sizeof($preorder) == 0 && $preorder[0]->id = $constrained->id)){			$islast = true;//the function is the last activity available		}		if ($constrained->parent == '/' || $islast){			$seq->nextactivity = null;			return $seq;		}		$avchildren = scorm_get_available_children ($parent);//available children		if ($avchildren [sizeof($avchildren)-1]->id == $constrained->id){			$seq = scorm_seq_choice_flow_tree ($parent, 'forward', $seq);			return $seq;		}		else{			$i=0;			while($i < sizeof($avchildren)){				if ($avchildren [$i]->id == $constrained->id){					$seq->nextactivity = $avchildren [$i+1];					return $seq;				}				else{					$i++;				}			}		}	}	if ($traverse== 'backward'){		if($constrained->parent == '/' ){			$seq->nextactivity = null;			return $seq;		}		$avchildren = scorm_get_available_children ($parent);//available children		if ($avchildren [0]->id == $constrained->id){			$seq = scorm_seq_choice_flow_tree ($parent, 'backward', $seq);			return $seq;		}		else{			$i=sizeof($avchildren)-1;			while($i >=0){				if ($avchildren [$i]->id == $constrained->id){					$seq->nextactivity = $avchildren [$i-1];					return $seq;				}				else{					$i--;				}			}		}	}}function scorm_seq_choice_activity_traversal($activity,$userid,$seq,$direction){	if($direction == 'forward'){		$act = scorm_seq_rules_check($activity,'stopforwardtraversal');		if($act != null){			$seq->reachable = false;			$seq->exception = 'SB.2.4-1';		    return $seq;		}		$seq->reachable = false;		return $seq;	}	if($direction == 'backward'){		$parentsco = scorm_get_parent($activity);		if($parentsco!= null){			 if (isset($parentsco->forwardonly) && ($parentsco->forwardonly == true)){				 $seq->reachable = false;			     $seq->exception = 'SB.2.4-2';		         return $seq;			 }			 else{			    $seq->reachable = false;			    $seq->exception = 'SB.2.4-3';		        return $seq;		     }		}	}	$seq->reachable = true;	return $seq;}//Delivery Request Processfunction scorm_sequencing_delivery($scoid,$userid,$seq){	if(!scorm_is_leaf ($seq->delivery)){		$seq->deliveryvalid = false;		$seq->exception = 'DB.1.1-1';		return $seq;	}	$ancestors = scorm_get_ancestors($seq->delivery);    $arrpath = array_reverse($ancestors);	array_push ($arrpath,$seq->delivery);//path from the root to the target	if (empty($arrpath)){		$seq->deliveryvalid = false;		$seq->exception = 'DB.1.1-2';		return $seq;	}	foreach ($arrpath as $activity){	    if(scorm_check_activity ($activity,$userid)){		    $seq->deliveryvalid = false;	        $seq->exception = 'DB.1.1-3';	        return $seq;	    }	}	$seq->deliveryvalid = true;	return $seq;}function scorm_content_delivery_environment ($seq,$userid){	$act = $seq->currentactivity;	if(scorm_seq_is('active',$act->id,$userid)){		$seq->exception = 'DB.2-1';	    return $seq;	}	$track = get_record('scorm_scoes_track','scoid',$act->id,'userid',$userid,'element','suspendedactivity');	if ($track != null){		$seq = scorm_clear_suspended_activity($seq->delivery, $seq);	}	$seq = scorm_terminate_descendent_attempts ($seq->delivery,$userid,$seq);	$ancestors = scorm_get_ancestors($seq->delivery);    $arrpath = array_reverse($ancestors);	array_push ($arrpath,$seq->delivery);	foreach ($arrpath as $activity){		if(!scorm_seq_is('active',$activity->id,$userid)){			if(!isset($activity->tracked) || ($activity->tracked == 1)){				if(!scorm_seq_is('suspended',$activity->id,$userid)){					$r = get_record('scorm_scoes_track','scoid',$activity->id,'userid',$userid,'element','activityattemptcount');					$r->value = ($r->value)+1;					update_record ('scorm_scoes_track',$r);					if ($r->value == 1){						scorm_seq_set('activityprogressstatus', $activity->id, $userid, 'true');					}					scorm_insert_track($userid, $activity->scorm, $activity->id, 0, 'objectiveprogressstatus', 'false');					scorm_insert_track($userid, $activity->scorm, $activity->id, 0, 'objectivesatisfiedstatus', 'false');					scorm_insert_track($userid, $activity->scorm, $activity->id, 0, 'objectivemeasurestatus', 'false');					scorm_insert_track($userid, $activity->scorm, $activity->id, 0, 'objectivenormalizedmeasure', 0.0);					scorm_insert_track($userid, $activity->scorm, $activity->id, 0, 'attemptprogressstatus', 'false');					scorm_insert_track($userid, $activity->scorm, $activity->id, 0, 'attemptcompletionstatus', 'false');					scorm_insert_track($userid, $activity->scorm, $activity->id, 0, 'attemptabsoluteduration', 0.0);					scorm_insert_track($userid, $activity->scorm, $activity->id, 0, 'attemptexperiencedduration', 0.0);					scorm_insert_track($userid, $activity->scorm, $activity->id, 0, 'attemptcompletionamount', 0.0);				}			}            scorm_seq_set('active', $activity->id, $userid, 'true');		}	}	$seq->delivery = $seq->currentactivity;	scorm_seq_set('suspendedactivity', $activity->id, $userid, 'false');	//ONCE THE DELIVERY BEGINS (How should I check that?)    if(isset($activity->tracked) || ($activity->tracked == 0)){		//How should I track the info and what should I do to not record the information for the activity during delivery? 		$atabsdur = get_record('scorm_scoes_track','scoid',$activity->id,'userid',$userid,'element','attemptabsoluteduration');		$atexpdur = get_record('scorm_scoes_track','scoid',$activity->id,'userid',$userid,'element','attemptexperiencedduration');	}	return $seq; }function scorm_clear_suspended_activity($act,$seq){	$currentact= $seq->currentactivity;	$track = get_record('scorm_scoes_track','scoid',$currentact->id,'userid',$userid,'element','suspendedactivity');	if ($track != null){		$ancestors = scorm_get_ancestors($act);        $commonpos = scorm_find_common_ancestor($ancestors,$currentact);        if ($commonpos !== false) {            if ($activitypath = array_slice($ancestors,0,$commonpos)) {				if (!empty ($activitypath)){                    foreach ($activitypath as $activity) {					    if (scorm_is_leaf($activity)){							scorm_seq_set('suspended',$activity->id,$userid,false);						}						else{							$children = scorm_get_children($activity);							$bool= false; 							foreach ($children as $child){								if(scorm_seq_is('suspended',$child->id,$userid)){									$bool= true;								}							}                             if(!$bool){							    scorm_seq_set('suspended',$activity->id,$userid,false);							 }						}				    }				}			}		}		scorm_seq_set('suspendedactivity',$act->id,$userid,false);	}}function scorm_select_children_process($scoid,$userid){	$sco = scorm_get_sco($scoid);    if (!scorm_is_leaf($sco)){		if(!scorm_seq_is('suspended',$scoid,$userid) && !scorm_seq_is('active',$scoid,$userid)){			$r = get_record('scorm_scoes_track','scoid',$scoid,'userid',$userid,'element','selectiontiming');             switch($r->value) {                case 'oneachnewattempt':				case 'never':                break;                             case 'once':                    if(!scorm_seq_is('activityprogressstatus',$scoid,$userid)){					    if(scorm_seq_is('selectioncountsstatus',$scoid,$userid)){					        $childlist = '';							$res = get_record('scorm_scoes_track','scoid',$scoid,'userid',$userid,'element','selectioncount');							$i = ($res->value)-1;							$children = scorm_get_children ($sco);							while ($i>=0){								$pos = array_rand($children);								array_push($childlist,$children [$pos]);								array_splice($children,$pos,1);								$i--;							}							sort ($childlist);							$clist = serialize ($childlist);							scorm_seq_set('availablechildren', $scoid, $userid, false);							scorm_seq_set('availablechildren', $scoid, $userid, $clist);				        }				    }                break;                           }		}	}}function scorm_randomize_children_process($scoid,$userid){	$sco = scorm_get_sco($scoid);    if (!scorm_is_leaf($sco)){		if(!scorm_seq_is('suspended',$scoid,$userid) && !scorm_seq_is('active',$scoid,$userid)){			$r = get_record('scorm_scoes_track','scoid',$scoid,'userid',$userid,'element','randomizationtiming');             switch($r->value) {                				case 'never':                break;                             case 'oneachnewattempt':                case 'once':                    if(!scorm_seq_is('activityprogressstatus',$scoid,$userid)){					    if(scorm_seq_is('randomizechildren',$scoid,$userid)){					        $childlist = array();							$res = scorm_get_available_children($sco);							$i = sizeof($res)-1;							$children = $res->value;							while ($i>=0){								$pos = array_rand($children);								array_push($childlist,$children [$pos]);								array_splice($children,$pos,1);								$i--;							}														$clist = serialize ($childlist);							scorm_seq_set('availablechildren', $scoid, $userid, false);							scorm_seq_set('availablechildren', $scoid, $userid, $clist);				        }				    }                break;			                			   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -