Handle username with dots in user mentions

This commit is contained in:
Frederic Guillot
2016-12-17 12:11:17 -05:00
parent b6ea1ac9a4
commit aafa1de4d5
5 changed files with 90 additions and 38 deletions

View File

@@ -86,18 +86,23 @@ class Markdown extends Parsedown
*/
protected function inlineUserLink(array $Excerpt)
{
if (! $this->isPublicLink && preg_match('/^@([^\s,!.:?]+)/', $Excerpt['text'], $matches)) {
$user_id = $this->container['userModel']->getIdByUsername($matches[1]);
if (! $this->isPublicLink && preg_match('/^@([^\s,!:?]+)/', $Excerpt['text'], $matches)) {
$username = rtrim($matches[1], '.');
$user = $this->container['userModel']->getByUsername($username);
if (! empty($user_id)) {
$url = $this->container['helper']->url->href('UserViewController', 'profile', array('user_id' => $user_id));
if (! empty($user)) {
$url = $this->container['helper']->url->href('UserViewController', 'profile', array('user_id' => $user['id']));
return array(
'extent' => strlen($matches[0]),
'extent' => strlen($username) + 1,
'element' => array(
'name' => 'a',
'text' => $matches[0],
'attributes' => array('href' => $url, 'class' => 'user-mention-link'),
'name' => 'a',
'text' => '@' . $username,
'attributes' => array(
'href' => $url,
'class' => 'user-mention-link',
'title' => $user['name'] ?: $user['username'],
),
),
);
}

View File

@@ -58,7 +58,8 @@ class UserMentionJob extends BaseJob
{
$users = array();
if (preg_match_all('/@([^\s,!.:?]+)/', $text, $matches)) {
if (preg_match_all('/@([^\s,!:?]+)/', $text, $matches)) {
array_walk($matches[1], function (&$username) { $username = rtrim($username, '.'); });
$users = $this->db->table(UserModel::TABLE)
->columns('id', 'username', 'name', 'email', 'language')
->eq('notifications_enabled', 1)