2011-10-27 05:09:03 +02:00
< ? php
2017-05-09 03:55:04 +02:00
2016-10-04 05:48:01 +02:00
// See here for a documentation for portable contacts:
// https://web.archive.org/web/20160405005550/http://portablecontacts.net/draft-spec.html
2011-10-27 05:09:03 +02:00
2018-01-27 03:38:34 +01:00
2017-04-30 06:07:00 +02:00
use Friendica\App ;
2018-02-15 03:33:55 +01:00
use Friendica\Content\Text\BBCode ;
2017-11-09 17:05:18 +01:00
use Friendica\Core\Cache ;
2017-05-09 05:03:52 +02:00
use Friendica\Core\Config ;
2018-10-29 22:20:46 +01:00
use Friendica\Core\Logger ;
2018-08-11 22:40:44 +02:00
use Friendica\Core\Protocol ;
2018-10-31 15:35:50 +01:00
use Friendica\Core\Renderer ;
2018-01-27 17:59:10 +01:00
use Friendica\Core\System ;
2018-07-21 14:40:21 +02:00
use Friendica\Database\DBA ;
2020-01-07 00:41:20 +01:00
use Friendica\DI ;
2017-11-15 16:53:16 +01:00
use Friendica\Protocol\PortableContact ;
2018-01-27 03:38:34 +01:00
use Friendica\Util\DateTimeFormat ;
2018-11-08 16:14:37 +01:00
use Friendica\Util\Strings ;
2018-11-05 13:40:18 +01:00
use Friendica\Util\XML ;
2017-04-30 06:07:00 +02:00
2017-01-09 13:14:25 +01:00
function poco_init ( App $a ) {
2011-11-29 00:11:59 +01:00
$system_mode = false ;
2017-05-09 05:03:52 +02:00
if ( intval ( Config :: get ( 'system' , 'block_public' )) || ( Config :: get ( 'system' , 'block_local_dir' ))) {
2019-05-02 05:16:10 +02:00
throw new \Friendica\Network\HTTPException\ForbiddenException ();
2017-03-13 17:18:45 +01:00
}
2011-11-29 00:11:59 +01:00
2017-03-13 17:18:45 +01:00
if ( $a -> argc > 1 ) {
2019-01-07 18:51:48 +01:00
$nickname = Strings :: escapeTags ( trim ( $a -> argv [ 1 ]));
2011-10-27 05:09:03 +02:00
}
2019-01-07 18:51:48 +01:00
if ( empty ( $nickname )) {
2015-01-05 22:44:55 +01:00
$c = q ( " SELECT * FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1 " );
2018-07-21 14:46:04 +02:00
if ( ! DBA :: isResult ( $c )) {
2019-05-02 05:16:10 +02:00
throw new \Friendica\Network\HTTPException\ForbiddenException ();
2016-12-20 15:37:27 +01:00
}
2011-11-29 00:11:59 +01:00
$system_mode = true ;
}
2011-10-27 09:57:19 +02:00
2019-10-15 15:01:17 +02:00
$format = ( $_GET [ 'format' ] ? ? '' ) ? : 'json' ;
2011-10-27 05:09:03 +02:00
$justme = false ;
2015-01-27 08:01:37 +01:00
$global = false ;
2011-10-27 05:09:03 +02:00
2017-03-13 15:57:11 +01:00
if ( $a -> argc > 1 && $a -> argv [ 1 ] === '@server' ) {
// List of all servers that this server knows
2017-11-15 16:53:16 +01:00
$ret = PortableContact :: serverlist ();
2017-03-04 12:04:00 +01:00
header ( 'Content-type: application/json' );
echo json_encode ( $ret );
2018-12-26 06:40:12 +01:00
exit ();
2017-03-04 12:04:00 +01:00
}
2017-01-26 15:23:30 +01:00
2017-03-13 15:57:11 +01:00
if ( $a -> argc > 1 && $a -> argv [ 1 ] === '@global' ) {
2018-05-13 10:06:43 +02:00
// List of all profiles that this server recently had data from
2015-01-27 08:01:37 +01:00
$global = true ;
2018-01-27 03:38:34 +01:00
$update_limit = date ( DateTimeFormat :: MYSQL , time () - 30 * 86400 );
2015-01-27 08:01:37 +01:00
}
2017-03-13 15:57:11 +01:00
if ( $a -> argc > 2 && $a -> argv [ 2 ] === '@me' ) {
2011-10-27 05:09:03 +02:00
$justme = true ;
2017-03-13 15:57:11 +01:00
}
if ( $a -> argc > 3 && $a -> argv [ 3 ] === '@all' ) {
2011-10-27 05:09:03 +02:00
$justme = false ;
2017-03-13 15:57:11 +01:00
}
if ( $a -> argc > 3 && $a -> argv [ 3 ] === '@self' ) {
2011-10-27 05:09:03 +02:00
$justme = true ;
2017-03-13 15:57:11 +01:00
}
2017-03-13 17:18:45 +01:00
if ( $a -> argc > 4 && intval ( $a -> argv [ 4 ]) && $justme == false ) {
2011-10-27 05:09:03 +02:00
$cid = intval ( $a -> argv [ 4 ]);
2017-03-13 15:57:11 +01:00
}
2011-10-27 05:09:03 +02:00
2017-06-08 04:00:59 +02:00
if ( ! $system_mode && ! $global ) {
2017-05-09 05:03:52 +02:00
$users = q ( " SELECT `user`.*,`profile`.`hide-friends` from user left join profile on `user`.`uid` = `profile`.`uid`
2011-11-29 00:11:59 +01:00
where `user` . `nickname` = '%s' and `profile` . `is-default` = 1 limit 1 " ,
2019-01-07 18:51:48 +01:00
DBA :: escape ( $nickname )
2011-11-29 00:11:59 +01:00
);
2018-07-21 14:46:04 +02:00
if ( ! DBA :: isResult ( $users ) || $users [ 0 ][ 'hidewall' ] || $users [ 0 ][ 'hide-friends' ]) {
2019-05-02 05:16:10 +02:00
throw new \Friendica\Network\HTTPException\NotFoundException ();
2017-03-13 17:18:45 +01:00
}
2011-10-27 05:09:03 +02:00
2017-05-09 05:03:52 +02:00
$user = $users [ 0 ];
2011-11-29 00:11:59 +01:00
}
2011-10-27 05:09:03 +02:00
2017-03-13 17:18:45 +01:00
if ( $justme ) {
2015-01-05 22:44:55 +01:00
$sql_extra = " AND `contact`.`self` = 1 " ;
2018-07-08 14:58:43 +02:00
} else {
$sql_extra = " " ;
2017-03-13 17:18:45 +01:00
}
2011-10-27 05:09:03 +02:00
2018-07-08 14:58:43 +02:00
if ( ! empty ( $cid )) {
2017-05-09 03:55:04 +02:00
$sql_extra = sprintf ( " AND `contact`.`id` = %d " , intval ( $cid ));
2017-03-13 17:18:45 +01:00
}
2018-11-30 15:06:22 +01:00
if ( ! empty ( $_GET [ 'updatedSince' ])) {
2018-01-27 03:38:34 +01:00
$update_limit = date ( DateTimeFormat :: MYSQL , strtotime ( $_GET [ 'updatedSince' ]));
2017-03-13 17:18:45 +01:00
}
2015-01-27 08:01:37 +01:00
if ( $global ) {
2017-05-09 03:55:04 +02:00
$contacts = q ( " SELECT count(*) AS `total` FROM `gcontact` WHERE `updated` >= '%s' AND `updated` >= `last_failure` AND NOT `hide` AND `network` IN ('%s', '%s', '%s') " ,
2018-07-21 15:10:13 +02:00
DBA :: escape ( $update_limit ),
2018-08-11 22:40:44 +02:00
DBA :: escape ( Protocol :: DFRN ),
DBA :: escape ( Protocol :: DIASPORA ),
DBA :: escape ( Protocol :: OSTATUS )
2015-01-27 08:01:37 +01:00
);
2017-03-13 17:18:45 +01:00
} elseif ( $system_mode ) {
2017-05-09 03:55:04 +02:00
$contacts = q ( " SELECT count(*) AS `total` FROM `contact` WHERE `self` = 1
2015-10-31 10:32:01 +01:00
AND `uid` IN ( SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1 ) " );
2015-01-27 08:01:37 +01:00
} else {
2017-05-09 03:55:04 +02:00
$contacts = q ( " SELECT count(*) AS `total` FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0
2015-07-25 10:50:00 +02:00
AND ( `success_update` >= `failure_update` OR `last-item` >= `failure_update` )
AND `network` IN ( '%s' , '%s' , '%s' , '%s' ) $sql_extra " ,
2015-01-05 22:44:55 +01:00
intval ( $user [ 'uid' ]),
2018-08-11 22:40:44 +02:00
DBA :: escape ( Protocol :: DFRN ),
DBA :: escape ( Protocol :: DIASPORA ),
DBA :: escape ( Protocol :: OSTATUS ),
DBA :: escape ( Protocol :: STATUSNET )
2011-11-29 00:11:59 +01:00
);
}
2018-07-21 14:46:04 +02:00
if ( DBA :: isResult ( $contacts )) {
2017-05-09 03:55:04 +02:00
$totalResults = intval ( $contacts [ 0 ][ 'total' ]);
2017-03-13 17:18:45 +01:00
} else {
2011-10-27 05:09:03 +02:00
$totalResults = 0 ;
2017-03-13 17:18:45 +01:00
}
2018-07-08 14:58:43 +02:00
if ( ! empty ( $_GET [ 'startIndex' ])) {
$startIndex = intval ( $_GET [ 'startIndex' ]);
} else {
2011-10-27 05:09:03 +02:00
$startIndex = 0 ;
2017-03-13 17:18:45 +01:00
}
2018-11-30 15:06:22 +01:00
$itemsPerPage = (( ! empty ( $_GET [ 'count' ])) ? intval ( $_GET [ 'count' ]) : $totalResults );
2011-10-27 05:09:03 +02:00
2015-01-27 08:01:37 +01:00
if ( $global ) {
2018-10-30 14:58:45 +01:00
Logger :: log ( " Start global query " , Logger :: DEBUG );
2017-05-09 03:55:04 +02:00
$contacts = q ( " SELECT * FROM `gcontact` WHERE `updated` > '%s' AND NOT `hide` AND `network` IN ('%s', '%s', '%s') AND `updated` > `last_failure`
2015-07-25 12:05:27 +02:00
ORDER BY `updated` DESC LIMIT % d , % d " ,
2018-07-21 15:10:13 +02:00
DBA :: escape ( $update_limit ),
2018-08-11 22:40:44 +02:00
DBA :: escape ( Protocol :: DFRN ),
DBA :: escape ( Protocol :: DIASPORA ),
DBA :: escape ( Protocol :: OSTATUS ),
2015-01-27 08:01:37 +01:00
intval ( $startIndex ),
intval ( $itemsPerPage )
);
2017-03-13 17:18:45 +01:00
} elseif ( $system_mode ) {
2018-10-30 14:58:45 +01:00
Logger :: log ( " Start system mode query " , Logger :: DEBUG );
2017-05-09 03:55:04 +02:00
$contacts = q ( " SELECT `contact`.*, `profile`.`about` AS `pabout`, `profile`.`locality` AS `plocation`, `profile`.`pub_keywords`,
2016-10-04 05:48:01 +02:00
`profile` . `gender` AS `pgender` , `profile` . `address` AS `paddress` , `profile` . `region` AS `pregion` ,
`profile` . `postal-code` AS `ppostalcode` , `profile` . `country-name` AS `pcountry` , `user` . `account-type`
2015-01-25 13:19:37 +01:00
FROM `contact` INNER JOIN `profile` ON `profile` . `uid` = `contact` . `uid`
2016-10-04 05:48:01 +02:00
INNER JOIN `user` ON `user` . `uid` = `contact` . `uid`
2015-10-31 10:32:01 +01:00
WHERE `self` = 1 AND `profile` . `is-default`
2015-01-25 00:19:59 +01:00
AND `contact` . `uid` IN ( SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1 ) LIMIT % d , % d " ,
2011-11-29 00:11:59 +01:00
intval ( $startIndex ),
intval ( $itemsPerPage )
);
2015-01-27 08:01:37 +01:00
} else {
2018-10-30 14:58:45 +01:00
Logger :: log ( " Start query for user " . $user [ 'nickname' ], Logger :: DEBUG );
2017-05-09 03:55:04 +02:00
$contacts = q ( " SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0
2015-07-25 10:50:00 +02:00
AND ( `success_update` >= `failure_update` OR `last-item` >= `failure_update` )
AND `network` IN ( '%s' , '%s' , '%s' , '%s' ) $sql_extra LIMIT % d , % d " ,
2011-11-29 00:11:59 +01:00
intval ( $user [ 'uid' ]),
2018-08-11 22:40:44 +02:00
DBA :: escape ( Protocol :: DFRN ),
DBA :: escape ( Protocol :: DIASPORA ),
DBA :: escape ( Protocol :: OSTATUS ),
DBA :: escape ( Protocol :: STATUSNET ),
2011-11-29 00:11:59 +01:00
intval ( $startIndex ),
intval ( $itemsPerPage )
);
}
2018-10-30 14:58:45 +01:00
Logger :: log ( " Query done " , Logger :: DEBUG );
2015-01-27 08:01:37 +01:00
2018-01-15 14:05:12 +01:00
$ret = [];
2018-11-30 15:06:22 +01:00
if ( ! empty ( $_GET [ 'sorted' ])) {
2015-01-27 08:01:37 +01:00
$ret [ 'sorted' ] = false ;
2017-03-13 17:18:45 +01:00
}
2018-11-30 15:06:22 +01:00
if ( ! empty ( $_GET [ 'filtered' ])) {
2015-01-27 08:01:37 +01:00
$ret [ 'filtered' ] = false ;
2017-03-13 17:18:45 +01:00
}
2018-11-30 15:06:22 +01:00
if ( ! empty ( $_GET [ 'updatedSince' ]) && ! $global ) {
2015-01-27 08:01:37 +01:00
$ret [ 'updatedSince' ] = false ;
2017-03-13 17:18:45 +01:00
}
2015-02-15 10:52:45 +01:00
$ret [ 'startIndex' ] = ( int ) $startIndex ;
$ret [ 'itemsPerPage' ] = ( int ) $itemsPerPage ;
$ret [ 'totalResults' ] = ( int ) $totalResults ;
2018-01-15 14:05:12 +01:00
$ret [ 'entry' ] = [];
2011-10-27 09:57:19 +02:00
2017-03-21 17:02:59 +01:00
2018-01-15 14:05:12 +01:00
$fields_ret = [
2017-03-21 17:02:59 +01:00
'id' => false ,
'displayName' => false ,
'urls' => false ,
'updated' => false ,
2011-10-27 13:38:33 +02:00
'preferredUsername' => false ,
2017-03-21 17:02:59 +01:00
'photos' => false ,
'aboutMe' => false ,
'currentLocation' => false ,
'network' => false ,
'gender' => false ,
'tags' => false ,
'address' => false ,
'contactType' => false ,
'generation' => false
2018-01-15 14:05:12 +01:00
];
2011-10-27 05:09:03 +02:00
2018-11-30 15:06:22 +01:00
if ( empty ( $_GET [ 'fields' ]) || ( $_GET [ 'fields' ] === '@all' )) {
2017-03-13 17:18:45 +01:00
foreach ( $fields_ret as $k => $v ) {
2011-10-27 10:54:52 +02:00
$fields_ret [ $k ] = true ;
2017-03-13 17:18:45 +01:00
}
} else {
2017-05-09 03:55:04 +02:00
$fields_req = explode ( ',' , $_GET [ 'fields' ]);
2017-03-13 17:18:45 +01:00
foreach ( $fields_req as $f ) {
2011-10-27 09:57:19 +02:00
$fields_ret [ trim ( $f )] = true ;
2017-03-13 17:18:45 +01:00
}
2011-10-27 09:57:19 +02:00
}
2017-05-09 03:55:04 +02:00
if ( is_array ( $contacts )) {
2018-07-21 14:46:04 +02:00
if ( DBA :: isResult ( $contacts )) {
2017-05-09 03:55:04 +02:00
foreach ( $contacts as $contact ) {
2018-07-08 14:58:43 +02:00
if ( ! isset ( $contact [ 'updated' ])) {
$contact [ 'updated' ] = '' ;
}
2017-05-09 03:55:04 +02:00
if ( ! isset ( $contact [ 'generation' ])) {
2017-03-13 17:18:45 +01:00
if ( $global ) {
2017-05-09 03:55:04 +02:00
$contact [ 'generation' ] = 3 ;
2017-03-13 17:18:45 +01:00
} elseif ( $system_mode ) {
2017-05-09 03:55:04 +02:00
$contact [ 'generation' ] = 1 ;
2017-03-13 17:18:45 +01:00
} else {
2017-05-09 03:55:04 +02:00
$contact [ 'generation' ] = 2 ;
2017-03-13 17:18:45 +01:00
}
2015-02-15 10:52:45 +01:00
}
2017-06-08 04:00:59 +02:00
if (( $contact [ 'about' ] == " " ) && isset ( $contact [ 'pabout' ])) {
2017-05-09 03:55:04 +02:00
$contact [ 'about' ] = $contact [ 'pabout' ];
2017-03-13 17:18:45 +01:00
}
2017-05-09 03:55:04 +02:00
if ( $contact [ 'location' ] == " " ) {
if ( isset ( $contact [ 'plocation' ])) {
$contact [ 'location' ] = $contact [ 'plocation' ];
2017-03-13 17:18:45 +01:00
}
2017-06-08 04:00:59 +02:00
if ( isset ( $contact [ 'pregion' ]) && ( $contact [ 'pregion' ] != " " )) {
2017-05-09 03:55:04 +02:00
if ( $contact [ 'location' ] != " " ) {
$contact [ 'location' ] .= " , " ;
2017-03-13 17:18:45 +01:00
}
2017-05-09 03:55:04 +02:00
$contact [ 'location' ] .= $contact [ 'pregion' ];
2015-02-04 10:43:30 +01:00
}
2017-06-08 04:00:59 +02:00
if ( isset ( $contact [ 'pcountry' ]) && ( $contact [ 'pcountry' ] != " " )) {
2017-05-09 03:55:04 +02:00
if ( $contact [ 'location' ] != " " ) {
$contact [ 'location' ] .= " , " ;
2017-03-13 17:18:45 +01:00
}
2017-05-09 03:55:04 +02:00
$contact [ 'location' ] .= $contact [ 'pcountry' ];
2015-02-04 10:43:30 +01:00
}
}
2015-01-25 00:19:59 +01:00
2017-06-08 04:00:59 +02:00
if (( $contact [ 'gender' ] == " " ) && isset ( $contact [ 'pgender' ])) {
2017-05-09 03:55:04 +02:00
$contact [ 'gender' ] = $contact [ 'pgender' ];
2017-03-13 17:18:45 +01:00
}
2017-06-08 04:00:59 +02:00
if (( $contact [ 'keywords' ] == " " ) && isset ( $contact [ 'pub_keywords' ])) {
2017-05-09 03:55:04 +02:00
$contact [ 'keywords' ] = $contact [ 'pub_keywords' ];
2017-03-13 17:18:45 +01:00
}
2017-05-09 03:55:04 +02:00
if ( isset ( $contact [ 'account-type' ])) {
$contact [ 'contact-type' ] = $contact [ 'account-type' ];
2017-03-13 17:18:45 +01:00
}
2020-01-07 00:45:49 +01:00
$about = DI :: cache () -> get ( " about: " . $contact [ 'updated' ] . " : " . $contact [ 'nurl' ]);
2015-07-25 12:05:27 +02:00
if ( is_null ( $about )) {
2018-02-15 03:33:55 +01:00
$about = BBCode :: convert ( $contact [ 'about' ], false );
2020-01-07 00:41:20 +01:00
DI :: cache () -> set ( " about: " . $contact [ 'updated' ] . " : " . $contact [ 'nurl' ], $about );
2015-07-25 12:05:27 +02:00
}
2015-10-06 06:56:31 +02:00
// Non connected persons can only see the keywords of a Diaspora account
2018-08-11 22:40:44 +02:00
if ( $contact [ 'network' ] == Protocol :: DIASPORA ) {
2017-05-09 03:55:04 +02:00
$contact [ 'location' ] = " " ;
2015-10-06 06:56:31 +02:00
$about = " " ;
2017-05-09 03:55:04 +02:00
$contact [ 'gender' ] = " " ;
2015-10-06 06:56:31 +02:00
}
2018-01-15 14:05:12 +01:00
$entry = [];
2017-03-13 17:18:45 +01:00
if ( $fields_ret [ 'id' ]) {
2017-05-09 03:55:04 +02:00
$entry [ 'id' ] = ( int ) $contact [ 'id' ];
2017-03-13 17:18:45 +01:00
}
if ( $fields_ret [ 'displayName' ]) {
2017-05-09 03:55:04 +02:00
$entry [ 'displayName' ] = $contact [ 'name' ];
2017-03-13 17:18:45 +01:00
}
if ( $fields_ret [ 'aboutMe' ]) {
2015-07-25 12:05:27 +02:00
$entry [ 'aboutMe' ] = $about ;
2017-03-13 17:18:45 +01:00
}
if ( $fields_ret [ 'currentLocation' ]) {
2017-05-09 03:55:04 +02:00
$entry [ 'currentLocation' ] = $contact [ 'location' ];
2017-03-13 17:18:45 +01:00
}
if ( $fields_ret [ 'gender' ]) {
2017-05-09 03:55:04 +02:00
$entry [ 'gender' ] = $contact [ 'gender' ];
2017-03-13 17:18:45 +01:00
}
if ( $fields_ret [ 'generation' ]) {
2017-05-09 03:55:04 +02:00
$entry [ 'generation' ] = ( int ) $contact [ 'generation' ];
2017-03-13 17:18:45 +01:00
}
if ( $fields_ret [ 'urls' ]) {
2018-01-15 14:05:12 +01:00
$entry [ 'urls' ] = [[ 'value' => $contact [ 'url' ], 'type' => 'profile' ]];
2018-08-11 22:40:44 +02:00
if ( $contact [ 'addr' ] && ( $contact [ 'network' ] !== Protocol :: MAIL )) {
2018-01-15 14:05:12 +01:00
$entry [ 'urls' ][] = [ 'value' => 'acct:' . $contact [ 'addr' ], 'type' => 'webfinger' ];
2017-03-13 17:18:45 +01:00
}
2011-12-18 09:22:44 +01:00
}
2017-03-13 17:18:45 +01:00
if ( $fields_ret [ 'preferredUsername' ]) {
2017-05-09 03:55:04 +02:00
$entry [ 'preferredUsername' ] = $contact [ 'nick' ];
2017-03-13 17:18:45 +01:00
}
if ( $fields_ret [ 'updated' ]) {
2017-05-09 03:55:04 +02:00
if ( ! $global ) {
$entry [ 'updated' ] = $contact [ 'success_update' ];
2015-01-04 19:19:47 +01:00
2017-05-09 03:55:04 +02:00
if ( $contact [ 'name-date' ] > $entry [ 'updated' ]) {
$entry [ 'updated' ] = $contact [ 'name-date' ];
2017-03-13 17:18:45 +01:00
}
2017-05-09 03:55:04 +02:00
if ( $contact [ 'uri-date' ] > $entry [ 'updated' ]) {
$entry [ 'updated' ] = $contact [ 'uri-date' ];
2017-03-13 17:18:45 +01:00
}
2017-05-09 03:55:04 +02:00
if ( $contact [ 'avatar-date' ] > $entry [ 'updated' ]) {
$entry [ 'updated' ] = $contact [ 'avatar-date' ];
2017-03-13 17:18:45 +01:00
}
} else {
2017-05-09 03:55:04 +02:00
$entry [ 'updated' ] = $contact [ 'updated' ];
2017-03-13 17:18:45 +01:00
}
2015-01-04 19:19:47 +01:00
$entry [ 'updated' ] = date ( " c " , strtotime ( $entry [ 'updated' ]));
}
2017-03-13 17:18:45 +01:00
if ( $fields_ret [ 'photos' ]) {
2018-01-15 14:05:12 +01:00
$entry [ 'photos' ] = [[ 'value' => $contact [ 'photo' ], 'type' => 'profile' ]];
2017-03-13 17:18:45 +01:00
}
if ( $fields_ret [ 'network' ]) {
2017-05-09 03:55:04 +02:00
$entry [ 'network' ] = $contact [ 'network' ];
2018-08-11 22:40:44 +02:00
if ( $entry [ 'network' ] == Protocol :: STATUSNET ) {
$entry [ 'network' ] = Protocol :: OSTATUS ;
2017-03-13 17:18:45 +01:00
}
2017-06-08 04:00:59 +02:00
if (( $entry [ 'network' ] == " " ) && ( $contact [ 'self' ])) {
2018-08-11 22:40:44 +02:00
$entry [ 'network' ] = Protocol :: DFRN ;
2017-03-13 17:18:45 +01:00
}
2015-01-08 07:59:20 +01:00
}
2017-03-13 17:18:45 +01:00
if ( $fields_ret [ 'tags' ]) {
2017-05-09 03:55:04 +02:00
$tags = str_replace ( " , " , " " , $contact [ 'keywords' ]);
2015-01-25 13:19:37 +01:00
$tags = explode ( " " , $tags );
2018-01-15 14:05:12 +01:00
$cleaned = [];
2015-01-25 13:19:37 +01:00
foreach ( $tags as $tag ) {
$tag = trim ( strtolower ( $tag ));
2017-03-13 17:18:45 +01:00
if ( $tag != " " ) {
2015-01-25 13:19:37 +01:00
$cleaned [] = $tag ;
2017-03-13 17:18:45 +01:00
}
2015-01-25 13:19:37 +01:00
}
2018-01-15 14:05:12 +01:00
$entry [ 'tags' ] = [ $cleaned ];
2015-01-25 13:19:37 +01:00
}
2017-03-13 17:18:45 +01:00
if ( $fields_ret [ 'address' ]) {
2018-01-15 14:05:12 +01:00
$entry [ 'address' ] = [];
2015-02-04 10:43:30 +01:00
// Deactivated. It just reveals too much data. (Although its from the default profile)
//if (isset($rr['paddress']))
// $entry['address']['streetAddress'] = $rr['paddress'];
2017-05-09 03:55:04 +02:00
if ( isset ( $contact [ 'plocation' ])) {
$entry [ 'address' ][ 'locality' ] = $contact [ 'plocation' ];
2017-03-13 17:18:45 +01:00
}
2017-05-09 03:55:04 +02:00
if ( isset ( $contact [ 'pregion' ])) {
$entry [ 'address' ][ 'region' ] = $contact [ 'pregion' ];
2017-03-13 17:18:45 +01:00
}
2015-02-04 10:43:30 +01:00
// See above
//if (isset($rr['ppostalcode']))
// $entry['address']['postalCode'] = $rr['ppostalcode'];
2017-05-09 03:55:04 +02:00
if ( isset ( $contact [ 'pcountry' ])) {
$entry [ 'address' ][ 'country' ] = $contact [ 'pcountry' ];
2017-03-13 17:18:45 +01:00
}
2015-02-04 10:43:30 +01:00
}
2015-01-25 13:19:37 +01:00
2017-03-13 17:18:45 +01:00
if ( $fields_ret [ 'contactType' ]) {
2017-05-09 03:55:04 +02:00
$entry [ 'contactType' ] = intval ( $contact [ 'contact-type' ]);
2017-03-13 17:18:45 +01:00
}
2011-10-27 09:57:19 +02:00
$ret [ 'entry' ][] = $entry ;
}
2017-03-13 17:18:45 +01:00
} else {
2018-01-15 14:05:12 +01:00
$ret [ 'entry' ][] = [];
2017-03-13 17:18:45 +01:00
}
} else {
2019-05-02 05:16:10 +02:00
throw new \Friendica\Network\HTTPException\InternalServerErrorException ();
2017-03-13 17:18:45 +01:00
}
2019-05-02 05:16:10 +02:00
2018-10-30 14:58:45 +01:00
Logger :: log ( " End of poco " , Logger :: DEBUG );
2015-07-25 12:05:27 +02:00
2017-03-13 17:18:45 +01:00
if ( $format === 'xml' ) {
2011-10-27 09:57:19 +02:00
header ( 'Content-type: text/xml' );
2018-11-05 13:40:18 +01:00
echo Renderer :: replaceMacros ( Renderer :: getMarkupTemplate ( 'poco_xml.tpl' ), XML :: arrayEscape ([ '$response' => $ret ]));
2018-12-26 06:40:12 +01:00
exit ();
2011-10-27 09:57:19 +02:00
}
2017-03-13 17:18:45 +01:00
if ( $format === 'json' ) {
2011-10-27 09:57:19 +02:00
header ( 'Content-type: application/json' );
echo json_encode ( $ret );
2018-12-26 06:40:12 +01:00
exit ();
2017-03-13 17:18:45 +01:00
} else {
2019-05-02 05:16:10 +02:00
throw new \Friendica\Network\HTTPException\InternalServerErrorException ();
2017-03-13 17:18:45 +01:00
}
2012-12-22 20:57:29 +01:00
}