function scorm_seq_evaluate_rollupcond($sco, $conditioncombination, $rollupruleconds, $userid) { $bag = array(); $con = ""; $val = false; $unk = false; foreach ($rollupruleconds as $rolluprulecond) { $condit = scorm_evaluate_condition($rolluprulecond, $sco, $userid); if ($rolluprulecond->operator == 'not') { // If operator is not, negate the condition. if ($rolluprulecond->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 ($rolluprulecond->conditioncombination == 'all') { $val = true; if ($b == 'unknown') { $unk = true; } if ($b === false) { return false; } } else { $val = false; if ($b == 'unknown') { $unk = true; } if ($b === true) { return true; } } } } if ($unk) { return 'unknown'; } return $val; }
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; }