예제 #1
0
파일: api.php 프로젝트: msooon/hubzilla
/**
 *  load api $templatename for $type and replace $data array
 */
function api_apply_template($templatename, $type, $data)
{
    $a = get_app();
    switch ($type) {
        case "atom":
        case "rss":
        case "xml":
            $data = array_xmlify($data);
            $tpl = get_markup_template("api_" . $templatename . "_" . $type . ".tpl");
            $ret = replace_macros($tpl, $data);
            break;
        case "json":
            $ret = $data;
            break;
    }
    return $ret;
}
예제 #2
0
/**
 *  load api $templatename for $type and replace $data array
 */
function api_apply_template($templatename, $type, $data)
{
    $a = get_app();
    switch ($type) {
        case "atom":
        case "rss":
        case "xml":
            $data = array_xmlify($data);
            $tpl = get_markup_template("api_" . $templatename . "_" . $type . ".tpl");
            if (!$tpl) {
                header("Content-Type: text/xml");
                echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<status><error>not implemented</error></status>';
                killme();
            }
            $ret = replace_macros($tpl, $data);
            break;
        case "json":
            $ret = $data;
            break;
    }
    return $ret;
}
예제 #3
0
function poco_init(&$a)
{
    $system_mode = false;
    if (intval(get_config('system', 'block_public'))) {
        http_status_exit(401);
    }
    if ($a->argc > 1) {
        $user = notags(trim($a->argv[1]));
    }
    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';
    $justme = false;
    if ($a->argc > 2 && $a->argv[2] === '@me') {
        $justme = true;
    }
    if ($a->argc > 3 && $a->argv[3] === '@all') {
        $justme = false;
    }
    if ($a->argc > 3 && $a->argv[3] === '@self') {
        $justme = true;
    }
    if ($a->argc > 4 && intval($a->argv[4]) && $justme == false) {
        $cid = intval($a->argv[4]);
    }
    if (!$system_mode) {
        $r = q("SELECT `user`.*,`profile`.`hide-friends` from user left join profile on `user`.`uid` = `profile`.`uid`\n\t\t\twhere `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];
    }
    if ($justme) {
        $sql_extra = " and `contact`.`self` = 1 ";
    }
    if ($cid) {
        $sql_extra = sprintf(" and `contact`.`id` = %d ", intval($cid));
    }
    if ($system_mode) {
        $r = q("SELECT count(*) as `total` from `contact` where self = 1 \n\t\t\tand 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\n\t\t\t{$sql_extra} ", intval($user['uid']));
    }
    if (count($r)) {
        $totalResults = intval($r[0]['total']);
    } else {
        $totalResults = 0;
    }
    $startIndex = intval($_GET['startIndex']);
    if (!$startIndex) {
        $startIndex = 0;
    }
    $itemsPerPage = x($_GET, 'count') && intval($_GET['count']) ? intval($_GET['count']) : $totalResults;
    if ($system_mode) {
        $r = q("SELECT * from contact where self = 1 \n\t\t\tand 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\n\t\t\t{$sql_extra} LIMIT %d, %d", intval($user['uid']), intval($startIndex), intval($itemsPerPage));
    }
    $ret = array();
    if (x($_GET, 'sorted')) {
        $ret['sorted'] = 'false';
    }
    if (x($_GET, 'filtered')) {
        $ret['filtered'] = 'false';
    }
    if (x($_GET, 'updatedSince')) {
        $ret['updateSince'] = 'false';
    }
    $ret['startIndex'] = (string) $startIndex;
    $ret['itemsPerPage'] = (string) $itemsPerPage;
    $ret['totalResults'] = (string) $totalResults;
    $ret['entry'] = array();
    $fields_ret = array('id' => false, 'displayName' => false, 'urls' => false, 'preferredUsername' => false, 'photos' => false);
    if (!x($_GET, 'fields') || $_GET['fields'] === '@all') {
        foreach ($fields_ret as $k => $v) {
            $fields_ret[$k] = true;
        }
    } else {
        $fields_req = explode(',', $_GET['fields']);
        foreach ($fields_req as $f) {
            $fields_ret[trim($f)] = true;
        }
    }
    if (is_array($r)) {
        if (count($r)) {
            foreach ($r as $rr) {
                $entry = array();
                if ($fields_ret['id']) {
                    $entry['id'] = $rr['id'];
                }
                if ($fields_ret['displayName']) {
                    $entry['displayName'] = $rr['name'];
                }
                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(array('value' => $rr['photo'], 'type' => 'profile'));
                }
                $ret['entry'][] = $entry;
            }
        } else {
            $ret['entry'][] = array();
        }
    } else {
        http_status_exit(500);
    }
    if ($format === 'xml') {
        header('Content-type: text/xml');
        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');
        echo json_encode($ret);
        killme();
    } else {
        http_status_exit(500);
    }
}
예제 #4
0
function poco($a, $extended = false)
{
    $system_mode = false;
    if (observer_prohibited()) {
        logger('mod_poco: block_public');
        http_status_exit(401);
    }
    $observer = App::get_observer();
    if (argc() > 1) {
        $user = notags(trim(argv(1)));
    }
    if (!x($user)) {
        $c = q("select * from pconfig where cat = 'system' and k = 'suggestme' and v = '1'");
        if (!$c) {
            logger('mod_poco: system mode. No candidates.', LOGGER_DEBUG);
            http_status_exit(404);
        }
        $system_mode = true;
    }
    $format = $_REQUEST['format'] ? $_REQUEST['format'] : 'json';
    $justme = false;
    if (argc() > 2 && argv(2) === '@me') {
        $justme = true;
    }
    if (argc() > 3) {
        if (argv(3) === '@all') {
            $justme = false;
        } elseif (argv(3) === '@self') {
            $justme = true;
        }
    }
    if (argc() > 4 && intval(argv(4)) && $justme == false) {
        $cid = intval(argv(4));
    }
    if (!$system_mode) {
        $r = q("SELECT channel_id from channel where channel_address = '%s' limit 1", dbesc($user));
        if (!$r) {
            logger('mod_poco: user mode. Account not found. ' . $user);
            http_status_exit(404);
        }
        $channel_id = $r[0]['channel_id'];
        $ohash = $observer ? $observer['xchan_hash'] : '';
        if (!perm_is_allowed($channel_id, $ohash, 'view_contacts')) {
            logger('mod_poco: user mode. Permission denied for ' . $ohash . ' user: '******'system' and k = 'suggestme' and v = '1') ");
    } else {
        $r = q("SELECT count(*) as `total` from abook where abook_channel = %d \n\t\t\t{$sql_extra} ", intval($channel_id));
        $rooms = q("select * from menu_item where ( mitem_flags & " . intval(MENU_ITEM_CHATROOM) . " )>0 and allow_cid = '' and allow_gid = '' and deny_cid = '' and deny_gid = '' and mitem_channel_id = %d", intval($channel_id));
    }
    if ($r) {
        $totalResults = intval($r[0]['total']);
    } else {
        $totalResults = 0;
    }
    $startIndex = intval($_GET['startIndex']);
    if (!$startIndex) {
        $startIndex = 0;
    }
    $itemsPerPage = x($_GET, 'count') && intval($_GET['count']) ? intval($_GET['count']) : $totalResults;
    if ($system_mode) {
        $r = q("SELECT abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_hash where abook_self = 1 \n\t\t\tand abook_channel in (select uid from pconfig where cat = 'system' and k = 'suggestme' and v = '1') \n\t\t\tlimit %d offset %d ", intval($itemsPerPage), intval($startIndex));
    } else {
        $r = q("SELECT abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d \n\t\t\t{$sql_extra} LIMIT %d OFFSET %d", intval($channel_id), intval($itemsPerPage), intval($startIndex));
    }
    $ret = array();
    if (x($_GET, 'sorted')) {
        $ret['sorted'] = 'false';
    }
    if (x($_GET, 'filtered')) {
        $ret['filtered'] = 'false';
    }
    if (x($_GET, 'updatedSince')) {
        $ret['updateSince'] = 'false';
    }
    $ret['startIndex'] = (string) $startIndex;
    $ret['itemsPerPage'] = (string) $itemsPerPage;
    $ret['totalResults'] = (string) $totalResults;
    if ($rooms) {
        $ret['chatrooms'] = array();
        foreach ($rooms as $room) {
            $ret['chatrooms'][] = array('url' => $room['mitem_link'], 'desc' => $room['mitem_desc']);
        }
    }
    $ret['entry'] = array();
    $fields_ret = array('id' => false, 'guid' => false, 'guid_sig' => false, 'hash' => false, 'displayName' => false, 'urls' => false, 'preferredUsername' => false, 'photos' => false, 'rating' => false);
    if (!x($_GET, 'fields') || $_GET['fields'] === '@all') {
        foreach ($fields_ret as $k => $v) {
            $fields_ret[$k] = true;
        }
    } else {
        $fields_req = explode(',', $_GET['fields']);
        foreach ($fields_req as $f) {
            $fields_ret[trim($f)] = true;
        }
    }
    if (is_array($r)) {
        if (count($r)) {
            foreach ($r as $rr) {
                $entry = array();
                if ($fields_ret['id']) {
                    $entry['id'] = $rr['abook_id'];
                }
                if ($fields_ret['guid']) {
                    $entry['guid'] = $rr['xchan_guid'];
                }
                if ($fields_ret['guid_sig']) {
                    $entry['guid_sig'] = $rr['xchan_guid_sig'];
                }
                if ($fields_ret['hash']) {
                    $entry['hash'] = $rr['xchan_hash'];
                }
                if ($fields_ret['displayName']) {
                    $entry['displayName'] = $rr['xchan_name'];
                }
                if ($fields_ret['urls']) {
                    $entry['urls'] = array(array('value' => $rr['xchan_url'], 'type' => 'profile'));
                    $network = $rr['xchan_network'];
                    if (strpos($network, 'friendica') !== false) {
                        $network = 'friendica';
                    }
                    if ($rr['xchan_addr']) {
                        $entry['urls'][] = array('value' => 'acct:' . $rr['xchan_addr'], 'type' => $network);
                    }
                }
                if ($fields_ret['preferredUsername']) {
                    $entry['preferredUsername'] = substr($rr['xchan_addr'], 0, strpos($rr['xchan_addr'], '@'));
                }
                if ($fields_ret['photos']) {
                    $entry['photos'] = array(array('value' => $rr['xchan_photo_l'], 'mimetype' => $rr['xchan_photo_mimetype'], 'type' => 'profile'));
                }
                $ret['entry'][] = $entry;
            }
        } else {
            $ret['entry'][] = array();
        }
    } else {
        http_status_exit(500);
    }
    if ($format === 'xml') {
        header('Content-type: text/xml');
        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');
        echo json_encode($ret);
        killme();
    } else {
        http_status_exit(500);
    }
}
예제 #5
0
function poco_init(&$a)
{
    require_once "include/bbcode.php";
    $system_mode = false;
    if (intval(get_config('system', 'block_public')) || get_config('system', 'block_local_dir')) {
        http_status_exit(401);
    }
    if ($a->argc > 1) {
        $user = notags(trim($a->argv[1]));
    }
    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';
    $justme = false;
    $global = false;
    if ($a->argc > 1 && $a->argv[1] === '@global') {
        $global = true;
        $update_limit = date("Y-m-d H:i:s", time() - 30 * 86400);
    }
    if ($a->argc > 2 && $a->argv[2] === '@me') {
        $justme = true;
    }
    if ($a->argc > 3 && $a->argv[3] === '@all') {
        $justme = false;
    }
    if ($a->argc > 3 && $a->argv[3] === '@self') {
        $justme = true;
    }
    if ($a->argc > 4 && intval($a->argv[4]) && $justme == false) {
        $cid = intval($a->argv[4]);
    }
    if (!$system_mode and !$global) {
        $r = q("SELECT `user`.*,`profile`.`hide-friends` from user left join profile on `user`.`uid` = `profile`.`uid`\n\t\t\twhere `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];
    }
    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));
    }
    if (x($_GET, 'updatedSince')) {
        $update_limit = date("Y-m-d H:i:s", strtotime($_GET['updatedSince']));
    }
    if ($global) {
        //$r = q("SELECT count(*) AS `total` FROM `gcontact` WHERE `updated` >= '%s' AND ((`last_contact` >= `last_failure`) OR (`updated` >= `last_failure`))  AND `network` IN ('%s')",
        $r = q("SELECT count(*) AS `total` FROM `gcontact` WHERE `updated` >= '%s' AND `updated` >= `last_failure`  AND `network` IN ('%s', '%s', '%s')", dbesc($update_limit), dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS));
    } elseif ($system_mode) {
        $r = q("SELECT count(*) AS `total` FROM `contact` WHERE `self` = 1 AND `network` IN ('%s', '%s', '%s', '%s')\n\t\t\tAND (`success_update` >= `failure_update` OR `last-item` >= `failure_update`)\n\t\t\tAND `uid` IN (SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1) ", dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET));
    } else {
        $r = q("SELECT count(*) AS `total` FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0\n\t\t\tAND (`success_update` >= `failure_update` OR `last-item` >= `failure_update`)\n\t\t\tAND `network` IN ('%s', '%s', '%s', '%s') {$sql_extra}", intval($user['uid']), dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET));
    }
    if (count($r)) {
        $totalResults = intval($r[0]['total']);
    } else {
        $totalResults = 0;
    }
    $startIndex = intval($_GET['startIndex']);
    if (!$startIndex) {
        $startIndex = 0;
    }
    $itemsPerPage = x($_GET, 'count') && intval($_GET['count']) ? intval($_GET['count']) : $totalResults;
    if ($global) {
        logger("Start global query", LOGGER_DEBUG);
        //$r = q("SELECT * FROM `gcontact` WHERE `updated` > '%s' AND `network` IN ('%s') AND ((`last_contact` >= `last_failure`) OR (`updated` > `last_failure`)) LIMIT %d, %d",
        $r = q("SELECT * FROM `gcontact` WHERE `updated` > '%s' AND `network` IN ('%s', '%s', '%s') AND `updated` > `last_failure`\n\t\t\tORDER BY `updated` DESC LIMIT %d, %d", dbesc($update_limit), dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS), intval($startIndex), intval($itemsPerPage));
    } elseif ($system_mode) {
        logger("Start system mode query", LOGGER_DEBUG);
        $r = q("SELECT `contact`.*, `profile`.`about` AS `pabout`, `profile`.`locality` AS `plocation`, `profile`.`pub_keywords`, `profile`.`gender` AS `pgender`,\n\t\t\t`profile`.`address` AS `paddress`, `profile`.`region` AS `pregion`, `profile`.`postal-code` AS `ppostalcode`, `profile`.`country-name` AS `pcountry`\n\t\t\tFROM `contact` INNER JOIN `profile` ON `profile`.`uid` = `contact`.`uid`\n\t\t\tWHERE `self` = 1 AND `network` IN ('%s', '%s', '%s', '%s') AND `profile`.`is-default`\n\t\t\tAND ((`contact`.`success_update` >= `contact`.`failure_update`) OR (`contact`.`last-item` >= `contact`.`failure_update`))\n\t\t\tAND `contact`.`uid` IN (SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1) LIMIT %d, %d", dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET), intval($startIndex), intval($itemsPerPage));
    } else {
        logger("Start query for user " . $user['nickname'], LOGGER_DEBUG);
        $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0\n\t\t\tAND (`success_update` >= `failure_update` OR `last-item` >= `failure_update`)\n\t\t\tAND `network` IN ('%s', '%s', '%s', '%s') {$sql_extra} LIMIT %d, %d", intval($user['uid']), dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET), intval($startIndex), intval($itemsPerPage));
    }
    logger("Query done", LOGGER_DEBUG);
    $ret = array();
    if (x($_GET, 'sorted')) {
        $ret['sorted'] = false;
    }
    if (x($_GET, 'filtered')) {
        $ret['filtered'] = false;
    }
    if (x($_GET, 'updatedSince') and !$global) {
        $ret['updatedSince'] = false;
    }
    $ret['startIndex'] = (int) $startIndex;
    $ret['itemsPerPage'] = (int) $itemsPerPage;
    $ret['totalResults'] = (int) $totalResults;
    $ret['entry'] = array();
    $fields_ret = array('id' => false, 'displayName' => false, 'urls' => false, 'updated' => false, 'preferredUsername' => false, 'photos' => false, 'aboutMe' => false, 'currentLocation' => false, 'network' => false, 'gender' => false, 'tags' => false, 'address' => false, 'generation' => false);
    if (!x($_GET, 'fields') || $_GET['fields'] === '@all') {
        foreach ($fields_ret as $k => $v) {
            $fields_ret[$k] = true;
        }
    } else {
        $fields_req = explode(',', $_GET['fields']);
        foreach ($fields_req as $f) {
            $fields_ret[trim($f)] = true;
        }
    }
    if (is_array($r)) {
        if (count($r)) {
            foreach ($r as $rr) {
                if (!isset($rr['generation'])) {
                    if ($global) {
                        $rr['generation'] = 3;
                    } elseif ($system_mode) {
                        $rr['generation'] = 1;
                    } else {
                        $rr['generation'] = 2;
                    }
                }
                if ($rr['about'] == "" and isset($rr['pabout'])) {
                    $rr['about'] = $rr['pabout'];
                }
                if ($rr['location'] == "") {
                    if (isset($rr['plocation'])) {
                        $rr['location'] = $rr['plocation'];
                    }
                    if (isset($rr['pregion']) and $rr['pregion'] != "") {
                        if ($rr['location'] != "") {
                            $rr['location'] .= ", ";
                        }
                        $rr['location'] .= $rr['pregion'];
                    }
                    if (isset($rr['pcountry']) and $rr['pcountry'] != "") {
                        if ($rr['location'] != "") {
                            $rr['location'] .= ", ";
                        }
                        $rr['location'] .= $rr['pcountry'];
                    }
                }
                if ($rr['gender'] == "" and isset($rr['pgender'])) {
                    $rr['gender'] = $rr['pgender'];
                }
                if ($rr['keywords'] == "" and isset($rr['pub_keywords'])) {
                    $rr['keywords'] = $rr['pub_keywords'];
                }
                $about = Cache::get("about:" . $rr['updated'] . ":" . $rr['nurl']);
                if (is_null($about)) {
                    $about = bbcode($rr['about'], false, false);
                    Cache::set("about:" . $rr['updated'] . ":" . $rr['nurl'], $about);
                }
                $entry = array();
                if ($fields_ret['id']) {
                    $entry['id'] = (int) $rr['id'];
                }
                if ($fields_ret['displayName']) {
                    $entry['displayName'] = $rr['name'];
                }
                if ($fields_ret['aboutMe']) {
                    $entry['aboutMe'] = $about;
                }
                if ($fields_ret['currentLocation']) {
                    $entry['currentLocation'] = $rr['location'];
                }
                if ($fields_ret['gender']) {
                    $entry['gender'] = $rr['gender'];
                }
                if ($fields_ret['generation']) {
                    $entry['generation'] = (int) $rr['generation'];
                }
                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['updated']) {
                    if (!$global) {
                        $entry['updated'] = $rr['success_update'];
                        if ($rr['name-date'] > $entry['updated']) {
                            $entry['updated'] = $rr['name-date'];
                        }
                        if ($rr['uri-date'] > $entry['updated']) {
                            $entry['updated'] = $rr['uri-date'];
                        }
                        if ($rr['avatar-date'] > $entry['updated']) {
                            $entry['updated'] = $rr['avatar-date'];
                        }
                    } else {
                        $entry['updated'] = $rr['updated'];
                    }
                    $entry['updated'] = date("c", strtotime($entry['updated']));
                }
                if ($fields_ret['photos']) {
                    $entry['photos'] = array(array('value' => $rr['photo'], 'type' => 'profile'));
                }
                if ($fields_ret['network']) {
                    $entry['network'] = $rr['network'];
                    if ($entry['network'] == NETWORK_STATUSNET) {
                        $entry['network'] = NETWORK_OSTATUS;
                    }
                    if ($entry['network'] == "" and $rr['self']) {
                        $entry['network'] = NETWORK_DFRN;
                    }
                }
                if ($fields_ret['tags']) {
                    $tags = str_replace(",", " ", $rr['keywords']);
                    $tags = explode(" ", $tags);
                    $cleaned = array();
                    foreach ($tags as $tag) {
                        $tag = trim(strtolower($tag));
                        if ($tag != "") {
                            $cleaned[] = $tag;
                        }
                    }
                    $entry['tags'] = array($cleaned);
                }
                if ($fields_ret['address']) {
                    $entry['address'] = array();
                    // Deactivated. It just reveals too much data. (Although its from the default profile)
                    //if (isset($rr['paddress']))
                    //	 $entry['address']['streetAddress'] = $rr['paddress'];
                    if (isset($rr['plocation'])) {
                        $entry['address']['locality'] = $rr['plocation'];
                    }
                    if (isset($rr['pregion'])) {
                        $entry['address']['region'] = $rr['pregion'];
                    }
                    // See above
                    //if (isset($rr['ppostalcode']))
                    //	 $entry['address']['postalCode'] = $rr['ppostalcode'];
                    if (isset($rr['pcountry'])) {
                        $entry['address']['country'] = $rr['pcountry'];
                    }
                }
                $ret['entry'][] = $entry;
            }
        } else {
            $ret['entry'][] = array();
        }
    } else {
        http_status_exit(500);
    }
    logger("End of poco", LOGGER_DEBUG);
    if ($format === 'xml') {
        header('Content-type: text/xml');
        echo replace_macros(get_markup_template('poco_xml.tpl'), array_xmlify(array('$response' => $ret)));
        killme();
    }
    if ($format === 'json') {
        header('Content-type: application/json');
        echo json_encode($ret);
        killme();
    } else {
        http_status_exit(500);
    }
}