From 28773f9271771d43fba7eeccf8d3043ebe3d80d8 Mon Sep 17 00:00:00 2001 From: Alexander Ebert Date: Tue, 3 Mar 2015 18:47:35 +0100 Subject: [PATCH] Fixed mention parser discarding second word if only the first matched --- .../listener/PreParserAtUserListener.class.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/wcfsetup/install/files/lib/system/event/listener/PreParserAtUserListener.class.php b/wcfsetup/install/files/lib/system/event/listener/PreParserAtUserListener.class.php index fa7e080831..9acc7e5959 100644 --- a/wcfsetup/install/files/lib/system/event/listener/PreParserAtUserListener.class.php +++ b/wcfsetup/install/files/lib/system/event/listener/PreParserAtUserListener.class.php @@ -82,7 +82,7 @@ class PreParserAtUserListener implements IParameterizedEventListener { $userRegex->match($text, true, Regex::ORDER_MATCH_BY_SET); $matches = $userRegex->getMatches(); - + // if (!empty($matches)) { $usernames = array(); foreach ($matches as $match) { @@ -108,6 +108,7 @@ class PreParserAtUserListener implements IParameterizedEventListener { $text = $userRegex->replace($text, new Callback(function ($matches) use ($users) { // containing the full match $usernames = array($matches[1]); + // containing only the part before the first space if (isset($matches[2])) $usernames[] = $matches[2]; @@ -119,7 +120,15 @@ class PreParserAtUserListener implements IParameterizedEventListener { 'appendSession' => false, 'object' => $users[$username] )); - return "[url='".$link."']@".$users[$username]->username.'[/url]'; + + $mention = "[url='".$link."']@".$users[$username]->username.'[/url]'; + + // check if only the part before the first space matched, in that case append the second word + if (isset($matches[2]) && $matches[2] == $username) { + $mention .= mb_substr($matches[1], strlen($matches[2])); + } + + return $mention; } return $matches[0]; -- 2.20.1