From 051fb7107ef5c449d9d9627298b85abe882e8186 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Thu, 28 Oct 2010 18:18:20 -0700 Subject: linkify @person and @person@domain.com tags --- boot.php | 13 +++++++++++-- mod/item.php | 45 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/boot.php b/boot.php index 07810a50e..870a4c33b 100644 --- a/boot.php +++ b/boot.php @@ -1300,8 +1300,17 @@ function activity_match($haystack,$needle) { if(! function_exists('get_tags')) { function get_tags($s) { - if(preg_match_all('/([@#][^ ,.:?\-]*)[ ,.:?\-]/',$s,$match)) - return $match[1]; + $ret = array(); + if(preg_match_all('/([@#][^ ,:?]*)[ ,:?]/',$s,$match)) { + foreach($match[1] as $match) { + if(substr($match,-1,1) === '.') + $ret[] = substr($match,0,-1); + else + $ret[] = $match; + } + } + + return $ret; }} diff --git a/mod/item.php b/mod/item.php index 4ebb1e978..64a23e7fb 100644 --- a/mod/item.php +++ b/mod/item.php @@ -114,6 +114,49 @@ function item_post(&$a) { } } + $str_tags = ''; + $tagged = array(); + + $tags = get_tags($body); + + + if($tags) { + foreach($tags as $tag) { + if(strpos($tag,'@') === 0) { + $name = substr($tag,1); + if(strpos($name,'@')) { + + $links = @webfinger($name); + if(count($links)) { + foreach($links as $link) { + if($link['@attributes']['rel'] === 'http://webfinger.net/rel/profile-page') + $profile = $link['@attributes']['href']; + if($link['@attributes']['rel'] === 'salmon') + $salmon = $link['@attributes']['href']; + } + } + } + else { + $r = q("SELECT * FROM `contact` WHERE `nick` = '%s' AND `uid` = %d LIMIT 1", + dbesc($name), + intval($profile_uid) + ); + if(count($r)) { + $profile = $r[0]['url']; + $salmon = $r[0]['notify']; + } + } + if($profile) { + $profile = str_replace(',','%2c',$profile); + $body = str_replace($name,'[url=' . $profile . ']' . $name . '[/url]', $body); + if(strlen($str_tags)) + $str_tags .= ','; + $str_tags .= '[url=' . $profile . ']' . $name . '[/url]'; + } + } + } + } + $wall = 0; if($post_type === 'wall' || $post_type === 'wall-comment') $wall = 1; @@ -345,7 +388,7 @@ function item_content(&$a) { else { notice( t('Permission denied.') . EOL); goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); - return; //NOTREACHED + //NOTREACHED } } } \ No newline at end of file -- cgit v1.2.3