mirror of
https://codeberg.org/streams/streams.git
synced 2024-09-20 05:35:12 +00:00
Merge branch 'master' of https://github.com/redmatrix/hubzilla
This commit is contained in:
commit
f714e97d63
8 changed files with 918 additions and 896 deletions
|
@ -308,11 +308,33 @@ function metorsa($m,$e) {
|
|||
return $key;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function salmon_key($pubkey) {
|
||||
pemtome($pubkey,$m,$e);
|
||||
return 'RSA' . '.' . base64url_encode($m,true) . '.' . base64url_encode($e,true) ;
|
||||
}
|
||||
|
||||
|
||||
function convert_salmon_key($key) {
|
||||
|
||||
if(strstr($key,','))
|
||||
$rawkey = substr($key,strpos($key,',')+1);
|
||||
else
|
||||
$rawkey = substr($key,5);
|
||||
|
||||
$key_info = explode('.',$rawkey);
|
||||
|
||||
$m = base64url_decode($key_info[1]);
|
||||
$e = base64url_decode($key_info[2]);
|
||||
|
||||
logger('key details: ' . print_r($key_info,true), LOGGER_DATA);
|
||||
$salmon_key = metopem($m,$e);
|
||||
return $salmon_key;
|
||||
|
||||
}
|
||||
|
||||
|
||||
function z_obscure($s) {
|
||||
return json_encode(crypto_encapsulate($s,get_config('system','pubkey')));
|
||||
}
|
||||
|
@ -322,3 +344,4 @@ function z_unobscure($s) {
|
|||
return $s;
|
||||
return crypto_unencapsulate(json_decode($s,true),get_config('system','prvkey'));
|
||||
}
|
||||
|
||||
|
|
|
@ -3848,8 +3848,8 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
|||
$datarray = get_atom_elements($feed,$item,$author);
|
||||
|
||||
if($contact['xchan_network'] === 'rss') {
|
||||
$res['public_policy'] = 'specific';
|
||||
$res['comment_policy'] = 'none';
|
||||
$datarray['public_policy'] = 'specific';
|
||||
$datarray['comment_policy'] = 'none';
|
||||
}
|
||||
|
||||
if((! x($author,'author_name')) || ($author['author_is_feed']))
|
||||
|
@ -3911,8 +3911,8 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
|||
$datarray = get_atom_elements($feed,$item,$author);
|
||||
|
||||
if($contact['xchan_network'] === 'rss') {
|
||||
$res['public_policy'] = 'specific';
|
||||
$res['comment_policy'] = 'none';
|
||||
$datarray['public_policy'] = 'specific';
|
||||
$datarray['comment_policy'] = 'none';
|
||||
}
|
||||
|
||||
|
||||
|
@ -3932,6 +3932,16 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
|||
|
||||
$datarray['author_xchan'] = '';
|
||||
|
||||
if(activity_match($datarray['verb'],ACTIVITY_FOLLOW) && $datarray['obj_type'] === ACTIVITY_OBJ_PERSON) {
|
||||
$cb = array('item' => $datarray,'channel' => $importer, 'xchan' => null, 'author' => $author, 'caught' => false);
|
||||
call_hooks('follow_from_feed',$cb);
|
||||
if($cb['caught']) {
|
||||
if($cb['return_code'])
|
||||
http_status_exit($cb['return_code']);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if($author['author_link'] != $contact['xchan_url']) {
|
||||
$x = import_author_unknown(array('name' => $author['author_name'],'url' => $author['author_link'],'photo' => array('src' => $author['author_photo'])));
|
||||
if($x)
|
||||
|
@ -4214,7 +4224,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
|
|||
|
||||
if(($item['parent'] != $item['id']) || ($item['parent_mid'] !== $item['mid']) || (($item['thr_parent'] !== '') && ($item['thr_parent'] !== $item['mid']))) {
|
||||
$parent_item = (($item['thr_parent']) ? $item['thr_parent'] : $item['parent_mid']);
|
||||
$o .= '<thr:in-reply-to ref="' . xmlify($parent_item) . '" type="text/html" href="' . xmlify($item['plink']) . '" />' . "\r\n";
|
||||
$o .= '<thr:in-reply-to ref="' . z_root() . '/display/' . xmlify($parent_item) . '" type="text/html" href="' . xmlify($item['plink']) . '" />' . "\r\n";
|
||||
}
|
||||
|
||||
if(activity_match($item['obj_type'],ACTIVITY_OBJ_EVENT) && activity_match($item['verb'],ACTIVITY_POST)) {
|
||||
|
@ -4232,7 +4242,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
|
|||
$o .= '<content type="' . $type . '" >' . xmlify(prepare_text($body,$item['mimetype'])) . '</content>' . "\r\n";
|
||||
}
|
||||
|
||||
$o .= '<id>' . xmlify($item['mid']) . '</id>' . "\r\n";
|
||||
$o .= '<id>' . z_root() . '/display/' . xmlify($item['mid']) . '</id>' . "\r\n";
|
||||
$o .= '<published>' . xmlify(datetime_convert('UTC','UTC',$item['created'] . '+00:00',ATOM_TIME)) . '</published>' . "\r\n";
|
||||
$o .= '<updated>' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '</updated>' . "\r\n";
|
||||
|
||||
|
|
|
@ -1061,32 +1061,16 @@ function discover_by_url($url,$arr = null) {
|
|||
}
|
||||
|
||||
|
||||
function convert_salmon_key($key) {
|
||||
|
||||
if(strstr($key,','))
|
||||
$rawkey = substr($key,strpos($key,',')+1);
|
||||
else
|
||||
$rawkey = substr($key,5);
|
||||
|
||||
$key_info = explode('.',$rawkey);
|
||||
|
||||
$m = base64url_decode($key_info[1]);
|
||||
$e = base64url_decode($key_info[2]);
|
||||
|
||||
logger('key details: ' . print_r($key_info,true), LOGGER_DEBUG);
|
||||
$salmon_key = metopem($m,$e);
|
||||
return $salmon_key;
|
||||
|
||||
}
|
||||
|
||||
|
||||
function discover_by_webbie($webbie) {
|
||||
require_once('library/HTML5/Parser.php');
|
||||
|
||||
$result = array();
|
||||
$network = null;
|
||||
$result = array();
|
||||
|
||||
$network = null;
|
||||
|
||||
$diaspora = false;
|
||||
$gnusoc = false;
|
||||
$gnusoc = false;
|
||||
$dfrn = false;
|
||||
|
||||
$has_salmon = false;
|
||||
$salmon_key = false;
|
||||
|
@ -1094,7 +1078,6 @@ function discover_by_webbie($webbie) {
|
|||
$diaspora_base = '';
|
||||
$diaspora_guid = '';
|
||||
$diaspora_key = '';
|
||||
$dfrn = false;
|
||||
|
||||
$webbie = strtolower($webbie);
|
||||
|
||||
|
@ -1102,6 +1085,10 @@ function discover_by_webbie($webbie) {
|
|||
if($x && array_key_exists('links',$x) && $x['links']) {
|
||||
foreach($x['links'] as $link) {
|
||||
if(array_key_exists('rel',$link)) {
|
||||
|
||||
// If we discover zot - don't search further; grab the info and get out of
|
||||
// here.
|
||||
|
||||
if($link['rel'] == 'http://purl.org/zot/protocol') {
|
||||
logger('discover_by_webbie: zot found for ' . $webbie, LOGGER_DEBUG);
|
||||
if(array_key_exists('zot',$x) && $x['zot']['success'])
|
||||
|
@ -1115,6 +1102,9 @@ function discover_by_webbie($webbie) {
|
|||
}
|
||||
}
|
||||
}
|
||||
if($link['rel'] == NAMESPACE_DFRN) {
|
||||
$dfrn = $link['href'];
|
||||
}
|
||||
if($link['rel'] == 'magic-public-key') {
|
||||
if(substr($link['href'],0,5) === 'data:') {
|
||||
$salmon_key = convert_salmon_key($link['href']);
|
||||
|
@ -1131,88 +1121,40 @@ function discover_by_webbie($webbie) {
|
|||
}
|
||||
}
|
||||
|
||||
logger('webfing: ' . print_r($x,true), LOGGER_DATA, LOG_INFO);
|
||||
logger('webfinger: ' . print_r($x,true), LOGGER_DATA, LOG_INFO);
|
||||
|
||||
$arr = array('address' => $webbie, 'success' => false, 'webfinger' => $x);
|
||||
call_hooks('discover_channel_webfinger', $arr);
|
||||
if($arr['success'])
|
||||
return true;
|
||||
|
||||
if($salmon_key && $has_salmon && $atom_feed) {
|
||||
|
||||
$gnusoc = true;
|
||||
$addr = $x['address'];
|
||||
$aliases = array();
|
||||
|
||||
$m = parse_url($x['location']);
|
||||
// Now let's make some decisions on what we may need
|
||||
// to obtain further info
|
||||
|
||||
$k = z_fetch_url($atom_feed);
|
||||
if($k['success'])
|
||||
$feed_meta = feed_meta($k['body']);
|
||||
$probe_atom = false;
|
||||
$probe_old = false;
|
||||
$probe_hcard = false;
|
||||
|
||||
// stash any discovered pubsubhubbub hubs in case we need to follow them
|
||||
// this will save an expensive lookup later
|
||||
$address = '';
|
||||
$location = '';
|
||||
$nickname = '';
|
||||
$fullname = '';
|
||||
$avatar = '';
|
||||
$pubkey = '';
|
||||
|
||||
if($feed_meta['hubs'])
|
||||
set_xconfig($addr,'system','push_hubs',$feed_meta['hubs']);
|
||||
if(array_key_exists('address',$x))
|
||||
$address = $x['address'];
|
||||
if(array_key_exists('location',$x))
|
||||
$location = $x['location'];
|
||||
if(array_key_exists('nickname',$x))
|
||||
$nickname = $x['nickname'];
|
||||
|
||||
if($feed_meta && $feed_meta['author']) {
|
||||
$r = q("select * from xchan where xchan_hash = '%s' limit 1",
|
||||
dbesc($addr)
|
||||
);
|
||||
if($r) {
|
||||
$r = q("update xchan set xchan_name = '%s', xchan_network = '%s', xchan_name_date = '%s' where xchan_hash = '%s' limit 1",
|
||||
dbesc(($feed_meta['author']['author_name']) ? $feed_meta['author']['author_name'] : $x['nickname']),
|
||||
dbesc('gnusoc'),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($addr)
|
||||
);
|
||||
}
|
||||
else {
|
||||
|
||||
$r = q("insert into xchan ( xchan_hash, xchan_guid, xchan_pubkey, xchan_addr, xchan_url, xchan_name, xchan_network, xchan_name_date ) values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') ",
|
||||
dbesc($addr),
|
||||
dbesc($x['location']),
|
||||
dbesc($salmon_key),
|
||||
dbesc($addr),
|
||||
dbesc($x['location']),
|
||||
dbesc(($feed_meta['author']['author_name']) ? $feed_meta['author']['author_name'] : $x['nickname']),
|
||||
dbesc('gnusoc'),
|
||||
dbescdate(datetime_convert())
|
||||
);
|
||||
}
|
||||
|
||||
$r = q("select * from hubloc where hubloc_hash = '%s' limit 1",
|
||||
dbesc($addr)
|
||||
);
|
||||
|
||||
if(! $r) {
|
||||
|
||||
$r = q("insert into hubloc ( hubloc_guid, hubloc_hash, hubloc_addr, hubloc_network, hubloc_url, hubloc_host, hubloc_callback, hubloc_updated, hubloc_primary ) values ('%s','%s','%s','%s','%s','%s','%s','%s', 1)",
|
||||
dbesc($x['location']),
|
||||
dbesc($addr),
|
||||
dbesc($addr),
|
||||
dbesc('gnusoc'),
|
||||
dbesc($m['scheme'] . '://' . $m['host']),
|
||||
dbesc($m['host']),
|
||||
dbesc($salmon),
|
||||
dbescdate(datetime_convert())
|
||||
);
|
||||
}
|
||||
$photos = import_xchan_photo($feed_meta['author']['author_photo'],$addr);
|
||||
$r = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_hash = '%s'",
|
||||
dbescdate(datetime_convert()),
|
||||
dbesc($photos[0]),
|
||||
dbesc($photos[1]),
|
||||
dbesc($photos[2]),
|
||||
dbesc($photos[3]),
|
||||
dbesc($addr)
|
||||
);
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(! $x)
|
||||
$probe_old = true;
|
||||
|
||||
if($probe_old) {
|
||||
$x = old_webfinger($webbie);
|
||||
if($x) {
|
||||
logger('old_webfinger: ' . print_r($x,true));
|
||||
|
@ -1245,174 +1187,195 @@ function discover_by_webbie($webbie) {
|
|||
$pubkey = $diaspora_key;
|
||||
$diaspora = true;
|
||||
}
|
||||
if($link['@attributes']['rel'] == 'magic-public-key') {
|
||||
if(substr($link['@attributes']['href'],0,5) === 'data:') {
|
||||
$salmon_key = convert_salmon_key($link['@attributes']['href']);
|
||||
}
|
||||
}
|
||||
if($link['@attributes']['rel'] == 'salmon') {
|
||||
$has_salmon = true;
|
||||
$salmon = $link['@attributes']['href'];
|
||||
}
|
||||
|
||||
if($link['@attributes']['rel'] == 'http://schemas.google.com/g/2010#updates-from') {
|
||||
$atom_feed = $link['@attributes']['href'];
|
||||
}
|
||||
if($link['@attributes']['rel'] === 'alias') {
|
||||
$aliases[] = $link['@attributes']['href'];
|
||||
}
|
||||
if($link['@attributes']['rel'] === 'subject') {
|
||||
$subject = $link['@attributes']['href'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($diaspora && $diaspora_base && $diaspora_guid) {
|
||||
$guid = $diaspora_guid;
|
||||
$diaspora_base = trim($diaspora_base,'/');
|
||||
|
||||
$notify = $diaspora_base . '/receive';
|
||||
|
||||
if(strpos($webbie,'@')) {
|
||||
$addr = str_replace('acct:', '', $webbie);
|
||||
$hostname = substr($webbie,strpos($webbie,'@')+1);
|
||||
}
|
||||
$network = 'diaspora';
|
||||
// until we get a dfrn layer, we'll use diaspora protocols for Friendica,
|
||||
// but give it a different network so we can go back and fix these when we get proper support.
|
||||
// It really should be just 'friendica' but we also want to distinguish
|
||||
// between Friendica sites that we can use D* protocols with and those we can't.
|
||||
// Some Friendica sites will have Diaspora disabled.
|
||||
if($dfrn)
|
||||
$network = 'friendica-over-diaspora';
|
||||
if($hcard) {
|
||||
$vcard = scrape_vcard($hcard);
|
||||
$vcard['nick'] = substr($webbie,0,strpos($webbie,'@'));
|
||||
if(! $vcard['fn'])
|
||||
$vcard['fn'] = $webbie;
|
||||
}
|
||||
|
||||
$r = q("select * from xchan where xchan_hash = '%s' limit 1",
|
||||
dbesc($addr)
|
||||
);
|
||||
|
||||
// fix relative urls
|
||||
if($vcard['photo'] && (strpos($vcard['photo'],'http') !== 0))
|
||||
$vcard['photo'] = $diaspora_base . '/' . $vcard['photo'];
|
||||
|
||||
/**
|
||||
*
|
||||
* Diaspora communications are notoriously unreliable and receiving profile update messages (indeed any messages)
|
||||
* are pretty much random luck. We'll check the timestamp of the xchan_name_date at a higher level and refresh
|
||||
* this record once a month; because if you miss a profile update message and they update their profile photo or name
|
||||
* you're otherwise stuck with stale info until they change their profile again - which could be years from now.
|
||||
*
|
||||
*/
|
||||
|
||||
if($r) {
|
||||
$r = q("update xchan set xchan_name = '%s', xchan_network = '%s', xchan_name_date = '%s' where xchan_hash = '%s' limit 1",
|
||||
dbesc($vcard['fn']),
|
||||
dbesc($network),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($addr)
|
||||
);
|
||||
}
|
||||
else {
|
||||
|
||||
$r = q("insert into xchan ( xchan_hash, xchan_guid, xchan_pubkey, xchan_addr, xchan_url, xchan_name, xchan_network, xchan_name_date ) values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') ",
|
||||
dbesc($addr),
|
||||
dbesc($guid),
|
||||
dbesc($pubkey),
|
||||
dbesc($addr),
|
||||
dbesc($profile),
|
||||
dbesc($vcard['fn']),
|
||||
dbesc($network),
|
||||
dbescdate(datetime_convert())
|
||||
);
|
||||
}
|
||||
|
||||
$r = q("select * from hubloc where hubloc_hash = '%s' limit 1",
|
||||
dbesc($webbie)
|
||||
);
|
||||
|
||||
if(! $r) {
|
||||
|
||||
$r = q("insert into hubloc ( hubloc_guid, hubloc_hash, hubloc_addr, hubloc_network, hubloc_url, hubloc_host, hubloc_callback, hubloc_updated, hubloc_primary ) values ('%s','%s','%s','%s','%s','%s','%s','%s', 1)",
|
||||
dbesc($guid),
|
||||
dbesc($addr),
|
||||
dbesc($addr),
|
||||
dbesc($network),
|
||||
dbesc(trim($diaspora_base,'/')),
|
||||
dbesc($hostname),
|
||||
dbesc($notify),
|
||||
dbescdate(datetime_convert())
|
||||
);
|
||||
}
|
||||
$photos = import_xchan_photo($vcard['photo'],$addr);
|
||||
$r = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_hash = '%s'",
|
||||
dbescdate(datetime_convert()),
|
||||
dbesc($photos[0]),
|
||||
dbesc($photos[1]),
|
||||
dbesc($photos[2]),
|
||||
dbesc($photos[3]),
|
||||
dbesc($addr)
|
||||
);
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if($subject || $aliases) {
|
||||
if(strpos($webbie,'@')) {
|
||||
$rhs = substr($webbie,strpos($webbie,'@')+1);
|
||||
}
|
||||
else {
|
||||
$m = parse_url($webbie);
|
||||
if($m) {
|
||||
$rhs = $m['host'] . (($m['port']) ? ':' . $m['port'] : '');
|
||||
}
|
||||
}
|
||||
|
||||
$v = array('subject' => $subject,'aliases' => $aliases);
|
||||
$address = find_webfinger_address($v,$rhs);
|
||||
$location = find_webfinger_location($v,$rhs);
|
||||
if($address)
|
||||
$nickname = substr($address,0,strpos($address,'@'));
|
||||
|
||||
}
|
||||
|
||||
if($salmon_key && $has_salmon && $atom_feed && (! $dfrn) && (! $diaspora)) {
|
||||
$gnusoc = true;
|
||||
$probe_atom = true;
|
||||
}
|
||||
|
||||
if(! $pubkey)
|
||||
$pubkey = $salmon_key;
|
||||
|
||||
if(($dfrn || $diaspora) && $hcard)
|
||||
$probe_hcard = true;
|
||||
|
||||
if(! $fullname)
|
||||
$fullname = $nickname;
|
||||
|
||||
if($probe_atom) {
|
||||
$k = z_fetch_url($atom_feed);
|
||||
if($k['success'])
|
||||
$feed_meta = feed_meta($k['body']);
|
||||
if($feed_meta) {
|
||||
|
||||
// stash any discovered pubsubhubbub hubs in case we need to follow them
|
||||
// this will save an expensive lookup later
|
||||
|
||||
if($feed_meta['hubs'] && $address) {
|
||||
set_xconfig($address,'system','push_hubs',$feed_meta['hubs']);
|
||||
set_xconfig($address,'system','feed_url',$atom_feed);
|
||||
}
|
||||
if($feed_meta['author']['author_name']) {
|
||||
$fullname = $feed_meta['author']['author_name'];
|
||||
}
|
||||
if(! $avatar) {
|
||||
if($feed_meta['author']['author_photo'])
|
||||
$avatar = $feed_meta['author']['author_photo'];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if($probe_hcard) {
|
||||
$vcard = scrape_vcard($hcard);
|
||||
if($vcard) {
|
||||
logger('vcard: ' . print_r($vcard,true), LOGGER_DATA);
|
||||
if($vcard['fn'])
|
||||
$fullname = $vcard['fn'];
|
||||
if($vcard['photo'] && (strpos($vcard['photo'],'http') !== 0))
|
||||
$vcard['photo'] = $diaspora_base . '/' . $vcard['photo'];
|
||||
if(! $avatar)
|
||||
$avatar = $vcard['photo'];
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(($profile) && (! $location))
|
||||
$location = $profile;
|
||||
|
||||
if($location) {
|
||||
$m = parse_url($location);
|
||||
$base = $m['scheme'] . '://' . $m['host'];
|
||||
$host = $m['host'];
|
||||
}
|
||||
|
||||
|
||||
if($diaspora && $diaspora_base && $diaspora_guid) {
|
||||
if($dfrn)
|
||||
$network = 'friendica-over-diaspora';
|
||||
else
|
||||
$network = 'diaspora';
|
||||
|
||||
$base = trim($diaspora_base,'/');
|
||||
$notify = $base . '/receive';
|
||||
|
||||
}
|
||||
else {
|
||||
if($gnusoc) {
|
||||
$network = 'gnusoc';
|
||||
$notify = $salmon;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
logger('network: ' . $network);
|
||||
logger('address: ' . $address);
|
||||
logger('fullname: ' . $fullname);
|
||||
logger('pubkey: ' . $pubkey);
|
||||
logger('location: ' . $location);
|
||||
|
||||
|
||||
|
||||
// if we have everything we need, let's create the records
|
||||
|
||||
if($network && $address && $fullname && $pubkey && $location) {
|
||||
$r = q("select * from xchan where xchan_hash = '%s' limit 1",
|
||||
dbesc($address)
|
||||
);
|
||||
if($r) {
|
||||
$r = q("update xchan set xchan_name = '%s', xchan_network = '%s', xchan_name_date = '%s' where xchan_hash = '%s' limit 1",
|
||||
dbesc($fullname),
|
||||
dbesc($network),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($address)
|
||||
);
|
||||
}
|
||||
else {
|
||||
$r = q("insert into xchan ( xchan_hash, xchan_guid, xchan_pubkey, xchan_addr, xchan_url, xchan_name, xchan_network, xchan_name_date ) values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') ",
|
||||
dbesc($address),
|
||||
dbesc(($diaspora_guid) ? $diaspora_guid : $location),
|
||||
dbesc($pubkey),
|
||||
dbesc($address),
|
||||
dbesc($location),
|
||||
dbesc($fullname),
|
||||
dbesc($network),
|
||||
dbescdate(datetime_convert())
|
||||
);
|
||||
}
|
||||
|
||||
$r = q("select * from hubloc where hubloc_hash = '%s' limit 1",
|
||||
dbesc($address)
|
||||
);
|
||||
|
||||
if(! $r) {
|
||||
$r = q("insert into hubloc ( hubloc_guid, hubloc_hash, hubloc_addr, hubloc_network, hubloc_url, hubloc_host, hubloc_callback, hubloc_updated, hubloc_primary ) values ('%s','%s','%s','%s','%s','%s','%s','%s', 1)",
|
||||
dbesc(($diaspora_guid) ? $diaspora_guid : $location),
|
||||
dbesc($address),
|
||||
dbesc($address),
|
||||
dbesc($network),
|
||||
dbesc($base),
|
||||
dbesc($host),
|
||||
dbesc($notify),
|
||||
dbescdate(datetime_convert())
|
||||
);
|
||||
}
|
||||
$photos = import_xchan_photo($avatar,$address);
|
||||
$r = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_hash = '%s'",
|
||||
dbescdate(datetime_convert()),
|
||||
dbesc($photos[0]),
|
||||
dbesc($photos[1]),
|
||||
dbesc($photos[2]),
|
||||
dbesc($photos[3]),
|
||||
dbesc($address)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
/*
|
||||
$vcard['fn'] = notags($vcard['fn']);
|
||||
$vcard['nick'] = str_replace(' ','',notags($vcard['nick']));
|
||||
|
||||
$result['name'] = $vcard['fn'];
|
||||
$result['nick'] = $vcard['nick'];
|
||||
$result['guid'] = $guid;
|
||||
$result['url'] = $profile;
|
||||
$result['hostname'] = $hostname;
|
||||
$result['addr'] = $addr;
|
||||
$result['batch'] = $batch;
|
||||
$result['notify'] = $notify;
|
||||
$result['poll'] = $poll;
|
||||
$result['request'] = $request;
|
||||
$result['confirm'] = $confirm;
|
||||
$result['poco'] = $poco;
|
||||
$result['photo'] = $vcard['photo'];
|
||||
$result['priority'] = $priority;
|
||||
$result['network'] = $network;
|
||||
$result['alias'] = $alias;
|
||||
$result['pubkey'] = $pubkey;
|
||||
|
||||
logger('probe_url: ' . print_r($result,true), LOGGER_DEBUG);
|
||||
|
||||
return $result;
|
||||
|
||||
*/
|
||||
|
||||
/* Sample Diaspora result.
|
||||
|
||||
Array
|
||||
(
|
||||
[name] => Mike Macgirvin
|
||||
[nick] => macgirvin
|
||||
[guid] => a9174a618f8d269a
|
||||
[url] => https://joindiaspora.com/u/macgirvin
|
||||
[hostname] => joindiaspora.com
|
||||
[addr] => macgirvin@joindiaspora.com
|
||||
[batch] =>
|
||||
[notify] => https://joindiaspora.com/receive
|
||||
[poll] => https://joindiaspora.com/public/macgirvin.atom
|
||||
[request] =>
|
||||
[confirm] =>
|
||||
[poco] =>
|
||||
[photo] => https://joindiaspora.s3.amazonaws.com/uploads/images/thumb_large_fec4e6eef13ae5e56207.jpg
|
||||
[priority] =>
|
||||
[network] => diaspora
|
||||
[alias] =>
|
||||
[pubkey] => -----BEGIN PUBLIC KEY-----
|
||||
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtihtyIuRDWkDpCA+I1UaQ
|
||||
jI4S7k625+A7EEJm+pL2ZVSJxeCKiFeEgHBQENjLMNNm8l8F6blxgQqE6ZJ9Spa7f
|
||||
tlaXYTRCrfxKzh02L3hR7sNA+JS/nXJaUAIo+IwpIEspmcIRbD9GB7Wv/rr+M28uH
|
||||
31EeYyDz8QL6InU/bJmnCdFvmEMBQxJOw1ih9tQp7UNJAbUMCje0WYFzBz7sfcaHL
|
||||
OyYcCOqOCBLdGucUoJzTQ9iDBVzB8j1r1JkIHoEb2moUoKUp+tkCylNfd/3IVELF9
|
||||
7w1Qjmit3m50OrJk2DQOXvCW9KQxaQNdpRPSwhvemIt98zXSeyZ1q/YjjOwG0DWDq
|
||||
AF8aLj3/oQaZndTPy/6tMiZogKaijoxj8xFLuPYDTw5VpKquriVC0z8oxyRbv4t9v
|
||||
8JZZ9BXqzmayvY3xZGGp8NulrfjW+me2bKh0/df1aHaBwpZdDTXQ6kqAiS2FfsuPN
|
||||
vg57fhfHbL1yJ4oDbNNNeI0kJTGchXqerr8C20khU/cQ2Xt31VyEZtnTB665Ceugv
|
||||
kp3t2qd8UpAVKl430S5Quqx2ymfUIdxdW08CEjnoRNEL3aOWOXfbf4gSVaXmPCR4i
|
||||
LSIeXnd14lQYK/uxW/8cTFjcmddsKxeXysoQxbSa9VdDK+KkpZdgYXYrTTofXs6v+
|
||||
4afAEhRaaY+MCAwEAAQ==
|
||||
-----END PUBLIC KEY-----
|
||||
|
||||
)
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function webfinger_rfc7033($webbie,$zot = false) {
|
||||
|
||||
|
||||
|
@ -1497,8 +1460,8 @@ function find_webfinger_location($j,$rhs) {
|
|||
|
||||
function match_webfinger_location($s,$h) {
|
||||
|
||||
// GNU-social and the older StatusNet
|
||||
if(preg_match('|' . $h . '/user/([0-9]*?)$|',$s))
|
||||
// GNU-social and the older StatusNet - the $host/user/123 form doesn't work
|
||||
if(preg_match('|' . $h . '/index.php/user/([0-9]*?)$|',$s))
|
||||
return $s;
|
||||
// Redmatrix / hubzilla
|
||||
if(preg_match('|' . $h . '/channel/|',$s))
|
||||
|
@ -1573,7 +1536,7 @@ function fetch_lrdd_template($host) {
|
|||
|
||||
function fetch_xrd_links($url) {
|
||||
|
||||
logger('fetch_xrd_links: ' . $url);
|
||||
logger('fetch_xrd_links: ' . $url, LOGGER_DEBUG);
|
||||
|
||||
$redirects = 0;
|
||||
$x = z_fetch_url($url,false,$redirects,array('timeout' => 20));
|
||||
|
@ -1619,6 +1582,10 @@ logger('fetch_xrd_links: ' . $url);
|
|||
}
|
||||
}
|
||||
|
||||
if(isset($arr['xrd']['subject'])) {
|
||||
$links[]['@attributes'] = array('rel' => 'subject' , 'href' => $arr['xrd']['subject']);
|
||||
}
|
||||
|
||||
logger('fetch_xrd_links: ' . print_r($links,true), LOGGER_DATA);
|
||||
|
||||
return $links;
|
||||
|
|
17
mod/xrd.php
17
mod/xrd.php
|
@ -7,8 +7,12 @@ function xrd_init(&$a) {
|
|||
$uri = urldecode(notags(trim($_GET['uri'])));
|
||||
logger('xrd: ' . $uri,LOGGER_DEBUG);
|
||||
|
||||
if(substr($uri,0,4) === 'http')
|
||||
$resource = $uri;
|
||||
|
||||
if(substr($uri,0,4) === 'http') {
|
||||
$uri = str_replace('~','',$uri);
|
||||
$name = basename($uri);
|
||||
}
|
||||
else {
|
||||
$local = str_replace('acct:', '', $uri);
|
||||
if(substr($local,0,2) == '//')
|
||||
|
@ -35,9 +39,18 @@ function xrd_init(&$a) {
|
|||
header("Content-type: application/xrd+xml");
|
||||
|
||||
|
||||
$aliases = array('acct:' . $r[0]['channel_address'] . '@' . $a->get_hostname(), z_root() . '/channel/' . $r[0]['channel_address'], z_root() . '/~' . $r[0]['channel_address']);
|
||||
|
||||
for($x = 0; $x < count($aliases); $x ++) {
|
||||
if($aliases[$x] === $resource)
|
||||
unset($aliases[$x]);
|
||||
}
|
||||
|
||||
|
||||
$o = replace_macros(get_markup_template('xrd_person.tpl'), array(
|
||||
'$nick' => $r[0]['channel_address'],
|
||||
'$accturi' => $uri,
|
||||
'$accturi' => $resource,
|
||||
'$aliases' => $aliases,
|
||||
'$profile_url' => $a->get_baseurl() . '/channel/' . $r[0]['channel_address'],
|
||||
'$hcard_url' => $a->get_baseurl() . '/hcard/' . $r[0]['channel_address'],
|
||||
'$atom' => $a->get_baseurl() . '/feed/' . $r[0]['channel_address'],
|
||||
|
|
|
@ -1 +1 @@
|
|||
2016-03-21.1342H
|
||||
2016-03-24.1345H
|
||||
|
|
1026
view/de/hmessages.po
1026
view/de/hmessages.po
File diff suppressed because it is too large
Load diff
|
@ -398,42 +398,6 @@ $a->strings["__ctx:noun__ Like"] = array(
|
|||
0 => "Gefällt mir",
|
||||
1 => "Gefällt mir",
|
||||
);
|
||||
$a->strings["Miscellaneous"] = "Verschiedenes";
|
||||
$a->strings["YYYY-MM-DD or MM-DD"] = "JJJJ-MM-TT oder MM-TT";
|
||||
$a->strings["Required"] = "Benötigt";
|
||||
$a->strings["never"] = "Nie";
|
||||
$a->strings["less than a second ago"] = "Vor weniger als einer Sekunde";
|
||||
$a->strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "vor %1\$d %2\$s";
|
||||
$a->strings["__ctx:relative_date__ year"] = array(
|
||||
0 => "Jahr",
|
||||
1 => "Jahre",
|
||||
);
|
||||
$a->strings["__ctx:relative_date__ month"] = array(
|
||||
0 => "Monat",
|
||||
1 => "Monate",
|
||||
);
|
||||
$a->strings["__ctx:relative_date__ week"] = array(
|
||||
0 => "Woche",
|
||||
1 => "Wochen",
|
||||
);
|
||||
$a->strings["__ctx:relative_date__ day"] = array(
|
||||
0 => "Tag",
|
||||
1 => "Tage",
|
||||
);
|
||||
$a->strings["__ctx:relative_date__ hour"] = array(
|
||||
0 => "Stunde",
|
||||
1 => "Stunden",
|
||||
);
|
||||
$a->strings["__ctx:relative_date__ minute"] = array(
|
||||
0 => "Minute",
|
||||
1 => "Minuten",
|
||||
);
|
||||
$a->strings["__ctx:relative_date__ second"] = array(
|
||||
0 => "Sekunde",
|
||||
1 => "Sekunden",
|
||||
);
|
||||
$a->strings["%1\$s's birthday"] = "%1\$ss Geburtstag";
|
||||
$a->strings["Happy Birthday %1\$s"] = "Alles Gute zum Geburtstag, %1\$s";
|
||||
$a->strings["Invalid data packet"] = "Ungültiges Datenpaket";
|
||||
$a->strings["Unable to verify channel signature"] = "Konnte die Signatur des Kanals nicht verifizieren";
|
||||
$a->strings["Unable to verify site signature for %s"] = "Kann die Signatur der Seite von %s nicht verifizieren";
|
||||
|
@ -614,6 +578,7 @@ $a->strings["For Administrators"] = "Für Administratoren";
|
|||
$a->strings["For Developers"] = "Für Entwickler";
|
||||
$a->strings["Site"] = "Seite";
|
||||
$a->strings["Accounts"] = "Konten";
|
||||
$a->strings["Member registrations waiting for confirmation"] = "Nutzer-Anmeldungen, die auf Bestätigung warten";
|
||||
$a->strings["Channels"] = "Kanäle";
|
||||
$a->strings["Security"] = "Sicherheit";
|
||||
$a->strings["Plugins"] = "Plug-Ins";
|
||||
|
@ -623,7 +588,6 @@ $a->strings["Profile Fields"] = "Profil Felder";
|
|||
$a->strings["DB updates"] = "DB-Aktualisierungen";
|
||||
$a->strings["Logs"] = "Protokolle";
|
||||
$a->strings["Plugin Features"] = "Plug-In Funktionen";
|
||||
$a->strings["User registrations waiting for confirmation"] = "Nutzer-Anmeldungen, die auf Bestätigung warten";
|
||||
$a->strings["View Photo"] = "Foto ansehen";
|
||||
$a->strings["Edit Album"] = "Album bearbeiten";
|
||||
$a->strings["prev"] = "vorherige";
|
||||
|
@ -731,61 +695,44 @@ $a->strings["Name:"] = "Name:";
|
|||
$a->strings["Photo:"] = "Foto:";
|
||||
$a->strings["Please visit %s to approve or reject the suggestion."] = "Bitte besuche %s um den Vorschlag zu akzeptieren oder abzulehnen.";
|
||||
$a->strings["[Hubzilla:Notify]"] = "[Hubzilla:Benachrichtigung]";
|
||||
$a->strings["Unable to obtain identity information from database"] = "Kann keine Identitäts-Informationen aus Datenbank beziehen";
|
||||
$a->strings["Empty name"] = "Namensfeld leer";
|
||||
$a->strings["Name too long"] = "Name ist zu lang";
|
||||
$a->strings["No account identifier"] = "Keine Account-Kennung";
|
||||
$a->strings["Nickname is required."] = "Spitzname ist erforderlich.";
|
||||
$a->strings["Reserved nickname. Please choose another."] = "Reservierter Kurzname. Bitte wähle einen anderen.";
|
||||
$a->strings["Nickname has unsupported characters or is already being used on this site."] = "Der Spitzname enthält nicht-unterstütze Zeichen oder wird bereits auf dieser Seite genutzt.";
|
||||
$a->strings["Unable to retrieve created identity"] = "Kann die erstellte Identität nicht empfangen";
|
||||
$a->strings["Default Profile"] = "Standard-Profil";
|
||||
$a->strings["Requested channel is not available."] = "Angeforderte Kanal nicht verfügbar.";
|
||||
$a->strings["Requested profile is not available."] = "Erwünschte Profil ist nicht verfügbar.";
|
||||
$a->strings["Change profile photo"] = "Profilfoto ändern";
|
||||
$a->strings["Create New Profile"] = "Neues Profil erstellen";
|
||||
$a->strings["Profile Image"] = "Profilfoto:";
|
||||
$a->strings["Visible to everybody"] = "Für jeden sichtbar";
|
||||
$a->strings["Edit visibility"] = "Sichtbarkeit bearbeiten";
|
||||
$a->strings["Gender:"] = "Geschlecht:";
|
||||
$a->strings["Status:"] = "Status:";
|
||||
$a->strings["Homepage:"] = "Homepage:";
|
||||
$a->strings["Online Now"] = "gerade online";
|
||||
$a->strings["g A l F d"] = "l, d. F, G:i \\U\\h\\r";
|
||||
$a->strings["F d"] = "d. F";
|
||||
$a->strings["[today]"] = "[Heute]";
|
||||
$a->strings["Birthday Reminders"] = "Geburtstags Erinnerungen";
|
||||
$a->strings["Birthdays this week:"] = "Geburtstage in dieser Woche:";
|
||||
$a->strings["[No description]"] = "[Keine Beschreibung]";
|
||||
$a->strings["Event Reminders"] = "Termin-Erinnerungen";
|
||||
$a->strings["Events this week:"] = "Termine in dieser Woche:";
|
||||
$a->strings["Full Name:"] = "Voller Name:";
|
||||
$a->strings["Like this channel"] = "Dieser Kanal gefällt mir";
|
||||
$a->strings["j F, Y"] = "j. F Y";
|
||||
$a->strings["j F"] = "j. F";
|
||||
$a->strings["Birthday:"] = "Geburtstag:";
|
||||
$a->strings["Age:"] = "Alter:";
|
||||
$a->strings["for %1\$d %2\$s"] = "seit %1\$d %2\$s";
|
||||
$a->strings["Sexual Preference:"] = "Sexuelle Orientierung:";
|
||||
$a->strings["Hometown:"] = "Heimatstadt:";
|
||||
$a->strings["Tags:"] = "Schlagworte:";
|
||||
$a->strings["Political Views:"] = "Politische Ansichten:";
|
||||
$a->strings["Religion:"] = "Religion:";
|
||||
$a->strings["About:"] = "Über:";
|
||||
$a->strings["Hobbies/Interests:"] = "Hobbys/Interessen:";
|
||||
$a->strings["Likes:"] = "Gefällt:";
|
||||
$a->strings["Dislikes:"] = "Gefällt nicht:";
|
||||
$a->strings["Contact information and Social Networks:"] = "Kontaktinformation und soziale Netzwerke:";
|
||||
$a->strings["My other channels:"] = "Meine anderen Kanäle:";
|
||||
$a->strings["Musical interests:"] = "Musikalische Interessen:";
|
||||
$a->strings["Books, literature:"] = "Bücher, Literatur:";
|
||||
$a->strings["Television:"] = "Fernsehen:";
|
||||
$a->strings["Film/dance/culture/entertainment:"] = "Film/Tanz/Kultur/Unterhaltung:";
|
||||
$a->strings["Love/Romance:"] = "Liebe/Romantik:";
|
||||
$a->strings["Work/employment:"] = "Arbeit/Anstellung:";
|
||||
$a->strings["School/education:"] = "Schule/Ausbildung:";
|
||||
$a->strings["Like this thing"] = "Gefällt mir";
|
||||
$a->strings["cover photo"] = "Cover Foto";
|
||||
$a->strings["Miscellaneous"] = "Verschiedenes";
|
||||
$a->strings["Birthday"] = "Geburtstag";
|
||||
$a->strings["Age: "] = "Alter:";
|
||||
$a->strings["YYYY-MM-DD or MM-DD"] = "JJJJ-MM-TT oder MM-TT";
|
||||
$a->strings["Required"] = "Benötigt";
|
||||
$a->strings["never"] = "Nie";
|
||||
$a->strings["less than a second ago"] = "Vor weniger als einer Sekunde";
|
||||
$a->strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "vor %1\$d %2\$s";
|
||||
$a->strings["__ctx:relative_date__ year"] = array(
|
||||
0 => "Jahr",
|
||||
1 => "Jahre",
|
||||
);
|
||||
$a->strings["__ctx:relative_date__ month"] = array(
|
||||
0 => "Monat",
|
||||
1 => "Monate",
|
||||
);
|
||||
$a->strings["__ctx:relative_date__ week"] = array(
|
||||
0 => "Woche",
|
||||
1 => "Wochen",
|
||||
);
|
||||
$a->strings["__ctx:relative_date__ day"] = array(
|
||||
0 => "Tag",
|
||||
1 => "Tage",
|
||||
);
|
||||
$a->strings["__ctx:relative_date__ hour"] = array(
|
||||
0 => "Stunde",
|
||||
1 => "Stunden",
|
||||
);
|
||||
$a->strings["__ctx:relative_date__ minute"] = array(
|
||||
0 => "Minute",
|
||||
1 => "Minuten",
|
||||
);
|
||||
$a->strings["__ctx:relative_date__ second"] = array(
|
||||
0 => "Sekunde",
|
||||
1 => "Sekunden",
|
||||
);
|
||||
$a->strings["%1\$s's birthday"] = "%1\$ss Geburtstag";
|
||||
$a->strings["Happy Birthday %1\$s"] = "Alles Gute zum Geburtstag, %1\$s";
|
||||
$a->strings["Embedded content"] = "Eingebetteter Inhalt";
|
||||
$a->strings["Embedding disabled"] = "Einbetten ausgeschaltet";
|
||||
$a->strings["channel"] = "Kanal";
|
||||
|
@ -1024,6 +971,61 @@ $a->strings["male"] = "männlich";
|
|||
$a->strings["%1\$s updated his %2\$s"] = "%1\$s hat sein %2\$s aktualisiert";
|
||||
$a->strings["%1\$s updated their %2\$s"] = "%1\$s hat sein/ihr %2\$s aktualisiert";
|
||||
$a->strings["profile photo"] = "Profilfoto";
|
||||
$a->strings["Unable to obtain identity information from database"] = "Kann keine Identitäts-Informationen aus Datenbank beziehen";
|
||||
$a->strings["Empty name"] = "Namensfeld leer";
|
||||
$a->strings["Name too long"] = "Name ist zu lang";
|
||||
$a->strings["No account identifier"] = "Keine Account-Kennung";
|
||||
$a->strings["Nickname is required."] = "Spitzname ist erforderlich.";
|
||||
$a->strings["Reserved nickname. Please choose another."] = "Reservierter Kurzname. Bitte wähle einen anderen.";
|
||||
$a->strings["Nickname has unsupported characters or is already being used on this site."] = "Der Spitzname enthält nicht-unterstütze Zeichen oder wird bereits auf dieser Seite genutzt.";
|
||||
$a->strings["Unable to retrieve created identity"] = "Kann die erstellte Identität nicht empfangen";
|
||||
$a->strings["Default Profile"] = "Standard-Profil";
|
||||
$a->strings["Requested channel is not available."] = "Angeforderte Kanal nicht verfügbar.";
|
||||
$a->strings["Requested profile is not available."] = "Erwünschte Profil ist nicht verfügbar.";
|
||||
$a->strings["Change profile photo"] = "Profilfoto ändern";
|
||||
$a->strings["Create New Profile"] = "Neues Profil erstellen";
|
||||
$a->strings["Profile Image"] = "Profilfoto:";
|
||||
$a->strings["Visible to everybody"] = "Für jeden sichtbar";
|
||||
$a->strings["Edit visibility"] = "Sichtbarkeit bearbeiten";
|
||||
$a->strings["Gender:"] = "Geschlecht:";
|
||||
$a->strings["Status:"] = "Status:";
|
||||
$a->strings["Homepage:"] = "Homepage:";
|
||||
$a->strings["Online Now"] = "gerade online";
|
||||
$a->strings["g A l F d"] = "l, d. F, G:i \\U\\h\\r";
|
||||
$a->strings["F d"] = "d. F";
|
||||
$a->strings["[today]"] = "[Heute]";
|
||||
$a->strings["Birthday Reminders"] = "Geburtstags Erinnerungen";
|
||||
$a->strings["Birthdays this week:"] = "Geburtstage in dieser Woche:";
|
||||
$a->strings["[No description]"] = "[Keine Beschreibung]";
|
||||
$a->strings["Event Reminders"] = "Termin-Erinnerungen";
|
||||
$a->strings["Events this week:"] = "Termine in dieser Woche:";
|
||||
$a->strings["Full Name:"] = "Voller Name:";
|
||||
$a->strings["Like this channel"] = "Dieser Kanal gefällt mir";
|
||||
$a->strings["j F, Y"] = "j. F Y";
|
||||
$a->strings["j F"] = "j. F";
|
||||
$a->strings["Birthday:"] = "Geburtstag:";
|
||||
$a->strings["Age:"] = "Alter:";
|
||||
$a->strings["for %1\$d %2\$s"] = "seit %1\$d %2\$s";
|
||||
$a->strings["Sexual Preference:"] = "Sexuelle Orientierung:";
|
||||
$a->strings["Hometown:"] = "Heimatstadt:";
|
||||
$a->strings["Tags:"] = "Schlagworte:";
|
||||
$a->strings["Political Views:"] = "Politische Ansichten:";
|
||||
$a->strings["Religion:"] = "Religion:";
|
||||
$a->strings["About:"] = "Über:";
|
||||
$a->strings["Hobbies/Interests:"] = "Hobbys/Interessen:";
|
||||
$a->strings["Likes:"] = "Gefällt:";
|
||||
$a->strings["Dislikes:"] = "Gefällt nicht:";
|
||||
$a->strings["Contact information and Social Networks:"] = "Kontaktinformation und soziale Netzwerke:";
|
||||
$a->strings["My other channels:"] = "Meine anderen Kanäle:";
|
||||
$a->strings["Musical interests:"] = "Musikalische Interessen:";
|
||||
$a->strings["Books, literature:"] = "Bücher, Literatur:";
|
||||
$a->strings["Television:"] = "Fernsehen:";
|
||||
$a->strings["Film/dance/culture/entertainment:"] = "Film/Tanz/Kultur/Unterhaltung:";
|
||||
$a->strings["Love/Romance:"] = "Liebe/Romantik:";
|
||||
$a->strings["Work/employment:"] = "Arbeit/Anstellung:";
|
||||
$a->strings["School/education:"] = "Schule/Ausbildung:";
|
||||
$a->strings["Like this thing"] = "Gefällt mir";
|
||||
$a->strings["cover photo"] = "Cover Foto";
|
||||
$a->strings["Some blurb about what to do when you're new here"] = "Ein Hinweis, was man tun kann, wenn man neu hier ist";
|
||||
$a->strings["network"] = "Netzwerk";
|
||||
$a->strings["RSS"] = "RSS";
|
||||
|
@ -1800,50 +1802,48 @@ $a->strings["Sexual Preference"] = "Sexuelle Orientierung";
|
|||
$a->strings["Homepage"] = "Webseite";
|
||||
$a->strings["Interests"] = "Hobbys/Interessen";
|
||||
$a->strings["Profile updated."] = "Profil aktualisiert.";
|
||||
$a->strings["Hide your contact/friend list from viewers of this profile?"] = "Deine Kontaktliste vor Betrachtern dieses Profils verbergen?";
|
||||
$a->strings["Hide your connections list from viewers of this profile"] = "Deine Verbindungen vor Betrachtern dieses Profils verbergen";
|
||||
$a->strings["Edit Profile Details"] = "Bearbeite Profil-Details";
|
||||
$a->strings["View this profile"] = "Dieses Profil ansehen";
|
||||
$a->strings["Change Cover Photo"] = "Titelbild ändern";
|
||||
$a->strings["Change Profile Photo"] = "Profilfoto ändern";
|
||||
$a->strings["Change cover photo"] = "Titelbild ändern";
|
||||
$a->strings["Create a new profile using these settings"] = "Neues Profil anlegen und diese Einstellungen übernehmen";
|
||||
$a->strings["Clone this profile"] = "Dieses Profil klonen";
|
||||
$a->strings["Delete this profile"] = "Dieses Profil löschen";
|
||||
$a->strings["Add profile things"] = "Sachen zum Profil hinzufügen";
|
||||
$a->strings["Relation"] = "Beziehung";
|
||||
$a->strings["Import profile from file"] = "Profil aus einer Datei importieren";
|
||||
$a->strings["Export profile to file"] = "Profil in eine Datei exportieren";
|
||||
$a->strings["Profile Name"] = "Profilname";
|
||||
$a->strings["Your Full Name"] = "Dein voller Name";
|
||||
$a->strings["Your gender"] = "Dein Geschlecht";
|
||||
$a->strings["Marital status"] = "Familienstand";
|
||||
$a->strings["Sexual preference"] = "Sexuelle Orientierung";
|
||||
$a->strings["Profile name"] = "Profilname";
|
||||
$a->strings["This is your default profile."] = "Das ist Dein Standardprofil.";
|
||||
$a->strings["Your full name"] = "Dein voller Name";
|
||||
$a->strings["Title/Description"] = "Titel/Beschreibung";
|
||||
$a->strings["Your Gender"] = "Dein Geschlecht";
|
||||
$a->strings["Birthday"] = "Geburtstag";
|
||||
$a->strings["Street Address"] = "Straße und Hausnummer";
|
||||
$a->strings["Street address"] = "Straße und Hausnummer";
|
||||
$a->strings["Locality/City"] = "Wohnort";
|
||||
$a->strings["Postal/Zip Code"] = "Postleitzahl";
|
||||
$a->strings["Country"] = "Land";
|
||||
$a->strings["Region/State"] = "Region/Bundesstaat";
|
||||
$a->strings["<span class=\"heart\">♥</span> Marital Status"] = "<span class=\"heart\">♥</span> Beziehungsstatus";
|
||||
$a->strings["Postal/Zip code"] = "Postleitzahl";
|
||||
$a->strings["Country"] = "Land";
|
||||
$a->strings["Who (if applicable)"] = "Wer (falls anwendbar)";
|
||||
$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Beispiele: cathy123, Cathy Williams, cathy@example.com";
|
||||
$a->strings["Since [date]"] = "Seit [Datum]";
|
||||
$a->strings["Since (date)"] = "Seit (Datum)";
|
||||
$a->strings["Tell us about yourself"] = "Erzähle uns ein wenig von Dir";
|
||||
$a->strings["Hometown"] = "Heimatort";
|
||||
$a->strings["Religious Views"] = "Religiöse Ansichten";
|
||||
$a->strings["Political views"] = "Politische Ansichten";
|
||||
$a->strings["Religious views"] = "Religiöse Ansichten";
|
||||
$a->strings["Keywords used in directory listings"] = "Schlüsselwörter, die in Verzeichnis-Auflistungen verwendet werden";
|
||||
$a->strings["Example: fishing photography software"] = "Beispiel: Angeln Fotografie Software";
|
||||
$a->strings["Used in directory listings"] = "Wird in Verzeichnis-Auflistungen verwendet";
|
||||
$a->strings["Tell us about yourself..."] = "Erzähle uns ein wenig von Dir …";
|
||||
$a->strings["Hobbies/Interests"] = "Hobbys/Interessen";
|
||||
$a->strings["Contact information and Social Networks"] = "Kontaktinformation und soziale Netzwerke";
|
||||
$a->strings["My other channels"] = "Meine anderen Kanäle";
|
||||
$a->strings["Musical interests"] = "Musikalische Interessen";
|
||||
$a->strings["Books, literature"] = "Bücher, Literatur";
|
||||
$a->strings["Television"] = "Fernsehen";
|
||||
$a->strings["Film/dance/culture/entertainment"] = "Film/Tanz/Kultur/Unterhaltung";
|
||||
$a->strings["Love/romance"] = "Liebe/Romantik";
|
||||
$a->strings["Work/employment"] = "Arbeit/Anstellung";
|
||||
$a->strings["School/education"] = "Schule/Ausbildung";
|
||||
$a->strings["This is your default profile."] = "Das ist Dein Standardprofil.";
|
||||
$a->strings["Age: "] = "Alter:";
|
||||
$a->strings["Edit/Manage Profiles"] = "Profile bearbeiten/verwalten";
|
||||
$a->strings["Add profile things"] = "Sachen zum Profil hinzufügen";
|
||||
$a->strings["Include desirable objects in your profile"] = "Binde begehrenswerte Dinge in Dein Profil ein";
|
||||
$a->strings["Film/Dance/Culture/Entertainment"] = "Film/Tanz/Kultur/Unterhaltung";
|
||||
$a->strings["Hobbies/Interests"] = "Hobbys/Interessen";
|
||||
$a->strings["Love/Romance"] = "Liebe/Romantik";
|
||||
$a->strings["School/Education"] = "Schule/Ausbildung";
|
||||
$a->strings["Contact information and social networks"] = "Kontaktinformation und soziale Netzwerke";
|
||||
$a->strings["My other channels"] = "Meine anderen Kanäle";
|
||||
$a->strings["Create New"] = "Ein neues erstellen";
|
||||
$a->strings["Invalid profile identifier."] = "Ungültiger Profil-Identifikator";
|
||||
$a->strings["Profile Visibility Editor"] = "Profil-Sichtbarkeits-Editor";
|
||||
$a->strings["Click on a contact to add or remove."] = "Klicke auf einen Kontakt, um ihn hinzuzufügen oder zu entfernen.";
|
||||
|
|
|
@ -2,7 +2,10 @@
|
|||
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
|
||||
|
||||
<Subject>{{$accturi}}</Subject>
|
||||
|
||||
{{if $aliases}}{{foreach $aliases as $a}}
|
||||
<Alias>{{$a}}</Alias>
|
||||
{{/foreach}}{{/if}}
|
||||
|
||||
<Link rel="http://schemas.google.com/g/2010#updates-from"
|
||||
type="application/atom+xml"
|
||||
href="{{$atom}}" />
|
||||
|
|
Loading…
Reference in a new issue