From b76cdf82d298c92bdf5a59b6bf6b55da504a46ea Mon Sep 17 00:00:00 2001 From: friendica Date: Fri, 13 Mar 2015 19:24:17 -0700 Subject: create terms for Diaspora mention tags - which in Diaspora are handled differently than other tag links and have to be done separately; they aren't processed by linkify_tags which handles all of our other tag processing. Also move the abook_channel clause in mod_network to the join statement. This works fine in mysql and achievies the desired result. I hope postgres can handle an expression as a join clause. --- include/diaspora.php | 100 +++++++++++++++++++++++++++++++++++++++++++++++++-- mod/network.php | 12 +++---- 2 files changed, 103 insertions(+), 9 deletions(-) diff --git a/include/diaspora.php b/include/diaspora.php index e3bfc2806..1e0e48a86 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -845,8 +845,9 @@ function diaspora_post($importer,$xml,$msg) { // Look for tags and linkify them $results = linkify_tags(get_app(), $body, $importer['channel_id']); + $datarray['term'] = array(); + if($results) { - $datarray['term'] = array(); foreach($results as $result) { $success = $result['success']; if($success['replaced']) { @@ -861,6 +862,37 @@ function diaspora_post($importer,$xml,$msg) { } } + $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); @@ -1032,8 +1064,9 @@ function diaspora_reshare($importer,$xml,$msg) { // Look for tags and linkify them $results = linkify_tags(get_app(), $body, $importer['channel_id']); + $datarray['term'] = array(); + if($results) { - $datarray['term'] = array(); foreach($results as $result) { $success = $result['success']; if($success['replaced']) { @@ -1048,6 +1081,38 @@ function diaspora_reshare($importer,$xml,$msg) { } } + $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] + ); + } + } + + + + + $newbody = "[share author='" . urlencode($orig_author_name) . "' profile='" . $orig_author_link . "' avatar='" . $orig_author_photo @@ -1334,8 +1399,9 @@ function diaspora_comment($importer,$xml,$msg) { // Look for tags and linkify them $results = linkify_tags(get_app(), $body, $importer['channel_id']); + $datarray['term'] = array(); + if($results) { - $datarray['term'] = array(); foreach($results as $result) { $success = $result['success']; if($success['replaced']) { @@ -1350,6 +1416,34 @@ function diaspora_comment($importer,$xml,$msg) { } } + $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] + ); + } + } + $datarray['uid'] = $importer['channel_id']; $datarray['verb'] = ACTIVITY_POST; $datarray['mid'] = $guid; diff --git a/mod/network.php b/mod/network.php index 642fc4f43..d2b9bc64c 100644 --- a/mod/network.php +++ b/mod/network.php @@ -377,8 +377,8 @@ function network_content(&$a, $update = 0, $load = false) { // "New Item View" - show all items unthreaded in reverse created date order $items = q("SELECT item.*, item.id AS item_id, received FROM item - left join abook on item.owner_xchan = abook.abook_xchan - WHERE true $uids $abook_uids AND item_restrict = 0 + left join abook on ( item.author_xchan = abook.abook_xchan $abook_uids ) + WHERE true $uids AND item_restrict = 0 and ((abook.abook_flags & %d) = 0 or abook.abook_flags is null) $simple_update $sql_extra $sql_nets @@ -408,8 +408,8 @@ function network_content(&$a, $update = 0, $load = false) { // Fetch a page full of parent items for this page $r = q("SELECT distinct item.id AS item_id, $ordering FROM item - left join abook on item.owner_xchan = abook.abook_xchan - WHERE true $uids $abook_uids AND item.item_restrict = 0 + left join abook on ( item.author_xchan = abook.abook_xchan $abook_uids ) + WHERE true $uids AND item.item_restrict = 0 AND item.parent = item.id and ((abook.abook_flags & %d) = 0 or abook.abook_flags is null) $sql_extra3 $sql_extra $sql_nets @@ -422,8 +422,8 @@ function network_content(&$a, $update = 0, $load = false) { if(! $firehose) { // update $r = q("SELECT item.parent AS item_id FROM item - left join abook on item.owner_xchan = abook.abook_xchan - WHERE true $uids $abook_uids AND item.item_restrict = 0 $simple_update + left join abook on ( item.author_xchan = abook.abook_xchan $abook_uids ) + WHERE true $uids AND item.item_restrict = 0 $simple_update and ((abook.abook_flags & %d) = 0 or abook.abook_flags is null) $sql_extra3 $sql_extra $sql_nets ", intval(ABOOK_FLAG_BLOCKED) -- cgit v1.2.3