fix: closes #7221 restrict cropperjs box to profileImageDimension form ACP

this also resizes the image down to that value and sends a small image to server
move profileImageDimenstion & maximumProfileImageSize from edit to all profile pages, on harmony profile pic can be changed from any page by clicking the avatar
change image.resize so it doesn't resize if image is already same width/height
This commit is contained in:
Barış Soner Uşaklı
2026-02-21 22:00:28 -05:00
parent bb7be8c587
commit f2bbf3693f
8 changed files with 29 additions and 21 deletions

View File

@@ -35,12 +35,10 @@ editController.get = async function (req, res, next) {
userData.customUserFields = customUserFields;
userData.maximumSignatureLength = meta.config.maximumSignatureLength;
userData.maximumAboutMeLength = meta.config.maximumAboutMeLength;
userData.maximumProfileImageSize = meta.config.maximumProfileImageSize;
userData.allowMultipleBadges = meta.config.allowMultipleBadges === 1;
userData.allowAccountDelete = meta.config.allowAccountDelete === 1;
userData.allowAboutMe = !isSelf || !!meta.config['reputation:disabled'] || reputation >= meta.config['min:rep:aboutme'];
userData.allowSignature = canUseSignature && (!isSelf || !!meta.config['reputation:disabled'] || reputation >= meta.config['min:rep:signature']);
userData.profileImageDimension = meta.config.profileImageDimension;
userData.defaultAvatar = user.getDefaultAvatar();
userData.groups = _groups.filter(g => g && g.userTitleEnabled && !groups.isPrivilegeGroup(g.name) && g.name !== 'registered-users');

View File

@@ -97,6 +97,8 @@ helpers.getUserDataByUserSlug = async function (userslug, callerUID, query = {})
userData.allowCoverPicture = !userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:cover-picture'];
userData.allowProfileImageUploads = meta.config.allowProfileImageUploads;
userData.allowedProfileImageExtensions = user.getAllowedProfileImageExtensions().map(ext => `.${ext}`).join(', ');
userData.maximumProfileImageSize = meta.config.maximumProfileImageSize;
userData.profileImageDimension = meta.config.profileImageDimension;
userData.groups = Array.isArray(results.groups) && results.groups.length ? results.groups[0] : [];
userData.selectedGroup = userData.groups.filter(group => group && userData.groupTitleArray.includes(group.name))
.sort((a, b) => userData.groupTitleArray.indexOf(a.name) - userData.groupTitleArray.indexOf(b.name));

View File

@@ -51,7 +51,10 @@ image.resizeImage = async function (data) {
const metadata = await sharpImage.metadata();
sharpImage.rotate(); // auto-orients based on exif data
sharpImage.resize(data.hasOwnProperty('width') ? data.width : null, data.hasOwnProperty('height') ? data.height : null);
// don't resize if width/height not changing or not specificied
if ((data.width && metadata.width !== data.width) || (data.height && metadata.height !== data.height)) {
sharpImage.resize(data.width || null, data.height || null);
}
if (data.quality) {
switch (metadata.format) {