]> git.mxchange.org Git - friendica.git/commitdiff
rework autocomplete: add NavBar forum search
authorrabuzarus <>
Tue, 2 Feb 2016 21:33:14 +0000 (22:33 +0100)
committerRoland Haeder <roland@mxchange.org>
Sun, 1 May 2016 11:46:08 +0000 (13:46 +0200)
include/acl_selectors.php
include/dir_fns.php
js/autocomplete.js

index b5c43e38e63ea762ce53d467e2871407552b24d8..9e1a2642a4768ed2e4ddaa5315e44bdd77335481 100644 (file)
@@ -395,11 +395,12 @@ function acl_lookup(&$a, $out_type = 'json') {
        if(!local_user())
                return "";
 
-       $start = (x($_REQUEST,'start')?$_REQUEST['start']:0);
-       $count = (x($_REQUEST,'count')?$_REQUEST['count']:100);
-       $search = (x($_REQUEST,'search')?$_REQUEST['search']:"");
-       $type = (x($_REQUEST,'type')?$_REQUEST['type']:"");
-       $conv_id = (x($_REQUEST,'conversation')?$_REQUEST['conversation']:null);
+       $start  =       (x($_REQUEST,'start')           ? $_REQUEST['start']            : 0);
+       $count  =       (x($_REQUEST,'count')           ? $_REQUEST['count']            : 100);
+       $search  =      (x($_REQUEST,'search')          ? $_REQUEST['search']           : "");
+       $type   =       (x($_REQUEST,'type')            ? $_REQUEST['type']             : "");
+       $mode   =       (x($_REQUEST,'mode')            ? $_REQUEST['mode']             : "");
+       $conv_id =      (x($_REQUEST,'conversation')    ? $_REQUEST['conversation']     : null);
 
        // For use with jquery.textcomplete for private mail completion
 
@@ -673,6 +674,7 @@ function navbar_complete(&$a) {
        $localsearch = get_config('system','poco_local_search');
 
        $search = $prefix.notags(trim($_REQUEST['search']));
+       $mode = $_REQUEST['mode'];
 
        // don't search if search term has less than 2 characters
        if(! $search || mb_strlen($search) < 2)
@@ -682,7 +684,7 @@ function navbar_complete(&$a) {
                $search = substr($search,1);
 
        if($localsearch) {
-               $x = dir::global_search_by_name($search);
+               $x = dir::global_search_by_name($search, $mode);
                return $x;
        }
 
index b85cb5b2d009aea1fd63f2fbedc968f49c396ce2..d258058763fb1b4aee81ed528386b84e7ec97fb5 100644 (file)
@@ -14,9 +14,10 @@ class dir {
         * @brief Search global contact table by nick or name
         *  * 
         * @param string $search Name or nick
+        * @param string $mode Search mode 
         * @return array
         */
-       public static function global_search_by_name($search) {
+       public static function global_search_by_name($search, $mode = '') {
 
                if($search) {
                        // check supported networks
@@ -30,6 +31,12 @@ class dir {
                        else
                                $ostatus = NETWORK_DFRN;
 
+                       // check if fo
+                       if($mode === "community")
+                               $extra_sql = " AND `community`";
+                       else
+                               $extra_sql = "";
+
                        $results = q("SELECT `contact`.`id` AS `cid`, `gcontact`.`url`, `gcontact`.`name`, `gcontact`.`nick`, `gcontact`.`photo`,
                                                        `gcontact`.`network`, `gcontact`.`keywords`, `gcontact`.`addr`
                                                FROM `gcontact`
@@ -38,13 +45,12 @@ class dir {
                                                        AND NOT `contact`.`pending` AND `contact`.`rel` IN ('%s', '%s')
                                                WHERE (`contact`.`id` > 0 OR (NOT `gcontact`.`hide` AND `gcontact`.`network` IN ('%s', '%s', '%s') AND
                                                ((`gcontact`.`last_contact` >= `gcontact`.`last_failure`) OR (`gcontact`.`updated` >= `gcontact`.`last_failure`)))) AND
-                                               (`gcontact`.`url` REGEXP '%s' OR `gcontact`.`name` REGEXP '%s' OR `gcontact`.`nick` REGEXP '%s'
-                                                       ) 
+                                               (`gcontact`.`name` REGEXP '%s' OR `gcontact`.`nick` REGEXP '%s') $extra_sql
                                                        GROUP BY `gcontact`.`nurl`
                                                        ORDER BY `gcontact`.`updated` DESC ",
                                                intval(local_user()), dbesc(CONTACT_IS_SHARING), dbesc(CONTACT_IS_FRIEND),
                                                dbesc(NETWORK_DFRN), dbesc($ostatus), dbesc($diaspora),
-                                               dbesc(escape_tags($search)), dbesc(escape_tags($search)), dbesc(escape_tags($search)));
+                                               dbesc(escape_tags($search)), dbesc(escape_tags($search)));
                        return $results;
                }
 
index 6c75f17ca645b7f31b4d893bd1108965e8d1a934..aa8b6836c52eac1122d2b15174a5aa2dc9cfc8ea 100644 (file)
  */
 
 
-function contact_search(term, callback, backend_url, type) {
+function contact_search(term, callback, backend_url, type, mode) {
 
        // Check if there is a conversation id to include the unkonwn contacts of the conversation
        var conv_id = document.activeElement.id.match(/\d+$/);
 
-
        // Check if there is a cached result that contains the same information we would get with a full server-side search
        var bt = backend_url+type;
        if(!(bt in contact_search.cache)) contact_search.cache[bt] = {};
@@ -41,6 +40,9 @@ function contact_search(term, callback, backend_url, type) {
        if(conv_id !== null)
                postdata['conversation'] = conv_id[0];
 
+       if(mode !== null)
+               postdata['mode'] = mode;
+
 
        $.ajax({
                type:'POST',
@@ -126,6 +128,7 @@ function submit_form(e) {
                        template: contact_format,
                };
 
+               // Autocomplete smilies e.g. ":like"
                smilies = {
                        match: /(^|\s)(:[a-z]{2,})$/,
                        index: 2,
@@ -134,6 +137,7 @@ function submit_form(e) {
                        replace: function(item) { return "$1" + item.text + ' '; },
                };
 
+               // Autocomplete BBTags
                bbtags = {
                        match: /\[(\w*)$/,
                        index: 1,
@@ -154,12 +158,21 @@ function submit_form(e) {
                contacts = {
                        match: /(^@)([^\n]{2,})$/,
                        index: 2,
-                       search: function(term, callback) { contact_search(term, callback, backend_url, 'x'); },
+                       search: function(term, callback) { contact_search(term, callback, backend_url, 'x', 'contact'); },
+                       replace: basic_replace,
+                       template: contact_format,
+               };
+
+               // Autocomplete forum accounts
+               community = {
+                       match: /(^!)([^\n]{2,})$/,
+                       index: 2,
+                       search: function(term, callback) { contact_search(term, callback, backend_url, 'x', 'community'); },
                        replace: basic_replace,
                        template: contact_format,
                };
                this.attr('autocomplete', 'off');
-               var a = this.textcomplete([contacts], {className:'acpopup', maxCount:100, zIndex: 1020, appendTo:'nav'});
+               var a = this.textcomplete([contacts, community], {className:'acpopup', maxCount:100, zIndex: 1020, appendTo:'#nav-search-box'});
                a.on('textComplete:select', function(e, value, strategy) { submit_form(this); });
        };
 })( jQuery );