X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=mod%2Fpoco.php;h=acfa3ffaa98e46c637fffdf4c96e5463b5a88cdb;hb=15cae001d947d27a75147aecec089e44d7b8c31f;hp=d0e32816e7066b46e37731983979471c39976282;hpb=31502207bd8361a5fa27cb10ea037e4cca5a5678;p=friendica.git diff --git a/mod/poco.php b/mod/poco.php index d0e32816e7..acfa3ffaa9 100644 --- a/mod/poco.php +++ b/mod/poco.php @@ -1,13 +1,22 @@ argc > 1) { $user = notags(trim($a->argv[1])); } - if(! x($user) || get_config('system','block_public')) - http_status_exit(401); + if(! x($user)) { + $c = q("select * from pconfig where cat = 'system' and k = 'suggestme' and v = 1"); + if(! count($c)) + http_status_exit(401); + $system_mode = true; + } $format = (($_GET['format']) ? $_GET['format'] : 'json'); @@ -23,25 +32,35 @@ function poco_init(&$a) { $cid = intval($a->argv[4]); - $r = q("SELECT `user`.*,`profile`.`hide-friends` from user left join profile on `user`.`uid` = `profile`.`uid` - where `user`.`nickname` = '%s' and `profile`.`is-default` = 1 limit 1", - dbesc($user) - ); - if(! count($r) || $r[0]['hidewall'] || $r[0]['hide-friends']) - http_status_exit(404); + if(! $system_mode) { + $r = q("SELECT `user`.*,`profile`.`hide-friends` from user left join profile on `user`.`uid` = `profile`.`uid` + where `user`.`nickname` = '%s' and `profile`.`is-default` = 1 limit 1", + dbesc($user) + ); + if(! count($r) || $r[0]['hidewall'] || $r[0]['hide-friends']) + http_status_exit(404); - $user = $r[0]; + $user = $r[0]; + } if($justme) $sql_extra = " and `contact`.`self` = 1 "; + else + $sql_extra = " and `contact`.`self` = 0 "; if($cid) $sql_extra = sprintf(" and `contact`.`id` = %d ",intval($cid)); - $r = q("SELECT count(*) as `total` from `contact` where `uid` = %d and blocked = 0 and pending = 0 - $sql_extra ", - intval($user['uid']) - ); + if($system_mode) { + $r = q("SELECT count(*) as `total` from `contact` where self = 1 + and uid in (select uid from pconfig where cat = 'system' and k = 'suggestme' and v = 1) "); + } + else { + $r = q("SELECT count(*) as `total` from `contact` where `uid` = %d and blocked = 0 and pending = 0 and hidden = 0 + $sql_extra ", + intval($user['uid']) + ); + } if(count($r)) $totalResults = intval($r[0]['total']); else @@ -52,13 +71,23 @@ function poco_init(&$a) { $startIndex = 0; $itemsPerPage = ((x($_GET,'count') && intval($_GET['count'])) ? intval($_GET['count']) : $totalResults); - $r = q("SELECT * from `contact` where `uid` = %d and blocked = 0 and pending = 0 - $sql_extra LIMIT %d, %d", - intval($user['uid']), - intval($startIndex), - intval($itemsPerPage) - ); + if($system_mode) { + $r = q("SELECT * from contact where self = 1 + and uid in (select uid from pconfig where cat = 'system' and k = 'suggestme' and v = 1) limit %d, %d ", + intval($startIndex), + intval($itemsPerPage) + ); + } + else { + + $r = q("SELECT * from `contact` where `uid` = %d and blocked = 0 and pending = 0 and hidden = 0 + $sql_extra LIMIT %d, %d", + intval($user['uid']), + intval($startIndex), + intval($itemsPerPage) + ); + } $ret = array(); if(x($_GET,'sorted')) $ret['sorted'] = 'false'; @@ -67,9 +96,9 @@ function poco_init(&$a) { if(x($_GET,'updatedSince')) $ret['updateSince'] = 'false'; - $ret['startIndex'] = $startIndex; - $ret['itemsPerPage'] = $itemsPerPage; - $ret['totalResults'] = $totalResults; + $ret['startIndex'] = (string) $startIndex; + $ret['itemsPerPage'] = (string) $itemsPerPage; + $ret['totalResults'] = (string) $totalResults; $ret['entry'] = array(); @@ -77,13 +106,13 @@ function poco_init(&$a) { 'id' => false, 'displayName' => false, 'urls' => false, - 'preferredName' => false, + 'preferredUsername' => false, 'photos' => false ); if((! x($_GET,'fields')) || ($_GET['fields'] === '@all')) - foreach($fields_ret as $f) - $f = true; + foreach($fields_ret as $k => $v) + $fields_ret[$k] = true; else { $fields_req = explode(',',$_GET['fields']); foreach($fields_req as $f) @@ -98,12 +127,15 @@ function poco_init(&$a) { $entry['id'] = $rr['id']; if($fields_ret['displayName']) $entry['displayName'] = $rr['name']; - if($fields_ret['urls']) - $entry['urls'] = array('value' => $rr['url'], 'type' => 'profile'); + if($fields_ret['urls']) { + $entry['urls'] = array(array('value' => $rr['url'], 'type' => 'profile')); + if($rr['addr'] && ($rr['network'] !== NETWORK_MAIL)) + $entry['urls'][] = array('value' => 'acct:' . $rr['addr'], 'type' => 'webfinger'); + } if($fields_ret['preferredUsername']) $entry['preferredUsername'] = $rr['nick']; if($fields_ret['photos']) - $entry['photos'] = array('value' => $rr['photo'], 'type' => 'profile'); + $entry['photos'] = array(array('value' => $rr['photo'], 'type' => 'profile')); $ret['entry'][] = $entry; } } @@ -115,9 +147,8 @@ function poco_init(&$a) { if($format === 'xml') { header('Content-type: text/xml'); - echo replace_macros(get_markup_template('poco.xml',array('response' => $ret))); + echo replace_macros(get_markup_template('poco_xml.tpl'),array_xmlify(array('$response' => $ret))); http_status_exit(500); - } if($format === 'json') { header('Content-type: application/json');