aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorfriendica <info@friendica.com>2015-02-19 16:29:49 -0800
committerfriendica <info@friendica.com>2015-02-19 16:29:49 -0800
commit8db367754621c7ee81c3157785a914cf8627d7b2 (patch)
treed3087089b4d60bac6b15498432f1aa4be69ce1c9 /include
parent3ea77f0c105fe088af82f13de164af722e77a217 (diff)
downloadvolse-hubzilla-8db367754621c7ee81c3157785a914cf8627d7b2.tar.gz
volse-hubzilla-8db367754621c7ee81c3157785a914cf8627d7b2.tar.bz2
volse-hubzilla-8db367754621c7ee81c3157785a914cf8627d7b2.zip
Diaspora tag replacement was wretchedly buggy. Use our standard tag replacement calls instead.
Diffstat (limited to 'include')
-rwxr-xr-xinclude/diaspora.php156
1 files changed, 27 insertions, 129 deletions
diff --git a/include/diaspora.php b/include/diaspora.php
index 6523630f6..553c7474c 100755
--- a/include/diaspora.php
+++ b/include/diaspora.php
@@ -841,68 +841,25 @@ function diaspora_post($importer,$xml,$msg) {
$datarray = array();
- $tags = get_tags($body);
-
-
- if(count($tags)) {
+ // Look for tags and linkify them
+ $results = linkify_tags(get_app(), $body, $importer['channel_id']);
+ if($results) {
$datarray['term'] = array();
-
- foreach($tags as $tag) {
- if(strpos($tag,'#') === 0) {
- if((strpos($tag,'[url=')) || (strpos($tag,'[zrl')))
- continue;
-
- // don't link tags that are already embedded in links
-
- if(preg_match('/\[(.*?)' . preg_quote($tag,'/') . '(.*?)\]/',$body))
- continue;
- if(preg_match('/\[(.*?)\]\((.*?)' . preg_quote($tag,'/') . '(.*?)\)/',$body))
- continue;
-
- $basetag = str_replace('_',' ',substr($tag,1));
- $body = str_replace($tag,'#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]',$body);
-
+ foreach($results as $result) {
+ $success = $result['success'];
+ if($success['replaced']) {
$datarray['term'][] = array(
'uid' => $importer['channel_id'],
- 'type' => TERM_HASHTAG,
+ 'type' => $success['termtype'],
'otype' => TERM_OBJ_POST,
- 'term' => $basetag,
- 'url' => z_root() . '/search?tag=' . rawurlencode($basetag)
+ 'term' => $success['term'],
+ 'url' => $success['url']
);
}
}
}
- $cnt = preg_match_all('/@\[url=(.*?)\](.*?)\[\/url\]/ism',$body,$matches,PREG_SET_ORDER);
- if($cnt) {
- foreach($matches as $mtch) {
- $datarray['term'][] = array(
- 'uid' => $importer['channel_id'],
- 'type' => TERM_MENTION,
- 'otype' => TERM_OBJ_POST,
- 'term' => $mtch[2],
- 'url' => $mtch[1]
- );
- }
- }
-
- $cnt = preg_match_all('/@\[zrl=(.*?)\](.*?)\[\/zrl\]/ism',$body,$matches,PREG_SET_ORDER);
- if($cnt) {
- foreach($matches as $mtch) {
- // don't include plustags in the term
- $term = ((substr($mtch[2],-1,1) === '+') ? substr($mtch[2],0,-1) : $mtch[2]);
- $datarray['term'][] = array(
- 'uid' => $importer['channel_id'],
- 'type' => TERM_MENTION,
- 'otype' => TERM_OBJ_POST,
- 'term' => $term,
- 'url' => $mtch[1]
- );
- }
- }
-
-
$plink = service_plink($contact,$guid);
@@ -1053,12 +1010,6 @@ function diaspora_reshare($importer,$xml,$msg) {
logger('message length exceeds max_import_size: truncated');
}
-
- //if(! $body) {
- // logger('diaspora_reshare: empty body: source= ' . $x);
- // return;
- //}
-
$person = find_diaspora_person_by_handle($orig_author);
if($person) {
@@ -1073,52 +1024,25 @@ function diaspora_reshare($importer,$xml,$msg) {
$datarray = array();
- $tags = get_tags($body);
-
- if(count($tags)) {
+ // Look for tags and linkify them
+ $results = linkify_tags(get_app(), $body, $importer['channel_id']);
+ if($results) {
$datarray['term'] = array();
-
- foreach($tags as $tag) {
- if(strpos($tag,'#') === 0) {
- if((strpos($tag,'[url=')) || (strpos($tag,'[zrl')))
- continue;
-
- // don't link tags that are already embedded in links
-
- if(preg_match('/\[(.*?)' . preg_quote($tag,'/') . '(.*?)\]/',$newbody))
- continue;
- if(preg_match('/\[(.*?)\]\((.*?)' . preg_quote($tag,'/') . '(.*?)\)/',$newbody))
- continue;
-
- $basetag = str_replace('_',' ',substr($tag,1));
- $newbody = str_replace($tag,'#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]',$newbody);
-
+ foreach($results as $result) {
+ $success = $result['success'];
+ if($success['replaced']) {
$datarray['term'][] = array(
'uid' => $importer['channel_id'],
- 'type' => TERM_HASHTAG,
+ 'type' => $success['termtype'],
'otype' => TERM_OBJ_POST,
- 'term' => $basetag,
- 'url' => z_root() . '/search?tag=' . rawurlencode($basetag)
+ 'term' => $success['term'],
+ 'url' => $success['url']
);
}
}
}
- $cnt = preg_match_all('/@\[url=(.*?)\](.*?)\[\/url\]/ism',$body,$matches,PREG_SET_ORDER);
- if($cnt) {
- foreach($matches as $mtch) {
- $datarray['term'][] = array(
- 'uid' => $importer['channel_id'],
- 'type' => TERM_MENTION,
- 'otype' => TERM_OBJ_POST,
- 'term' => $mtch[2],
- 'url' => $mtch[1]
- );
- }
- }
-
-
$newbody = "[share author='" . urlencode($orig_author_name)
. "' profile='" . $orig_author_link
. "' avatar='" . $orig_author_photo
@@ -1396,51 +1320,25 @@ function diaspora_comment($importer,$xml,$msg) {
$datarray = array();
- $tags = get_tags($body);
-
- if(count($tags)) {
+ // Look for tags and linkify them
+ $results = linkify_tags(get_app(), $body, $importer['channel_id']);
+ if($results) {
$datarray['term'] = array();
-
- foreach($tags as $tag) {
- if(strpos($tag,'#') === 0) {
- if((strpos($tag,'[url=')) || (strpos($tag,'[zrl')))
- continue;
-
- // don't link tags that are already embedded in links
-
- if(preg_match('/\[(.*?)' . preg_quote($tag,'/') . '(.*?)\]/',$body))
- continue;
- if(preg_match('/\[(.*?)\]\((.*?)' . preg_quote($tag,'/') . '(.*?)\)/',$body))
- continue;
-
- $basetag = str_replace('_',' ',substr($tag,1));
- $body = str_replace($tag,'#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]',$body);
-
+ foreach($results as $result) {
+ $success = $result['success'];
+ if($success['replaced']) {
$datarray['term'][] = array(
'uid' => $importer['channel_id'],
- 'type' => TERM_HASHTAG,
+ 'type' => $success['termtype'],
'otype' => TERM_OBJ_POST,
- 'term' => $basetag,
- 'url' => z_root() . '/search?tag=' . rawurlencode($basetag)
+ 'term' => $success['term'],
+ 'url' => $success['url']
);
}
}
}
- $cnt = preg_match_all('/@\[url=(.*?)\](.*?)\[\/url\]/ism',$body,$matches,PREG_SET_ORDER);
- if($cnt) {
- foreach($matches as $mtch) {
- $datarray['term'][] = array(
- 'uid' => $importer['channel_id'],
- 'type' => TERM_MENTION,
- 'otype' => TERM_OBJ_POST,
- 'term' => $mtch[2],
- 'url' => $mtch[1]
- );
- }
- }
-
$datarray['uid'] = $importer['channel_id'];
$datarray['verb'] = ACTIVITY_POST;
$datarray['mid'] = $guid;