MDL-67853 message: Translate user message preference from restore and WS

This commit is contained in:
Pau Ferrer Ocaña 2021-12-10 12:40:38 +01:00
parent b4c75986ad
commit d195956f3a
2 changed files with 48 additions and 2 deletions

View File

@ -1301,7 +1301,41 @@ abstract class restore_dbops {
$preference = (object)$preference;
// Prepare the record and insert it
$preference->userid = $newuserid;
$status = $DB->insert_record('user_preferences', $preference);
// Translate _loggedin / _loggedoff message user preferences to _enabled. (MDL-67853)
// This code cannot be removed.
if (preg_match('/message_provider_.*/', $preference->name)) {
$nameparts = explode('_', $preference->name);
$name = array_pop($nameparts);
if ($name == 'loggedin' || $name == 'loggedoff') {
$preference->name = implode('_', $nameparts).'_enabled';
$existingpreference = $DB->get_record('user_preferences',
['name' => $preference->name , 'userid' => $newuserid]);
// Merge both values.
if ($existingpreference) {
$values = [];
if (!empty($existingpreference->value) && $existingpreference->value != 'none') {
$values = explode(',', $existingpreference->value);
}
if (!empty($preference->value) && $preference->value != 'none') {
$values = array_merge(explode(',', $preference->value), $values);
$values = array_unique($values);
}
$existingpreference->value = empty($values) ? 'none' : implode(',', $values);
$DB->update_record('user_preferences', $existingpreference);
continue;
}
}
}
// End translating loggedin / loggedoff message user preferences.
$DB->insert_record('user_preferences', $preference);
}
}
// Special handling for htmleditor which was converted to a preference.
@ -1311,7 +1345,7 @@ abstract class restore_dbops {
$preference->userid = $newuserid;
$preference->name = 'htmleditor';
$preference->value = 'textarea';
$status = $DB->insert_record('user_preferences', $preference);
$DB->insert_record('user_preferences', $preference);
}
}

View File

@ -415,6 +415,18 @@ class core_user_external extends external_api {
if (!empty($preferences)) {
$userpref = ['id' => $userid];
foreach ($preferences as $preference) {
/*
* Rename user message provider preferences to avoid orphan settings on old app versions.
* @todo Remove this "translation" block on MDL-73284.
*/
if (preg_match('/message_provider_.*_loggedin/', $preference['type']) ||
preg_match('/message_provider_.*_loggedoff/', $preference['type'])) {
$nameparts = explode('_', $preference['type']);
array_pop($nameparts);
$preference['type'] = implode('_', $nameparts).'_enabled';
}
$userpref['preference_' . $preference['type']] = $preference['value'];
}
useredit_update_user_preference($userpref);