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

📄 sequencinglib.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 5 页
字号:
<?php // $Id: sequencinglib.php,v 1.17.2.1 2009/03/23 09:47:30 mudrd8mz Exp $require ('scormlib.php');function scorm_seq_evaluate($scoid,$usertracks) {    return true;}function scorm_seq_overall ($scoid,$userid,$request,$attempt) {    $seq = scorm_seq_navigation($scoid,$userid,$request,$attempt);    if ($seq->navigation) {        if ($seq->termination != null) {            $seq = scorm_seq_termination($scoid,$userid,$seq);        }        if ($seq->sequencing != null) {            $seq = scorm_seq_sequencing($scoid,$userid,$seq);			if($seq->sequencing == 'exit'){//return the control to the LTS				return 'true';			}        }        if ($seq->delivery != null) {            $seq = scorm_sequencing_delivery($scoid,$userid,$seq);			$seq = scorm_content_delivery_environment ($seq,$userid);        }    }    if ($seq->exception != null) {        $seq = scorm_sequencing_exception($seq);    }    return 'true';}function scorm_seq_navigation ($scoid,$userid,$request,$attempt=0) {    /// Sequencing structure    $seq = new stdClass();    $seq->currentactivity = scorm_get_sco($scoid);	$seq->traversaldir = null;	$seq->nextactivity = null;	$seq->deliveryvalid = null;	$seq->attempt = $attempt;		$seq->identifiedactivity = null;	$seq->delivery = null;	$seq->deliverable = false;    $seq->active = scorm_seq_is('active',$scoid,$userid);    $seq->suspended = scorm_seq_is('suspended',$scoid,$userid);    $seq->navigation = null;    $seq->termination = null;    $seq->sequencing = null;    $seq->target = null;	$seq->endsession = null;    $seq->exception = null;	$seq->reachable = true;	$seq->prevact = true;    switch ($request) {        case 'start_':            if (empty($seq->currentactivity)) {                $seq->navigation = true;                $seq->sequencing = 'start';            } else {                $seq->exception = 'NB.2.1-1'; /// Sequencing session already begun            }         break;        case 'resumeall_':            if (empty($seq->currentactivity)) {                if ($track = get_record('scorm_scoes_track','scoid',$scoid,'userid',$userid,'element','suspendedactivity')) {//I think it's suspend instead of suspendedactivity                    $seq->navigation = true;                    $seq->sequencing = 'resumeall';                } else {                    $seq->exception = 'NB.2.1-3'; /// No suspended activity found                }            } else {                $seq->exception = 'NB.2.1-1'; /// Sequencing session already begun            }         break;        case 'continue_':        case 'previous_':            if (!empty($seq->currentactivity)) {                $sco = $seq->currentactivity;                if ($sco->parent != '/') {                    if ($parentsco = scorm_get_parent($sco)) {												 if (isset($parentsco->flow) && ($parentsco->flow == true)) {//I think it's parentsco                            // Current activity is active !							if (scorm_seq_is('active',$sco->id,$userid)) {                                if ($request == 'continue_') {                                    $seq->navigation = true;                                    $seq->termination = 'exit';                                    $seq->sequencing = 'continue';                                } else {                                    if (!isset($parentsco->forwardonly) || ($parentsco->forwardonly == false)) {                                        $seq->navigation = true;                                        $seq->termination = 'exit';                                        $seq->sequencing = 'previous';                                    } else {                                        $seq->exception = 'NB.2.1-5'; /// Violates control mode                                    }                                }							}                        }                    }                }            } else {                $seq->exception = 'NB.2.1-2'; /// Current activity not defined            }        break;        case 'forward_':        case 'backward_':            $seq->exception = 'NB.2.1-7' ; /// None to be done, behavior not defined        break;        case 'exit_':        case 'abandon_':            if (!empty($seq->currentactivity)) {                // Current activity is active !                $seq->navigation = true;                $seq->termination = substr($request,0,-1);                $seq->sequencing = 'exit';            } else {                $seq->exception = 'NB.2.1-2'; /// Current activity not defined            }        case 'exitall_':        case 'abandonall_':        case 'suspendall_':            if (!empty($seq->currentactivity)) {                $seq->navigation = true;                $seq->termination = substr($request,0,-1);                $seq->sequencing = 'exit';            } else {                $seq->exception = 'NB.2.1-2'; /// Current activity not defined            }        break;        default: /// {target=<STRING>}choice             if ($targetsco = get_record('scorm_scoes','scorm',$sco->scorm,'identifier',$request)) {                if ($targetsco->parent != '/') {                    $seq->target = $request;                } else {                    if ($parentsco = scorm_get_parent($targetsco)) {                        if (!isset($parentsco->choice) || ($parent->choice == true)) {                            $seq->target = $request;                        }                    }                 }                if ($seq->target != null) {                    if (empty($seq->currentactivity)) {                        $seq->navigation = true;                        $seq->sequencing = 'choice';                    } else {                        if (!$sco = scorm_get_sco($scoid)) {                            return $seq;                        }                        if ($sco->parent != $target->parent) {                            $ancestors = scorm_get_ancestors($sco);                            $commonpos = scorm_find_common_ancestor($ancestors,$targetsco);                            if ($commonpos !== false) {                                if ($activitypath = array_slice($ancestors,0,$commonpos)) {                                    foreach ($activitypath as $activity) {                                        if (scorm_seq_is('active',$activity->id,$userid) && (isset($activity->choiceexit) && ($activity->choiceexit == false))) {                                            $seq->navigation = false;                                            $seq->termination = null;                                            $seq->sequencing = null;                                            $seq->target = null;                                            $seq->exception = 'NB.2.1-8'; /// Violates control mode                                            return $seq;                                        }                                    }                                 } else {                                    $seq->navigation = false;                                    $seq->termination = null;                                    $seq->sequencing = null;                                    $seq->target = null;                                    $seq->exception = 'NB.2.1-9';                                }                            }                        }                        // Current activity is active !                        $seq->navigation = true;                        $seq->sequencing = 'choice';                    }                } else {                    $seq->exception = 'NB.2.1-10';  /// Violates control mode                }            } else {                $seq->exception = 'NB.2.1-11';  /// Target activity does not exists            }        break;    }    return $seq;}function scorm_seq_termination ($seq,$userid) {    if (empty($seq->currentactivity)) {        $seq->termination = false;        $seq->exception = 'TB.2.3-1';        return $seq;    }    $sco = $seq->currentactivity;    if ((($seq->termination == 'exit') || ($seq->termination == 'abandon')) && !$seq->active) {        $seq->termination = false;        $seq->exception = 'TB.2.3-2';        return $seq;    }    switch ($seq->termination) {        case 'exit':            scorm_seq_end_attempt($sco,$userid,$seq);            $seq = scorm_seq_exit_action_rules($seq,$userid);            do {                $exit = false;// I think this is false. Originally this was true                $seq = scorm_seq_post_cond_rules($seq,$userid);                if ($seq->termination == 'exitparent') {                    if ($sco->parent != '/') {                        $sco = scorm_get_parent($sco);                        $seq->currentactivity = $sco;                        $seq->active = scorm_seq_is('active',$sco->id,$userid);                        scorm_seq_end_attempt($sco,$userid,$seq);                        $exit = true;//I think it's true. Originally this was false                    } else {                        $seq->termination = false;                        $seq->exception = 'TB.2.3-4';                        return $seq;                    }                }            } while (($exit == false) && ($seq->termination == 'exit'));            if ($seq->termination == 'exit') {                $seq->termination = true;                return $seq;            }        case 'exitall':            if ($seq->active) {                scorm_seq_end_attempt($sco,$userid,$seq);            }            /// Terminate Descendent Attempts Process			            if ($ancestors = scorm_get_ancestors($sco)) {                 foreach ($ancestors as $ancestor) {                    scorm_seq_end_attempt($ancestor,$userid,$seq);                    $seq->currentactivity = $ancestor;                }            }            $seq->active = scorm_seq_is('active',$seq->currentactivity->id,$userid);            $seq->termination = true;			$seq->sequencing = exit;        break;        case 'suspendall':            if (($seq->active) || ($seq->suspended)) {                scorm_seq_set('suspended',$sco->id,$userid);            } else {                if ($sco->parent != '/') {                    $parentsco = scorm_get_parent($sco);                    scorm_seq_set('suspended',$parentsco->id,$userid);                } else {                    $seq->termination = false;                    $seq->exception = 'TB.2.3-3';                    // return $seq;                }            }            if ($ancestors = scorm_get_ancestors($sco)) {                 foreach ($ancestors as $ancestor) {                    scorm_seq_set('active',$ancestor->id,$userid,false);                    scorm_seq_set('suspended',$ancestor->id,$userid);                    $seq->currentactivity = $ancestor;                }                $seq->termination = true;                $seq->sequencing = 'exit';            } else {                $seq->termination = false;                $seq->exception = 'TB.2.3-5';            }        break;        case 'abandon':            scorm_seq_set('active',$sco->id,$userid,false);            $seq->active = null;            $seq->termination = true;        break;        case 'abandonall':            if ($ancestors = scorm_get_ancestors($sco)) {                 foreach ($ancestors as $ancestor) {                    scorm_seq_set('active',$ancestor->id,$userid,false);                    $seq->currentactivity = $ancestor;                }                $seq->termination = true;                $seq->sequencing = 'exit';            } else {                $seq->termination = false;                $seq->exception = 'TB.2.3-6';            }        break;        default:            $seq->termination = false;            $seq->exception = 'TB.2.3-7';        break;    }    return $seq;}function scorm_seq_end_attempt($sco,$userid,$seq) {    if (scorm_is_leaf($sco)) {        if (!isset($sco->tracked) || ($sco->tracked == 1)) {            if (!scorm_seq_is('suspended',$sco->id,$userid)) {                if (!isset($sco->completionsetbycontent) || ($sco->completionsetbycontent == 0)) {                    if (!scorm_seq_is('attemptprogressstatus',$sco->id,$userid,$seq->attempt)) {                  // if (!scorm_seq_is('attemptprogressstatus',$sco->id,$userid)) {                         scorm_seq_set('attemptprogressstatus',$sco->id,$userid);                        scorm_seq_set('attemptcompletionstatus',$sco->id,$userid);                    }                }                if (!isset($sco->objectivesetbycontent) || ($sco->objectivesetbycontent == 0)) {                    if ($objectives = get_records('scorm_seq_objective','scoid',$sco->id)) {                        foreach ($objectives as $objective) {                            if ($objective->primaryobj) {                                //if (!scorm_seq_objective_progress_status($sco,$userid,$objective)) {                                if (!scorm_seq_is('objectiveprogressstatus',$sco->id,$userid)) {                                    scorm_seq_set('objectiveprogressstatus',$sco->id,$userid);                                    scorm_seq_set('objectivesatisfiedstatus',$sco->id,$userid);                                }                            }                        }                    }                }            }        }    } else {        if ($children = scorm_get_children($sco)) {            $suspended = false;            foreach ($children as $child) {                if (scorm_seq_is('suspended',$child,$userid)) {                    $suspended = true;                    break;                }            }            if ($suspended) {                scorm_seq_set('suspended',$sco,$userid);            } else {                 scorm_seq_set('suspended',$sco,$userid,false);            }        }    }    scorm_seq_set('active',$sco,$userid,0,false);    scorm_seq_overall_rollup($sco,$userid);}function scorm_seq_is($what, $scoid, $userid, $attempt=0) {    /// Check if passed activity $what is active    $active = false;    if ($track = get_record('scorm_scoes_track','scoid',$scoid,'userid',$userid,'attempt',$attempt,'element',$what)) {        $active = true;    }    return $active;}function scorm_seq_set($what, $scoid, $userid, $attempt=0, $value='true') {    $sco = scorm_get_sco($scoid);    /// set passed activity to active or not    if ($value == false) {        delete_record('scorm_scoes_track','scoid',$scoid,'userid',$userid,'attempt',$attempt,'element',$what);    } else {        scorm_insert_track($userid, $sco->scorm, $sco->id, 0, $what, $value);    }    // update grades in gradebook    $scorm = get_record('scorm', 'id', $sco->scorm);    scorm_update_grades($scorm, $userid, true);}function scorm_seq_exit_action_rules($seq,$userid) {    $sco = $seq->currentactivity;    $ancestors = scorm_get_ancestors($sco);    $exittarget = null;    foreach (array_reverse($ancestors) as $ancestor) {        if (scorm_seq_rules_check($ancestor,'exit') != null) {            $exittarget = $ancestor;            break;        }    }    if ($exittarget != null) {        $commons = array_slice($ancestors,0,scorm_find_common_ancestor($ancestors,$exittarget));          /// Terminate Descendent Attempts Process        if ($commons) {             foreach ($commons as $ancestor) {				                scorm_seq_end_attempt($ancestor,$userid,$seq->attempt);                $seq->currentactivity = $ancestor;            }        }    }    return $seq;}function scorm_seq_post_cond_rules($seq,$userid) {    $sco = $seq->currentactivity;    if (!$seq->suspended) {        if ($action = scorm_seq_rules_check($sco,'post') != null) {            switch($action) {                case 'retry':                case 'continue':                case 'previous':                    $seq->sequencing = $action;                break;                case 'exitparent':                case 'exitall':                    $seq->termination = $action;                break;                case 'retryall':                    $seq->termination = 'exitall';                    $seq->sequencing = 'retry';                break;            }        }    }    return $seq;}function scorm_seq_rules_check ($sco, $action){	$act = null;	if($rules = get_records('scorm_seq_ruleconds','scoid',$sco->id,'action',$action)){		foreach ($rules as $rule){			if($act = scorm_seq_rule_check($sco,$rule)){				return $act;			}		}

⌨️ 快捷键说明

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