当前位置: 首页>>代码示例>>PHP>>正文


PHP quiz_attempt::process_finish方法代码示例

本文整理汇总了PHP中quiz_attempt::process_finish方法的典型用法代码示例。如果您正苦于以下问题:PHP quiz_attempt::process_finish方法的具体用法?PHP quiz_attempt::process_finish怎么用?PHP quiz_attempt::process_finish使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在quiz_attempt的用法示例。


在下文中一共展示了quiz_attempt::process_finish方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: build_attempt_from_usage

 /**
  * Creates a normal quiz attempt from a (typically paper copy) usage, so the student can view the results of a paper test
  * as though they had taken it on Moodle, including feedback. This also allows one to theoretically allow subsequent attempts
  * at the same quiz on Moodle, using options such as "each attempt buiilds on the last", building on the paper copies.
  *
  * @param question_usage_by_actvitity   $usage      The question_usage_by_activity object which composes the paper copy.
  * @param int                           $user_id    If provided, the attempt will be owned by the user with the given ID, instead of the current user.
  * @param bool                          $finished   If set, the attempt will finished and committed to the database as soon as it is created; this assumes the QUBA has already been populated with responses.
  * @param bool                          $commit     If set, the attempt will be committed to the database after creation. If $finished is set, the value of $commit will be ignored, and the row will be committed regardless.
  *
  * @return array      Returns the newly created attempt's raw data. (In other words, does not return a quiz_attempt object.)
  */
 protected function build_attempt_from_usage($usage, $user_id = null, $finished = false, $commit = false, $attempt_number = null)
 {
     global $DB, $USER;
     //get the current time
     $time_now = time();
     //start a new attempt
     $attempt = new stdClass();
     $attempt->quiz = $this->quiz->id;
     $attempt->preview = 0;
     $attempt->timestart = $time_now;
     $attempt->timefinish = 0;
     $attempt->timemodified = $time_now;
     //associate the attempt with the usage
     $attempt->uniqueid = $usage->get_id();
     //and set the attempt's owner, if specified
     if ($user_id !== null) {
         $attempt->userid = $user_id;
     } else {
         $attempt->userid = $USER->id;
     }
     //if no attempt number was specified, automatically detect one
     if ($attempt_number === null) {
         //determine the maximum attempt value for that user/quiz combo
         $max_attempt = $DB->get_records_sql('SELECT max("attempt") AS max FROM {quiz_attempts} WHERE "userid" = ? AND "quiz" = ?', array($user_id, $this->quiz->id));
         $max_attempt = reset($max_attempt);
         //if no attempts exist, let this be the first attempt
         if (empty($max_attempt->max)) {
             $attempt_number = 1;
         } else {
             $attempt_number = $max_attempt->max + 1;
         }
     }
     //set the attempt number
     $attempt->attempt = $attempt_number;
     //build the attempt layout
     $attempt->layout = implode(',', $usage->get_slots());
     //if requested, commit the attempt to the database
     if ($commit || $finished) {
         //and use it to save the usage and attempt
         question_engine::save_questions_usage_by_activity($usage);
         $attempt->id = $DB->insert_record('quiz_attempts', $attempt);
     }
     //if requested, finish the attempt immediately
     if ($finished) {
         $raw_course = $DB->get_record('course', array('id' => $this->course->id));
         //wrap the attempt data in an quiz_attempt object, and ask it to finish
         $attempt->currentpage = 0;
         $attempt_object = new quiz_attempt($attempt, $this->quiz, $this->cm, $this->course, true);
         // $attempt_object->finish_attempt($time_now);
         // $attempt_object->process_submitted_actions($time_now, false);
         $attempt_object->process_finish($time_now, $finished);
     }
     //return the attempt object
     return $attempt;
 }
开发者ID:advancingdesign,项目名称:moodle-quiz_papercopy,代码行数:67,代码来源:report.php

示例2: forcesubmit_attempts

 /**
  * Force submit attempts for this quiz, exactly which attempts are submitted is
  * controlled by the parameters.
  * @param object $quiz the quiz settings.
  * @param bool $dryrun if true, do a pretend regrade, otherwise do it for real.
  * @param array $groupstudents blank for all attempts, otherwise submit attempts
  * for these users.
  * @param array $attemptids blank for all attempts, otherwise only submit
  * attempts whose id is in this list.
  */
 protected function forcesubmit_attempts($quiz, $dryrun = false, $groupstudents = array(), $attemptids = array())
 {
     global $DB;
     $this->unlock_session();
     $where = "quiz = ? AND preview = 0 AND state IN ('inprogress', 'overdue', 'abandoned')";
     $params = array($quiz->id);
     if ($groupstudents) {
         list($usql, $uparams) = $DB->get_in_or_equal($groupstudents);
         $where .= " AND userid {$usql}";
         $params = array_merge($params, $uparams);
     }
     if ($attemptids) {
         list($asql, $aparams) = $DB->get_in_or_equal($attemptids);
         $where .= " AND id {$asql}";
         $params = array_merge($params, $aparams);
     }
     $count = $DB->count_records_select('quiz_attempts', $where, $params);
     $attemptstoprocess = $DB->get_recordset_select('quiz_attempts', $where, $params);
     $cm = get_coursemodule_from_instance('quiz', $quiz->id);
     $course = $DB->get_record('course', array('id' => $cm->course));
     $timenow = time();
     $progressbar = new progress_bar('quiz_overview_forcesubmit', 500, true);
     $a = array('count' => $count, 'done' => 0);
     foreach ($attemptstoprocess as $attempt) {
         try {
             // Test that we have proper quiz and coure data.
             if (!$quiz || $attempt->quiz != $quiz->id) {
                 throw new moodle_exception('Bad quiz or attempt in request.');
                 $cm = get_coursemodule_from_instance('quiz', $attempt->quiz);
             }
             // Trigger any transitions that are required.
             $attemptobj = new quiz_attempt($attempt, $quiz, $cm, $course);
             $attemptobj->process_finish($timenow, false);
             $a['done']++;
             $progressbar->update($a['done'], $a['count'], get_string('forcesubmittingattemptxofy', 'quiz_overview', $a));
         } catch (moodle_exception $e) {
             // If an error occurs while processing one attempt, don't let that kill cron.
             mtrace("Error while processing attempt {$attempt->id} at {$attempt->quiz} quiz:");
             mtrace($e->getMessage());
             mtrace($e->getTraceAsString());
             // Close down any currently open transactions, otherwise one error
             // will stop following DB changes from being committed.
             $DB->force_transaction_rollback();
         }
     }
     $attemptstoprocess->close();
     if (!$dryrun) {
         $this->update_overall_grades($quiz);
     }
 }
开发者ID:MoodleMetaData,项目名称:MoodleMetaData,代码行数:60,代码来源:report.php


注:本文中的quiz_attempt::process_finish方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。