コード例 #1
0
ファイル: sequencinglib.php プロジェクト: nadavkav/MoodleTAO
function scorm_randomize_children_process($scoid, $userid)
{
    $sco = scorm_get_sco($scoid);
    if (!scorm_is_leaf($sco)) {
        if (!scorm_seq_is('suspended', $scoid, $userid) && !scorm_seq_is('active', $scoid, $userid)) {
            $r = get_record('scorm_scoes_track', 'scoid', $scoid, 'userid', $userid, 'element', 'randomizationtiming');
            switch ($r->value) {
                case 'never':
                    break;
                case 'oneachnewattempt':
                case 'once':
                    if (!scorm_seq_is('activityprogressstatus', $scoid, $userid)) {
                        if (scorm_seq_is('randomizechildren', $scoid, $userid)) {
                            $childlist = array();
                            $res = scorm_get_available_children($sco);
                            $i = sizeof($res) - 1;
                            $children = $res->value;
                            while ($i >= 0) {
                                $pos = array_rand($children);
                                array_push($childlist, $children[$pos]);
                                array_splice($children, $pos, 1);
                                $i--;
                            }
                            $clist = serialize($childlist);
                            scorm_seq_set('availablechildren', $scoid, $userid, false);
                            scorm_seq_set('availablechildren', $scoid, $userid, $clist);
                        }
                    }
                    break;
            }
        }
    }
}
コード例 #2
0
function scorm_seq_objective_rollup_measure($sco, $userid, $attempt = 0)
{
    global $DB;
    $targetobjective = null;
    $objectives = $DB->get_records('scorm_seq_objective', array('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, $attempt)) {
                scorm_seq_set('objectiveprogressstatus', $sco->id, $userid, $attempt, false);
            } else {
                if (scorm_seq_is('active', $sco->id, $userid, $attempt)) {
                    $isactive = true;
                } else {
                    $isactive = false;
                }
                $normalizedmeasure = $DB->get_record('scorm_scoes_track', array('scoid' => $sco->id, 'userid' => $userid, 'element' => 'objectivenormalizedmeasure'));
                $sco = scorm_get_sco($sco->id);
                if (!$isactive || $isactive && (!isset($sco->measuresatisfactionifactive) || $sco->measuresatisfactionifactive == true)) {
                    if (isset($normalizedmeasure->value) && $normalizedmeasure->value >= $targetobjective->minnormalizedmeasure) {
                        scorm_seq_set('objectiveprogressstatus', $sco->id, $userid, $attempt);
                        scorm_seq_set('objectivesatisfiedstatus', $sco->id, $userid, $attempt);
                    } else {
                        // TODO: handle the case where cmi.success_status is passed and objectivenormalizedmeasure undefined.
                        scorm_seq_set('objectiveprogressstatus', $sco->id, $userid, $attempt);
                        // scorm_seq_set('objectivesatisfiedstatus', $sco->id, $userid, $attempt, false);
                    }
                } else {
                    scorm_seq_set('objectiveprogressstatus', $sco->id, $userid, $attempt, false);
                }
            }
        }
    }
}
コード例 #3
0
function scorm_seq_end_attempt($sco, $userid)
{
    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, $attempt)) {
                        scorm_seq_set('attemptprogressstatus', $sco->id, $userid, $attempt);
                        scorm_seq_set('attemptcompletionstatus', $sco->id, $userid, $attempt);
                    }
                }
                if (!isset($sco->objectivesetbycontent) || $sco->objectivesetbycontent == 0) {
                    if ($sco->objectives) {
                        foreach ($objectives as $objective) {
                            if ($objective->primary) {
                                if (!scorm_seq_objective_progress_status($sco, $userid, $objective)) {
                                    scorm_seq_set('objectiveprogressstatus', $sco->id, $userid, $attempt);
                                    scorm_seq_set('objectivesatisfiedstatus', $sco->id, $userid, $attempt);
                                }
                            }
                        }
                    }
                }
            }
        }
    } 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, 0, false);
            }
        }
    }
    scorm_seq_set('active', $sco, $userid, 0, false);
    scorm_seq_overall_rollup($sco, $userid);
}