Esempio n. 1
0
/**
 * Return grade for given user or all users.
 *
 * @param int $scormid id of scorm
 * @param int $userid optional user id, 0 means all users
 * @return array array of grades, false if none
 */
function scorm_get_user_grades($scorm, $userid = 0)
{
    global $CFG;
    require_once 'locallib.php';
    $grades = array();
    if (empty($userid)) {
        if ($scousers = get_records_select('scorm_scoes_track', "scormid='{$scorm->id}' GROUP BY userid", "", "userid,null")) {
            foreach ($scousers as $scouser) {
                $grades[$scouser->userid] = new object();
                $grades[$scouser->userid]->id = $scouser->userid;
                $grades[$scouser->userid]->userid = $scouser->userid;
                $grades[$scouser->userid]->rawgrade = scorm_grade_user($scorm, $scouser->userid);
            }
        } else {
            return false;
        }
    } else {
        if (!get_records_select('scorm_scoes_track', "scormid='{$scorm->id}' AND userid='{$userid}' GROUP BY userid", "", "userid,null")) {
            return false;
            //no attempt yet
        }
        $grades[$userid] = new object();
        $grades[$userid]->id = $userid;
        $grades[$userid]->userid = $userid;
        $grades[$userid]->rawgrade = scorm_grade_user($scorm, $userid);
    }
    return $grades;
}
Esempio n. 2
0
/**
 * Generate the user attempt status string
 *
 * @param object $user Current context user
 * @param object $scorm a moodle scrom object - mdl_scorm
 * @return string - Attempt status string
 */
function scorm_get_attempt_status($user, $scorm, $cm = '')
{
    global $DB, $PAGE, $OUTPUT;
    $attempts = scorm_get_attempt_count($user->id, $scorm, true);
    if (empty($attempts)) {
        $attemptcount = 0;
    } else {
        $attemptcount = count($attempts);
    }
    $result = '<p>' . get_string('noattemptsallowed', 'scorm') . ': ';
    if ($scorm->maxattempt > 0) {
        $result .= $scorm->maxattempt . '<br />';
    } else {
        $result .= get_string('unlimited') . '<br />';
    }
    $result .= get_string('noattemptsmade', 'scorm') . ': ' . $attemptcount . '<br />';
    if ($scorm->maxattempt == 1) {
        switch ($scorm->grademethod) {
            case GRADEHIGHEST:
                $grademethod = get_string('gradehighest', 'scorm');
                break;
            case GRADEAVERAGE:
                $grademethod = get_string('gradeaverage', 'scorm');
                break;
            case GRADESUM:
                $grademethod = get_string('gradesum', 'scorm');
                break;
            case GRADESCOES:
                $grademethod = get_string('gradescoes', 'scorm');
                break;
        }
    } else {
        switch ($scorm->whatgrade) {
            case HIGHESTATTEMPT:
                $grademethod = get_string('highestattempt', 'scorm');
                break;
            case AVERAGEATTEMPT:
                $grademethod = get_string('averageattempt', 'scorm');
                break;
            case FIRSTATTEMPT:
                $grademethod = get_string('firstattempt', 'scorm');
                break;
            case LASTATTEMPT:
                $grademethod = get_string('lastattempt', 'scorm');
                break;
        }
    }
    if (!empty($attempts)) {
        $i = 1;
        foreach ($attempts as $attempt) {
            $gradereported = scorm_grade_user_attempt($scorm, $user->id, $attempt->attemptnumber);
            if ($scorm->grademethod !== GRADESCOES && !empty($scorm->maxgrade)) {
                $gradereported = $gradereported / $scorm->maxgrade;
                $gradereported = number_format($gradereported * 100, 0) . '%';
            }
            $result .= get_string('gradeforattempt', 'scorm') . ' ' . $i . ': ' . $gradereported . '<br />';
            $i++;
        }
    }
    $calculatedgrade = scorm_grade_user($scorm, $user->id);
    if ($scorm->grademethod !== GRADESCOES && !empty($scorm->maxgrade)) {
        $calculatedgrade = $calculatedgrade / $scorm->maxgrade;
        $calculatedgrade = number_format($calculatedgrade * 100, 0) . '%';
    }
    $result .= get_string('grademethod', 'scorm') . ': ' . $grademethod;
    if (empty($attempts)) {
        $result .= '<br />' . get_string('gradereported', 'scorm') . ': ' . get_string('none') . '<br />';
    } else {
        $result .= '<br />' . get_string('gradereported', 'scorm') . ': ' . $calculatedgrade . '<br />';
    }
    $result .= '</p>';
    if ($attemptcount >= $scorm->maxattempt and $scorm->maxattempt > 0) {
        $result .= '<p><font color="#cc0000">' . get_string('exceededmaxattempts', 'scorm') . '</font></p>';
    }
    if (!empty($cm)) {
        $context = context_module::instance($cm->id);
        if (has_capability('mod/scorm:deleteownresponses', $context) && $DB->record_exists('scorm_scoes_track', array('userid' => $user->id, 'scormid' => $scorm->id))) {
            //check to see if any data is stored for this user:
            $deleteurl = new moodle_url($PAGE->url, array('action' => 'delete', 'sesskey' => sesskey()));
            $result .= $OUTPUT->single_button($deleteurl, get_string('deleteallattempts', 'scorm'));
        }
    }
    return $result;
}
Esempio n. 3
0
File: lib.php Progetto: ruddj/moodle
/**
 * Return grade for given user or all users.
 *
 * @global stdClass
 * @global object
 * @param int $scormid id of scorm
 * @param int $userid optional user id, 0 means all users
 * @return array array of grades, false if none
 */
