Example #1
0
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;
}
Example #2
0
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;
}