Skip to content

Commit 9468b97

Browse files
committed
Update privacy functions to fix issue#1311
1 parent 22079c3 commit 9468b97

5 files changed

Lines changed: 136 additions & 0 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
// This file is part of Moodle - https://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 <https://www.gnu.org/licenses/>.
16+
17+
/**
18+
* Privacy Subsystem implementation for bookingextension_confirmation_trainer.
19+
*
20+
* @package bookingextension_confirmation_trainer
21+
* @copyright 2026, Catalyst IT
22+
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23+
*/
24+
25+
namespace bookingextension_confirmation_trainer\privacy;
26+
27+
/**
28+
* Privacy Subsystem implementation for bookingextension_confirmation_trainer implementing null provider.
29+
*
30+
* @package bookingextension_confirmation_trainer
31+
* @copyright 2026, Catalyst IT
32+
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
33+
*/
34+
class provider implements \core_privacy\local\metadata\null_provider {
35+
/**
36+
* Get the language string identifier with the component's language
37+
* file to explain why this plugin stores no data.
38+
*
39+
* @return string
40+
*/
41+
public static function get_reason(): string {
42+
return 'privacy:metadata';
43+
}
44+
}

bookingextension/confirmation_trainer/lang/en/bookingextension_confirmation_trainer.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,6 @@
3232
$string['confirmationtrainerenabled'] = 'Allow confirmation by trainer';
3333
$string['notallowedtoconfirm'] = "Not allowed to confirm";
3434
$string['pluginname'] = 'Confirmation workflow by trainer';
35+
$string['privacy:metadata'] = 'The plugin does not store any personal data.';
3536
$string['workflowdescription'] = 'In the standard workflow, users will just book on the waitinglist, if in a booking option the "Book only after confirmation"-checkbox is set. As a teacher or any person, who has the corresponding capabilities (mod/booking:bookforothers & mod/booking:subscribeusers) you can view the users on the waitinglist and, from there, confirm users.';
3637
$string['workflowname'] = 'Confirmation workflow by trainer';

classes/privacy/provider.php

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,50 @@ public static function get_metadata(collection $collection): collection {
175175
'privacy:metadata:bookingodtdeductions'
176176
);
177177

178+
$collection->add_database_table(
179+
'booking_enrollink_bundles',
180+
[
181+
'courseid' => 'privacy:metadata:bookingenrollinkbundles:courseid',
182+
'userid' => 'privacy:metadata:bookingenrollinkbundles:userid',
183+
'timecreated' => 'privacy:metadata:bookingenrollinkbundles:timecreated',
184+
'places' => 'privacy:metadata:bookingenrollinkbundles:places',
185+
'erlid' => 'privacy:metadata:bookingenrollinkbundles:erlid',
186+
'timemodified' => 'privacy:metadata:bookingenrollinkbundles:timemodified',
187+
'usermodified' => 'privacy:metadata:bookingenrollinkbundles:usermodified',
188+
'baid' => 'privacy:metadata:bookingenrollinkbundles:baid',
189+
'optionid' => 'privacy:metadata:bookingenrollinkbundles:optionid',
190+
],
191+
'privacy:metadata:bookingenrollinkbundles'
192+
);
193+
194+
$collection->add_database_table(
195+
'booking_enrollink_items',
196+
[
197+
'erlid' => 'privacy:metadata:bookingenrollinkitems:erlid',
198+
'userid' => 'privacy:metadata:bookingenrollinkitems:userid',
199+
'consumed' => 'privacy:metadata:bookingenrollinkitems:consumed',
200+
'timecreated' => 'privacy:metadata:bookingenrollinkitems:timecreated',
201+
'timemodified' => 'privacy:metadata:bookingenrollinkitems:timemodified',
202+
],
203+
'privacy:metadata:bookingenrollinkitems'
204+
);
205+
206+
$collection->add_database_table(
207+
'booking_optiondates_answers',
208+
[
209+
'optiondateid' => 'privacy:metadata:bookingoptiondatesanswers:optiondateid',
210+
'optionid' => 'privacy:metadata:bookingoptiondatesanswers:optionid',
211+
'userid' => 'privacy:metadata:bookingoptiondatesanswers:userid',
212+
'status' => 'privacy:metadata:bookingoptiondatesanswers:status',
213+
'json' => 'privacy:metadata:bookingoptiondatesanswers:json',
214+
'notes' => 'privacy:metadata:bookingoptiondatesanswers:notes',
215+
'usermodified' => 'privacy:metadata:bookingoptiondatesanswers:usermodified',
216+
'timecreated' => 'privacy:metadata:bookingoptiondatesanswers:timecreated',
217+
'timemodified' => 'privacy:metadata:bookingoptiondatesanswers:timemodified',
218+
],
219+
'privacy:metadata:bookingoptiondatesanswers'
220+
);
221+
178222
return $collection;
179223
}
180224

