MDL-42428 Javascript: Switch M.util.show_confirm_dialog to use moodle-core-notification
[moodle.git] / question / classes / statistics / questions / calculated.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Question statistics calculations class. Used in the quiz statistics report but also available for use elsewhere.
19  *
20  * @package    core
21  * @subpackage questionbank
22  * @copyright  2013 Open University
23  * @author     Jamie Pratt <me@jamiep.org>
24  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25  */
27 namespace core_question\statistics\questions;
28 defined('MOODLE_INTERNAL') || die();
30 /**
31  * This class is used to return the stats as calculated by {@link \core_question\statistics\questions\calculator}
32  *
33  * @copyright 2013 Open University
34  * @author    Jamie Pratt <me@jamiep.org>
35  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
36  */
37 class calculated {
39     public $questionid;
41     // These first fields are the final fields cached in the db and shown in reports.
43     // See : http://docs.moodle.org/dev/Quiz_statistics_calculations#Position_statistics .
45     public $slot = null;
47     /**
48      * @var bool is this a sub question.
49      */
50     public $subquestion = false;
52     /**
53      * @var int total attempts at this question.
54      */
55     public $s = 0;
57     /**
58      * @var float effective weight of this question.
59      */
60     public $effectiveweight;
62     /**
63      * @var bool is covariance of this questions mark with other question marks negative?
64      */
65     public $negcovar;
67     /**
68      * @var float
69      */
70     public $discriminationindex;
72     /**
73      * @var float
74      */
75     public $discriminativeefficiency;
77     /**
78      * @var float standard deviation
79      */
80     public $sd;
82     /**
83      * @var float
84      */
85     public $facility;
87     /**
88      * @var float max mark achievable for this question.
89      */
90     public $maxmark;
92     /**
93      * @var string comma separated list of the positions in which this question appears.
94      */
95     public $positions;
97     /**
98      * @var null|float The average score that students would have got by guessing randomly. Or null if not calculable.
99      */
100     public $randomguessscore = null;
102     // End of fields in db.
104     protected $fieldsindb = array('questionid', 'slot', 'subquestion', 's', 'effectiveweight', 'negcovar', 'discriminationindex',
105         'discriminativeefficiency', 'sd', 'facility', 'subquestions', 'maxmark', 'positions', 'randomguessscore');
107     // Fields used for intermediate calculations.
109     public $totalmarks = 0;
111     public $totalothermarks = 0;
113     public $markvariancesum = 0;
115     public $othermarkvariancesum = 0;
117     public $covariancesum = 0;
119     public $covariancemaxsum = 0;
121     public $subquestions = '';
123     public $covariancewithoverallmarksum = 0;
125     public $markarray = array();
127     public $othermarksarray = array();
129     public $markaverage;
131     public $othermarkaverage;
133     public $markvariance;
134     public $othermarkvariance;
135     public $covariance;
136     public $covariancemax;
137     public $covariancewithoverallmark;
139     /**
140      * @var object full question data
141      */
142     public $question;
144     /**
145      * Set if this record has been retrieved from cache. This is the time that the statistics were calculated.
146      *
147      * @var integer
148      */
149     public $timemodified;
151     /**
152      * Cache calculated stats stored in this object in 'question_statistics' table.
153      *
154      * @param \qubaid_condition $qubaids
155      */
156     public function cache($qubaids) {
157         global $DB;
158         $toinsert = new \stdClass();
159         $toinsert->hashcode = $qubaids->get_hash_code();
160         $toinsert->timemodified = time();
161         foreach ($this->fieldsindb as $field) {
162             $toinsert->{$field} = $this->{$field};
163         }
164         $DB->insert_record('question_statistics', $toinsert, false);
165     }
167     /**
168      * @param object $record Given a record from 'question_statistics' copy stats from record to properties.
169      */
170     public function populate_from_record($record) {
171         foreach ($this->fieldsindb as $field) {
172             $this->$field = $record->$field;
173         }
174         $this->timemodified = $record->timemodified;
175     }