Proyectos de Subversion Moodle

Rev

Rev 1 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1 Rev 1441
Línea 25... Línea 25...
25
use core_privacy\local\request\approved_userlist;
25
use core_privacy\local\request\approved_userlist;
26
use core_privacy\local\request\contextlist;
26
use core_privacy\local\request\contextlist;
27
use core_privacy\local\request\core_userlist_provider;
27
use core_privacy\local\request\core_userlist_provider;
28
use core_privacy\local\request\transform;
28
use core_privacy\local\request\transform;
29
use core_privacy\local\request\userlist;
29
use core_privacy\local\request\userlist;
30
use core_privacy\local\request\user_preference_provider;
-
 
31
use core_privacy\local\request\writer;
30
use core_privacy\local\request\writer;
32
use core_reportbuilder\manager;
31
use core_reportbuilder\manager;
33
use core_reportbuilder\local\helpers\user_filter_manager;
-
 
34
use core_reportbuilder\local\helpers\schedule as schedule_helper;
32
use core_reportbuilder\local\helpers\schedule as schedule_helper;
35
use core_reportbuilder\local\models\audience;
-
 
36
use core_reportbuilder\local\models\column;
-
 
37
use core_reportbuilder\local\models\filter;
-
 
38
use core_reportbuilder\local\models\report;
-
 
39
use core_reportbuilder\local\models\schedule;
33
use core_reportbuilder\local\models\{audience, column, filter, report, schedule, user_filter};
Línea 40... Línea 34...
40
 
34
 
41
/**
35
/**
42
 * Privacy Subsystem for core_reportbuilder
36
 * Privacy Subsystem for core_reportbuilder
43
 *
37
 *
Línea 46... Línea 40...
46
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
40
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
47
 */
41
 */
48
class provider implements
42
class provider implements
49
    \core_privacy\local\metadata\provider,
43
    \core_privacy\local\metadata\provider,
50
    \core_privacy\local\request\plugin\provider,
44
    \core_privacy\local\request\plugin\provider,
51
    core_userlist_provider,
