diff options
-rwxr-xr-x | include/items.php | 31 | ||||
-rw-r--r-- | include/text.php | 30 | ||||
-rw-r--r-- | mod/item.php | 82 | ||||
-rw-r--r-- | mod/photos.php | 67 | ||||
-rw-r--r-- | view/js/mod_photos.js | 2 |
5 files changed, 96 insertions, 116 deletions
diff --git a/include/items.php b/include/items.php index e7cc15878..4c533aedc 100755 --- a/include/items.php +++ b/include/items.php @@ -4715,3 +4715,34 @@ function item_remove_cid($xchan_hash,$mid,$uid) { ); } } + +// Set item permissions based on results obtained from linkify_tags() +function set_linkified_perms($linkified, &$str_contact_allow, &$str_group_allow, $profile_uid, $parent_item = false) { + $first_access_tag = true; + foreach($linkified as $x) { + $access_tag = $x['access_tag']; + if(($access_tag) && (! $parent_item)) { + logger('access_tag: ' . $tag . ' ' . print_r($access_tag,true), LOGGER_DATA); + if ($first_access_tag && (! get_pconfig($profile_uid,'system','no_private_mention_acl_override'))) { + + // This is a tough call, hence configurable. The issue is that one can type in a @!privacy mention + // and also have a default ACL (perhaps from viewing a collection) and could be suprised that the + // privacy mention wasn't the only recipient. So the default is to wipe out the existing ACL if a + // private mention is found. This can be over-ridden if you wish private mentions to be in + // addition to the current ACL settings. + + $str_contact_allow = ''; + $str_group_allow = ''; + $first_access_tag = false; + } + if(strpos($access_tag,'cid:') === 0) { + $str_contact_allow .= '<' . substr($access_tag,4) . '>'; + $access_tag = ''; + } + elseif(strpos($access_tag,'gid:') === 0) { + $str_group_allow .= '<' . substr($access_tag,4) . '>'; + $access_tag = ''; + } + } + } +} diff --git a/include/text.php b/include/text.php index e0bf393e5..035c092a6 100644 --- a/include/text.php +++ b/include/text.php @@ -2350,3 +2350,33 @@ function handle_tag($a, &$body, &$access_tag, &$str_tags, $profile_uid, $tag) { return array('replaced' => $replaced, 'termtype' => $termtype, 'term' => $newname, 'url' => $url, 'contact' => $r[0]); } + +function linkify_tags($a, &$body, $uid, $profile_uid) { + $str_tags = ''; + $tagged = array(); + $result = array(); + + $tags = get_tags($body); + if(count($tags)) { + foreach($tags as $tag) { + // If we already tagged 'Robert Johnson', don't try and tag 'Robert'. + // Robert Johnson should be first in the $tags array + + $fullnametagged = false; + for($x = 0; $x < count($tagged); $x ++) { + if(stristr($tagged[$x],$tag . ' ')) { + $fullnametagged = true; + break; + } + } + if($fullnametagged) + continue; + + $success = handle_tag($a, $body, $access_tag, $str_tags, ($uid) ? $uid : $profile_uid , $tag); + $results[] = array('success' => $success, 'access_tag' => $access_tag); + if($success['replaced']) $tagged[] = $tag; + } + } + return $results; +} + diff --git a/mod/item.php b/mod/item.php index 894e23a0f..7a14a8ae9 100644 --- a/mod/item.php +++ b/mod/item.php @@ -575,78 +575,26 @@ function item_post(&$a) { $body = scale_external_images($body,false); - /** - * Look for any tags and linkify them - */ - - $str_tags = ''; - $inform = ''; - $post_tags = array(); - - $tags = get_tags($body); - - $tagged = array(); + // Look for tags and linkify them + $results = linkify_tags($a, $body, $uid, $profile_uid); - if(count($tags)) { - $first_access_tag = true; - foreach($tags as $tag) { - - // If we already tagged 'Robert Johnson', don't try and tag 'Robert'. - // Robert Johnson should be first in the $tags array - - $fullnametagged = false; - for($x = 0; $x < count($tagged); $x ++) { - if(stristr($tagged[$x],$tag . ' ')) { - $fullnametagged = true; - break; - } - } - if($fullnametagged) - continue; + // Set permissions based on tag replacements + set_linkified_perms($results, $str_contact_allow, $str_group_allow, $profile_uid, $parent_item); - $success = handle_tag($a, $body, $access_tag, $str_tags, ($uid) ? $uid : $profile_uid , $tag); - logger('handle_tag: ' . print_r($success,true), LOGGER_DATA); - if(($access_tag) && (! $parent_item)) { - logger('access_tag: ' . $tag . ' ' . print_r($access_tag,true), LOGGER_DATA); - if ($first_access_tag && (! get_pconfig($profile_uid,'system','no_private_mention_acl_override'))) { - - // This is a tough call, hence configurable. The issue is that one can type in a @!privacy mention - // and also have a default ACL (perhaps from viewing a collection) and could be suprised that the - // privacy mention wasn't the only recipient. So the default is to wipe out the existing ACL if a - // private mention is found. This can be over-ridden if you wish private mentions to be in - // addition to the current ACL settings. - - $str_contact_allow = ''; - $str_group_allow = ''; - $first_access_tag = false; - } - if(strpos($access_tag,'cid:') === 0) { - $str_contact_allow .= '<' . substr($access_tag,4) . '>'; - $access_tag = ''; - } - elseif(strpos($access_tag,'gid:') === 0) { - $str_group_allow .= '<' . substr($access_tag,4) . '>'; - $access_tag = ''; - } - } - - if($success['replaced']) { - $tagged[] = $tag; - $post_tags[] = array( - 'uid' => $profile_uid, - 'type' => $success['termtype'], - 'otype' => TERM_OBJ_POST, - 'term' => $success['term'], - 'url' => $success['url'] - ); - } + $post_tags = array(); + foreach($results as $result) { + $success = $result['success']; + if($success['replaced']) { + $post_tags[] = array( + 'uid' => $profile_uid, + 'type' => $success['termtype'], + 'otype' => TERM_OBJ_POST, + 'term' => $success['term'], + 'url' => $success['url'] + ); } } - -// logger('post_tags: ' . print_r($post_tags,true)); - - $attachments = ''; $match = false; diff --git a/mod/photos.php b/mod/photos.php index 8a54eca4f..df9880c8d 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -351,56 +351,27 @@ function photos_post(&$a) { if($x !== '@' && $x !== '#') $rawtags = '@' . $rawtags; - $taginfo = array(); - $tags = get_tags($rawtags); - - if(count($tags)) { - foreach($tags as $tag) { - - // If we already tagged 'Robert Johnson', don't try and tag 'Robert'. - // Robert Johnson should be first in the $tags array - - $fullnametagged = false; - for($x = 0; $x < count($tagged); $x ++) { - if(stristr($tagged[$x],$tag . ' ')) { - $fullnametagged = true; - break; - } - } - if($fullnametagged) - continue; - - require_once('include/text.php'); - $body = $access_tag = ''; - - $success = handle_tag($a, $body, $access_tag, $str_tags, (local_user()) ? local_user() : $a->profile['profile_uid'] , $tag); - logger('handle_tag: ' . print_r($success,tue), LOGGER_DEBUG); - if($access_tag) { - logger('access_tag: ' . $tag . ' ' . print_r($access_tag,true), LOGGER_DEBUG); - if(strpos($access_tag,'cid:') === 0) { - $str_contact_allow .= '<' . substr($access_tag,4) . '>'; - $access_tag = ''; - } - elseif(strpos($access_tag,'gid:') === 0) { - $str_group_allow .= '<' . substr($access_tag,4) . '>'; - $access_tag = ''; - } - } - - if($success['replaced']) { - $tagged[] = $tag; - - $post_tags[] = array( - 'uid' => $a->profile['profile_uid'], - 'type' => $success['termtype'], - 'otype' => TERM_OBJ_POST, - 'term' => $success['term'], - 'url' => $success['url'] - ); - } + require_once('include/text.php'); + $profile_uid = $a->profile['profile_uid']; + + $results = linkify_tags($a, $rawtags, local_user(), $profile_uid); + + $success = $results['success']; + $post_tags = array(); + + foreach($results as $result) { + $success = $result['success']; + if($success['replaced']) { + $post_tags[] = array( + 'uid' => $profile_uid, + 'type' => $success['termtype'], + 'otype' => TERM_OBJ_POST, + 'term' => $success['term'], + 'url' => $success['url'] + ); } } - + $r = q("select * from item where id = %d and uid = %d limit 1", intval($item_id), intval($page_owner_uid) diff --git a/view/js/mod_photos.js b/view/js/mod_photos.js index 4c724c5e1..0526fd1e6 100644 --- a/view/js/mod_photos.js +++ b/view/js/mod_photos.js @@ -4,7 +4,7 @@ var ispublic = aStr['everybody']; $(document).ready(function() { $(document).ready(function() { $("#photo-edit-newtag").contact_autocomplete(baseurl + '/acl', 'p', false, function(data) { - $("#photo-edit-newtag").val('@' + data.name.replace(' ','_')); // TODO: Get rid of underscore + $("#photo-edit-newtag").val('@' + data.name); }); }); |