function scorm_get_user_grades($scorm, $userid=0) {
    global $CFG, $DB;
    require_once($CFG->dirroot.'/mod/scorm/locallib.php');

    $grades = array();
    if (empty($userid)) {
        $scousers = $DB->get_records_select('scorm_scoes_track', "scormid=? GROUP BY userid",
                                            array($scorm->id), "", "userid,null");
        if ($scousers) {
            foreach ($scousers as $scouser) {
                $grades[$scouser->userid] = new stdClass();
                $grades[$scouser->userid]->id         = $scouser->userid;
                $grades[$scouser->userid]->userid     = $scouser->userid;
                $grades[$scouser->userid]->rawgrade = scorm_grade_user($scorm, $scouser->userid);
            }
        } else {
            return false;
        }

    } else {
        $preattempt = $DB->get_records_select('scorm_scoes_track', "scormid=? AND userid=? GROUP BY userid",
                                                array($scorm->id, $userid), "", "userid,null");
        if (!$preattempt) {
            return false; // No attempt yet.
        }
        $grades[$userid] = new stdClass();
        $grades[$userid]->id         = $userid;
        $grades[$userid]->userid     = $userid;
        $grades[$userid]->rawgrade = scorm_grade_user($scorm, $userid);
    }

    return $grades;
}
Esempio n. 4
0
    } else {
        $tt = userdate($scorm->timemodified);
    }
    $report = '&nbsp;';
    $reportshow = '&nbsp;';
    if (has_capability('mod/scorm:viewreport', $context)) {
        $trackedusers = scorm_get_count_users($scorm->id, $scorm->groupingid);
        if ($trackedusers > 0) {
            $reportshow = html_writer::link('report.php?id=' . $scorm->coursemodule, get_string('viewallreports', 'scorm', $trackedusers));
        } else {
            $reportshow = get_string('noreports', 'scorm');
        }
    } else {
        if (has_capability('mod/scorm:viewscores', $context)) {
            require_once 'locallib.php';
            $report = scorm_grade_user($scorm, $USER->id);
            $reportshow = get_string('score', 'scorm') . ": " . $report;
        }
    }
    $options = (object) array('noclean' => true);
    if (!$scorm->visible) {
        // Show dimmed if the mod is hidden.
        $table->data[] = array($tt, html_writer::link('view.php?id=' . $scorm->coursemodule, format_string($scorm->name), array('class' => 'dimmed')), format_module_intro('scorm', $scorm, $scorm->coursemodule), $reportshow);
    } else {
        // Show normal if the mod is visible.
        $table->data[] = array($tt, html_writer::link('view.php?id=' . $scorm->coursemodule, format_string($scorm->name)), format_module_intro('scorm', $scorm, $scorm->coursemodule), $reportshow);
    }
}
echo html_writer::empty_tag('br');
echo html_writer::table($table);
echo $OUTPUT->footer();
Esempio n. 5
0
/**
 * Generate the user attempt status string
 *
 * @param object $user Current context user
 * @param object $scorm a moodle scrom object - mdl_scorm
 * @return string - Attempt status string
 */