45
    core_userlist_provider {
52
    user_preference_provider {
-
 
Línea 53... Línea 46...
53
 
46
 
54
    /**
47
    /**
55
     * Returns metadata about the component
48
     * Returns metadata about the component
56
     *
49
     *
Línea 80... Línea 73...
80
            'uniqueidentifier' => 'privacy:metadata:filter:uniqueidentifier',
73
            'uniqueidentifier' => 'privacy:metadata:filter:uniqueidentifier',
81
            'usercreated' => 'privacy:metadata:filter:usercreated',
74
            'usercreated' => 'privacy:metadata:filter:usercreated',
82
            'usermodified' => 'privacy:metadata:filter:usermodified',
75
            'usermodified' => 'privacy:metadata:filter:usermodified',
83
        ], 'privacy:metadata:filter');
76
        ], 'privacy:metadata:filter');
Línea -... Línea 77...
-
 
77
 
-
 
78
        $collection->add_database_table(user_filter::TABLE, [
-
 
79
            'filterdata' => 'privacy:metadata:user_filter:filterdata',
-
 
80
            'timecreated' => 'privacy:metadata:user_filter:timecreated',
-
 
81
            'timemodified' => 'privacy:metadata:user_filter:timemodified',
-
 
82
        ], 'privacy:metadata:user_filter');
84
 
83
 
85
        $collection->add_database_table(audience::TABLE, [
84
        $collection->add_database_table(audience::TABLE, [
86
            'classname' => 'privacy:metadata:audience:classname',
85
            'classname' => 'privacy:metadata:audience:classname',
87
            'configdata' => 'privacy:metadata:audience:configdata',
86
            'configdata' => 'privacy:metadata:audience:configdata',
88
            'heading' => 'privacy:metadata:audience:heading',
87
            'heading' => 'privacy:metadata:audience:heading',
Línea 107... Línea 106...
107
            'usermodified' => 'privacy:metadata:schedule:usermodified',
106
            'usermodified' => 'privacy:metadata:schedule:usermodified',
108
            'timecreated' => 'privacy:metadata:schedule:timecreated',
107
            'timecreated' => 'privacy:metadata:schedule:timecreated',
109
            'timemodified' => 'privacy:metadata:schedule:timemodified',
108
            'timemodified' => 'privacy:metadata:schedule:timemodified',
110
        ], 'privacy:metadata:schedule');
109
        ], 'privacy:metadata:schedule');
Línea 111... Línea -...
111
 
-
 
112
        $collection->add_user_preference('core_reportbuilder', 'privacy:metadata:preference:reportfilter');
-
 
113
 
110
 
114
        return $collection;
111
        return $collection;
Línea 115... Línea 112...
115
    }
112
    }
116
 
-
 
117
    /**
-
 
118
     * Export all user preferences for the component
-
 
119
     *
-
 
120
     * @param int $userid
-
 
121
     */
-
 
122
    public static function export_user_preferences(int $userid): void {
-
 
123
        $preferencestring = get_string('privacy:metadata:preference:reportfilter', 'core_reportbuilder');
-
 
124
 
-
 
125
        $filters = user_filter_manager::get_all_for_user($userid);
-
 
126
        foreach ($filters as $key => $filter) {
-
 
127
            writer::export_user_preference('core_reportbuilder',
-
 
128
                $key,
-
 
129
                json_encode($filter, JSON_PRETTY_PRINT),
-
 
130
                $preferencestring
-
 
131
            );
-
 
132
        }
-
 
133
    }
-
 
134
 
113
 
135
    /**
114
    /**
136
     * Get export sub context for a report
115
     * Get export sub context for a report
137
     *
116
     *
138
     * @param report $report
117
     * @param report $report
Línea 154... Línea 133...
154
     * @return contextlist
133
     * @return contextlist
155
     */
134
     */
156
    public static function get_contexts_for_userid(int $userid): contextlist {
135
    public static function get_contexts_for_userid(int $userid): contextlist {
157
        $contextlist = new contextlist();
136
        $contextlist = new contextlist();
Línea 158... Línea 137...
158
 
137
 
159
        // Locate all contexts for reports the user has created, or reports they have created audience/schedules for.
138
        // Locate all contexts for reports the user has created, or reports they have created ancillary data for.
160
        $sql = '
139
        $sql = '
161
            SELECT r.contextid
140
            SELECT r.contextid
162
              FROM {' . report::TABLE . '} r
141
              FROM {' . report::TABLE . '} r
163
             WHERE r.type = 0
142
             WHERE r.type = 0
164
               AND (r.usercreated = ?
143
               AND (r.usercreated = ?
165
                 OR r.usermodified = ?
144
                 OR r.usermodified = ?
-
 
145
                 OR r.id IN (
-
 
146
                    SELECT f.reportid
-
 
147
                      FROM {' . user_filter::TABLE . '} f
-
 
148
                     WHERE f.usercreated = ?
166
                 OR r.id IN (
149
                     UNION
167
                    SELECT a.reportid
150
                    SELECT a.reportid
168
                      FROM {' . audience::TABLE . '} a
151
                      FROM {' . audience::TABLE . '} a
169
                     WHERE a.usercreated = ? OR a.usermodified = ?
152
                     WHERE a.usercreated = ? OR a.usermodified = ?
170
                     UNION
153
                     UNION
171
                    SELECT s.reportid
154
                    SELECT s.reportid
172
                      FROM {' . schedule::TABLE . '} s
155
                      FROM {' . schedule::TABLE . '} s
173
                     WHERE s.usercreated = ? OR s.usermodified = ?
156
                     WHERE s.usercreated = ? OR s.usermodified = ?
174
                    )
157
                    )
Línea 175... Línea 158...
175
                   )';
158
                   )';
176
 
159
 
Línea 177... Línea 160...
177
        return $contextlist->add_from_sql($sql, array_fill(0, 6, $userid));
160
        return $contextlist->add_from_sql($sql, array_fill(0, 7, $userid));
178
    }
161
    }
179
 
162
 
Línea 191... Línea 174...
191
                 FROM {' . report::TABLE . '} r
174
                 FROM {' . report::TABLE . '} r
192
                WHERE ' . $select;
175
                WHERE ' . $select;
193
        $userlist->add_from_sql('usercreated', $sql, $params);
176
        $userlist->add_from_sql('usercreated', $sql, $params);
194
        $userlist->add_from_sql('usermodified', $sql, $params);
177
        $userlist->add_from_sql('usermodified', $sql, $params);
Línea -... Línea 178...
-
 
178
 
-
 
179
        // Users who have created user filters.
-
 
180
        $sql = 'SELECT f.usercreated
-
 
181
                  FROM {' . user_filter::TABLE . '} f
-
 
182
                  JOIN {' . report::TABLE . '} r ON r.id = f.reportid
-
 
183
                WHERE ' . $select;
-
 
184
        $userlist->add_from_sql('usercreated', $sql, $params);
195
 
185
 
196
        // Users who have created audiences.
186
        // Users who have created audiences.
197
        $sql = 'SELECT a.usercreated, a.usermodified
187
        $sql = 'SELECT a.usercreated, a.usermodified
198
                  FROM {' . audience::TABLE . '} a
188
                  FROM {' . audience::TABLE . '} a
199
                  JOIN {' . report::TABLE . '} r ON r.id = a.reportid
189
                  JOIN {' . report::TABLE . '} r ON r.id = a.reportid
Línea 222... Línea 212...
222
 
212
 
Línea 223... Línea 213...
223
        $user = $contextlist->get_user();
213
        $user = $contextlist->get_user();
224
 
214
 
-
 
215
        // We need to get all reports that the user has created, or reports they have created audience/schedules for.
-
 
216
        $select = 'type = 0 AND (usercreated = ? OR usermodified = ? OR id IN (
-
 
217
            SELECT f.reportid
-
 
218
              FROM {' . user_filter::TABLE . '} f
225
        // We need to get all reports that the user has created, or reports they have created audience/schedules for.
219
             WHERE f.usercreated = ?
226
        $select = 'type = 0 AND (usercreated = ? OR usermodified = ? OR id IN (
220
             UNION
227
            SELECT a.reportid
221
            SELECT a.reportid
228
              FROM {' . audience::TABLE . '} a
222
              FROM {' . audience::TABLE . '} a
229
             WHERE a.usercreated = ? OR a.usermodified = ?
223
             WHERE a.usercreated = ? OR a.usermodified = ?
230
             UNION
224
             UNION
231
            SELECT s.reportid
225
            SELECT s.reportid
232
              FROM {' . schedule::TABLE . '} s
226
              FROM {' . schedule::TABLE . '} s
233
             WHERE s.usercreated = ? OR s.usermodified = ?
227
             WHERE s.usercreated = ? OR s.usermodified = ?
Línea 234... Línea 228...
234
        ))';
