From 876f5d4de09f6215c3e65146460027d0dd244bc8 Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 3 Feb 2014 19:38:15 -0800 Subject: transmit, receive, and parse bookmarks --- include/items.php | 10 ++++++++-- include/text.php | 14 +++++++++++++- mod/item.php | 21 ++++++++++++++++----- mod/page.php | 4 ++-- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/include/items.php b/include/items.php index a74c3d460..7b11a1c3c 100755 --- a/include/items.php +++ b/include/items.php @@ -822,7 +822,7 @@ function encode_item_xchan($xchan) { function encode_item_terms($terms) { $ret = array(); - $allowed_export_terms = array( TERM_UNKNOWN, TERM_HASHTAG, TERM_MENTION, TERM_CATEGORY ); + $allowed_export_terms = array( TERM_UNKNOWN, TERM_HASHTAG, TERM_MENTION, TERM_CATEGORY, TERM_BOOKMARK ); if($terms) { foreach($terms as $term) { @@ -834,7 +834,7 @@ function encode_item_terms($terms) { } function termtype($t) { - $types = array('unknown','hashtag','mention','category','private_category','file','search'); + $types = array('unknown','hashtag','mention','category','private_category','file','search','thing','bookmark'); return(($types[$t]) ? $types[$t] : 'unknown'); } @@ -865,6 +865,12 @@ function decode_tags($t) { case 'search': $tag['type'] = TERM_SEARCH; break; + case 'thing': + $tag['type'] = TERM_THING; + break; + case 'bookmark': + $tag['type'] = TERM_BOOKMARK; + break; default: case 'unknown': $tag['type'] = TERM_UNKNOWN; diff --git a/include/text.php b/include/text.php index a72989147..37ce54f25 100755 --- a/include/text.php +++ b/include/text.php @@ -593,7 +593,7 @@ function get_tags($s) { if(substr($mtch,-1,1) === '.') $mtch = substr($mtch,0,-1); // ignore strictly numeric tags like #1 - if((strpos($mtch,'#') === 0) && ctype_digit(substr($mtch,1))) + if((strpos($mtch,'#') === 0) && ( ctype_digit(substr($mtch,1)) || substr($mtch,1,1) === '^')) continue; // try not to catch url fragments if(strpos($s,$mtch) && preg_match('/[a-zA-z0-9\/]/',substr($s,strpos($s,$mtch)-1,1))) @@ -601,6 +601,18 @@ function get_tags($s) { $ret[] = $mtch; } } + + // bookmarks + + if(preg_match_all('/#\^\[(url|zrl)=(.*?)\](.*?)\[\/(url|zrl)\]/',$s,$match,PREG_SET_ORDER)) { + foreach($match as $mtch) { + $ret[] = $mtch[0]; + } + } + + + // logger('get_tags: ' . print_r($ret,true)); + return $ret; } diff --git a/mod/item.php b/mod/item.php index 6d421009b..88bf46a9f 100644 --- a/mod/item.php +++ b/mod/item.php @@ -887,13 +887,24 @@ function handle_tag($a, &$body, &$access_tag, &$str_tags, $profile_uid, $tag) { $replaced = false; $r = null; - $termtype = ((strpos($tag,'#') === 0) ? TERM_HASHTAG : TERM_UNKNOWN); - $termtype = ((strpos($tag,'@') === 0) ? TERM_MENTION : $termtype); + + $termtype = ((strpos($tag,'#') === 0) ? TERM_HASHTAG : TERM_UNKNOWN); + $termtype = ((strpos($tag,'@') === 0) ? TERM_MENTION : $termtype); + $termtype = ((strpos($tag,'#^[') === 0) ? TERM_BOOKMARK : $termtype); + //is it a hash tag? if(strpos($tag,'#') === 0) { - // if the tag is replaced... - if(strpos($tag,'[zrl=')) { + if(strpos($tag,'#^[') === 0) { + if(preg_match('/#\^\[(url|zrl)=(.*?)\](.*?)\[\/(url|zrl)\]/',$tag,$match)) { + $basetag = $match[3]; + $url = $match[2]; + $replaced = true; + + } + } + // if the tag is already replaced... + elseif(strpos($tag,'[zrl=')) { //...do nothing return $replaced; } @@ -904,7 +915,7 @@ function handle_tag($a, &$body, &$access_tag, &$str_tags, $profile_uid, $tag) { $body = str_replace($tag,$newtag,$body); $replaced = true; } - else { + if(! $replaced) { //base tag has the tags name only $basetag = str_replace('_',' ',substr($tag,1)); //create text for link diff --git a/mod/page.php b/mod/page.php index 56592116f..df17dbf52 100644 --- a/mod/page.php +++ b/mod/page.php @@ -38,7 +38,7 @@ function page_content(&$a) { $channel_address = argv(1); $page_id = argv(2); -dbg(1); + $u = q("select channel_id from channel where channel_address = '%s' limit 1", dbesc($channel_address) ); @@ -63,7 +63,7 @@ dbg(1); dbesc($page_id), intval(ITEM_WEBPAGE) ); -dbg(0); + if(! $r) { // Check again with no permissions clause to see if it is a permissions issue -- cgit v1.2.3