MDL-62218 analytics: Privacy API implementation
[moodle.git] / analytics / tests / fixtures / test_site_users_analyser.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 analyser
19  *
20  * @package   core
21  * @copyright 2017 David Monllao {@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 /**
28  * Test analyser
29  *
30  * @package   core
31  * @copyright 2017 David Monllao {@link http://www.davidmonllao.com}
32  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
33  */
34 class test_site_users_analyser extends \core_analytics\local\analyser\sitewide {
36     /**
37      * Samples origin is course table.
38      *
39      * @return string
40      */
41     public function get_samples_origin() {
42         return 'user';
43     }
45     /**
46      * Returns the sample analysable
47      *
48      * @param int $sampleid
49      * @return \core_analytics\analysable
50      */
51     public function get_sample_analysable($sampleid) {
52         return new \core_analytics\site();
53     }
55     /**
56      * Data this analyer samples provide.
57      *
58      * @return string[]
59      */
60     protected function provided_sample_data() {
61         return array('user');
62     }
64     /**
65      * Returns the sample context.
66      *
67      * @param int $sampleid
68      * @return \context
69      */
70     public function sample_access_context($sampleid) {
71         return \context_system::instance();
72     }
74     /**
75      * Returns all site courses.
76      *
77      * @param \core_analytics\analysable $site
78      * @return array
79      */
80     protected function get_all_samples(\core_analytics\analysable $site) {
81         global $DB;
83         $users = $DB->get_records('user');
84         $userids = array_keys($users);
85         $sampleids = array_combine($userids, $userids);
87         $users = array_map(function($user) {
88             return array('user' => $user);
89         }, $users);
91         return array($sampleids, $users);
92     }
94     /**
95      * Return all complete samples data from sample ids.
96      *
97      * @param int[] $sampleids
98      * @return array
99      */
100     public function get_samples($sampleids) {
101         global $DB;
103         list($userssql, $params) = $DB->get_in_or_equal($sampleids, SQL_PARAMS_NAMED);
104         $users = $DB->get_records_select('user', "id {$userssql}", $params);
105         $userids = array_keys($users);
106         $sampleids = array_combine($userids, $userids);
108         $users = array_map(function($user) {
109             return array('user' => $user);
110         }, $users);
112         return array($sampleids, $users);
113     }
115     /**
116      * Returns the description of a sample.
117      *
118      * @param int $sampleid
119      * @param int $contextid
120      * @param array $sampledata
121      * @return array array(string, \renderable)
122      */
123     public function sample_description($sampleid, $contextid, $sampledata) {
124         $description = fullname($samplesdata['user']);
125         $userimage = new \pix_icon('i/user', get_string('user'));
126         return array($description, $userimage);
127     }
129     /**
130      * We need to delete associated data if a user requests his data to be deleted.
131      *
132      * @return bool
133      */
134     public function processes_user_data() {
135         return true;
136     }
138     /**
139      * Join the samples origin table with the user id table.
140      *
141      * @param string $sampletablealias
142      * @return string
143      */
144     public function join_sample_user($sampletablealias) {
145         return "JOIN {user} u ON u.id = {$sampletablealias}.sampleid";
146     }