function scorm_seq_flow_activity_traversal($activity, $userid, $direction, $childrenflag, $prevdirection, $seq, $userid) { $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; } $rulecheck = scorm_seq_rules_check($activity, 'skip'); if ($rulecheck != null) { $skip = scorm_evaluate_condition($rulecheck, $activity, $userid); if ($skip) { $seq = scorm_seq_flow_tree_traversal($activity, $direction, false, $prevdirection, $seq, $userid, $skip); $seq = scorm_seq_flow_activity_traversal($seq->nextactivity, $userid, $direction, $childrenflag, $prevdirection, $seq, $userid); } else { if (!empty($seq->identifiedactivity)) { $seq->nextactivity = $activity; } } 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_traversal($seq->identifiedactivity, $userid, 'forward', $childrenflag, 'backward', $seq, $userid); } else { $seq = scorm_seq_flow_activity_traversal($seq->identifiedactivity, $userid, $direction, $childrenflag, null, $seq, $userid); } return $seq; } } $seq->deliverable = true; $seq->nextactivity = $activity; $seq->exception = null; return $seq; }
function 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; }