issue #378, failure to correctly link tags where one tag contains a substring of the other (depends on the order they are discovered).

This commit is contained in:
friendica 2014-03-30 20:53:59 -07:00
parent 3791cee52b
commit 653d7df86d
2 changed files with 18 additions and 1 deletions

View file

@ -2294,6 +2294,7 @@ function tag_deliver($uid,$item_id) {
logger('tag_deliver: community tag activity received');
if(($item['owner_xchan'] === $u[0]['channel_hash']) && (! get_pconfig($u[0]['channel_id'],'system','blocktags'))) {
logger('tag_deliver: community tag recipient: ' . $u[0]['channel_name']);
$j_tgt = json_decode_plus($item['target']);
if($j_tgt && $j_tgt['id']) {
$p = q("select * from item where mid = '%s' and uid = %d limit 1",

View file

@ -619,12 +619,28 @@ function get_tags($s) {
}
}
// make sure the longer tags are returned first so that if two or more have common substrings
// we'll replace the longest ones first. Otherwise the common substring would be found in
// both strings and the string replacement would link both to the shorter strings and
// fail to link the longer string. RedMatrix github issue #378
usort($ret,'tag_sort_length');
// logger('get_tags: ' . print_r($ret,true));
//logger('get_tags: ' . print_r($ret,true));
return $ret;
}
function tag_sort_length($a,$b) {
if(mb_strlen($a) == mb_strlen($b))
return 0;
return((mb_strlen($b) < mb_strlen($a)) ? (-1) : 1);
}
function strip_zids($s) {
return preg_replace('/[\?&]zid=(.*?)(&|$)/ism','$2',$s);