228
        ))';
235
        $params = array_fill(0, 6, $user->id);
229
        $params = array_fill(0, 7, $user->id);
Línea 236... Línea 230...
236
 
230
 
Línea -... Línea 231...
-
 
231
        foreach (report::get_records_select($select, $params) as $report) {
-
 
232
            $subcontext = static::get_export_subcontext($report);
-
 
233
 
-
 
234
            self::export_report($subcontext, $report);
-
 
235
 
237
        foreach (report::get_records_select($select, $params) as $report) {
236
            // User filters.
238
            $subcontext = static::get_export_subcontext($report);
237
            if ($userfilters = user_filter::get_records(['reportid' => $report->get('id'), 'usercreated' => $user->id])) {
Línea 239... Línea 238...
239
 
238
                static::export_user_filters($report->get_context(), $subcontext, $userfilters);
240
            self::export_report($subcontext, $report);
239
            }
Línea 308... Línea 307...
308
 
307
 
309
        writer::with_context($report->get_context())->export_data($subcontext, $reportdata);
308
        writer::with_context($report->get_context())->export_data($subcontext, $reportdata);
Línea 310... Línea 309...
310
    }
309
    }
-
 
310
 
-
 
311
    /**
-
 
312
     * Export given user filters in context
-
 
313
     *
-
 
314
     * @param context $context
-
 
315
     * @param array $subcontext
-
 
316
     * @param user_filter[] $userfilters
-
 
317
     */
-
 
318
    protected static function export_user_filters(context $context, array $subcontext, array $userfilters): void {
-
 
319
        $userfilterdata = array_map(static function(user_filter $userfilter): stdClass {
-
 
320
            return (object) [
-
 
321
                'filterdata' => $userfilter->get('filterdata'),
-
 
322
                'timecreated' => transform::datetime($userfilter->get('timecreated')),
-
 
323
                'timemodified' => transform::datetime($userfilter->get('timemodified')),
-
 
324
            ];
-
 
325
        }, $userfilters);
-
 
326
 
-
 
327
        writer::with_context($context)->export_related_data($subcontext, 'userfilters', (object) ['data' => $userfilterdata]);
-
 
328
    }
311
 
329
 
312
    /**
330
    /**
313
     * Export given audiences in context
331
     * Export given audiences in context
314
     *
332
     *
315
     * @param context $context
333
     * @param context $context