]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Improvements inspired by the OStatus code
authorStephen Paul Weber <singpolyma@singpolyma.net>
Wed, 28 Oct 2015 01:45:51 +0000 (01:45 +0000)
committerStephen Paul Weber <singpolyma@singpolyma.net>
Wed, 28 Oct 2015 01:45:51 +0000 (01:45 +0000)
plugins/MentionURL/MentionURLPlugin.php

index 86135d882791b671bcf06a8fa41508d362d45db1..f76aa8b28df3e5479bca2656f7c7fac0ee9075e1 100644 (file)
@@ -10,8 +10,10 @@ require_once __DIR__ . '/lib/util.php';
  */
 class MentionURLPlugin extends Plugin
 {
-    public function onStartFindMentions($sender, $text, &$mentions)
+    function onEndFindMentions(Profile $sender, $text, &$mentions)
     {
+        $matches = array();
+
         preg_match_all('/(?:^|\s+)@([A-Za-z0-9_:\-\.\/%]+)\b/',
                        $text,
                        $atmatches,
@@ -26,15 +28,27 @@ class MentionURLPlugin extends Plugin
             }
 
             if($mentioned instanceof Profile) {
-                $mentions[] = array('mentioned' => array($mentioned),
-                                   'type' => 'mention',
-                                   'text' => $text,
-                                   'position' => $match[1],
-                                   'length' => mb_strlen($match[0]),
-                                   'url' => $mentioned->profileurl);
+                $matches[$match[1]] = array('mentioned' => array($mentioned),
+                                            'type' => 'mention',
+                                            'text' => $text,
+                                            'position' => $match[1],
+                                            'length' => mb_strlen($match[0]),
+                                            'url' => $mentioned->profileurl);
             }
         }
 
+        foreach ($mentions as $i => $other) {
+            // If we share a common prefix with a local user, override it!
+            $pos = $other['position'];
+            if (isset($matches[$pos])) {
+                $mentions[$i] = $matches[$pos];
+                unset($matches[$pos]);
+            }
+        }
+        foreach ($matches as $mention) {
+            $mentions[] = $mention;
+        }
+
         return true;
     }