MDL-62601 editor_atto: Do not use context_user

This commit is contained in:
Andrew Nicols
2018-10-31 13:45:00 +08:00
parent f2eb4c0b8f
commit 52a16f409d
+28 -13
View File
@@ -72,15 +72,16 @@ class provider implements
// This block doesn't know who information is stored against unless it
// is at the user context.
$contextlist = new \core_privacy\local\request\contextlist();
$contextuser = \context_user::instance($userid);
$sql = "SELECT contextid FROM {editor_atto_autosave} WHERE userid = :userid OR contextid = :contextid";
$params = [
'userid' => $userid,
'contextid' => $contextuser->id,
];
$sql = "SELECT
c.id
FROM {editor_atto_autosave} eas
JOIN {context} c ON c.id = eas.contextid
WHERE contextlevel = :contextuser AND c.instanceid = :userid";
$contextlist->add_from_sql($sql, ['contextuser' => CONTEXT_USER, 'userid' => $userid]);
$contextlist->add_from_sql($sql, $params);
$sql = "SELECT contextid FROM {editor_atto_autosave} WHERE userid = :userid";
$contextlist->add_from_sql($sql, ['userid' => $userid]);
return $contextlist;
}
@@ -95,20 +96,34 @@ class provider implements
$user = $contextlist->get_user();
$sql = "SELECT *
FROM {editor_atto_autosave}
WHERE userid = :userid AND contextid {$contextsql}";
list($contextsql, $contextparams) = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED);
$contextparams['userid'] = $contextlist->get_user()->id;
$autosaves = $DB->get_recordset_sql($sql, $contextparams);
self::export_autosaves($user, $autosaves);
$sql = "SELECT *
FROM {editor_atto_autosave}
WHERE
(userid = :userid AND contextid {$contextsql})
OR
(contextid = :usercontext)";
JOIN {context} c ON c.id = eas.contextid
WHERE c.id {$contextsql} AND contextlevel = :contextuser AND c.instanceid = :userid";
$usercontext = \context_user::instance($user->id);
$contextparams['usercontext'] = $usercontext->id;
list($contextsql, $contextparams) = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED);
$contextparams['userid'] = $contextlist->get_user()->id;
$contextparams['contextuser'] = CONTEXT_USER;
$autosaves = $DB->get_recordset_sql($sql, $contextparams);
self::export_autosaves($user, $autosaves);
}
/**
* Export all autosave records in the recordset, and close the recordset when finished.
*
* @param \stdClass $user The user whose data is to be exported
* @param \moodle_recordset $autosaves The recordset containing the data to export
*/
protected static function export_autosaves(\stdClass $user, \moodle_recordset $autosaves) {
foreach ($autosaves as $autosave) {
$context = \context::instance_by_id($autosave->contextid);
$subcontext = [