]> git.mxchange.org Git - friendica.git/commitdiff
Use the exclamation mark to address forums as well
authorMichael <heluecht@pirati.ca>
Tue, 31 Oct 2017 19:33:23 +0000 (19:33 +0000)
committerMichael <heluecht@pirati.ca>
Tue, 31 Oct 2017 19:33:23 +0000 (19:33 +0000)
include/acl_selectors.php
include/items.php
js/autocomplete.js
mod/item.php

index 8205854ba6ef2c0a7a4b6ebd062a0f40c1eff5ae..32348c2330aff6172420b2a20a56288062d42d86 100644 (file)
@@ -478,9 +478,18 @@ function acl_lookup(App $a, $out_type = 'json') {
                        intval(local_user())
                );
                $contact_count = (int)$r[0]['c'];
-       }
-       elseif ($type == 'm') {
-
+       } elseif ($type == 'f') {
+               // autocomplete for editor mentions of forums
+               $r = q("SELECT COUNT(*) AS c FROM `contact`
+                               WHERE `uid` = %d AND NOT `self`
+                               AND NOT `blocked` AND NOT `pending` AND NOT `archive`
+                               AND (`forum` OR `prv`)
+                               AND `success_update` >= `failure_update`
+                               AND `notify` != '' $sql_extra2" ,
+                       intval(local_user())
+               );
+               $contact_count = (int)$r[0]['c'];
+       } elseif ($type == 'm') {
                // autocomplete for Private Messages
 
                $r = q("SELECT COUNT(*) AS c FROM `contact`
@@ -495,8 +504,7 @@ function acl_lookup(App $a, $out_type = 'json') {
                );
                $contact_count = (int)$r[0]['c'];
 
-       }
-       elseif ($type == 'a') {
+       } elseif ($type == 'a') {
 
                // autocomplete for Contacts
 
@@ -570,8 +578,17 @@ function acl_lookup(App $a, $out_type = 'json') {
                        intval(local_user()),
                        dbesc(NETWORK_STATUSNET)
                );
-       }
-       elseif ($type == 'm') {
+       } elseif ($type == 'f') {
+               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact`
+                       WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != ''
+                       AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s'))
+                       AND (`forum` OR `prv`)
+                       $sql_extra2
+                       ORDER BY `name` ASC ",
+                       intval(local_user()),
+                       dbesc(NETWORK_STATUSNET)
+               );
+       } elseif ($type == 'm') {
                $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact`
                        WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive`
                        AND `success_update` >= `failure_update` AND `network` IN ('%s','%s','%s')
index d1c91b940345d2738ce7b41adb043e8d46c124c4..4af4c6ab37c17b2968d3aae04d859797d9d03570 100644 (file)
@@ -853,7 +853,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
                         * The original author commented, but as this is a comment, the permissions
                         * weren't fixed up so it will still show the comment as private unless we fix it here.
                         */
-                       if ((intval($r[0]['forum_mode']) == 1) && (! $r[0]['private'])) {
+                       if ((intval($r[0]['forum_mode']) == 1) && $r[0]['private']) {
                                $arr['private'] = 0;
                        }
 
index 58dde55a6ddd5f8057563e12b83f5cf8fc4556ee..219ad794bc86a4b18a34626ad4c691bf36a3b18b 100644 (file)
@@ -203,6 +203,15 @@ function string2bb(element) {
                        template: contact_format,
                };
 
+               // Autocomplete forums
+               forums = {
+                       match: /(^|\s)(!\!*)([^ \n]+)$/,
+                       index: 3,
+                       search: function(term, callback) { contact_search(term, callback, backend_url, 'f'); },
+                       replace: editor_replace,
+                       template: contact_format,
+               };
+
                // Autocomplete smilies e.g. ":like"
                smilies = {
                        match: /(^|\s)(:[a-z]{2,})$/,
@@ -213,7 +222,7 @@ function string2bb(element) {
                };
 
                this.attr('autocomplete','off');
-               this.textcomplete([contacts,smilies], {className:'acpopup', zIndex:10000});
+               this.textcomplete([contacts, forums, smilies], {className:'acpopup', zIndex:10000});
        };
 })( jQuery );
 
index 8abee8e4f651dd06321785fc76084c48f1d88017..0bb0d17dbe2813127b121fdfac488b13c3be3d37 100644 (file)
@@ -557,7 +557,11 @@ function item_post(App $a) {
                                                INNER JOIN `item` ON `item`.`contact-id` = `contact`.`id` AND `contact`.`url` = `item`.`author-link`
                                                WHERE `item`.`id` = `item`.`parent` AND `item`.`parent` = %d", intval($parent));
                if (dbm::is_result($toplevel_parent)) {
-                       $toplevel_contact = '@' . $toplevel_parent[0]['nick'] . '+' . $toplevel_parent[0]['id'];
+                       if (!empty($toplevel_parent[0]['addr'])) {
+                               $toplevel_contact = '@' . $toplevel_parent[0]['addr'];
+                       } else {
+                               $toplevel_contact = '@' . $toplevel_parent[0]['nick'] . '+' . $toplevel_parent[0]['id'];
+                       }
                } else {
                        $toplevel_parent = q("SELECT `author-link`, `author-name` FROM `item` WHERE `id` = `parent` AND `parent` = %d", intval($parent));
                        $toplevel_contact = '@[url=' . $toplevel_parent[0]['author-link'] . ']' . $toplevel_parent[0]['author-name'] . '[/url]';
@@ -575,7 +579,9 @@ function item_post(App $a) {
        if (count($tags)) {
                foreach ($tags as $tag) {
 
-                       if (strpos($tag, '#') === 0) {
+                       $tag_type = substr($tag, 0, 1);
+
+                       if ($tag_type == '#') {
                                continue;
                        }
 
@@ -599,14 +605,15 @@ function item_post(App $a) {
                        if ($success['replaced']) {
                                $tagged[] = $tag;
                        }
-                       if (is_array($success['contact']) && intval($success['contact']['prv'])) {
+                       // When the forum is private or the forum is addressed with a "!" make the post private
+                       if (is_array($success['contact']) && ($success['contact']['prv'] || ($tag_type == '!'))) {
                                $private_forum = true;
                                $private_id = $success['contact']['id'];
                        }
                }
        }
 
-       if (($private_forum) && (! $parent) && (! $private)) {
+       if ($private_forum && !$parent && !$private) {
                // we tagged a private forum in a top level post and the message was public.
                // Restrict it.
                $private = 1;
@@ -1107,9 +1114,11 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n
 
        $replaced = false;
        $r = null;
+       $tag_type = '@';
 
        //is it a person tag?
-       if (strpos($tag, '@') === 0) {
+       if ((strpos($tag, '@') === 0) || (strpos($tag, '!') === 0)) {
+               $tag_type = substr($tag, 0, 1);
                //is it already replaced?
                if (strpos($tag, '[url=')) {
                        //append tag to str_tags
@@ -1121,7 +1130,7 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n
                        }
 
                        // Checking for the alias that is used for OStatus
-                       $pattern = "/@\[url\=(.*?)\](.*?)\[\/url\]/ism";
+                       $pattern = "/[@!]\[url\=(.*?)\](.*?)\[\/url\]/ism";
                        if (preg_match($pattern, $tag, $matches)) {
 
                                $r = q("SELECT `alias`, `name` FROM `contact` WHERE `nurl` = '%s' AND `alias` != '' AND `uid` = 0",
@@ -1282,12 +1291,11 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n
 
                //if there is an url for this persons profile
                if (isset($profile) && ($newname != "")) {
-
                        $replaced = true;
                        // create profile link
                        $profile = str_replace(',', '%2c', $profile);
-                       $newtag = '@[url=' . $profile . ']' . $newname . '[/url]';
-                       $body = str_replace('@' . $name, $newtag, $body);
+                       $newtag = $tag_type.'[url=' . $profile . ']' . $newname . '[/url]';
+                       $body = str_replace($tag_type . $name, $newtag, $body);
                        // append tag to str_tags
                        if (! stristr($str_tags, $newtag)) {
                                if (strlen($str_tags)) {