From 58e232a10ad45808caeb1bbd72641aea535e00e8 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Thu, 25 Feb 2010 02:43:55 +0000 Subject: [PATCH] OStatus: when finding webfinger @-replies, override a local profile match if found at the same location (eg @someguy vs @someguy@example.org) Fixes inconsistent application of webfinger @-mentions in OStatus; once a local profile is set up the local name would often match first and ended up overriding in output. --- plugins/OStatus/OStatusPlugin.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index 5feb53b260..7f75b7b2b4 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -210,7 +210,7 @@ class OStatusPlugin extends Plugin * */ - function onStartFindMentions($sender, $text, &$mentions) + function onEndFindMentions($sender, $text, &$mentions) { preg_match_all('/(?:^|\s+)@((?:\w+\.)*\w+@(?:\w+\.)*\w+(?:\w+\-\w+)*\.\w+)/', $text, @@ -233,11 +233,21 @@ class OStatusPlugin extends Plugin $this->log(LOG_INFO, "Ostatus_profile found for address '$webfinger'"); + if ($oprofile->isGroup()) { + continue; + } $profile = $oprofile->localProfile(); + $pos = $wmatch[1]; + foreach ($mentions as $i => $other) { + // If we share a common prefix with a local user, override it! + if ($other['position'] == $pos) { + unset($mentions[$i]); + } + } $mentions[] = array('mentioned' => array($profile), 'text' => $wmatch[0], - 'position' => $wmatch[1], + 'position' => $pos, 'url' => $profile->profileurl); } } -- 2.39.2