@@ -461,6 +505,18 @@ public static function get_users_in_context(userlist $userlist) {
461505

462506
// Add users with entries in ical sequence table.
463507
$userlist->add_from_sql('userid', "SELECT userid FROM {booking_icalsequence}", []);
508+
509+
// Add users with booking_subbooking_answers.
510+
$userlist->add_from_sql('userid', "SELECT userid FROM {booking_subbooking_answers}", []);
511+
512+
// Add users with booking_odt_deductions.
513+
$userlist->add_from_sql('userid', "SELECT userid FROM {booking_odt_deductions}", []);
514+
515+
// Add users with booking_optiondates_answers.
516+
$userlist->add_from_sql('userid', "SELECT userid FROM {booking_optiondates_answers}", []);
517+
518+
// Add users with booking_history.
519+
$userlist->add_from_sql('userid', "SELECT userid FROM {booking_history}", []);
464520
}
465521

466522
/**
@@ -499,5 +555,9 @@ public static function delete_data_for_users(approved_userlist $userlist) {
499555
$DB->delete_records_select('booking_userevents', $select, $params);
500556
$DB->delete_records_select('booking_ratings', $select, $params);
501557
$DB->delete_records_select('booking_icalsequence', $select, $params);
558+
$DB->delete_records_select('booking_subbooking_answers', $select, $params);
559+
$DB->delete_records_select('booking_odt_deductions', $select, $params);
560+
$DB->delete_records_select('booking_icalsequence', $select, $params);
561+
$DB->delete_records_select('booking_optiondates_answers', $select, $params);
502562
}
503563
}

classes/teachers_handler.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,11 +541,16 @@ public static function delete_booking_optiondates_teachers_by_bookingid(int $boo
541541
foreach ($existingoptiondates as $existingoptiondate) {
542542
if (empty($userid)) {
543543
$DB->delete_records('booking_optiondates_teachers', ['optiondateid' => $existingoptiondate->id]);
544+
$DB->delete_records('booking_optiondates_answers', ['optiondateid' => $existingoptiondate->id]);
544545
} else {
545546
$DB->delete_records('booking_optiondates_teachers', [
546547
'optiondateid' => $existingoptiondate->id,
547548
'userid' => $userid,
548549
]);
550+
$DB->delete_records('booking_optiondates_answers', [
551+
'optiondateid' => $existingoptiondate->id,
552+
'userid' => $userid,
553+
]);
549554
}
550555
}
551556
cache_helper::purge_by_event('setbackcachedteachersjournal');

lang/en/booking.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2059,6 +2059,22 @@
20592059
$string['privacy:metadata:bookinganswers:timemodified'] = 'Timestamp when booking was last modified';
20602060
$string['privacy:metadata:bookinganswers:userid'] = 'User that is booked for this event';
20612061
$string['privacy:metadata:bookinganswers:waitinglist'] = 'True if user is on the waitinglist';
2062+
$string['privacy:metadata:bookingenrollinkbundles'] = 'Bundle of places';
2063+
$string['privacy:metadata:bookingenrollinkbundles:baid'] = 'ID of the bookinganswer';
2064+
$string['privacy:metadata:bookingenrollinkbundles:courseid'] = 'ID of the course';
2065+
$string['privacy:metadata:bookingenrollinkbundles:erlid'] = 'Hash value to double check';
2066+
$string['privacy:metadata:bookingenrollinkbundles:optionid'] = 'ID of the booking option';
2067+
$string['privacy:metadata:bookingenrollinkbundles:places'] = 'Total amount of places';
2068+
$string['privacy:metadata:bookingenrollinkbundles:timecreated'] = 'Timestamp when the record was created';
2069+
$string['privacy:metadata:bookingenrollinkbundles:timemodified'] = 'Timestamp when the record was last modified';
2070+
$string['privacy:metadata:bookingenrollinkbundles:userid'] = 'User ID for the record';
2071+
$string['privacy:metadata:bookingenrollinkbundles:usermodified'] = 'The user that modified';
2072+
$string['privacy:metadata:bookingenrollinkitems'] = 'The items that can be acquired in a bundle';
2073+
$string['privacy:metadata:bookingenrollinkitems:consumed'] = 'Flag for open or consumed';
2074+
$string['privacy:metadata:bookingenrollinkitems:erlid'] = 'Hash of the bundle';
2075+
$string['privacy:metadata:bookingenrollinkitems:timecreated'] = 'Timestamp when the record was created';
2076+
$string['privacy:metadata:bookingenrollinkitems:timemodified'] = 'Timestamp when the record was last modified';
2077+
$string['privacy:metadata:bookingenrollinkitems:userid'] = 'User ID for the record';
20622078
$string['privacy:metadata:bookingicalsequence'] = 'Ical sequence';
20632079
$string['privacy:metadata:bookingicalsequence:optionid'] = 'Booking option ID for ical';
20642080
$string['privacy:metadata:bookingicalsequence:sequencevalue'] = 'Ical sequence value';
@@ -2070,6 +2086,16 @@
20702086
$string['privacy:metadata:bookingodtdeductions:timemodified'] = 'The time last modified';
20712087
$string['privacy:metadata:bookingodtdeductions:userid'] = 'Userid of the teacher who gets a deduction for this option date.';
20722088
$string['privacy:metadata:bookingodtdeductions:usermodified'] = 'The user that modified';
2089+
$string['privacy:metadata:bookingoptiondatesanswers'] = 'Status of optiondates for user';
2090+
$string['privacy:metadata:bookingoptiondatesanswers:json'] = 'Extra data';
2091+
$string['privacy:metadata:bookingoptiondatesanswers:notes'] = 'Notes';
2092+
$string['privacy:metadata:bookingoptiondatesanswers:optiondateid'] = 'ID of the option date';
2093+
$string['privacy:metadata:bookingoptiondatesanswers:optionid'] = 'ID of the option';
2094+
$string['privacy:metadata:bookingoptiondatesanswers:status'] = 'Status number';
2095+
$string['privacy:metadata:bookingoptiondatesanswers:timecreated'] = 'The time created';
2096+
$string['privacy:metadata:bookingoptiondatesanswers:timemodified'] = 'The time last modified';
2097+
$string['privacy:metadata:bookingoptiondatesanswers:userid'] = 'User ID for the record';
2098+
$string['privacy:metadata:bookingoptiondatesanswers:usermodified'] = 'The user that modified';
20732099
$string['privacy:metadata:bookingoptiondatesteachers'] = 'Track teachers for each session.';
20742100
$string['privacy:metadata:bookingoptiondatesteachers:optiondateid'] = 'ID of the option date';
20752101
$string['privacy:metadata:bookingoptiondatesteachers:userid'] = 'The userid of the teacher.';

0 commit comments

Comments
 (0)