mirror of
https://github.com/friendica/friendica
synced 2024-11-18 01:03:40 +00:00
linkify @person and @person@domain.com tags
This commit is contained in:
parent
f7e1e907bc
commit
051fb7107e
2 changed files with 55 additions and 3 deletions
13
boot.php
13
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;
|
||||
}}
|
||||
|
||||
|
||||
|
|
45
mod/item.php
45
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
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue