diff --git a/application/ui.extkeywidget.class.inc.php b/application/ui.extkeywidget.class.inc.php
index 671d14847..4cec8e222 100644
--- a/application/ui.extkeywidget.class.inc.php
+++ b/application/ui.extkeywidget.class.inc.php
@@ -251,7 +251,7 @@ class UIExtKeyWidget
$aOption['picture_url'] = $oImage->GetDisplayURL($sClassAllowed, $oObj->GetKey(), $sObjectImageAttCode);
$aOption['initials'] = '';
} else {
- $aOption['initials'] = utils::ToAcronym($oObj->Get('friendlyname'));
+ $aOption['initials'] = utils::FormatInitialsForMedallion(utils::ToAcronym($oObj->Get('friendlyname')));
}
}
array_push($aOptions, $aOption);
@@ -829,7 +829,7 @@ JS
}
if (array_key_exists('initials', $aValue)) {
- $aElt['initials'] = $aValue['initials'];
+ $aElt['initials'] = utils::FormatInitialsForMedallion($aValue['initials']);
if (array_key_exists('picture_url', $aValue)) {
$aElt['picture_url'] = $aValue['picture_url'];
}
diff --git a/application/utils.inc.php b/application/utils.inc.php
index 98a09758f..469c9dd22 100644
--- a/application/utils.inc.php
+++ b/application/utils.inc.php
@@ -3050,6 +3050,20 @@ HTML;
return $aMentionedObjects;
}
+ /**
+ * Note: This method is not ideal, but other solutions seemed even less ideal:
+ * * Add a "$sMaxLength" param. to utils::ToAcronym(): Does not work for every use cases (see corresponding ticket) as in some parts utils::ToAcronym isn't necessarly meant to be used in a medallion.
+ *
+ * @param string $sInitials
+ *
+ * @return string Truncates $sInitials so it can fit in medallions
+ * @since 3.0.1 N°4913
+ */
+ public static function FormatInitialsForMedallion(string $sInitials): string
+ {
+ return mb_substr($sInitials, 0, 3);
+ }
+
/**
* @param $sUrl
* @param string $sParamName
diff --git a/pages/ajax.render.php b/pages/ajax.render.php
index d029f79b7..db3e34c24 100644
--- a/pages/ajax.render.php
+++ b/pages/ajax.render.php
@@ -2539,7 +2539,7 @@ EOF
} else {
// If no image found, fallback on initials
$aMatch['picture_style'] = '';
- $aMatch['initials'] = utils::ToAcronym($oObject->Get('friendlyname'));
+ $aMatch['initials'] = utils::FormatInitialsForMedallion(utils::ToAcronym($oObject->Get('friendlyname')));
}
}
diff --git a/sources/Renderer/Bootstrap/FieldRenderer/BsSimpleFieldRenderer.php b/sources/Renderer/Bootstrap/FieldRenderer/BsSimpleFieldRenderer.php
index 495223db5..aedd0918c 100644
--- a/sources/Renderer/Bootstrap/FieldRenderer/BsSimpleFieldRenderer.php
+++ b/sources/Renderer/Bootstrap/FieldRenderer/BsSimpleFieldRenderer.php
@@ -648,7 +648,7 @@ HTML
// Open medallion from profile picture or first name letter
$bEntryHasMedallionPicture = (empty($aContactPicturesCache[$iEntryUserId]) === false);
$sEntryMedallionStyle = $bEntryHasMedallionPicture ? ' background-image: url(\''.$aContactPicturesCache[$iEntryUserId].'\');' : '';
- $sEntryMedallionContent = $bEntryHasMedallionPicture ? '' : UserRights::GetUserInitials($sEntryUserLogin);
+ $sEntryMedallionContent = $bEntryHasMedallionPicture ? '' : utils::FormatInitialsForMedallion(UserRights::GetUserInitials($sEntryUserLogin));
// - Entry tooltip
$sEntryMedallionTooltip = utils::HtmlEntities($sEntryUserLogin);
$sEntryMedallionTooltipPlacement = ($iEntryUserId === $iCurrentUserId) ? 'left' : 'right';
diff --git a/templates/base/layouts/activity-panel/activity-entry/layout.html.twig b/templates/base/layouts/activity-panel/activity-entry/layout.html.twig
index bae577579..d7fa10811 100644
--- a/templates/base/layouts/activity-panel/activity-entry/layout.html.twig
+++ b/templates/base/layouts/activity-panel/activity-entry/layout.html.twig
@@ -10,7 +10,7 @@
{% if oUIBlock.GetAuthorPictureAbsUrl() is not empty %}
{% else %}
-