]> git.mxchange.org Git - friendica.git/blobdiff - include/acl_selectors.php
Merge pull request #2975 from annando/1611-frontend-worker
[friendica.git] / include / acl_selectors.php
index d78393aeee462725509f9334eac2f17b62ee9f92..71a42478ba92c06b80c02f6f3d332af6382deba4 100644 (file)
@@ -1,13 +1,15 @@
 <?php
 
+/**
+ * @file include/acl_selectors.php
+ */
+
 require_once("include/contact_selectors.php");
 require_once("include/contact_widgets.php");
+require_once("include/DirSearch.php");
 require_once("include/features.php");
 require_once("mod/proxy.php");
 
-/**
- *
- */
 
 /**
  * @package acl_selectors
@@ -393,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,'smode')           ? $_REQUEST['smode']            : "");
+       $conv_id =      (x($_REQUEST,'conversation')    ? $_REQUEST['conversation']     : null);
 
        // For use with jquery.textcomplete for private mail completion
 
@@ -478,11 +481,11 @@ function acl_lookup(&$a, $out_type = 'json') {
        if ($type=='' || $type=='g'){
 
                $r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`contact-id` SEPARATOR ',') AS uids
-                               FROM `group`,`group_member`
-                               WHERE `group`.`deleted` = 0 AND `group`.`uid` = %d
-                                       AND `group_member`.`gid`=`group`.`id`
+                               FROM `group`
+                               INNER JOIN `group_member` ON `group_member`.`gid`=`group`.`id` AND `group_member`.`uid` = `group`.`uid`
+                               WHERE NOT `group`.`deleted` AND `group`.`uid` = %d
                                        $sql_extra
-                               GROUP BY `group`.`id`
+                               GROUP BY `group`.`name`
                                ORDER BY `group`.`name`
                                LIMIT %d,%d",
                        intval(local_user()),
@@ -506,7 +509,7 @@ function acl_lookup(&$a, $out_type = 'json') {
 
        if ($type==''){
 
-               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum` FROM `contact`
+               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact`
                        WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 AND `notify` != ''
                        AND NOT (`network` IN ('%s', '%s'))
                        $sql_extra2
@@ -517,7 +520,7 @@ function acl_lookup(&$a, $out_type = 'json') {
        }
        elseif ($type=='c'){
 
-               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum` FROM `contact`
+               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact`
                        WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 AND `notify` != ''
                        AND NOT (`network` IN ('%s'))
                        $sql_extra2
@@ -539,7 +542,7 @@ function acl_lookup(&$a, $out_type = 'json') {
                );
        }
        elseif($type == 'a') {
-               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact`
+               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact`
                        WHERE `uid` = %d AND `pending` = 0
                        $sql_extra2
                        ORDER BY `name` ASC ",
@@ -553,9 +556,12 @@ function acl_lookup(&$a, $out_type = 'json') {
                if($r) {
                        foreach($r as $g) {
                                $contacts[] = array(
-                                       "photo"    => $g['photo'],
+                                       "photo"    => proxy_url($g['photo'], false, PROXY_SIZE_MICRO),
                                        "name"     => $g['name'],
                                        "nick"     => (x($g['addr']) ? $g['addr'] : $g['url']),
+                                       "network" => $g['network'],
+                                       "link" => $g['url'],
+                                       "forum"    => (x($g['community']) ? 1 : 0),
                                );
                        }
                }
@@ -581,7 +587,7 @@ function acl_lookup(&$a, $out_type = 'json') {
                                "network" => $g['network'],
                                "link" => $g['url'],
                                "nick" => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']),
-                               "forum" => $g['forum']
+                               "forum" => ((x($g['forum']) || x($g['prv'])) ? 1 : 0),
                        );
                }
        }
@@ -631,29 +637,47 @@ function acl_lookup(&$a, $out_type = 'json') {
                $tot += count($unknow_contacts);
        }
 
+       $results = array(
+               "tot"   => $tot,
+               "start" => $start,
+               "count" => $count,
+               "groups" => $groups,
+               "contacts" => $contacts,
+               "items" => $items,
+               "type"  => $type,
+               "search" => $search,
+       );
+
+       call_hooks('acl_lookup_end', $results);
+
        if($out_type === 'html') {
                $o = array(
-                       'tot'           => $tot,
-                       'start' => $start,
-                       'count' => $count,
-                       'groups'        => $groups,
-                       'contacts'      => $contacts,
+                       'tot'           => $results["tot"],
+                       'start'         => $results["start"],
+                       'count'         => $results["count"],
+                       'groups'        => $results["groups"],
+                       'contacts'      => $results["contacts"],
                );
                return $o;
        }
 
        $o = array(
-               'tot'   => $tot,
-               'start' => $start,
-               'count' => $count,
-               'items' => $items,
+               'tot'   => $results["tot"],
+               'start' => $results["start"],
+               'count' => $results["count"],
+               'items' => $results["items"],
        );
 
        echo json_encode($o);
 
        killme();
 }
-
+/**
+ * @brief Searching for global contacts for autocompletion
+ * 
+ * @param App $a
+ * @return array with the search results
+ */
 function navbar_complete(&$a) {
 
 //     logger('navbar_complete');
@@ -662,41 +686,26 @@ function navbar_complete(&$a) {
                return;
        }
 
-       $local = get_config('system','poco_local_search');
-       $local = true;
+       // check if searching in the local global contact table is enabled
+       $localsearch = get_config('system','poco_local_search');
 
        $search = $prefix.notags(trim($_REQUEST['search']));
+       $mode = $_REQUEST['smode'];
+
+       // don't search if search term has less than 2 characters
        if(! $search || mb_strlen($search) < 2)
                return array();
 
-       $star = false;
-       $address = false;
-
        if(substr($search,0,1) === '@')
                $search = substr($search,1);
 
-       if(substr($search,0,1) === '*') {
-               $star = true;
-               $search = substr($search,1);
-       }
-
-       if(strpos($search,'@') !== false) {
-               $address = true;
-       }
-
-       if($local) {
-               require_once("include/dir_fns.php");
-               $x = dirsearch_autocomplete($search);
+       if($localsearch) {
+               $x = DirSearch::global_search_by_name($search, $mode);
                return $x;
        }
 
-       if(! $local) {
-               require_once("include/dir_fns.php");
-               $url = $directory['url'] . '/dirsearch';
-       
-
+       if(! $localsearch) {
                $p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : '');
-       
 
                $x = z_fetch_url(get_server().'/lsearch?f=' . $p .  '&search=' . urlencode($search));
                if($x['success']) {
@@ -708,4 +717,4 @@ function navbar_complete(&$a) {
                }
        }
        return;
-}
\ No newline at end of file
+}