示例#1
0
 /**
  * Prints the on going message to the user.
  *
  * With custom grading On, displays points
  * earned out of total points possible thus far.
  * With custom grading Off, displays number of correct
  * answers out of total attempted.
  *
  * @param lesson $lesson
  * @return string
  */
 public function ongoing_score(lesson $lesson)
 {
     global $USER, $DB;
     $context = get_context_instance(CONTEXT_MODULE, $this->page->cm->id);
     if (has_capability('mod/lesson:manage', $context)) {
         return $this->output->box(get_string('teacherongoingwarning', 'lesson'), "ongoing center");
     } else {
         $ntries = $DB->count_records("lesson_grades", array("lessonid" => $lesson->id, "userid" => $USER->id));
         if (isset($USER->modattempts[$lesson->id])) {
             $ntries--;
         }
         $gradeinfo = lesson_grade($lesson, $ntries);
         $a = new stdClass();
         if ($lesson->custom) {
             $a->score = $gradeinfo->earned;
             $a->currenthigh = $gradeinfo->total;
             return $this->output->box(get_string("ongoingcustom", "lesson", $a), "ongoing center");
         } else {
             $a->correct = $gradeinfo->earned;
             $a->viewed = $gradeinfo->attempts;
             return $this->output->box(get_string("ongoingnormal", "lesson", $a), "ongoing center");
         }
     }
 }
示例#2
0
     $essayinfo->graded = 1;
     $essayinfo->score = $form->score;
     $form = file_postupdate_standard_editor($form, 'response', $editoroptions, $context, 'mod_lesson', 'essay_responses', $attempt->id);
     $essayinfo->response = $form->response;
     $essayinfo->responseformat = $form->responseformat;
     $essayinfo->sent = 0;
     if (!$lesson->custom && $essayinfo->score == 1) {
         $attempt->correct = 1;
     } else {
         $attempt->correct = 0;
     }
     $attempt->useranswer = serialize($essayinfo);
     $DB->update_record('lesson_attempts', $attempt);
     // Get grade information
     $grade = current($grades);
     $gradeinfo = lesson_grade($lesson, $attempt->retry, $attempt->userid);
     // Set and update
     $updategrade = new stdClass();
     $updategrade->id = $grade->id;
     $updategrade->grade = $gradeinfo->grade;
     $DB->update_record('lesson_grades', $updategrade);
     $params = array('context' => $context, 'objectid' => $grade->id, 'courseid' => $course->id, 'relateduserid' => $attempt->userid, 'other' => array('lessonid' => $lesson->id, 'attemptid' => $attemptid));
     $event = \mod_lesson\event\essay_assessed::create($params);
     $event->add_record_snapshot('lesson', $dblesson);
     $event->trigger();
     $lesson->add_message(get_string('changessaved'), 'notifysuccess');
     // update central gradebook
     lesson_update_grades($lesson, $grade->userid);
     redirect(new moodle_url('/mod/lesson/essay.php', array('id' => $cm->id)));
 } else {
     print_error('invalidformdata');
示例#3
0
    }
    echo $lessoncontent;
    echo $lessonoutput->progress_bar($lesson);
    echo $lessonoutput->footer();
} else {
    $lessoncontent = '';
    // end of lesson reached work out grade
    // Used to check to see if the student ran out of time
    $outoftime = optional_param('outoftime', '', PARAM_ALPHA);
    $ntries = $DB->count_records("lesson_grades", array("lessonid" => $lesson->id, "userid" => $USER->id));
    if (isset($USER->modattempts[$lesson->id])) {
        $ntries--;
        // need to look at the old attempts :)
    }
    $gradelesson = true;
    $gradeinfo = lesson_grade($lesson, $ntries);
    if ($lesson->custom && !$canmanage) {
        // Before we calculate the custom score make sure they answered the minimum
        // number of questions. We only need to do this for custom scoring as we can
        // not get the miniumum score the user should achieve. If we are not using
        // custom scoring (so all questions are valued as 1) then we simply check if
        // they answered more than the minimum questions, if not, we mark it out of the
        // number specified in the minimum questions setting - which is done in lesson_grade().
        // Get the number of answers given.
        if ($gradeinfo->nquestions < $lesson->minquestions) {
            $gradelesson = false;
            $a = new stdClass();
            $a->nquestions = $gradeinfo->nquestions;
            $a->minquestions = $lesson->minquestions;
            $lessoncontent .= $OUTPUT->box_start('generalbox boxaligncenter');
            $lesson->add_message(get_string('numberofpagesviewednotice', 'lesson', $a));
示例#4
0
         $grade = current($grades);
         $completed = $grade->completed;
         $grade = round($grade->grade, 2);
     }
     if (!($times = $DB->get_records_select("lesson_timer", "lessonid = :lessonid and userid = :userid", $params, "starttime", "*", $try, 1))) {
         $timetotake = -1;
     } else {
         $timetotake = current($times);
         $timetotake = $timetotake->lessontime - $timetotake->starttime;
     }
     if ($timetotake == -1 || $completed == -1 || $grade == -1) {
         $table->align = array("center");
         $table->data[] = array(get_string("notcompleted", "lesson"));
     } else {
         $user = $students[$userid];
         $gradeinfo = lesson_grade($lesson, $try, $user->id);
         $table->data[] = array(get_string('name') . ':', $OUTPUT->user_picture($user, array('courseid' => $course->id)) . fullname($user, true));
         $table->data[] = array(get_string("timetaken", "lesson") . ":", format_time($timetotake));
         $table->data[] = array(get_string("completed", "lesson") . ":", userdate($completed));
         $table->data[] = array(get_string('rawgrade', 'lesson') . ':', $gradeinfo->earned . '/' . $gradeinfo->total);
         $table->data[] = array(get_string("grade", "lesson") . ":", $grade . "%");
     }
     echo html_writer::table($table);
     // Don't want this class for later tables
     $table->attributes['class'] = '';
 }
 $table->align = array('left', 'left');
 $table->size = array('70%', null);
 $table->attributes['class'] = 'compacttable generaltable';
 foreach ($answerpages as $page) {
     unset($table->data);
示例#5
0
/**
 * Prints the on going message to the user.
 *
 * With custom grading On, displays points 
 * earned out of total points possible thus far.
 * With custom grading Off, displays number of correct
 * answers out of total attempted.
 *
 * @param object $lesson The lesson that the user is taking.
 * @return void
 **/
function lesson_print_ongoing_score($lesson)
{
    global $USER, $DB, $OUTPUT;
    $cm = get_coursemodule_from_instance('lesson', $lesson->id);
    $context = get_context_instance(CONTEXT_MODULE, $cm->id);
    if (has_capability('mod/lesson:manage', $context)) {
        echo "<p align=\"center\">" . get_string('teacherongoingwarning', 'lesson') . '</p>';
    } else {
        $ntries = $DB->count_records("lesson_grades", array("lessonid" => $lesson->id, "userid" => $USER->id));
        if (isset($USER->modattempts[$lesson->id])) {
            $ntries--;
        }
        $gradeinfo = lesson_grade($lesson, $ntries);
        $a = new stdClass();
        if ($lesson->custom) {
            $a->score = $gradeinfo->earned;
            $a->currenthigh = $gradeinfo->total;
            echo $OUTPUT->box(get_string("ongoingcustom", "lesson", $a), "generalbox boxaligncenter");
        } else {
            $a->correct = $gradeinfo->earned;
            $a->viewed = $gradeinfo->attempts;
            echo $OUTPUT->box(get_string("ongoingnormal", "lesson", $a), "generalbox boxaligncenter");
        }
    }
}
示例#6
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;
    }
}