linkify @person and @person@domain.com tags

This commit is contained in:
Mike Macgirvin 2010-10-28 18:18:20 -07:00
parent f7e1e907bc
commit 051fb7107e
2 changed files with 55 additions and 3 deletions

View file

@ -1300,8 +1300,17 @@ function activity_match($haystack,$needle) {
if(! function_exists('get_tags')) { if(! function_exists('get_tags')) {
function get_tags($s) { function get_tags($s) {
if(preg_match_all('/([@#][^ ,.:?\-]*)[ ,.:?\-]/',$s,$match)) $ret = array();
return $match[1]; 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;
}} }}

View file

@ -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; $wall = 0;
if($post_type === 'wall' || $post_type === 'wall-comment') if($post_type === 'wall' || $post_type === 'wall-comment')
$wall = 1; $wall = 1;
@ -345,7 +388,7 @@ function item_content(&$a) {
else { else {
notice( t('Permission denied.') . EOL); notice( t('Permission denied.') . EOL);
goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
return; //NOTREACHED //NOTREACHED
} }
} }
} }