From ad5b976978011e2bf16fea5537af5b211e8e65eb Mon Sep 17 00:00:00 2001 From: Friendika Date: Wed, 29 Jun 2011 18:59:05 -0700 Subject: [PATCH] allow spaces in @ tags --- boot.php | 16 ++++++++++++++-- mod/item.php | 20 ++++++++++++++------ mod/photos.php | 4 +++- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/boot.php b/boot.php index 54206d7fe..f66cf4bc0 100644 --- a/boot.php +++ b/boot.php @@ -4,7 +4,7 @@ set_time_limit(0); ini_set('pcre.backtrack_limit', 250000); -define ( 'FRIENDIKA_VERSION', '2.2.1025' ); +define ( 'FRIENDIKA_VERSION', '2.2.1026' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1070 ); @@ -2017,7 +2017,7 @@ function get_tags($s) { $s = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$s); - if(preg_match_all('/([@#][^ \x0D\x0A,:?]+)([ \x0D\x0A,:?]|$)/',$s,$match)) { + if(preg_match_all('/([@#][^ \x0D\x0A,:?]+ [^ \x0D\x0A,:?]+)([ \x0D\x0A,:?]|$)/',$s,$match)) { foreach($match[1] as $mtch) { if(strstr($mtch,"]")) { // we might be inside a bbcode color tag - leave it alone @@ -2030,6 +2030,18 @@ function get_tags($s) { } } + if(preg_match_all('/([@#][^ \x0D\x0A,:?]+)([ \x0D\x0A,:?]|$)/',$s,$match)) { + foreach($match[1] as $mtch) { + if(strstr($mtch,"]")) { + // we might be inside a bbcode color tag - leave it alone + continue; + } + if(substr($mtch,-1,1) === '.') + $ret[] = substr($mtch,0,-1); + else + $ret[] = $mtch; + } + } return $ret; }} diff --git a/mod/item.php b/mod/item.php index f87b6074a..8a4f8293c 100644 --- a/mod/item.php +++ b/mod/item.php @@ -244,6 +244,10 @@ function item_post(&$a) { } + /** + * Next link in any attachment references we find in the post. + */ + $match = false; if(preg_match_all("/\[attachment\](.*?)\[\/attachment\]/",$body,$match)) { @@ -265,10 +269,6 @@ function item_post(&$a) { } } - - - - /** * Fold multi-line [code] sequences */ @@ -285,13 +285,21 @@ function item_post(&$a) { $tags = get_tags($body); - if(($parent_contact) && ($parent_contact['network'] === 'stat') && ($parent_contact['nick']) && (! in_array('@' . $parent_contact['nick'],$tags))) { + /** + * add a statusnet style reply tag if the original post was from there + * and we are replying, and there isn't one already + */ + + if(($parent_contact) && ($parent_contact['network'] === 'stat') + && ($parent_contact['nick']) && (! in_array('@' . $parent_contact['nick'],$tags))) { $body = '@' . $parent_contact['nick'] . ' ' . $body; $tags[] = '@' . $parent_contact['nick']; } if(count($tags)) { foreach($tags as $tag) { + if(isset($profile)) + unset($profile); if(strpos($tag,'#') === 0) { if(strpos($tag,'[url=')) continue; @@ -325,7 +333,7 @@ function item_post(&$a) { else { $newname = $name; $alias = ''; - if(strstr($name,'_')) { + if(strstr($name,'_') || strstr($name,' ')) { $newname = str_replace('_',' ',$name); $r = q("SELECT * FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1", dbesc($newname), diff --git a/mod/photos.php b/mod/photos.php index 2cd4e2622..187eb154c 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -380,6 +380,8 @@ function photos_post(&$a) { if(count($tags)) { foreach($tags as $tag) { + if(isset($profile)) + unset($profile); if(strpos($tag,'@') === 0) { $name = substr($tag,1); if((strpos($name,'@')) || (strpos($name,'http://'))) { @@ -401,7 +403,7 @@ function photos_post(&$a) { } else { $newname = $name; - if(strstr($name,'_')) { + if(strstr($name,'_') || strstr($name,' ')) { $newname = str_replace('_',' ',$name); $r = q("SELECT * FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1", dbesc($newname),