From 7f177d440cfe3538e15fccd1397410b59597e1d5 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Tue, 15 Sep 2020 21:46:47 +0300 Subject: [PATCH] MDL-69342 core_user: fixed user picture updating When editing a user and checking the 'Delete picture' checkbox to delete the old picture and uploading a new one at a time, the new one didn't appear in the user profile. This happened due to the 'if/else' statement in the 'core_user::update_picture()' method which allowed either to delete the old picture or to upload a new one. The fix removes the 'else' part of the 'if/else' statement to force checking for a new uploaded picture no matter if a user checked the 'Delete picture' checkbox or not. --- lib/classes/user.php | 52 +++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/lib/classes/user.php b/lib/classes/user.php index e20dd2c7a19..84f00e2ece0 100644 --- a/lib/classes/user.php +++ b/lib/classes/user.php @@ -601,34 +601,36 @@ class core_user { // The user has chosen to delete the selected users picture. $fs->delete_area_files($context->id, 'user', 'icon'); // Drop all images in area. $newpicture = 0; + } - } else { - // Save newly uploaded file, this will avoid context mismatch for newly created users. - file_save_draft_area_files($usernew->imagefile, $context->id, 'user', 'newicon', 0, $filemanageroptions); - if (($iconfiles = $fs->get_area_files($context->id, 'user', 'newicon')) && count($iconfiles) == 2) { - // Get file which was uploaded in draft area. - foreach ($iconfiles as $file) { - if (!$file->is_directory()) { - break; - } - } - // Copy file to temporary location and the send it for processing icon. - if ($iconfile = $file->copy_content_to_temp()) { - // There is a new image that has been uploaded. - // Process the new image and set the user to make use of it. - // NOTE: Uploaded images always take over Gravatar. - $newpicture = (int)process_new_icon($context, 'user', 'icon', 0, $iconfile); - // Delete temporary file. - @unlink($iconfile); - // Remove uploaded file. - $fs->delete_area_files($context->id, 'user', 'newicon'); - } else { - // Something went wrong while creating temp file. - // Remove uploaded file. - $fs->delete_area_files($context->id, 'user', 'newicon'); - return false; + // Save newly uploaded file, this will avoid context mismatch for newly created users. + if (!isset($usernew->imagefile)) { + $usernew->imagefile = 0; + } + file_save_draft_area_files($usernew->imagefile, $context->id, 'user', 'newicon', 0, $filemanageroptions); + if (($iconfiles = $fs->get_area_files($context->id, 'user', 'newicon')) && count($iconfiles) == 2) { + // Get file which was uploaded in draft area. + foreach ($iconfiles as $file) { + if (!$file->is_directory()) { + break; } } + // Copy file to temporary location and the send it for processing icon. + if ($iconfile = $file->copy_content_to_temp()) { + // There is a new image that has been uploaded. + // Process the new image and set the user to make use of it. + // NOTE: Uploaded images always take over Gravatar. + $newpicture = (int)process_new_icon($context, 'user', 'icon', 0, $iconfile); + // Delete temporary file. + @unlink($iconfile); + // Remove uploaded file. + $fs->delete_area_files($context->id, 'user', 'newicon'); + } else { + // Something went wrong while creating temp file. + // Remove uploaded file. + $fs->delete_area_files($context->id, 'user', 'newicon'); + return false; + } } if ($newpicture != $user->picture) {