function scorm_get_attempt_status($user, $scorm)
{
    global $DB;
    $attempts = scorm_get_attempt_count($user->id, $scorm, true);
    if (empty($attempts)) {
        $attemptcount = 0;
    } else {
        $attemptcount = count($attempts);
    }
    $result = '<p>' . get_string('noattemptsallowed', 'scorm') . ': ';
    if ($scorm->maxattempt > 0) {
        $result .= $scorm->maxattempt . '<br />';
    } else {
        $result .= get_string('unlimited') . '<br />';
    }
    $result .= get_string('noattemptsmade', 'scorm') . ': ' . $attemptcount . '<br />';
    if ($scorm->maxattempt == 1) {
        switch ($scorm->grademethod) {
            case GRADEHIGHEST:
                $grademethod = get_string('gradehighest', 'scorm');
                break;
            case GRADEAVERAGE:
                $grademethod = get_string('gradeaverage', 'scorm');
                break;
            case GRADESUM:
                $grademethod = get_string('gradesum', 'scorm');
                break;
            case GRADESCOES:
                $grademethod = get_string('gradescoes', 'scorm');
                break;
        }
    } else {
        switch ($scorm->whatgrade) {
            case HIGHESTATTEMPT:
                $grademethod = get_string('highestattempt', 'scorm');
                break;
            case AVERAGEATTEMPT:
                $grademethod = get_string('averageattempt', 'scorm');
                break;
            case FIRSTATTEMPT:
                $grademethod = get_string('firstattempt', 'scorm');
                break;
            case LASTATTEMPT:
                $grademethod = get_string('lastattempt', 'scorm');
                break;
        }
    }
    if (!empty($attempts)) {
        $i = 1;
        foreach ($attempts as $attempt) {
            $gradereported = scorm_grade_user_attempt($scorm, $user->id, $attempt->attemptnumber);
            if ($scorm->grademethod !== GRADESCOES && !empty($scorm->maxgrade)) {
                $gradereported = $gradereported / $scorm->maxgrade;
                $gradereported = number_format($gradereported * 100, 0) . '%';
            }
            $result .= get_string('gradeforattempt', 'scorm') . ' ' . $i . ': ' . $gradereported . '<br />';
            $i++;
        }
    }
    $calculatedgrade = scorm_grade_user($scorm, $user->id);
    if ($scorm->grademethod !== GRADESCOES && !empty($scorm->maxgrade)) {
        $calculatedgrade = $calculatedgrade / $scorm->maxgrade;
        $calculatedgrade = number_format($calculatedgrade * 100, 0) . '%';
    }
    $result .= get_string('grademethod', 'scorm') . ': ' . $grademethod;
    if (empty($attempts)) {
        $result .= '<br />' . get_string('gradereported', 'scorm') . ': ' . get_string('none') . '<br />';
    } else {
        $result .= '<br />' . get_string('gradereported', 'scorm') . ': ' . $calculatedgrade . '<br />';
    }
    $result .= '</p>';
    if ($attemptcount >= $scorm->maxattempt and $scorm->maxattempt > 0) {
        $result .= '<p><font color="#cc0000">' . get_string('exceededmaxattempts', 'scorm') . '</font></p>';
    }
    return $result;
}
Esempio n. 6
0
/**
* Given a scorm id return all the grades of that activity
*
* @param int $scormid Scorm instance id
* @return mixed
*/
function scorm_grades($scormid)
{
    global $CFG;
    if (!($scorm = get_record('scorm', 'id', $scormid))) {
        return NULL;
    }
    if ($scorm->grademethod % 10 == 0) {
        // GRADESCOES
        if (!($return->maxgrade = count_records_select('scorm_scoes', "scorm='{$scormid}' AND launch<>'" . sql_empty() . "'"))) {
            return NULL;
        }
    } else {
        $return->maxgrade = $scorm->maxgrade;
    }
    $return->grades = NULL;
    if ($scousers = get_records_select('scorm_scoes_track', "scormid='{$scormid}' GROUP BY userid", "", "userid,null")) {
        require_once 'locallib.php';
        foreach ($scousers as $scouser) {
            $return->grades[$scouser->userid] = scorm_grade_user($scorm, $scouser->userid);
        }
    }
    return $return;
}
Esempio n. 7
0
function certificate_activity_completed(&$activity, &$cm, $userid = 0)
{
    global $CFG, $USER;
    static $quizid, $questid, $assid, $lessid, $feedid, $survid, $scormid, $facetofaceid;
    if (!$userid) {
        $userid = $USER->id;
    }
    if (empty($quizid)) {
        $quizid = get_field('modules', 'id', 'name', 'quiz');
        $questid = get_field('modules', 'id', 'name', 'questionnaire');
        $assid = get_field('modules', 'id', 'name', 'assignment');
        $lessid = get_field('modules', 'id', 'name', 'lesson');
        $feedid = get_field('modules', 'id', 'name', 'feedback');
        $survid = get_field('modules', 'id', 'name', 'survey');
        $scormid = get_field('modules', 'id', 'name', 'scorm');
        $facetofaceid = get_field('modules', 'id', 'name', 'facetoface');
    }
    /// If the module is not visible, it can't be accessed by students (assignment module
    /// will give us errors), so return true if its not visible.
    if (!empty($cm)) {
        $context = get_context_instance(CONTEXT_MODULE, $cm->id);
        if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $context)) {
            return true;
        }
        if ($cm->module == $quizid) {
            require_once $CFG->dirroot . '/mod/quiz/locallib.php';
            $quiz = get_record('quiz', 'id', $cm->instance);
            $score = quiz_get_best_grade($quiz, $userid);
            $grade = (int) ((double) $score / (double) $quiz->grade * 100.0);
            return $grade >= (int) $activity->linkgrade;
        } else {
            if ($cm->module == $assid) {
                require_once $CFG->dirroot . '/mod/assignment/lib.php';
                $assignment = get_record('assignment', 'id', $cm->instance);
                require_once "{$CFG->dirroot}/mod/assignment/type/{$assignment->assignmenttype}/assignment.class.php";
                $assignmentclass = "assignment_{$assignment->assignmenttype}";
                $assignmentinstance = new $assignmentclass($cm->id, $assignment, $cm);
                if (!($submission = $assignmentinstance->get_submission($userid))) {
                    return false;
                } else {
                    if ($assignmentinstance->assignment->grade <= 0) {
                        return true;
                    } else {
                        $grade = (int) ((double) $submission->grade / (double) $assignmentinstance->assignment->grade * 100.0);
                        return $grade >= (int) $activity->linkgrade;
                    }
                }
            } else {
                if ($cm->module == $questid) {
                    return get_record('questionnaire_attempts', 'qid', $cm->instance, 'userid', $userid) !== false;
                } else {
                    if ($cm->module == $feedid) {
                        return get_record('feedback_completed', 'feedback', $cm->instance, 'userid', $userid) !== false;
                    } else {
                        if ($cm->module == $survid) {
                            return get_record('survey_answers', 'id', $cm->instance, 'userid', $userid) !== false;
                        } else {
                            if ($cm->module == $scormid) {
                                require_once $CFG->dirroot . '/mod/scorm/locallib.php';
                                $scorm = get_record('scorm', 'id', $cm->instance);
                                $score = scorm_grade_user($scorm, $userid);
                                if ($scorm->grademethod % 10 == 0) {
                                    // GRADESCOES
                                    if (!($scorm->maxgrade = count_records_select('scorm_scoes', "scorm='{$scorm->id}' AND launch<>'" . sql_empty() . "'"))) {
                                        return true;
                                    }
                                }
                                $return->maxgrade = $scorm->maxgrade;
                                $grade = (int) ((double) $score / (double) $scorm->maxgrade * 100.0);
                                return $grade >= (int) $activity->linkgrade;
                            } else {
                                if ($cm->module == $lessid) {
                                    require_once $CFG->dirroot . '/mod/lesson/locallib.php';
                                    if (!($lesson = get_record('lesson', 'id', $cm->instance))) {
                                        return true;
                                    } else {
                                        $ntries = count_records('lesson_grades', 'lessonid', $lesson->id, 'userid', $userid) - 1;
                                        $gradeinfo = lesson_grade($lesson, $ntries);
                                        return $gradeinfo->grade >= (int) $activity->linkgrade;
                                    }
                                } else {
                                    if ($cm->module == $facetofaceid) {
                                        require_once $CFG->libdir . '/gradelib.php';
                                        $grading_info = grade_get_grades($cm->course, 'mod', 'facetoface', $cm->instance, $userid);
                                        if (empty($grading_info)) {
                                            return false;
                                        }
                                        $grade = $grading_info->items[0]->grades[$userid]->grade;
                                        return $grade >= (int) $activity->linkgrade;
                                    } else {
                                        return true;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else {
        return true;
    }
}