From 29d0db89eb8225e00f387de15986fc2eac2aa281 Mon Sep 17 00:00:00 2001 From: Shamim Rezaie Date: Sat, 27 Oct 2018 03:08:42 +1100 Subject: [PATCH] MDL-63785 core_webservice: performance improvement --- webservice/classes/privacy/provider.php | 40 ++++++++----------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/webservice/classes/privacy/provider.php b/webservice/classes/privacy/provider.php index dc9ad3a2c6b..29cfdc4ac37 100644 --- a/webservice/classes/privacy/provider.php +++ b/webservice/classes/privacy/provider.php @@ -115,39 +115,23 @@ class provider implements * @param userlist $userlist The userlist containing the list of users who have data in this context/plugin combination. */ public static function get_users_in_context(userlist $userlist) { + global $DB; + $context = $userlist->get_context(); - $params = [ - 'contextid' => $context->id, - 'contextuser' => CONTEXT_USER, - ]; + if (!$context instanceof \context_user) { + return; + } - $sql = "SELECT ctx.instanceid as userid - FROM {external_tokens} t - JOIN {context} ctx - ON ctx.instanceid = t.userid - AND ctx.contextlevel = :contextuser - WHERE ctx.id = :contextid"; + $userid = $context->instanceid; - $userlist->add_from_sql('userid', $sql, $params); + $hasdata = false; + $hasdata = $hasdata || $DB->record_exists_select('external_tokens', 'userid = ? OR creatorid = ?', [$userid, $userid]); + $hasdata = $hasdata || $DB->record_exists('external_services_users', ['userid' => $userid]); - $sql = "SELECT ctx.instanceid as userid - FROM {external_tokens} t - JOIN {context} ctx - ON ctx.instanceid = t.creatorid - AND ctx.contextlevel = :contextuser - WHERE ctx.id = :contextid"; - - $userlist->add_from_sql('userid', $sql, $params); - - $sql = "SELECT ctx.instanceid as userid - FROM {external_services_users} su - JOIN {context} ctx - ON ctx.instanceid = su.userid - AND ctx.contextlevel = :contextuser - WHERE ctx.id = :contextid"; - - $userlist->add_from_sql('userid', $sql, $params); + if ($hasdata) { + $userlist->add_user($userid); + } } /**