]> git.mxchange.org Git - friendica.git/blob - mod/acl.php
Merge branch 'master', remote-tracking branch 'remotes/upstream/master'
[friendica.git] / mod / acl.php
1 <?php
2 /* ACL selector json backend */
3 require_once("include/acl_selectors.php");
4
5 function acl_init(&$a){
6         if(!local_user())
7                 return "";
8
9
10         $start = (x($_REQUEST,'start')?$_REQUEST['start']:0);
11         $count = (x($_REQUEST,'count')?$_REQUEST['count']:100);
12         $search = (x($_REQUEST,'search')?$_REQUEST['search']:"");
13         $type = (x($_REQUEST,'type')?$_REQUEST['type']:"");
14         
15
16         // For use with jquery.autocomplete for private mail completion
17
18         if(x($_REQUEST,'query') && strlen($_REQUEST['query'])) {
19                 $type = 'm';
20                 $search = $_REQUEST['query'];
21         }
22
23
24         if ($search!=""){
25                 $sql_extra = "AND `name` LIKE '%%".dbesc($search)."%%'";
26                 $sql_extra2 = "AND (`attag` LIKE '%%".dbesc($search)."%%' OR `name` LIKE '%%".dbesc($search)."%%' OR `nick` LIKE '%%".dbesc($search)."%%')";
27         } else {
28                 $sql_extra = $sql_extra2 = "";
29         }
30         
31         // count groups and contacts
32         if ($type=='' || $type=='g'){
33                 $r = q("SELECT COUNT(`id`) AS g FROM `group` WHERE `deleted` = 0 AND `uid` = %d $sql_extra",
34                         intval(local_user())
35                 );
36                 $group_count = (int)$r[0]['g'];
37         } else {
38                 $group_count = 0;
39         }
40         
41         if ($type=='' || $type=='c'){
42                 $r = q("SELECT COUNT(`id`) AS c FROM `contact` 
43                                 WHERE `uid` = %d AND `self` = 0 
44                                 AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0
45                                 AND `notify` != '' $sql_extra2" ,
46                         intval(local_user())
47                 );
48                 $contact_count = (int)$r[0]['c'];
49         } 
50         elseif ($type == 'm') {
51
52                 // autocomplete for Private Messages
53
54                 $r = q("SELECT COUNT(`id`) AS c FROM `contact` 
55                                 WHERE `uid` = %d AND `self` = 0 
56                                 AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 
57                                 AND `network` IN ('%s','%s','%s') $sql_extra2" ,
58                         intval(local_user()),
59                         dbesc(NETWORK_DFRN),
60                         dbesc(NETWORK_ZOT),
61                         dbesc(NETWORK_DIASPORA)
62                 );
63                 $contact_count = (int)$r[0]['c'];
64
65         } else {
66                 $contact_count = 0;
67         }
68         
69         $tot = $group_count+$contact_count;
70         
71         $groups = array();
72         $contacts = array();
73         
74         if ($type=='' || $type=='g'){
75                 
76                 $r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`contact-id` SEPARATOR ',') as uids
77                                 FROM `group`,`group_member` 
78                                 WHERE `group`.`deleted` = 0 AND `group`.`uid` = %d 
79                                         AND `group_member`.`gid`=`group`.`id`
80                                         $sql_extra
81                                 GROUP BY `group`.`id`
82                                 ORDER BY `group`.`name` 
83                                 LIMIT %d,%d",
84                         intval(local_user()),
85                         intval($start),
86                         intval($count)
87                 );
88
89                 foreach($r as $g){
90 //              logger('acl: group: ' . $g['name'] . ' members: ' . $g['uids']);                
91                         $groups[] = array(
92                                 "type"  => "g",
93                                 "photo" => "images/twopeople.png",
94                                 "name"  => $g['name'],
95                                 "id"    => intval($g['id']),
96                                 "uids"  => array_map("intval", explode(",",$g['uids'])),
97                                 "link"  => ''
98                         );
99                 }
100         }
101         
102         if ($type=='' || $type=='c'){
103         
104                 $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact` 
105                         WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 AND `notify` != ''
106                         $sql_extra2
107                         ORDER BY `name` ASC ",
108                         intval(local_user())
109                 );
110         }
111         elseif($type == 'm') {
112                 $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact` 
113                         WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0
114                         AND `network` IN ('%s','%s','%s')
115                         $sql_extra2
116                         ORDER BY `name` ASC ",
117                         intval(local_user()),
118                         dbesc(NETWORK_DFRN),
119                         dbesc(NETWORK_ZOT),
120                         dbesc(NETWORK_DIASPORA)
121                 );
122         }
123         else
124                 $r = array();
125
126
127         if($type == 'm') {
128                 $x = array();
129                 $x['query'] = $search;
130                 $x['photos'] = array();
131                 $x['links'] = array();
132                 $x['suggestions'] = array();
133                 $x['data'] = array();
134                 if(count($r)) {
135                         foreach($r as $g) {
136                                 $x['photos'][] = $g['micro'];
137                                 $x['links'][] = $g['url'];
138                                 $x['suggestions'][] = $g['name'];
139                                 $x['data'][] = intval($g['id']);
140                         }
141                 }
142                 echo json_encode($x);
143                 killme();
144         }
145
146         if(count($r)) {
147                 foreach($r as $g){
148                         $contacts[] = array(
149                                 "type"  => "c",
150                                 "photo" => $g['micro'],
151                                 "name"  => $g['name'],
152                                 "id"    => intval($g['id']),
153                                 "network" => $g['network'],
154                                 "link" => $g['url'],
155                                 "nick" => ($g['attag']) ? $g['attag'] : $g['nick'],
156                         );
157                 }                       
158         }
159                 
160         $items = array_merge($groups, $contacts);
161         
162         $o = array(
163                 'tot'   => $tot,
164                 'start' => $start,
165                 'count' => $count,
166                 'items' => $items,
167         );
168         
169         echo json_encode($o);
170
171         killme();
172 }
173
174