Merge branch 'MDL-62218-master' of git://github.com/ryanwyllie/moodle
[moodle.git] / analytics / tests / fixtures / test_target_site_users.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  * Test target.
19  *
20  * @package   core_analytics
21  * @copyright 2018 David MonllaĆ³ {@link http://www.davidmonllao.com}
22  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
27 require_once(__DIR__ . '/test_site_users_analyser.php');
29 /**
30  * Test target.
31  *
32  * @package   core_analytics
33  * @copyright 2018 David MonllaĆ³ {@link http://www.davidmonllao.com}
34  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
35  */
36 class test_target_site_users extends \core_analytics\local\target\binary {
38     /**
39      * Returns a lang_string object representing the name for the indicator.
40      *
41      * Used as column identificator.
42      *
43      * If there is a corresponding '_help' string this will be shown as well.
44      *
45      * @return \lang_string
46      */
47     public static function get_name() : \lang_string {
48         // Using a string that exists and contains a corresponding '_help' string.
49         return new \lang_string('adminhelplogs');
50     }
52     /**
53      * predictions
54      *
55      * @var array
56      */
57     protected $predictions = array();
59     /**
60      * get_analyser_class
61      *
62      * @return string
63      */
64     public function get_analyser_class() {
65         return 'test_site_users_analyser';
66     }
68     /**
69      * classes_description
70      *
71      * @return string[]
72      */
73     public static function classes_description() {
74         return array(
75             'firstname first char is A',
76             'firstname first char is not A'
77         );
78     }
80     /**
81      * We don't want to discard results.
82      * @return float
83      */
84     protected function min_prediction_score() {
85         return null;
86     }
88     /**
89      * We don't want to discard results.
90      * @return array
91      */
92     protected function ignored_predicted_classes() {
93         return array();
94     }
96     /**
97      * is_valid_analysable
98      *
99      * @param \core_analytics\analysable $analysable
100      * @param bool $fortraining
101      * @return bool
102      */
103     public function is_valid_analysable(\core_analytics\analysable $analysable, $fortraining = true) {
104         // This is testing, let's make things easy.
105         return true;
106     }
108     /**
109      * is_valid_sample
110      *
111      * @param int $sampleid
112      * @param \core_analytics\analysable $analysable
113      * @param bool $fortraining
114      * @return bool
115      */
116     public function is_valid_sample($sampleid, \core_analytics\analysable $analysable, $fortraining = true) {
117         // We skip not-visible courses during training as a way to emulate the training data / prediction data difference.
118         // In normal circumstances is_valid_sample will return false when they receive a sample that can not be
119         // processed.
120         if (!$fortraining) {
121             return true;
122         }
124         $sample = $this->retrieve('user', $sampleid);
125         if ($sample->lastname == 'b') {
126             return false;
127         }
128         return true;
129     }
131     /**
132      * calculate_sample
133      *
134      * @param int $sampleid
135      * @param \core_analytics\analysable $analysable
136      * @param int $starttime
137      * @param int $endtime
138      * @return float
139      */
140     protected function calculate_sample($sampleid, \core_analytics\analysable $analysable, $starttime = false, $endtime = false) {
142         $sample = $this->retrieve('user', $sampleid);
144         $firstchar = substr($sample->firstname, 0, 1);
145         if ($firstchar === 'a') {
146             return 1;
147         } else {
148             return 0;
149         }
150     }