aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xinclude/items.php31
-rw-r--r--include/text.php30
-rw-r--r--mod/item.php82
-rw-r--r--mod/photos.php67
-rw-r--r--view/js/mod_photos.js2
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);
});
});