Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/mod/quiz/accessrule/delaybetweenattempts/rule.php
Go to the documentation of this file.
00001 <?php
00002 // This file is part of Moodle - http://moodle.org/
00003 //
00004 // Moodle is free software: you can redistribute it and/or modify
00005 // it under the terms of the GNU General Public License as published by
00006 // the Free Software Foundation, either version 3 of the License, or
00007 // (at your option) any later version.
00008 //
00009 // Moodle is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 // GNU General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU General Public License
00015 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
00016 
00027 defined('MOODLE_INTERNAL') || die();
00028 
00029 require_once($CFG->dirroot . '/mod/quiz/accessrule/accessrulebase.php');
00030 
00031 
00038 class quizaccess_delaybetweenattempts extends quiz_access_rule_base {
00039 
00040     public static function make(quiz $quizobj, $timenow, $canignoretimelimits) {
00041         if (empty($quizobj->get_quiz()->delay1) && empty($quizobj->get_quiz()->delay2)) {
00042             return null;
00043         }
00044 
00045         return new self($quizobj, $timenow);
00046     }
00047 
00048     public function prevent_new_attempt($numprevattempts, $lastattempt) {
00049         if ($this->quiz->attempts > 0 && $numprevattempts >= $this->quiz->attempts) {
00050             // No more attempts allowed anyway.
00051             return false;
00052         }
00053         if ($this->quiz->timeclose != 0 && $this->timenow > $this->quiz->timeclose) {
00054             // No more attempts allowed anyway.
00055             return false;
00056         }
00057         $nextstarttime = $this->compute_next_start_time($numprevattempts, $lastattempt);
00058         if ($this->timenow < $nextstarttime) {
00059             if ($this->quiz->timeclose == 0 || $nextstarttime <= $this->quiz->timeclose) {
00060                 return get_string('youmustwait', 'quizaccess_delaybetweenattempts',
00061                         userdate($nextstarttime));
00062             } else {
00063                 return get_string('youcannotwait', 'quizaccess_delaybetweenattempts');
00064             }
00065         }
00066         return false;
00067     }
00068 
00076     protected function compute_next_start_time($numprevattempts, $lastattempt) {
00077         if ($numprevattempts == 0) {
00078             return 0;
00079         }
00080 
00081         $lastattemptfinish = $lastattempt->timefinish;
00082         if ($this->quiz->timelimit > 0) {
00083             $lastattemptfinish = min($lastattemptfinish,
00084             $lastattempt->timestart + $this->quiz->timelimit);
00085         }
00086 
00087         if ($numprevattempts == 1 && $this->quiz->delay1) {
00088             return $lastattemptfinish + $this->quiz->delay1;
00089         } else if ($numprevattempts > 1 && $this->quiz->delay2) {
00090             return $lastattemptfinish + $this->quiz->delay2;
00091         }
00092         return 0;
00093     }
00094 
00095     public function is_finished($numprevattempts, $lastattempt) {
00096         $nextstarttime = $this->compute_next_start_time($numprevattempts, $lastattempt);
00097         return $this->timenow <= $nextstarttime &&
00098         $this->quiz->timeclose != 0 && $nextstarttime >= $this->quiz->timeclose;
00099     }
00100 }
 All Data Structures Namespaces Files Functions Variables Enumerations