+
+
+ return $o;
+
+}
+
+function construct_acl_data(&$a, $user) {
+
+ // Get group and contact information for html ACL selector
+ $acl_data = acl_lookup($a, 'html');
+
+ $user_defaults = get_acl_permissions($user);
+
+ if($acl_data['groups']) {
+ foreach($acl_data['groups'] as $key=>$group) {
+ // Add a "selected" flag to groups that are posted to by default
+ if($user_defaults['allow_gid'] &&
+ in_array($group['id'], $user_defaults['allow_gid']) && !in_array($group['id'], $user_defaults['deny_gid']) )
+ $acl_data['groups'][$key]['selected'] = 1;
+ else
+ $acl_data['groups'][$key]['selected'] = 0;
+ }
+ }
+ if($acl_data['contacts']) {
+ foreach($acl_data['contacts'] as $key=>$contact) {
+ // Add a "selected" flag to groups that are posted to by default
+ if($user_defaults['allow_cid'] &&
+ in_array($contact['id'], $user_defaults['allow_cid']) && !in_array($contact['id'], $user_defaults['deny_cid']) )
+ $acl_data['contacts'][$key]['selected'] = 1;
+ else
+ $acl_data['contacts'][$key]['selected'] = 0;
+ }
+ }
+
+ return $acl_data;
+
+}
+
+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']:"");
+
+
+ // For use with jquery.autocomplete for private mail completion
+
+ if(x($_REQUEST,'query') && strlen($_REQUEST['query'])) {
+ if(! $type)
+ $type = 'm';
+ $search = $_REQUEST['query'];
+ }
+
+
+ if ($search!=""){
+ $sql_extra = "AND `name` LIKE '%%".dbesc($search)."%%'";
+ $sql_extra2 = "AND (`attag` LIKE '%%".dbesc($search)."%%' OR `name` LIKE '%%".dbesc($search)."%%' OR `nick` LIKE '%%".dbesc($search)."%%')";
+ } else {
+ $sql_extra = $sql_extra2 = "";
+ }
+
+ // count groups and contacts
+ if ($type=='' || $type=='g'){
+ $r = q("SELECT COUNT(*) AS g FROM `group` WHERE `deleted` = 0 AND `uid` = %d $sql_extra",
+ intval(local_user())
+ );
+ $group_count = (int)$r[0]['g'];
+ } else {
+ $group_count = 0;
+ }
+
+ if ($type=='' || $type=='c'){
+ $r = q("SELECT COUNT(*) AS c FROM `contact`
+ WHERE `uid` = %d AND `self` = 0
+ AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0
+ 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`
+ WHERE `uid` = %d AND `self` = 0
+ AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0
+ AND `network` IN ('%s','%s','%s') $sql_extra2" ,
+ intval(local_user()),
+ dbesc(NETWORK_DFRN),
+ dbesc(NETWORK_ZOT),
+ dbesc(NETWORK_DIASPORA)
+ );
+ $contact_count = (int)$r[0]['c'];
+
+ }
+ elseif ($type == 'a') {
+
+ // autocomplete for Contacts
+
+ $r = q("SELECT COUNT(*) AS c FROM `contact`
+ WHERE `uid` = %d AND `self` = 0
+ AND `pending` = 0 $sql_extra2" ,
+ intval(local_user())
+ );
+ $contact_count = (int)$r[0]['c'];
+
+ } else {
+ $contact_count = 0;
+ }