make bang tag exclusive

This commit is contained in:
Mike Macgirvin 2024-03-25 21:54:03 +11:00
parent 41c68724e0
commit 46d5d4ad63
7 changed files with 15 additions and 15 deletions

View file

@ -346,7 +346,7 @@ define ( 'TERM_THING', 7 );
define ( 'TERM_BOOKMARK', 8 ); define ( 'TERM_BOOKMARK', 8 );
define ( 'TERM_HIERARCHY', 9 ); define ( 'TERM_HIERARCHY', 9 );
define ( 'TERM_COMMUNITYTAG', 10 ); define ( 'TERM_COMMUNITYTAG', 10 );
define ( 'TERM_FORUM', 11 ); define ( 'TERM_GROUP', 11 );
define ( 'TERM_EMOJI', 12 ); define ( 'TERM_EMOJI', 12 );
define ( 'TERM_QUOTED', 13 ); define ( 'TERM_QUOTED', 13 );

View file

@ -1100,7 +1100,7 @@ function encode_item_xchan($xchan) {
function encode_item_terms($terms,$mirror = false) { function encode_item_terms($terms,$mirror = false) {
$ret = []; $ret = [];
$allowed_export_terms = [TERM_UNKNOWN, TERM_HASHTAG, TERM_MENTION, TERM_CATEGORY, TERM_BOOKMARK, TERM_COMMUNITYTAG, TERM_FORUM]; $allowed_export_terms = [TERM_UNKNOWN, TERM_HASHTAG, TERM_MENTION, TERM_CATEGORY, TERM_BOOKMARK, TERM_COMMUNITYTAG, TERM_GROUP];
if($mirror) { if($mirror) {
$allowed_export_terms[] = TERM_PCATEGORY; $allowed_export_terms[] = TERM_PCATEGORY;
@ -1199,7 +1199,7 @@ function decode_tags($t) {
$tag['ttype'] = TERM_COMMUNITYTAG; $tag['ttype'] = TERM_COMMUNITYTAG;
break; break;
case 'forum': case 'forum':
$tag['ttype'] = TERM_FORUM; $tag['ttype'] = TERM_GROUP;
break; break;
default: default:
case 'unknown': case 'unknown':
@ -2674,7 +2674,7 @@ function tag_deliver($uid, $item_id) {
*/ */
$terms = ((isset($item['term'])) ? get_terms_oftype($item['term'],[TERM_MENTION, TERM_FORUM]) : false); $terms = ((isset($item['term'])) ? get_terms_oftype($item['term'],[TERM_MENTION, TERM_GROUP]) : false);
$pterms = ((isset($item['term'])) ? get_terms_oftype($item['term'], [TERM_PCATEGORY, TERM_HASHTAG] ) : false); $pterms = ((isset($item['term'])) ? get_terms_oftype($item['term'], [TERM_PCATEGORY, TERM_HASHTAG] ) : false);
@ -2745,7 +2745,7 @@ function tag_deliver($uid, $item_id) {
*/ */
if ($is_group && intval($item['item_thread_top']) && (! intval($item['item_wall']))) { if ($is_group && intval($item['item_thread_top']) && (! intval($item['item_wall']))) {
if ((intval($term['ttype']) === TERM_FORUM || get_pconfig($uid,'system','post_via_mentions',in_array($role,['forum','forum_moderated']))) && perm_is_allowed($uid, $item['author_xchan'], 'post_wall')) { if ((intval($term['ttype']) === TERM_GROUP || get_pconfig($uid,'system','post_via_mentions',in_array($role,['forum','forum_moderated']))) && perm_is_allowed($uid, $item['author_xchan'], 'post_wall')) {
logger('group mention delivery for ' . $u['channel_address']); logger('group mention delivery for ' . $u['channel_address']);
start_delivery_chain($u, $item, $item_id, false, true, (($item['edited'] != $item['created']) || $item['item_deleted'])); start_delivery_chain($u, $item, $item_id, false, true, (($item['edited'] != $item['created']) || $item['item_deleted']));
q("update item set item_blocked = %d where id = %d", q("update item set item_blocked = %d where id = %d",
@ -2948,7 +2948,7 @@ function i_am_mentioned($channel,$item,$check_groups = false) {
$tagged = false; $tagged = false;
$matches = []; $matches = [];
$tagtype = $check_groups ? TERM_FORUM : TERM_MENTION; $tagtype = $check_groups ? TERM_GROUP : TERM_MENTION;
$terms = ((isset($item['term'])) ? get_terms_oftype($item['term'], $tagtype) : false); $terms = ((isset($item['term'])) ? get_terms_oftype($item['term'], $tagtype) : false);
if ($terms) { if ($terms) {

View file

@ -2967,7 +2967,7 @@ function handle_tag(&$body, &$str_tags, $profile_uid, $tag, $in_network = true)
$termtype = ((str_starts_with($tag, '#')) ? TERM_HASHTAG : TERM_UNKNOWN); $termtype = ((str_starts_with($tag, '#')) ? TERM_HASHTAG : TERM_UNKNOWN);
$termtype = ((str_starts_with($tag, '"#')) ? TERM_HASHTAG : $termtype); $termtype = ((str_starts_with($tag, '"#')) ? TERM_HASHTAG : $termtype);
$termtype = ((str_starts_with($tag, '@')) ? TERM_MENTION : $termtype); $termtype = ((str_starts_with($tag, '@')) ? TERM_MENTION : $termtype);
$termtype = ((str_starts_with($tag, '!')) ? TERM_FORUM : $termtype); $termtype = ((str_starts_with($tag, '!')) ? TERM_GROUP : $termtype);
// Is it a hashtag of some kind? // Is it a hashtag of some kind?
@ -3035,7 +3035,7 @@ function handle_tag(&$body, &$str_tags, $profile_uid, $tag, $in_network = true)
// BEGIN mentions // BEGIN mentions
if (in_array($termtype, [TERM_MENTION, TERM_FORUM])) { if (in_array($termtype, [TERM_MENTION, TERM_GROUP])) {
// The @! tag will alter permissions // The @! tag will alter permissions
// $in_network is set to false to avoid false positives on posts originating // $in_network is set to false to avoid false positives on posts originating
@ -3159,7 +3159,7 @@ function handle_tag(&$body, &$str_tags, $profile_uid, $tag, $in_network = true)
} }
// add the channel's xchan_hash to $access_tag if exclusive // add the channel's xchan_hash to $access_tag if exclusive
if ($exclusive) { if (($termtype === TERM_GROUP) || $exclusive) {
$access_tag = 'cid:' . $xc['xchan_hash']; $access_tag = 'cid:' . $xc['xchan_hash'];
} }
@ -3173,7 +3173,7 @@ function handle_tag(&$body, &$str_tags, $profile_uid, $tag, $in_network = true)
$zrl = isOWAEnabled($url) ? 'zrl' : 'url'; $zrl = isOWAEnabled($url) ? 'zrl' : 'url';
if ($termtype === TERM_FORUM) { if ($termtype === TERM_GROUP) {
$newtag = '!' . (($exclusive) ? '!' : '') . '[' . $zrl . '=' . $profile . ']' . $newname . '[/' . $zrl . ']'; $newtag = '!' . (($exclusive) ? '!' : '') . '[' . $zrl . '=' . $profile . ']' . $newname . '[/' . $zrl . ']';
$body = str_replace('!' . (($exclusive) ? '!' : '') . $name, $newtag, $body); $body = str_replace('!' . (($exclusive) ? '!' : '') . $name, $newtag, $body);
} }

View file

@ -165,7 +165,7 @@ function format_term_for_display($term)
$s = ''; $s = '';
if (($term['ttype'] == TERM_HASHTAG) || ($term['ttype'] == TERM_COMMUNITYTAG)) { if (($term['ttype'] == TERM_HASHTAG) || ($term['ttype'] == TERM_COMMUNITYTAG)) {
$s .= '#'; $s .= '#';
} elseif ($term['ttype'] == TERM_FORUM) { } elseif ($term['ttype'] == TERM_GROUP) {
$s .= '!'; $s .= '!';
} elseif ($term['ttype'] == TERM_MENTION) { } elseif ($term['ttype'] == TERM_MENTION) {
$s .= '@'; $s .= '@';

View file

@ -516,7 +516,7 @@ class Activity
case 'Mention': case 'Mention':
$mention_type = substr($t['name'], 0, 1); $mention_type = substr($t['name'], 0, 1);
if ($mention_type === '!') { if ($mention_type === '!') {
$ret[] = ['ttype' => TERM_FORUM, 'url' => $t['href'], 'term' => escape_tags(substr($t['name'], 1))]; $ret[] = ['ttype' => TERM_GROUP, 'url' => $t['href'], 'term' => escape_tags(substr($t['name'], 1))];
} else { } else {
$ret[] = ['ttype' => TERM_MENTION, 'url' => $t['href'], 'term' => escape_tags((str_starts_with($t['name'], '@')) ? substr($t['name'], 1) : $t['name'])]; $ret[] = ['ttype' => TERM_MENTION, 'url' => $t['href'], 'term' => escape_tags((str_starts_with($t['name'], '@')) ? substr($t['name'], 1) : $t['name'])];
} }
@ -563,7 +563,7 @@ class Activity
} }
break; break;
case TERM_FORUM: case TERM_GROUP:
$term = self::lookup_term_addr($t['url'], $t['term']); $term = self::lookup_term_addr($t['url'], $t['term']);
$ret[] = ['type' => 'Mention', 'href' => $t['url'], 'name' => '!' . (($term) ?: $t['term'])]; $ret[] = ['type' => 'Mention', 'href' => $t['url'], 'name' => '!' . (($term) ?: $t['term'])];
break; break;

View file

@ -800,7 +800,7 @@ class Ping extends Controller
$forums['total'] = 0; $forums['total'] = 0;
for ($x = 0; $x < $fcount; $x++) { for ($x = 0; $x < $fcount; $x++) {
$ttype = TERM_FORUM; $ttype = TERM_GROUP;
$p = q("SELECT oid AS parent FROM term WHERE uid = " . intval(local_channel()) . " AND ttype = $ttype AND term = '" . protect_sprintf(dbesc($forums[$x]['xchan_name'])) . "'"); $p = q("SELECT oid AS parent FROM term WHERE uid = " . intval(local_channel()) . " AND ttype = $ttype AND term = '" . protect_sprintf(dbesc($forums[$x]['xchan_name'])) . "'");
$p = ids_to_querystr($p, 'parent'); $p = ids_to_querystr($p, 'parent');

View file

@ -331,7 +331,7 @@ class Stream extends Controller
$p1 = q("SELECT DISTINCT parent FROM item WHERE uid = " . intval(local_channel()) . " AND ( author_xchan = '" . dbesc($cid_r[0]['abook_xchan']) . "' OR owner_xchan = '" . dbesc($cid_r[0]['abook_xchan']) . "' ) $item_normal "); $p1 = q("SELECT DISTINCT parent FROM item WHERE uid = " . intval(local_channel()) . " AND ( author_xchan = '" . dbesc($cid_r[0]['abook_xchan']) . "' OR owner_xchan = '" . dbesc($cid_r[0]['abook_xchan']) . "' ) $item_normal ");
$p2 = q("SELECT oid AS parent FROM term WHERE uid = " . intval(local_channel()) . " AND ttype in (%d, %d) AND term = '" . dbesc($cid_r[0]['xchan_name']) . "'", $p2 = q("SELECT oid AS parent FROM term WHERE uid = " . intval(local_channel()) . " AND ttype in (%d, %d) AND term = '" . dbesc($cid_r[0]['xchan_name']) . "'",
intval(TERM_MENTION), intval(TERM_MENTION),
intval(TERM_FORUM) intval(TERM_GROUP)
); );
$p_str = ids_to_querystr(array_merge($p1, $p2), 'parent'); $p_str = ids_to_querystr(array_merge($p1, $p2), 'parent');