c68c9947ef015347e6af4e6297c58f46a72ebe09
[moodle.git] / admin / tool / dataprivacy / classes / local / helper.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  * Collection of helper functions for the data privacy tool.
19  *
20  * @package    tool_dataprivacy
21  * @copyright  2018 Jun Pataleta
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
24 namespace tool_dataprivacy\local;
25 defined('MOODLE_INTERNAL') || die();
27 use coding_exception;
28 use moodle_exception;
29 use tool_dataprivacy\api;
31 /**
32  * Class containing helper functions for the data privacy tool.
33  *
34  * @copyright  2018 Jun Pataleta
35  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
36  */
37 class helper {
39     /**
40      * Retrieves the human-readable text value of a data request type.
41      *
42      * @param int $requesttype The request type.
43      * @return string
44      * @throws coding_exception
45      * @throws moodle_exception
46      */
47     public static function get_request_type_string($requesttype) {
48         switch ($requesttype) {
49             case api::DATAREQUEST_TYPE_EXPORT:
50                 return get_string('requesttypeexport', 'tool_dataprivacy');
51             case api::DATAREQUEST_TYPE_DELETE:
52                 return get_string('requesttypedelete', 'tool_dataprivacy');
53             case api::DATAREQUEST_TYPE_OTHERS:
54                 return get_string('requesttypeothers', 'tool_dataprivacy');
55             default:
56                 throw new moodle_exception('errorinvalidrequesttype', 'tool_dataprivacy');
57         }
58     }
60     /**
61      * Retrieves the human-readable shortened text value of a data request type.
62      *
63      * @param int $requesttype The request type.
64      * @return string
65      * @throws coding_exception
66      * @throws moodle_exception
67      */
68     public static function get_shortened_request_type_string($requesttype) {
69         switch ($requesttype) {
70             case api::DATAREQUEST_TYPE_EXPORT:
71                 return get_string('requesttypeexportshort', 'tool_dataprivacy');
72             case api::DATAREQUEST_TYPE_DELETE:
73                 return get_string('requesttypedeleteshort', 'tool_dataprivacy');
74             case api::DATAREQUEST_TYPE_OTHERS:
75                 return get_string('requesttypeothersshort', 'tool_dataprivacy');
76             default:
77                 throw new moodle_exception('errorinvalidrequesttype', 'tool_dataprivacy');
78         }
79     }
81     /**
82      * Retrieves the human-readable value of a data request status.
83      *
84      * @param int $status The request status.
85      * @return string
86      * @throws coding_exception
87      * @throws moodle_exception
88      */
89     public static function get_request_status_string($status) {
90         switch ($status) {
91             case api::DATAREQUEST_STATUS_PENDING:
92                 return get_string('statuspending', 'tool_dataprivacy');
93             case api::DATAREQUEST_STATUS_PREPROCESSING:
94                 return get_string('statuspreprocessing', 'tool_dataprivacy');
95             case api::DATAREQUEST_STATUS_AWAITING_APPROVAL:
96                 return get_string('statusawaitingapproval', 'tool_dataprivacy');
97             case api::DATAREQUEST_STATUS_APPROVED:
98                 return get_string('statusapproved', 'tool_dataprivacy');
99             case api::DATAREQUEST_STATUS_PROCESSING:
100                 return get_string('statusprocessing', 'tool_dataprivacy');
101             case api::DATAREQUEST_STATUS_COMPLETE:
102                 return get_string('statuscomplete', 'tool_dataprivacy');
103             case api::DATAREQUEST_STATUS_CANCELLED:
104                 return get_string('statuscancelled', 'tool_dataprivacy');
105             case api::DATAREQUEST_STATUS_REJECTED:
106                 return get_string('statusrejected', 'tool_dataprivacy');
107             default:
108                 throw new moodle_exception('errorinvalidrequeststatus', 'tool_dataprivacy');
109         }
110     }
112     /**
113      * Get the users that a user can make data request for.
114      *
115      * E.g. User having a parent role and has the 'tool/dataprivacy:makedatarequestsforchildren' capability.
116      * @param int $userid The user's ID.
117      * @return array
118      */
119     public static function get_children_of_user($userid) {
120         global $DB;
122         // Get users that the user has role assignments to.
123         $allusernames = get_all_user_name_fields(true, 'u');
124         $sql = "SELECT u.id, $allusernames
125                   FROM {role_assignments} ra, {context} c, {user} u
126                  WHERE ra.userid = :userid
127                        AND ra.contextid = c.id
128                        AND c.instanceid = u.id
129                        AND c.contextlevel = :contextlevel";
130         $params = [
131             'userid' => $userid,
132             'contextlevel' => CONTEXT_USER
133         ];
135         // The final list of users that we will return.
136         $finalresults = [];
138         // Our prospective list of users.
139         if ($candidates = $DB->get_records_sql($sql, $params)) {
140             foreach ($candidates as $key => $child) {
141                 $childcontext = \context_user::instance($child->id);
142                 if (has_capability('tool/dataprivacy:makedatarequestsforchildren', $childcontext, $userid)) {
143                     $finalresults[$key] = $child;
144                 }
145             }
146         }
147         return $finalresults;
148     }