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

📄 sequencinglib.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 5 页
字号:
	}}function scorm_seq_flow_activity_traversal ($activity, $userid, $direction, $childrenflag, $prevdirection, $seq,$userid){//returns the next activity on the tree, traversal direction, control returned to the LTS, (may) exception    $activity = scorm_get_sco ($activity);    $parent = scorm_get_parent ($activity);   if (!isset($parent->flow) || ($parent->flow == false)) {		$seq->deliverable = false;	    $seq->exception = 'SB.2.2-1';		$seq->nextactivity = $activity;	    return $seq;	}         $rulch = scorm_seq_rules_check($sco, 'skipped');	if ($rulch != null){	    $seq = scorm_seq_flow_tree_traversal ($activity, $direction, false, $prevdirection, $seq,$userid);//endsession and exception		if ($seq->identifiedactivity == null){			$seq->deliverable = false;			$seq->nextactivity = $activity;			return $seq;		}		else{						if ($prevdirection = 'backward' && $seq->traversaldir == 'backward'){				$seq = scorm_seq_flow_tree_traversal ($activity,$direction,false,null,$seq,$userid);				$seq = scorm_seq_flow_activity($seq->identifiedactivity, $userid, $direction, $childrenflag, $prevdirection, $seq,$userid);			}			else{				$seq = scorm_seq_flow_tree_traversal ($activity,$direction,false,null,$seq,$userid);				$seq = scorm_seq_flow_activity($seq->identifiedactivity, $userid, $direction, $childrenflag, $prevdirection, $seq,$userid);			}			return $seq;		}	}	$ch=scorm_check_activity ($activity,$userid);	if ($ch){		$seq->deliverable = false;	    $seq->exception = 'SB.2.2-2';		$seq->nextactivity = $activity;	    return $seq;	}	if (!scorm_is_leaf($activity)){		$seq = scorm_seq_flow_tree_traversal ($activity,$direction,true,null,$seq,$userid);		if ($seq->identifiedactivity == null){			$seq->deliverable = false;			$seq->nextactivity = $activity;			return $seq;		}		else{		    if($direction == 'backward' && $seq->traversaldir == 'forward'){				$seq = scorm_seq_flow_activity($seq->identifiedactivity, $userid, 'forward', $childrenflag, 'backward', $seq,$userid);			}			else{				scorm_seq_flow_activity($seq->identifiedactivity, $userid, $direction, $childrenflag, null, $seq,$userid);			}			return $seq;		}	}    $seq->deliverable = true;	$seq->nextactivity = $activity;    return $seq;}function scorm_seq_flow_tree_traversal ($activity,$direction,$childrenflag,$prevdirection,$seq,$userid){	$revdirection = false;	$parent = scorm_get_parent ($activity);	$children = scorm_get_available_children ($parent);	$siz = sizeof ($children);    if (($prevdirection != null && $prevdirection == 'backward') && ($children[$siz-1]->id == $activity->id)){		$direction = 'backward';		$children[0] = $activity;		$revdirection = true;	}	if($direction = 'forward'){		$ancestors = scorm_get_ancestors($activity);		$ancestorsroot = array_reverse($ancestors);		$preorder = scorm_get_preorder ($ancestorsroot);		$siz= sizeof ($preorder);		if (($activity->id == $preorder[$siz-1]->id) || (($activity->parent == '/') && !($childrenflag))){			scorm_seq_terminate_descent($ancestorsroot,$userid);			$seq->endsession = true;			$seq->nextactivity = null;			return $seq;		}		if (scorm_is_leaf ($activity) || !$childrenflag){			if ($children[$siz-1]->id == $activity->id){					$seq = scorm_seq_flow_tree_traversal ($parent, $direction, false, null, $seq,$userid);				// I think it's not necessary to do a return in here			}			else{				$parent = scorm_get_parent($activity);				$children = scorm_get_available_children($parent);				$seq->traversaldir = $direction;				$sib = scorm_get_siblings($activity);				$pos = array_search($sib, $activity);				if ($pos !== false) {				    if ($pos != sizeof ($sib)){				        $seq->nextactivity = $sib [$pos+1];						return $seq;				    }				    else{					    $ch = scorm_get_children($sib[0]);					    $seq->nextactivity = $ch[0];						return $seq;				    }				}		    }		}		else{			if (!empty ($children)){				$seq->traversaldir = $direction;                $seq->nextactivity = $children[0];				return $seq;			}			else{				$seq->traversaldir = null;                $seq->nextactivity = $children[0];				$seq->exception = 'SB.2.1-2';				return $seq;			}		}			}	if($direction = 'backward'){				 if ($activity->parent == '/'){			$seq->traversaldir = null;            $seq->nextactivity = null;			$seq->exception = 'SB.2.1-3';			return $seq;		 }		 if (scorm_is_leaf ($activity) || !$childrenflag){			 if (!$revdirection){				 if (isset($parent->forwardonly) && ($parent->forwardonly == true)) {					 $seq->traversaldir = null;                     $seq->nextactivity = null;			         $seq->exception = 'SB.2.1-4';					 return $seq;				 }			 }			 if ($children[0]->id == $activity->id){				$seq = scorm_seq_flow_tree_traversal ($parent, 'backward', false, null, $seq);				return $seq;			 }			 else{				$ancestors = scorm_get_ancestors($activity);		        $ancestorsroot = array_reverse ($ancestors);				$preorder = scorm_get_preorder ($ancestorsroot);				$pos = array_search($preorder, $children[$siz]);				$preord = array_slice($preorder, 0, $pos-1);				$revpreorder = array_reverse($preord);				$position = array_search($revpreorder, $activity);				$seq->nextactivity = $revpreorder[$pos+1];				$seq->traversaldir = $direction;				return $seq;			 }		 }		 else{			 if (!empty($children)){				 $activity = scorm_get_sco($activity->id);				 if (isset($parent->flow) && ($parent->flow == true)) {					 $children = scorm_get_children ($activity);					 $seq->traversaldir = 'forward';                     $seq->nextactivity = $children[0];					 return $seq;			         				 }				 else{					 $children = scorm_get_children ($activity);					 $seq->traversaldir = 'backward';                     $seq->nextactivity = $children[sizeof($children)-1];					 return $seq;				 }			 }			 else{				 					 $seq->traversaldir = null;                     $seq->nextactivity = null;					 $seq->exception = 'SB.2.1-2';					 return $seq;			 }		 }	}}function scorm_check_activity ($activity,$userid){	$act = scorm_seq_rules_check($activity,'disabled');	if ($act != null){		return true;	}    if(scorm_limit_cond_check ($activity,$userid)){		return true;	}	return false;}function scorm_limit_cond_check ($activity,$userid){    if (isset($activity->tracked) && ($activity->tracked == 0)){				return false;	}	if (scorm_seq_is('active',$activity->id,$userid) || scorm_seq_is('suspended',$activity->id,$userid)){		return false;	}    if (!isset($activity->limitcontrol) || ($activity->limitcontrol == 1)){			$r = get_record('scorm_scoes_track','scoid',$activity->id,'userid',$userid,'element','activityattemptcount');		if (scorm_seq_is('activityprogressstatus',$activity->id,$userid) && ($r->value >=$activity->limitattempt)){			return true;		}	}	 if (!isset($activity->limitabsdurcontrol) || ($activity->limitabsdurcontrol == 1)){			$r = get_record('scorm_scoes_track','scoid',$activity->id,'userid',$userid,'element','activityabsoluteduration');		if (scorm_seq_is('activityprogressstatus',$activity->id,$userid) && ($r->value >=$activity->limitabsduration)){			return true;		}	}	if (!isset($activity->limitexpdurcontrol) || ($activity->limitexpdurcontrol == 1)){			$r = get_record('scorm_scoes_track','scoid',$activity->id,'userid',$userid,'element','activityexperiencedduration');		if (scorm_seq_is('activityprogressstatus',$activity->id,$userid) && ($r->value >=$activity->limitexpduration)){			return true;		}	}    	 if (!isset($activity->limitattabsdurcontrol) || ($activity->limitattabsdurcontrol == 1)){			$r = get_record('scorm_scoes_track','scoid',$activity->id,'userid',$userid,'element','attemptabsoluteduration');		if (scorm_seq_is('activityprogressstatus',$activity->id,$userid) && ($r->value >=$activity->limitattabsduration)){			return true;		}	}	if (!isset($activity->limitattexpdurcontrol) || ($activity->limitattexpdurcontrol == 1)){			$r = get_record('scorm_scoes_track','scoid',$activity->id,'userid',$userid,'element','attemptexperiencedduration');		if (scorm_seq_is('activityprogressstatus',$activity->id,$userid) && ($r->value >=$activity->limitattexpduration)){			return true;		}	}	if (!isset($activity->limitbegincontrol) || ($activity->limitbegincontrol == 1)){			$r = get_record('scorm_scoes_track','scoid',$activity->id,'userid',$userid,'element','begintime');		if (time()>=$activity->limitbegintime){			return true;		}	}	if (!isset($activity->limitbegincontrol) || ($activity->limitbegincontrol == 1)){			if (time()<$activity->limitbegintime){			return true;		}	}	if (!isset($activity->limitendcontrol) || ($activity->limitendcontrol == 1)){			if (time()>$activity->limitendtime){			return true;		}	}	return false;}function scorm_seq_choice_sequencing($sco,$userid,$seq){	$avchildren = Array ();	$comancestor = null;	$traverse = null;	if ($sco == null){		$seq->delivery = null;		$seq->exception = 'SB.2.9-1';		return $seq;	}    $ancestors = scorm_get_ancestors($sco);    $arrpath = array_reverse($ancestors);	array_push ($arrpath,$sco);//path from the root to the target	foreach ($arrpath as $activity){        if ($activity->parent != '/') {			$avchildren = scorm_get_available_children (scorm_get_parent($activity));			$position = array_search($avchildren, $activity);            if ($position !== false){				$seq->delivery = null;		        $seq->exception = 'SB.2.9-2';		        return $seq;			}		}		if (scorm_seq_rules_check($activity,'hidefromchoice' != null)){			$seq->delivery = null;		    $seq->exception = 'SB.2.9-3';		    return $seq;		}	}	if ($sco->parent != '/') {		$parent = scorm_sco_get_parent ($sco);		if ( isset($parent->choice) && ($parent->choice == false)){			$seq->delivery = null;		    $seq->exception = 'SB.2.9-4';		    return $seq;		}	}	if ($seq->currentactivity != null){        $commonpos = scorm_find_common_ancestor($ancestors,$seq->currentactivity);		$comancestor = $arrpath [$commonpos];	}	else{		$comancestor = $arrpath [0];	}	if($seq->currentactivity === $sco) {        break;	}	$sib = scorm_get_siblings($seq->currentactivity);	$pos = array_search($sib, $sco);	if ($pos !== false){		$siblings = array_slice($sib, 0, $pos-1);		if (empty($siblings)){			$seq->delivery = null;		    $seq->exception = 'SB.2.9-5';		    return $seq;		}        		$children = scorm_get_children (scorm_get_parent ($sco));		$pos1 = array_search($children, $sco);		$pos2 = array_search($seq->currentactivity, $sco);		if ($pos1>$pos2){			$traverse = 'forward';		}		else{			$traverse = 'backward';		}		foreach ($siblings as $sibling){			$seq = scorm_seq_choice_activity_traversal($sibling,$userid,$seq,$traverse);		    if(!$seq->reachable){			    $seq->delivery = null;			    return $seq;		    }		}		break;	}    if($seq->currentactivity == null || $seq->currentactivity == $comancestor){		$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;		}		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 ($acti->id);			if(scorm_seq_is('active',$act->id,$userid) && ($act->id != $comancestor->id && $act->preventactivation)){//adlseq:can i write it like another property for the $seq object?				$seq->delivery = null;		        $seq->exception = 'SB.2.9-6';		        return $seq;			}		}		break;	}	if ($comancestor->id == $sco->id){        $ancestorscurrent = scorm_get_ancestors($seq->currentactivity);		$possco = array_search ($ancestorscurrent, $sco);		$curtarget = array_slice($ancestorscurrent,0,$possco);//path from the current activity to the target		if (empty($curtarget)){			$seq->delivery = null;		    $seq->exception = 'SB.2.9-5';		    return $seq;		}        $i=0;		foreach ($curtarget as $activ){			$i++;			if ($i != sizeof($curtarget)){				if ( isset($activ->choiceexit) && ($activ->choiceexit == false)){					$seq->delivery = null;		            $seq->exception = 'SB.2.9-7';

⌨️ 快捷键说明

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