]> git.mxchange.org Git - friendica.git/blob - mod/acl.php
Merge remote branch '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['suggestions'] = array();
131                 $x['data'] = array();
132                 if(count($r)) {
133                         foreach($r as $g) {
134                                 $x['suggestions'][] = sprintf( t('%s [%s]'),$g['name'],$g['url']);
135                                         // '<img src="' . $g['micro'] . ' height="16" width="16" alt="' . t('Image/photo') . '" />' . 
136                                 $x['data'][] = intval($g['id']);
137                         }
138                 }
139                 echo json_encode($x);
140                 killme();
141         }
142
143         if(count($r)) {
144                 foreach($r as $g){
145                         $contacts[] = array(
146                                 "type"  => "c",
147                                 "photo" => $g['micro'],
148                                 "name"  => $g['name'],
149                                 "id"    => intval($g['id']),
150                                 "network" => $g['network'],
151                                 "link" => $g['url'],
152                                 "nick" => ($g['attag']) ? $g['attag'] : $g['nick'],
153                         );
154                 }                       
155         }
156                 
157         $items = array_merge($groups, $contacts);
158         
159         $o = array(
160                 'tot'   => $tot,
161                 'start' => $start,
162                 'count' => $count,
163                 'items' => $items,
164         );
165         
166         echo json_encode($o);
167
168         killme();
169 }
170
171