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

📄 sequencinglib.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 5 页
字号:
	}	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 + -