Merge pull request #12154 from MrPetovan/bug/12084-strip-RTL-override

Remove RTL Override character from display names to show in notifications
This commit is contained in:
Philipp 2022-11-10 17:29:11 +01:00 committed by GitHub
commit f9ab5b0669
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 44 additions and 27 deletions

View file

@ -233,23 +233,19 @@ class Ping extends BaseModule
}
if (count($registrations) <= 1 || $this->pconfig->get($this->session->getLocalUserId(), 'system', 'detailed_notif')) {
foreach ($registrations as $reg) {
foreach ($registrations as $registration) {
$navNotifications[] = $this->formattedNavNotification->createFromParams(
[
'name' => $reg['name'],
'url' => $reg['url'],
],
$registration['name'],
$registration['url'],
$this->l10n->t('{0} requested registration'),
new \DateTime($reg['created'], new \DateTimeZone('UTC')),
new \DateTime($registration['created'], new \DateTimeZone('UTC')),
new Uri($this->baseUrl->get(true) . '/moderation/users/pending')
);
}
} elseif (count($registrations) > 1) {
$navNotifications[] = $this->formattedNavNotification->createFromParams(
[
'name' => $registrations[0]['name'],
'url' => $registrations[0]['url'],
],
$registrations[0]['name'],
$registrations[0]['url'],
$this->l10n->t('{0} and %d others requested registration', count($registrations) - 1),
new \DateTime($registrations[0]['created'], new \DateTimeZone('UTC')),
new Uri($this->baseUrl->get(true) . '/moderation/users/pending')

View file

@ -28,6 +28,7 @@ use Friendica\Model\Contact;
use Friendica\Navigation\Notifications\Entity;
use Friendica\Navigation\Notifications\Exception\NoMessageException;
use Friendica\Navigation\Notifications\ValueObject;
use Friendica\Network\HTTPException\ServiceUnavailableException;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Proxy;
use Friendica\Util\Temporal;
@ -65,32 +66,43 @@ class FormattedNavNotification extends BaseFactory
}
/**
* @param array $contact A contact array with the following keys: name, url
* @param string $contact_name
* @param string $contact_url
* @param string $message A notification message with the {0} placeholder for the contact name
* @param \DateTime $date
* @param Uri $href
* @param bool $seen
* @return ValueObject\FormattedNavNotification
* @throws \Friendica\Network\HTTPException\ServiceUnavailableException
* @throws ServiceUnavailableException
*/
public function createFromParams(array $contact, string $message, \DateTime $date, Uri $href, bool $seen = false): ValueObject\FormattedNavNotification
public function createFromParams(string $contact_name, string $contact_url, string $message, \DateTime $date, Uri $href, bool $seen = false): ValueObject\FormattedNavNotification
{
$contact['photo'] = Contact::getAvatarUrlForUrl($contact['url'], $this->userSession->getLocalUserId(), Proxy::SIZE_MICRO);
$contact_photo = Contact::getAvatarUrlForUrl($contact_url, $this->userSession->getLocalUserId(), Proxy::SIZE_MICRO);
// Removing the RTL Override character to prevent a garbled notification message
// See https://github.com/friendica/friendica/issues/12084
$contact_name = str_replace("\xE2\x80\xAE", '', $contact_name);
$dateMySQL = $date->format(DateTimeFormat::MYSQL);
$templateNotify = [
'contact' => $contact,
'contact' => [
'name' => $contact_name,
'url' => $contact_url,
'photo' => $contact_photo,
],
'href' => $href->__toString(),
'message' => $message,
'seen' => $seen,
'localdate' => DateTimeFormat::local($dateMySQL),
'ago' => Temporal::getRelativeDate($dateMySQL),
'richtext' => Entity\Notify::formatMessage($contact['name'], $message),
'richtext' => Entity\Notify::formatMessage($contact_name, $message),
];
return new ValueObject\FormattedNavNotification(
$contact,
$contact_name,
$contact_url,
$contact_photo,
$date->getTimestamp(),
strip_tags($templateNotify['richtext']),
Renderer::replaceMacros($this->tpl, ['notify' => $templateNotify]),
@ -120,7 +132,8 @@ class FormattedNavNotification extends BaseFactory
}
return $this->createFromParams(
self::$contacts[$notification->actorId],
self::$contacts[$notification->actorId]['name'],
self::$contacts[$notification->actorId]['url'],
$message['notification'],
$notification->created,
new Uri($this->baseUrl->get() . '/notification/' . $notification->id),
@ -141,7 +154,8 @@ class FormattedNavNotification extends BaseFactory
}
return $this->createFromParams(
self::$contacts[$intro->cid],
self::$contacts[$intro->cid]['name'],
self::$contacts[$intro->cid]['url'],
$msg,
$intro->datetime,
new Uri($this->baseUrl->get() . '/notifications/intros/' . $intro->id)

View file

@ -42,16 +42,23 @@ class FormattedNavNotification extends BaseEntity
protected $seen;
/**
* @param array $contact Contact array with the following keys: name, url, photo
* @param string $contact_name Contact display name
* @param string $contact_url Contact profile URL
* @param string $contact_photo Contact picture URL
* @param string $timestamp Unix timestamp
* @param string $plaintext Localized notification message with the placeholder replaced by the contact name
* @param string $html Full HTML string of the notification menu element
* @param string $href Absolute URL this notification should send the user to when interacted with
* @param bool $seen Whether the user interacted with this notification once
*/
public function __construct(array $contact, string $timestamp, string $plaintext, string $html, string $href, bool $seen)
public function __construct(string $contact_name, string $contact_url, string $contact_photo, string $timestamp, string $plaintext, string $html, string $href, bool $seen)
{
$this->contact = $contact;
// Properties differ from constructor because this structure is used in the "nav-update" Javascript event listener
$this->contact = [
'name' => $contact_name,
'url' => $contact_url,
'photo' => $contact_photo,
];
$this->timestamp = $timestamp;
$this->plaintext = $plaintext;
$this->html = $html;